мета-данные страницы
  •  
Загрузка не удалась. Возможно, проблемы с правами доступа?

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
pascal:records [17/10/2011 12:20] dnaumovpascal:records [17/10/2011 13:04] (текущий) dnaumov
Строка 1: Строка 1:
 ===== Объединение разнородных элементов (Запись) ===== ===== Объединение разнородных элементов (Запись) =====
  
-Массивы объединяют однородные единицы информации – элементы одного и того же типа. Но многообразие информации нельзя свести только к какому-то одному типу данных. Например, указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединим разнородную информацию. +Массивы объединяют однородные единицы информации – элементы одного и того же типа. Но многообразие информации нельзя свести только к какому-то одному типу данных. Например, указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединяем разнородную информацию. 
  
-Данные такого рода, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.+Данные такого рода, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова **record** и перечисления входящих в запись элементов с указанием типов этих элементов.
  
-**Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.**+**Запись – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.**
  
-Например, анкетные данные о студенте вуза могут быть представлены в виде информационной структуры+Например, анкетные данные об ученике школы могут быть представлены в виде информационной структуры
  
 {{:pascal:new-14.gif|Представление структуры записи Паскаля}} {{:pascal:new-14.gif|Представление структуры записи Паскаля}}
Строка 15: Строка 15:
 <code pascal|Описание типа> <code pascal|Описание типа>
 type < имя _ типа >=record type < имя _ типа >=record
-   <имя_поля1>: тип; +   <имя_поля_1>: тип; 
-   <имя_поля2>: тип;+   <имя_поля_2>: тип;
    ......    ......
-   <имя_поля >: тип+   <имя_поля_K >: тип
 end ;  end ; 
 </code> </code>
Строка 24: Строка 24:
 где **record** – служебное слово, а **<имя_типа>** и **<имя_поля>** - правильные идентификаторы языка Паскаль. где **record** – служебное слово, а **<имя_типа>** и **<имя_поля>** - правильные идентификаторы языка Паскаль.
  
-Описание анкеты студента в Паскале будет выглядеть так:+Описание анкеты ученика в Паскале будет выглядеть так:
  
 <code pascal|Пример фрагмента программы описания записи Паскаля> <code pascal|Пример фрагмента программы описания записи Паскаля>
Строка 32: Строка 32:
    dat_r: string[8];    dat_r: string[8];
    adres: string[50];    adres: string[50];
-   curs1..5; +   clstring[5]
-   grupp: string[3];+   gr: string[3];
 end;  end; 
 </code> </code>
Строка 39: Строка 39:
 Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой. Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой.
  
-Поля записи Паскаля могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения о студентах можно отобразить трехуровневым деревом. +Поля записи Паскаля могут иметь любой тип, в частности сами могут быть записями. Такая возможность используется в том случае, когда требуется представить многоуровневое дерево (более 2 уровней). Например, те же сведения об учениках можно отобразить трехуровневым деревом. 
  
 {{:pascal:new-15.gif|Представление структуры записи Паскаля}} {{:pascal:new-15.gif|Представление структуры записи Паскаля}}
 +
 <code pascal|Пример фрагмента программы описания записи Паскаля> <code pascal|Пример фрагмента программы описания записи Паскаля>
 Type anketa1=record Type anketa1=record
    fio: string[45];    fio: string[45];
    pol: char;    pol: char;
-   dat_r: record; +   dat_r: record 
-   god: integer; +     god: integer; 
-   mes: string[10]; +     mes: string[10]; 
-   den: 1..31; +     den: 1..31; 
-end; +    end; 
-adres: record +   adres: record 
-   gorod: string[25]; +     gorod: string[25]; 
-   ulica: string [20]; +     ulica: string [20]; 
-   dom, kv: integer; +     dom, kv: integer; 
-end; +    end; 
-curs1..5; +   clstring[5]
-   grupp: string[3];+   gr: string[3];
 end;  end; 
 </code> </code>
Строка 67: Строка 68:
 <code pascal|Задание переменной> <code pascal|Задание переменной>
 var var
-student: anketa; +   pupil: anketa; 
-student 1anketa 1;+   pupil1anketa1;
 </code> </code>
  
-Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор:+Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются **полями**, а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него **точкой**. Такая запись называется уточняющий идентификатор:
  
 <code pascal|Уточняющий идентификатор> <code pascal|Уточняющий идентификатор>
Строка 77: Строка 78:
 </code> </code>
  
-Например, чтобы обратиться к полю curs переменной student , необходимо указать следующее составное имя:+Например, чтобы обратиться к полю **cl** переменной **pupil** , необходимо указать следующее составное имя:
  
-<code pascal|Обращение к полю curs+<code pascal|Обращение к полю cl
-student.curs :=3;+pupil.cl :=3;
 <code> <code>
  
-Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен:+Для того чтобы обратиться к полю god в записи pupil1, необходимо записать уточняющий идентификатор, состоящий из трех имен:
  
 <code pascal|Обращение к полю god> <code pascal|Обращение к полю god>
-student1.dat_r.god:=1982;+pupil1.dat_r.god:=1982;
 </code> </code>
  
Строка 93: Строка 94:
 ===== Операции над записями ===== ===== Операции над записями =====
  
-Единственная операция, которую можно произвести над однотипными записями Паскаля – это присваивание.+Единственная операция, которую можно произвести над однотипными записями Паскаля – это *присваивание*. 
 + 
 + 
 +<code pascal|Присваивание> 
 +var 
 +   pupil1, pupil2: anketa1; 
 + 
 +begin 
 + 
 +   ... 
 + 
 +   pupil1:=pupil2; 
 + 
 +   ... 
 + 
 +end. 
 +</code>
  
 Все другие операции производятся над отдельными полями записи.  Все другие операции производятся над отдельными полями записи. 
Строка 110: Строка 127:
    dat_r: string[8];    dat_r: string[8];
    adres: string[50];    adres: string[50];
-   curs1..5; +   clstring[5]
-   grupp: string[3]+   gr: string[3]
 end; end;
  
-var student: anketa;+var pupil: anketa;
 begin begin
-   writeln (‘введите сведения о студенте’);+   writeln (‘введите сведения об ученике’);
    {обратите внимание, ввод каждого поля осуществляется отдельно}    {обратите внимание, ввод каждого поля осуществляется отдельно}
    writeln (‘введите фамилию, имя и отчество’);    writeln (‘введите фамилию, имя и отчество’);
-   readln (student.fio);+   readln (pupil.fio);
    writeln (‘введите дату рождения’);    writeln (‘введите дату рождения’);
-   readln (student.dat_r);+   readln (pupil.dat_r);
    writeln (‘введите адрес’);    writeln (‘введите адрес’);
-   readln(student.adres); +   readln(pupil.adres); 
-   writeln (‘введите курс’); +   writeln (‘введите класс’); 
-   readln(student.curs);+   readln(pupil.cl);
    writeln (‘введите группу’);    writeln (‘введите группу’);
-   readln (student.grupp);+   readln (pupil.gr);
    writeln (‘ввод закончен’);    writeln (‘ввод закончен’);
    writeln ;    writeln ;
    {обратите внимание, что вывод записи осуществляется по полям}    {обратите внимание, что вывод записи осуществляется по полям}
-   writeln (‘фамилия студента: ’, student . fio ); +   writeln (‘фамилия ученика: ’, pupil.fio ); 
-   writeln(‘ дата рождения : ’, student.dat_r); +   writeln(‘ дата рождения : ’, pupil.dat_r); 
-   writeln(‘ адрес : ’, student.adres); +   writeln(‘ адрес : ’, pupil.adres); 
-   writeln(‘ курс : ’, student.curs); +   writeln(‘ класс : ’, pupil.cl); 
-   writeln(‘ группа : ’, student.grupp);+   writeln(‘ группа : ’, pupil.gr);
 end. end.
 </code> </code>
Строка 148: Строка 165:
    dat_r: string[8];    dat_r: string[8];
    adres: string[50];    adres: string[50];
-   curs1..5; +   clstring[5]
-   grupp: string[3]+   gr: string[3]
 end; end;
  
-var student: array [1..100] of anketa;+var pupil: array [1..100] of anketa;
    I: integer;    I: integer;
  
Строка 159: Строка 176:
    for I:=1 to 100 do    for I:=1 to 100 do
    begin    begin
-      writeln (‘введите сведения о’, I , ‘-м студенте’);+      writeln (‘введите сведения о’, I , ‘-м ученике’);
       writeln (‘введите фамилию, имя и отчество’);       writeln (‘введите фамилию, имя и отчество’);
-      readln (student[I].fio);+      readln (pupil[I].fio);
       writeln (‘введите дату рождения’);       writeln (‘введите дату рождения’);
-      readln (student[I].dat_r);+      readln (pupil[I].dat_r);
       writeln (‘введите адрес’);       writeln (‘введите адрес’);
-      readln(student[I].adres); +      readln(pupil[I].adres); 
-      writeln (‘введите курс’); +      writeln (‘введите класс’); 
-      readln(student[I].curs);+      readln(pupil[I].cl);
       writeln (‘введите группу’);       writeln (‘введите группу’);
-      readln (student[I].grupp);+      readln (pupil[I].gr);
    end;    end;
    writeln (‘ввод закончен’);    writeln (‘ввод закончен’);
    writeln ;    writeln ;
-   {просматриваем массив записей и выбираем только студентов 2-го курса }+   {просматриваем массив записей и выбираем только учеников 11-класса }
    for I:=1 to 100 do    for I:=1 to 100 do
-      if student[I].curs=then +      if pupil[I].cl='11-1' then 
-         writeln(‘ фамилия студента : ’, student[I].fio);+         writeln(‘ фамилия студента : ’, pupil[I].fio);
 end.  end. 
 </code> </code>
Строка 194: Строка 211:
 <code pascal|Пример фрагмента программы c записью и префиксом Паскаля> <code pascal|Пример фрагмента программы c записью и префиксом Паскаля>
 for I:=1 to 100 do for I:=1 to 100 do
-   with student[I] do+   with pupil[I] do
    begin    begin
-      writeln (‘введите сведения о’, I , ‘-м студенте’);+      writeln (‘введите сведения о’, I , ‘-м ученике’);
       writeln (‘введите фамилию, имя и отчество’);       writeln (‘введите фамилию, имя и отчество’);
       readln (fio);       readln (fio);
Строка 203: Строка 220:
       writeln (‘введите адрес’);       writeln (‘введите адрес’);
       readln(adres);       readln(adres);
-      writeln (‘введите курс’); +      writeln (‘введите класс’); 
-      readln(curs);+      readln(cl);
       writeln (‘введите группу’);       writeln (‘введите группу’);
-      readln (grupp);+      readln (gr);
    end;     end; 
 <code> <code>