07.06.2015, 15:32 | #1 (permalink) |
Новичок
Регистрация: 29.05.2015
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Помогите поправить программу. Pascal ABC
Есть такое условие задачи Создайте файл, содержащий записи о 10 студентах из 3 групп. Выведите на экран максимальный балл по 2-му предмету в каждой из 3 групп. Получилось так: Код:
type student=record name:string[10]; group:integer; marks:array[1..5] of 2..5; end; var f:file of student; gr:array[1..3] of integer; st:student; i,j,k:byte; x,max,ans:integer; begin writeln('Создать файл заново или открыть существующий? (1-создать, 2-открыть)'); repeat readln(ans); until ans in [1..2]; if (ans=1) then begin assign(f,'student.txt'); rewrite(f); gr[1]:=355; gr[2]:=255; gr[3]:=155; for i:=1 to 3 do begin writeln('Введите 10 записей о студентах группы ',gr[i],':'); j:=0; repeat j:=j+1; writeln('Студент ',j); with st do begin write('Фамилия: ');readln(name); group:=gr[i]; writeln(' Введите 5 оценок студента от 2 до 5'); for k:=1 to 5 do repeat write(' Оценка ',k,' '); readln(marks[k]); until marks[k] in [2..5]; write(f,st); end; until j=10; end; close(f); end; if (ans=2) then begin writeln('Продолжить? Да(1)/Нет(2)'); repeat readln(ans); until ans in [1..2]; while ans<>2 do begin repeat writeln('Выберите номер группы (1-3)'); readln(k); until k in [1..3]; x:=gr[k]; writeln('Максимальный балл студентов группы ',x,' по второму предмету'); while not eof(f) do begin reset(f); read(f,st); if st.group=x then begin max:=0; for i:=1 to 5 do if st.marks[2]>max then max:=st.marks[2]; end; writeln(max); close(f); end; end; end; readln end. Заранее спасибо! |
07.06.2015, 15:32 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Скорее всего проблему будет решать намного легче, если набраться информации отсюда Помогите доделать программу в Pascal Помогите написать программу на Pascal |
07.06.2015, 19:17 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
Const N=2; {number of students in group} type student=record name:string[10]; group:integer; marks:array[1..5] of byte; end; var f:file of student; gr:array[1..3] of integer; st:student; i,j,k:byte; x,max,ans:integer; Begin gr[1]:=355; gr[2]:=255; gr[3]:=155; write('Create new file or open existing? (1-create, 2-open) '); repeat readln(ans); until ans in [1..2]; if (ans=1) then begin assign(f,'student.inf'); rewrite(f); for i:=1 to 3 do begin writeln('Enter ',N,' records containing data about the sudents of ',gr[i],' group:'); for j:=1 to N do begin writeln('Student ',j); with st do begin write('Surname: '); readln(name); group:=gr[i]; writeln(' Enter his/her 5 marks from 2 to 5'); for k:=1 to 5 do repeat write(' Mark ',k,' '); readln(marks[k]); until marks[k] in [2..5]; end; write(f,st); end; end; close(f); end else begin assign(f,'student.inf'); repeat writeln('Continue? Yes(1)/No(2)'); repeat readln(ans); until ans in [1..2]; if ans=1 then begin Reset(f); writeln('Choose the number of group (1-3)'); repeat readln(k); until k in [1..3]; x:=gr[k]; write('Maximal mark of students of group ',x,' in second subject: '); max:=0; while not eof(f) do begin read(f,st); if (st.group=x) and (st.marks[2]>max) then max:=st.marks[2]; end; writeln(max); close(f); end; until ans=2; end; End. Количество студентов в группе я задаю с помощью константы N. Для отладки поставил 2, можете исправить на 10, а я не намерен посвящать остаток жизни вводу данных по 30 лоботрясам. Не стОит заведомо типизированному файлу давать расширение .txt. Не, ну можно, конечно - но зачем?! Ну и еще там куча всяко-разных мелочей. |
|
07.06.2015, 19:55 | #5 (permalink) |
Новичок
Регистрация: 29.05.2015
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|