b> case i of 1:predmet:='основы информатики'; 2:predmet:='высшей математике'; 3:predmet:='философии'; 4:predmet:='архитектуре ЭВМ'; 5:predmet:='истории Украины'; end; writeln('введите оценку студента ',fio,' no ',predmet); M1: readln(oc[i,1]); if (oc[i,1]<2) or (oc[i,1]>5) then Begin writeln('введите правильно оценку'); goto M1; end; if oc[i,1]>2 then Begin oc[i,2]:=0; oc[i,3]:=0; goto M4; end else M2: writeln('введите вторую оценку студента ',fio,' по ',predmet); readln(oc[i,2]); if (oc[i,2]<2) or (oc[i,2]>5) then Begin writeln('введите правильно оценку'); goto M2; end; if oc[i,2]>2 then begin oc[i,3]:=0; goto M4; end else M3: Writeln('введите третью оценку студента ',fio,' по ',predmet); readln(oc[i,3]); if (oc[i,3]<2) or (oc[i,3]>5) then begin writeln('введите правильно оценку'); goto M3; end; M4: end; end; BEGIN { начало блока ввода оценок студентов} writeln('при вводе оценки набираются: 5, если экзамен'); writeln('сдан на 5 и, если были пересдачи, то 2,2,3 '); z: writeln('до первой положительной оценки'); writeln('задайте количество групп, не более 6 '); readln(kgr); for i:=1 to kgr do { установка индекса группы } begin case i of { определяем группу по i } 1:n:=610; 2:n:=611; 3:n:=612; 4:n:=613; 5:n:=614; 6:n:=615; else writeln('неправильно задано количество групп'); goto 2; end; end; writeln('задайте количество студентов в группе ',n); readln(kst[i]); for j:=1 to kst[i] do { установка номера студента i в группе } begin with gr[i,j] do { работать без составных имен } begin namb:=n; writeln('введите фамилию ',j,' студента гр. ',namb); readln(fio); for k:=1 to 5 do { обнуляем массив оценок } for l:=1 to 3 do o[k,l]:=0; writeln('введите оценки студентов ',fio); rea_ocenki(fio,o); end;end;end; { конец ввода оценок студентов }{ отображение на экране введения оценок } for i:=1 to kgr do for j:=1 to kst[i] do Begin with gr[i,j] do Begin for k:=1 to 5 do write(o[k,1],o[k,2],o[k,3],' '); writeln; end; end; { конец вывода на экран оценок } { начало блока анализа успеваемости студентов } for i:=1 to kgr do { индекс группы } for j:=1 to kst[i] do { номер студента } Begin kol_dvoek:=0; v:=0; { работать без составных имен } with gr[i,j] do Begin for k:=1 to 5 do { номер предмета } Begin { итак, анализируем состояние успеваемости студента, информация } { о котором хранится в записи gr[i,j]; так как мы работаем под уп-} {равлением оператора with gr[i,j], то можно пользоваться не } { составными именами полей } case k of { определить название предмета j } 1:predmet:='основы информатики'; 2:predmet:='высшая математика '; 3:predmet:='философия'; 4:predmet:='архитектура ЭВМ'; 5:predmet:='история Украины'; end; if o[k,1]=2 then if o[k,2]=2 then if o[k,3]=2 then begin writeln('студент ',fio,' группы ', namb,' подлежит отчислению так как'); writeln('имеет три двойки по предмету ',predmet); v:=1; readln; goto w; end { на новый предмет } else Begin kol_dvoek:=kol_dvoek+2; goto w; end else Begin kol_dvoek:=kol_dvoek+1; goto w; end; w: end; if v=1 then goto u { к новому студенту } else if kol_dvoek=0 then goto u else Begin writeln('студент ',fio,' группы ',namb,' является разгильдяем так как'); writeln('имеет в зимнюю сессию ',kol_dvoek,' двоек и является'); writeln('кандидатом на отчисление в весеннем семестре'); readln; end; end; u: end; END. Программа снабжена комментариями, поэтому при внимательном рассмотрении читается легко. Трудности могут возникнуть при разборе блока анализа результатов, поэтому мы приведем блок-схему логической части этого блока (рис. 9.1). 9.1. Комплексные данные При работе с комплексными данными удобно пользоваться записями с двумя полями, первое содержит информацию о действительной части данного, а второе - о мнимой части данного. Program Prim45; Type complex=record deistv:real; mnim:real; end; Var a,b,c:complex; BEGIN a.deistv:=6.3; a.mnim:=1.9; END. 9.2. Запись с вариантами Записи, описанные выше, имеют строго определенную структуру. однако есть возможность создавать записи, имеющие несколько вариантов одного и того же поля. Вариантные поля записываются после описания безвариантных полей с помощью оператора Case. ТУРЕ zap=record описание безвариантных полей; Case имя поля: тип имени поля of список констант выбора: (поле,... тип); ... список констант выбора: (поле,... тип); end; Пример: Туре zap=record Nomer: byte; {фиксированные поля} Articul: integer; Case Flag: boolean of {вариантные поля} TRUE: (cena l: integer); FALSE: (cena 2; real); end; Var P, Si Zap; поле Cena l доступно только тогда, когда Flag=TRUE поле Cena 2 доступно только тогда, когда Flag=FALSE При использовании записей с вариантами необходимо придерживаться следующих правил: все имена полей должны отличаться друг от друга, даже если они встречаются в различных вариантах; запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце её; Если поле, соответствующее какой-либо метке, является пустым, то оно записывается следующим образом: список констант выбора: ( ); Program Prim46; Type zap=record nomer:byte; artikul:integer; case flag:boolean of true:(cena1:integer); false:(cena2:real); end; Var h,s:zap; BEGIN with h do Begin nomer:=1; artikul:=2345; flag:=true; cena1:=25; writeln('nomer=',nomer,' artikul=',artikul,' cena1=',cena1); flag:=false; cena2:=3.2; writeln('cena2 ',cena2); end; readln; END. 10. Файлы10.1. Общие замечания В практике программирования часто встречаются задачи, решаемые с применением малоизменяемых во времени данных. К ним относятся, например, задачи бухгалтерского учета оптимального планирования и т.п. Ввод данных с клавиатуры при каждом счете задачи очень трудоемок, а иногда просто невозможен из-за временных ограничений. Для решения этой проблемы в языках программирования реализована концепция файлов, что позволяет после разового набора информации запомнить ее на внешнем носителе и обращаться к ней непосредственно из обрабатывающих программ при каждом счете задачи. Файл - поименованная область памяти, как правило, на внешнем носителе, предназначенная для хранения информации. файл можно также считать структурированным типом данных, состоящим из последовательности компонент одного и того же типа и одинаковой длины и структуры. чаще всего компонентами файла являются записи. Файл может быть связан с внешним носителем информации, т.е. располагаться на магнитном или СД диске, магнитной ленте, клавиатуре при вводе информации или на экране, принтере и при выводе её и т.д. Файлы бывают стандартными, т.е. определенными разработчиками или администраторами операционной системы или вычислительной среды, а также пользователем, т.е. человеком, составляющим программы в каком-либо алгоритмическом языке (например в Pascal), или с помощью других программных продуктов (баз данных, редакторов и т.д.). Каждый файл имеет свое имя, которое зарегистрировано в соответствующей директории (оглавлении). Определение файлового типа строится по такой схеме: Туре имя типа=file of тип компонент; Var идентификатор,.., идентификатор: имя типа; Например: Туре zap=record Nom: integer; FIO: string [20]; oklad: real; end; Ft=file of zap; Var a, b, с: Ft; Описаны три файла с именами а, b, с типа Ft. Компонентами файлов служат записи типа zap. Другими словами, файл схематично можно представить в виде «ленты» компонент, каждая из которых является записью типа zap. Доступ к компонентам файла может быть последовательным и прямым. Последовательный доступ - это когда для обращения к n-й компоненте необходимо «посмотреть» n-1 компонент; прямой доступ - обращение к компоненте идет прямо по «ключу» (номеру компоненты), без «просмотра» предыдущих компонент.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
|