Ввод символов с клавиатуры.

Ввод символов с клавиатуры почти не отличается от ввода чисел с клавиатуры. Для того чтобы ввести какие-то символы (буквы, знаки и т.д.) с клавиатуры необходимо для переменных использовать символьный тип данных Char.

Применение логических операций с оператором IF.

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

Строки в Паскаль.

Тип данных String (строковый тип) используется в Паскаль для обработки текстов. Если в одну переменную типа Char можно записать лишь один символ, то в переменную типа String можно записать до 255 символов.

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

Программирование данных.

Любые данные, то есть константы, переменные, выражения, значения функций, характеризуются своими типами. Тип определяет множество допустимых значений, которые может иметь программируемый объект, ...

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

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

Мы говорили о том, что информация из текстового файла может быть записана в переменные 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.
Может пригодится...
Ответить
 
 
+1 # Жека 11.09.2015 13:41
что то не так с кодом - не могу понять... Но как есть не работает а если в документе написать
putin
4 5 3
medvedev
4 5 2
в столбик короче то все отлично.
Ответить
 
 
0 # Некит 07.11.2015 18:59
В файле хранится информация о студентах: фамилия, имя, номер группы и отметки. В новый файл переписать информацию о лучших студентах, т.е. о студентах, имеющих оценки не ниже 4 и по сумме баллов не уступающих другим студентам своего курса. Сначала записать информацию о первом курсе, затем о втором и т.д. помогите( очень надо
Ответить
 

Добавить комментарий

Защитный код
Обновить

   ГлавнаяПаскальФайлы в Паскаль