Приоритет выполнения логических операций в Pascal.

Логические операции применяются при написании многих программ в Pascal. Все операции имеют определенный приоритет выполнения : Первой выполняется операция NOT. Второй выполняется операция AND. Последними выполняются операции OR и XOR (Они имеют ...

Ввод логических переменных с клавиатуры.

В отличие от переменных целого, вещественного или символьного типов данных, булевские переменные нельзя вводить с клавиатуры, их можно только выводить на экран. Однако можно использовать небольшую хитрость. Для того чтобы можно было ввести булевскую ...

Textcolor, Window, Textbackground в Pascal.

Текст, который мы выводим на экран с помощью процедуры Writeln или с помощью оператора Write можно изменять. Процедура Textcolor используется для изменения цвета выводимого текста. Процедура Textbackground изменяет цвет фона, на котором выводится ...

Циклы и массивы

Программирование вычислительных процессов.

Решение задачи на ЭВМ — это сложный процесс, в ходе которого пользователю приходится выполнять целый ряд действий, прежде чем он получит интересующий его результат.

Линейные процессы вычислений.

Простейший алгоритм представляет собой цепочку блоков (операторов) от начального блока до конечного. Каждый блок должен быть выполнен один единственный раз. Это линейный алгоритм. Он отражает ...

Мы говорили о том, что информация из текстового файла может быть записана в переменные 4-х типов: строкового, символьного, целочисленного и вещественного. Кроме этого можно использовать переменные комбинированного типа Record, при условии, что все компоненты этой переменной имеют один из 4-х вышеперечисленных типов.

Напишем программу, где в текстовом файле будет храниться информация о студентах: их фамилии и оценки по 3-м предметам. Необходимо подсчитать средний бал по группе и определить студента, который имеет максимальный средний бал.
Для начала создадим в директории «C:\FPC\2.2.2\bin\i386-win32\Programs» текстовый файл под названием «f4.dat» и запишем в него информацию о 2-х студентах. Причем под фамилию студента отведем 10 символов (если длина фамилии меньше, то оставшиеся символы заменим пробелами). После фамилии запишем через пробел 3 оценки.

record

Использование типа Record в текстовом файле.



program file10;
uses crt;
type student = record
 fam:string[10];
 fiz,mat,prog:byte;
end;
var ved: student;
k:integer;
sredstud,
sredgrup,
maxst:real;
f4:text;
maxfam:string[10];
begin
clrscr;
assign (f4,'programs\f4.dat');
reset (f4);
sredgrup:=0;k:=0;maxst:=0;
while not eof (f4) do
begin
read (f4,ved.fam);
readln (f4,ved.fiz,ved.mat,ved.prog);
sredstud:=(ved.fiz+ved.mat+ved.prog)/3;
if sredstud>maxst then
begin
maxst:=sredstud;
maxfam:=ved.fam;
end;
sredgrup:=sredgrup+sredstud;
k:=k+1
end;
sredgrup:=sredgrup/k;
writeln('Сpедний балл в гpуппе=',sredgrup:2:1);
writeln('Максимальный сpедний балл у студента ', maxfam);
readln
end.


Строка №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. Выводим на экран фамилию студента, имеющего максимальный средний бал.

record.record..

record...


Предыдущая статья: Работа с двумя текстовыми файлами.
Оглавление: Уроки Паскаль. Файлы.
Следующая статья: Типизированные файлы в Паскаль.


Комментарии  

 
0 # AresDan 07.12.2012 15:24
Я всё набрал, но он не может считать символы. Имя считывает а дальше не может. Что делать подскажите?
 
 
0 # Евген 13.03.2014 08:07
Русские буквы лучше вручную вводить
 
 
0 # V0VAN 21.06.2014 10:21
В файле записано: фамилия студента, имя, адрес. Вывести фамилии студентов, которые имеют одинаковое имя. помогите пожалуйста) очень надо...
 
 
0 # III 23.06.2014 06:53
Программа определяет первых двух учеников с одинаковыми оценками, может поможет...
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.
Может пригодится...
 
 
0 # Жека 11.09.2015 13:41
что то не так с кодом - не могу понять... Но как есть не работает а если в документе написать
putin
4 5 3
medvedev
4 5 2
в столбик короче то все отлично.
 
 
0 # Некит 07.11.2015 18:59
В файле хранится информация о студентах: фамилия, имя, номер группы и отметки. В новый файл переписать информацию о лучших студентах, т.е. о студентах, имеющих оценки не ниже 4 и по сумме баллов не уступающих другим студентам своего курса. Сначала записать информацию о первом курсе, затем о втором и т.д. помогите( очень надо
 
   ГлавнаяПаскальФайлы в ПаскальИспользование комбинированного типа в текстовых файлах.