Тип данных запись2013.ppt
- Количество слайдов: 22
Тип данных запись
Тип запись Запись – структурированный тип данных из фиксированного числа компонентов одного или нескольких типов. Компоненты записи называются полями. Каждое поле имеет имя и тип.
Описание типа запись VAR <имя переменной>: record <имя поля 1>: <тип 1>; <имя поля 2>: <тип 2>; . . . <имя поля n>: <тип n>; End;
Описание типа запись type <имя типа> = record <имя поля>: <тип поля>; … end; var a, b: <имя типа> ;
Пример описания типа запись type adress = record town, street: string; home: string; flat: byte; end; var a, b: adress;
Пример описания типа запись если иметь дело со многими людьми, то переменная типа запись может быть объявлена массивом type adress = record town, street: string; home: string; flat: byte; end; var a : array[1. . 25] of adress;
Обращение к имени поля осуществляется двумя способами: 1) С указанием составного имени: имя переменной и имя поля, разделённые точкой. Для приcваивания полям значений используется оператор присваивания или оператор ввода. Например, a. town: =“Саратов”; a. flat: =14; Readln(a. name);
Обращение к имени поля : составное имя 1)Над полями разрешены все операции, допустимые для типа поля. If a. flat > 10 then Writeln(‘Yes’); v 2)Над переменными одного типа разрешена операция присвоения: a: =b; v a. town: =b. town; a. street: =b. street; a. home: =b. home; a. flat: =b. flat;
Обращение к имени поля Используется оператор присоединения. Общий вид with <имя переменной> do begin <операторы> end; Внутри оператора присоединения с именами полей можно работать как с обычными переменными (к компонентам записи обращаются только с помощью имени соответствующего поля).
Оператор присоединения пример with a do begin town: =“Саратов”; flat: =14; end; a. town: =“Саратов ”; a. flat: =14;
Пример1. Дан список учащихся, включающий фамилию, имя, пол, возраст. Вывести список девушек старше 15 лет. (файловый ввод-вывод) n Данные 4 Иванов Игорь м 16 Вышина Елена ж 12 Косарева Анна ж 17 Петрова Валерия ж 18 в файле input. txt n Данные в файле output. txt Косарева Анна ж 17 Петрова Валерия ж 18
program p 1; type pupil=record fam: string; name: string; sex: char; age: byte; end; var i, n: byte; spicok: array[1. . 10] of pupil; begin readln(n); for i: =1 to n do begin readln(spicok[i]. fam); readln(spicok[i]. name); readln(spicok[i]. sex); readln(spicok[i]. age); if (spicok[i]. sex=‘ж’) and (spicok[i]. age>15) then begin write(spicok[i]. fam, ’ ‘); write(spicok[i]. name, ’ ‘); write(spicok[i]. sex, ’ ‘); writeln(spicok[i]. age); end; end.
program p 1; type pupil=record sex: char; age: byte; fam: string[10]; name: string[10]; end; var i, n: byte; spicok: array[1. . 10] of pupil; begin readln(n); for i: =1 to n do begin with spicok[i] do begin readln(fam); readln(name); readln(sex); readln(age); if (sex=‘ж’) and (age>15) then begin write(fam, ’ ‘); write(name, ’ ‘); write(sex, ’ ‘); writeln(age); end; end.
Пример2 Пусть известны ФИ и оценки по 10 предметам каждого из 25 учеников класса. Требуется вычислить балл каждого. средний
program p 1; type pupil=record fam, name: string; mark: array[1. . 10] of byte; sr: real; end; var i, n, j: byte; spicok: array[1. . 10] of pupil; begin readln(n); for i: =1 to n do begin readln(spicok[i]. fam); readln(spicok[i]. name); for j: =1 to 10 do begin readln (spisok[i]. mark[j]); s: =s+ spisok[i]. mark[j]; end; spisok[i]. sr: =(s)/10; s: =0; write(spicok[i]. fam, ’ ‘); write(spicok[i]. name, ’ ‘); writeln(spicok[i]. sr: 5: 3); end.
program p 1; type pupil=record fam, name: string; mark: array[1. . 10] of byte; sr: real; end; var i, n, j: byte; spicok: array[1. . 10] of pupil; begin readln(n); for i: =1 to n do begin with spicok[i] do begin readln(fam); readln(name); for j: =1 to 10 do begin readln (mark[j]); s: =s+ mark[j]; end; sr: =(s)/10; s: =0; write(fam, ’ ‘); write(name, ’ ‘); writeln(sr: 5: 3); end.
Пример. Дан список учащихся, включающий фамилию, имя, пол, возраст. Вывести список девушек старше 15 лет. В первой строке вводится количество учащихся N. Далее следует N строк, имеющих следующий формат: <Фамилия><Имя><Пол><Возраст>. Здесь <Фамилия>- строка, состоящая не более чем из 20 символов; <Имя> - строка, состоящая не более чем из 15 символов; <Пол> - символ; <Возраст>- целое число. При этом <Фамилия> и <Имя>, <Имя> и <Пол>, <Пол> и <Возраст> разделены одним пробелом.
n Данные в файле input. txt 4 Иванов Игорь м 16 Вышина Елена ж 12 Косарева Анна ж 17 Петрова Валерия ж 18 n Данные в файле output. txt Косарева Анна Петрова Валерия
type pupil=record fam, name: string; sex: char; age: byte; end; var i, n: byte; a: array[1. . 10] of pupil; c: char; begin readln(n); n for i: =1 to n do begin n read(c); a[i]. fam: =‘’; n while c<>’ ‘ do begin n a[i]. fam: =a[i]. fam+c; n read(c); n end; n read(c); a[i]. nam: =‘’; n while c<>’ ‘ do begin n a[i]. nam: =a[i]. nam+c; n read(c); n end; n read(a[i]. sex); n readln(a[i]. age); n if (a[i]. sex=‘ж’) and (a[i]. age>15) then n end; n end. writeln(a[i]. fam, ‘ ', a[i]. nam);
Пример 2. Дан список учащихся, включающий фамилию, имя, пол, возраст. Поменять местами первого и последнего учащихся в списке. В первой строке вводится количество учащихся N. Далее следует N строк, имеющих следующий формат: <Фамилия><Имя><Пол><Возраст>. Здесь <Фамилия>- строка, состоящая не более чем из 20 символов; <Имя> - строка, состоящая не более чем из 15 символов; <Пол> - символ; <Возраст>- целое число. При этом <Фамилия> и <Имя>, <Имя> и <Пол>, <Пол> и <Возраст> разделены одним пробелом.
type pupil=record fam, name: string; sex: char; age: byte; end; var i, n: byte; a: array[1. . 10] of pupil; c: char; b: pupil; begin readln(n); n for i: =1 to n do begin n read(c); a[i]. fam: =‘’; n while c<>’ ‘ do begin n a[i]. fam: =a[i]. fam+c; n read(c); n end; n read(c); a[i]. nam: =‘’; n while c<>’ ‘ do begin n a[i]. nam: =a[i]. nam+c; n read(c); n end; n read(a[i]. sex); n readln(a[i]. age); n end; n (окончание на след. слайде)
p: =a[1]; a[1]: =a[n]; a[n]: =p; for i: =1 to n do begin writeln(a[i]. fam, ’ ‘, a[i]. nam, ’ ‘, a[i]. sex, ’ ‘a[i]. age); end.


