Мегаобучалка Главная | О нас | Обратная связь


With имя переменной типа запись do



2020-02-04 223 Обсуждений (0)
With имя переменной типа запись do 0.00 из 5.00 0 оценок




begin ···················· end .

Один раз указав в операторе with переменную типа запись, затем – в пределах begin... end, стоящих после with, можно работать с именами полей этой записи как с обычными переменными, т.е. без указания перед именем поля имени записи. Например:

без применения оператора with:

М. NOM :=5543;

M . MARKA :='г a 3-24';

М. FIO :='Петров П. П.';

М. Adres :='ул. Чкалова, 7, кв.32';

End;

Составить программу учета успеваемости студентов курса, состоящего из шести групп до 30 студентов в каждой группе. Каждый студент сдавал экзамены по пяти дисциплинам: высшая математика, основы информатики, философия, история Украины, архитектура ЭВМ. По каждому предмету можно получить оценки 2, 3, 4, 5. Каждый экзамен можно сдавать до трех раз. Произвести анализ: если у студента имеется три двойки по одному предмету или три непересданные двойки по трем предметам, то он должен быть отчислен; если студент все двойки пересдал, то его нужно поругать.

         Program Prim44;

label u,w;

type mo=array[1..5,1..3] of 0..5;

     st=record

        namb:integer;

        fio:string[20];

        o:mo; end;

var

     gr:array[1..6,1..30] of st;

     i,j,k,l,kol_dvoek,v,kgr,n:integer;

     md:mo; ch:char;

     predmet:string; kst:array[1..6] of byte;

procedure rea_ocenki(fio:string;Var oc:mo);

Label M1,M2,M3,M4;

Var i:integer;

   begin

       for i:=1 to 5 do

      Begin

         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;

      M 4: 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

При использовании записей с вариантами необходимо придерживаться следующих правил:

- все имена полей должны отличаться друг от друга, даже если они встречаются в различных вариантах;

- запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце её;

Если поле, соответствующее какой-либо метке, является пустым, то оно записывается следующим образом:



2020-02-04 223 Обсуждений (0)
With имя переменной типа запись do 0.00 из 5.00 0 оценок









Обсуждение в статье: With имя переменной типа запись do

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (223)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)