0 / 0 / 1
Регистрация: 22.12.2009
Сообщений: 6
|
|
1 | |
Record и Строки13.05.2010, 00:44. Показов 2242. Ответов 6
Метки нет (Все метки)
Здравствуйте.
я вроде как разобрался с задачей: ''На олимпиаде по информатике на школьников заполнялись анкеты: фамилия, номер школы, класс, занятое место. Напечатать: 1) списки школ, занявших призовые места; 2) какая из школ заняла больше всех призовых мест; 3) списки учеников занявших первое место, указать их класс'' попытался сделать сам, что то получилось что то нет =) так вот я немного поискал и нашел решение. Код
Program Pascal; Uses crt; Const fname='students.dat'; n=5; {количество предметов за последнию сессию} Type st=record n_group:integer; {номер группы} n_sp:integer; {номер в группе по списку} fam:string; {фамилия} im:string; {имя} ot:string; {отчество} god_r:integer; {год рождения} oc:array [1..n] of integer;{оценки за последнию сессию} end; Var t:array[1..30] of st; i,ch,j:integer; h: file of st; begin write('Введите количество студентов в группе: '); readln(ch); for i:=1 to ch do begin writeln('Сведения о ' ,i,' студенте'); write('Номер группы: '); readln(t[i].n_group); write('Номер в группе по списку: '); readln(t[i].n_sp); write('Фамилия: '); readln(t[i].fam); write('Имя: '); readln(t[i].im); write('Отчество: '); readln(t[i].ot); write('Год рождения: '); readln(t[i].god_r); writeln('Оценки за последнию сессию: '); for j:=1 to n do begin case j of 1:write('Математика: '); 2:write('Физика: '); 3:write('Химия: '); 4:write('Культурология: '); 5:write('История: '); end; readln(t[i].oc[j]); if not ((t[i].oc[j]>0) and (t[i].oc[j]<=5)) then begin writeln('Неверно введена оценка! Повторите ввод.'); j:=j-1; end; end; writeln; end; Assign (h,fname); {$I-} reset(h); If Ioresult<>0 then rewrite(h); {$I+} for i:=1 to ch do write(h,t[i]); close(h); writeln('Данные занесены в файл ',fname); readln; end. я сам пытался делать получился откровенный бред =) Добавлено через 3 часа 42 минуты пожалуйста мне нужна ваша пощь :'(
0
|
13.05.2010, 00:44 | |
Ответы с готовыми решениями:
6
Как создать record внутри которого есть динамический массив с record-ами? Голосовалка, ошибка: Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record. Ошибка Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record ADODB.Field error '80020009' Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record. |
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
|
||||||
13.05.2010, 08:34 | 2 | |||||
Сообщение было отмечено irrm как решение
Решение
Вот принципиальное решение задачи. Ввод, вывод данных, интерфейс программы, это на Ваше усмотрение, это просто пример.
2
|
0 / 0 / 1
Регистрация: 22.12.2009
Сообщений: 6
|
|
13.05.2010, 12:01 [ТС] | 3 |
спасибо вам огромное!
0
|
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
|
|
11.01.2019, 12:33 | 5 |
nezhensky, что-то я не нашёл…
Может не там искал? Огласите весь список, пожалуйста!
0
|
11.01.2019, 12:57 | 6 |
Выделил жирным:
Program school; const q=5;{Количество школ учавствующих в олимпиаде} nom:array[1..q] of byte=(11,17,32,94,125);{Номера школ участвующих в олимпиаде} type anketa=record{Имя комбинированного типа} fam:string[20];{фамилия ученика} shk:byte;{номер школы} kls:byte;{класс ученика} mst:byte;{занятое место} end; var a:array[1..100] of anketa;{Массив анкет школьников} n,i,j,imx,mx:byte; k,p:byte;{Флаги проверки условий} begin write('Количество участников олимпиады n='); readln(n); writeln('Введите сведения об участниках:'); for i:=1 to n do {Цикл ввода анкет} begin writeln('Участник ',i); with a[i] do begin write(' Фамилия: ');readln(fam); repeat writeln(' Номер школы (введите 1 для №11, 2 для №17, 3-№32, 4-№94, 5-№125)'); readln(k); until k in [1..q]; shk:=nom[k]; repeat write(' Класс (9-11): '); readln(kls); until kls in [9..11]; repeat write(' Занятое место (1-10): '); readln(mst); until mst in [1..10]; end; writeln; end; writeln('1. Списки школ, занявших призовые места:'); k:=0; for i:=1 to q do{Цикл по школам} begin p:=0; for j:=1 to n do{Цикл по анкетам} {Проверка условий} if (a[j].shk=nom[i]) and (a[j].mst in [1..3]) then p:=1;{При условии ставим флаг p} {занятое место ученика от 1 до 3} if p=1 then {Если флаг p=1, выводим школу} begin k:=1;{Хоть одна школа попала в список, то ставим флаг k=1} writeln('Школа № ',nom[i]); end; end; {Если флаг k не появился =1} if k=0 then writeln('Призовые места никому не присуждены!') else begin mx:=0; imx:=0; for i:=1 to q do {Цикл по школам} begin k:=0; for j:=1 to n do {Цикл по анкетам} if(a[j].shk=nom[i])and(a[j].mst in [1..3]) then k:=k+1;{Считаем кол-во мест от 1 до 3, по каждой школе} if k>mx then{Поиск максимального значения по спискам школ} {Если кол-во мест превышает по прошлой посчитаной школе, запоминаем её mx кол-во мест} begin mx:=k; imx:=i; end; end; writeln('2. Больше всех призовых мест заняла школа № ',nom[imx]); writeln('3. Списки учеников, занявших первые места:'); for i:=1 to n do {проверка условия/ если занятое место=1} if a[i].mst=1 then writeln(a[i].fam,' класс: ',a[i].kls); end; writeln('Нажмите ENTER для выхода...'); readln end.
0
|
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
|
|
11.01.2019, 15:03 | 7 |
Дык, вы про решение ТС!
А на счёт его „корявости“ кто бы сомневался? Ведь он „нашёл“ решение, а не написал программу!!!
0
|
11.01.2019, 15:03 | |
11.01.2019, 15:03 | |
Помогаю со студенческими работами здесь
7
Копирование из RECORD в RECORD Record Record Record Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |