Логические операции And, Or, Not, Xor в Pascal.

Над переменными логического типа можно производить логические операции. В языке программирования Pascal существуют следующие логические операции : Andлогическое умножение, Orлогическое сложение, Notлогическое отрицание, Xor ...

Ветвления в Pascal.

Ветвления в Паскаль позволяют выполнять действия не поочередно, как мы делали в предыдущих программах, а в зависимости от каких - либо условий. Для этого в языке программирования Pascal предусмотрены различные условные операторы. В данном уроке мы ...

Умножение, деление, сложение, вычитание вещественных чисел в Pascal.

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

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

ФАЙЛЫ ЗАПИСЕЙ

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

Циклы с параметром. Оператор FOR.

Эти циклы организуются в программах, где заранее известно число повторений. При этом повторное выполнение сопровождается изменением управляющего параметра (переменной цикла).

Мы говорили о том, что информация из текстового файла может быть записана в переменные 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 и по сумме баллов не уступающих другим студентам своего курса. Сначала записать информацию о первом курсе, затем о втором и т.д. помогите( очень надо
 
   ГлавнаяПаскальФайлы в ПаскальИспользование комбинированного типа в текстовых файлах.