Мы говорили о том, что информация из текстового файла может быть записана в переменные 4-х типов: строкового, символьного, целочисленного и вещественного. Кроме этого можно использовать переменные комбинированного типа Record, при условии, что все компоненты этой переменной имеют один из 4-х вышеперечисленных типов.
Напишем программу, где в текстовом файле будет храниться информация о студентах: их фамилии и оценки по 3-м предметам. Необходимо подсчитать средний бал по группе и определить студента, который имеет максимальный средний бал.
Для начала создадим в директории «C:\FPC\2.2.2\bin\i386-win32\Programs» текстовый файл под названием «f4.dat» и запишем в него информацию о 2-х студентах. Причем под фамилию студента отведем 10 символов (если длина фамилии меньше, то оставшиеся символы заменим пробелами). После фамилии запишем через пробел 3 оценки.
Использование типа Record в текстовом файле.
Строка №3-№6 создаем тип записи «student» и указываем для него компоненты (переменные). Компонент «fam» будет содержать фамилию студента. Мы указали для него тип String[10], т.е. он будет содержать строку из 10 символов. Компоненты «fiz», «mat» и «prog» будут содержать оценку студента по 3-м предметам (физике, математике и программированию). Эти 3 компонента имеют одинаковый тип данных Byte (значения от 0 до 255), поэтому перечисляем их через запятую.
Строка №7. Для переменной «ved» указываем тип записи «student». Теперь через переменную «ved» мы имеем доступ ко всем полям записи.
Строка №8. Переменную «k» будем использовать для хранения информации о количестве студентов.
Строка №9. Переменную «sredstud» будем использовать для хранения информации о среднем бале одного студента.
Строка №10. Переменную «sredgrup» будем использовать для хранения среднего бала всей группы.
Строка №11. В переменной «maxst» будет хранить информацию о максимальном среднем бале студента.
Строка №12. Записываем файловую переменную, которую будем использовать для связи с внешним файлом.
Строка №13. Переменная «maxfam» будет содержать фамилию студента, который имеет максимальный средний бал.
Строка №18. Обнуляем переменные. В дальнейшем мы будем использовать эти переменные для вычислений, поэтому необходимо указать для них начальные значения, равные 0.
Строка №21. Считываем из файла информацию в компонент записи «ved.fam». В эту переменную будет считано первые 10 символов (т.к. компонент «fam» имеет тип String[10]). Указатель не перейдет на следующую строку, а установится на 11-ом символе (т.к. используется процедура Read).
Строка №22. Считываем из файла информацию. Считывание начнется с 11-ого символа. В файле с 11-ого символа стоят через пробел оценки студентов. Каждая из 3-х оценок будет считана в соответствующие переменные «ved.fiz», «ved.mat» и «ved.prog». Так как в данной строке используется процедура Readln, указатель после считывания информации в эти 3 переменные перейдет на следующую строку.
Строка №23. В переменную «sredstud» заносим значение, равное сумме всех оценок, деленное на 3 (т.е. среднее значение).
Строка №24. Проверяем условие. Если получившееся в строке №23 среднее значение больше значения переменной «maxst» (а оно вначале равно 0), то записываем в переменную «maxst» значение переменной «sredstud», т.е. средний бал (строка №26), а в переменную «max.fam» записываем значение переменной «ved.fam», т.е. фамилию(строка №27).
Строка №29. Подсчитываем средний бал группы.
Строка №30. Подсчитываем кол-во студентов.
Строки №21-№30 находятся в цикле, поэтому все операции будут проделаны 2 раза (для обоих студентов). Второй раз: Считываем в файл фамилию 2-ого студента (строка №21), считываем в файл его оценки (строка №22), подсчитываем средний бал этого студента (строка №23). Если средний бал этого студента больше чем первого, то заносим его в переменную «maxst», а в переменную «maxfam» его фамилию. Затем увеличиваем переменную «sredgrup» на значение, равное среднему балу 2-го студента, и прибавляем к переменной «k» единицу.
Строка №32. Подсчитываем средний бал группы.
Строка №33. Выводим на экран средний бал группы.
Строка №34. Выводим на экран фамилию студента, имеющего максимальный средний бал.
Предыдущая статья: Работа с двумя текстовыми файлами.
Оглавление: Уроки Паскаль. Файлы.
Следующая статья: Типизированные файлы в Паскаль.
Комментарии
const max=4; {кол-во учащихся}
var name: array [1..max] of string;
marks: array [1..max,1..4] of integer;
i, j, k: byte;
found: boolean;
begin
writeln('Введит е имя и оценки по предметам'); writeln;
for i:=1 to max do
begin
write('Имя: ');
readln(name);
write(' Оценки: ');
readln(marks[i, 1], marks[i,2], marks[i,3], marks[i,4]);
end;
for i:=1 to max do begin
for j:=1 to max do
begin
for k:=1 to 4 do if (marks[i,k]=mar ks[j,k]) and (ij) then break;
if (marks[i,k]=mar ks[j,k]) and (ij) then
begin
found:=true;
writeln(name,' ',name[j]);
break;
end;
end;
if found=true then break;
end;
readln;
end.
Может пригодится...
putin
4 5 3
medvedev
4 5 2
в столбик короче то все отлично.