§29 ГДЗ Семакин 10 класс (Информатика)
2. Что такое запись?
3. Опишите комбинированный тип для записей, содержащих следующие данные учеников: фамилию, имя, год рождения, рост (в сантиметрах), вес (в килограммах).
4. Опишите содержимое текстового файла, из которого будут вводиться данные, соответствующие описанию из предыдущего задания, для нескольких учеников класса (не менее пяти).
5. Напишите программу, по которой будут введены данные из файла, описанного в предыдущем задании, и выполнена следующая обработка:
• определение среднего роста и среднего веса всех учеников;
• вывод на экран и в файл rost.txt списка (фамилии, имена, возраст) учеников, рост которых выше среднего роста;
• вывод на экран и в файл ves.txt списка учеников, вес которых ниже среднего веса.
6. Решите предыдущую задачу, не используя в программе массива записей. Подсказка: оператор Reset можно использовать в программе многократно для повторного чтения файла, начиная с его первой записи.
1. Массив хранит однотипные элементы, а комбинированный тип данных объединяет в одной структуре поля разных типов.
2. Запись — это величина комбинированного типа, состоящая из нескольких полей.
3. Для данных ученика можно задать запись так:
Type dan = record
Surname: string[30];
Name: string[30];
Year: integer;
Growth: real;
Weight: real;
End;
4. Пример содержимого текстового файла для нескольких учеников:
Иван Петров 1995 178 69,2
Петр Иванов 1994 170 80,0
Николай Иванов 1995 150 50,8
Иван Николаев 1996 180 60,7
Николай Петров 1996 178 70,3
5. Программа на Pascal:
Program Examen;
Type results = record
Fam: string[15];
Rus: 2..5;
Alg: 2..5;
Phiz: 2..5;
End;Var list: array[1..30] of results;
i: integer; F1, F2: text;
Begin
Assign(F1, ’10_a.txt’);
Assign(F2, ‘Best.txt’);
Reset(F1);
Rewrite(F2);
Readln(F1); Readln(F1);
For i:=1 To 30 Do
Readln(F1, list[i].Fam, list[i].Rus, list[i].Alg, list[i].Phiz);
For i:=1 To 30 Do
If (list[i].rus=5) and (list[i].alg=5) and (list[i].phiz=5)
Then
Begin
Writeln(list[i].fam);
Writeln(F2, list[i].fam)
End;
Close(F1); Close(F2)
End.
6. Решение без массива записей:
begin
var a:=ReadLines(‘infile.txt’).ToArray;
var n:=a.Length;
Writeln(‘*** Исходная информация ***’);
a.PrintLn(NewLine);
Writeln(‘*** Задание 1 ***’);
var sves:real:=0;
var srost:real:=0;
foreach var s in a do begin
srost+=StrToFloat(s.ToWords.ElementAt(3));
sves+=StrToFloat(s.ToWords.ElementAt(4))
end;
Writeln(‘Средний рост равен ‘,srost/n:5:1);
Writeln(‘Средний вес равен ‘,sves/n:4:1);
srost:=srost/n; sves:=sves/n;
Writeln(‘*** Задание 2 ***’);
var f2:=OpenWrite(‘rost.txt’);
foreach var s in a do begin
var ss:=s.ToWords;
var rost:=StrToFloat(ss.ElementAt(3));
if rost>srost then begin
var s0:=ss.Take(3).ToArray;
var s1:=s0[0]+’ ‘+s0[1]+’, ‘+s0[2];
Writeln(s1);
Writeln(f2,s1)
end
end;
f2.Close;
Writeln(‘*** Задание 3 ***’);
f2:=OpenWrite(‘ves.txt’);
foreach var s in a do begin
var ss:=s.ToWords;
var ves:=StrToFloat(ss.ElementAt(4));
if ves<sves then begin
var s0:=ss.Take(3).ToArray;
var s1:=s0[0]+’ ‘+s0[1]+’, ‘+s0[2];
Writeln(s1);
Writeln(f2,s1)
end;
end;
f2.Close
end.
Ответ
1. Массив хранит однотипные элементы, а комбинированный тип данных состоит из полей разных типов.
2. Запись — это величина комбинированного типа.
3. Type dan = record: Surname: string[30]; Name: string[30]; Year: integer; Growth: real; Weight: real; End;
4. Пример файла:
Иван Петров 1995 178 69,2
Петр Иванов 1994 170 80,0
Николай Иванов 1995 150 50,8
Иван Николаев 1996 180 60,7
Николай Петров 1996 178 70,3
5. Программа приведена выше.
6. Решение без массива записей приведено выше.