Нужно создать файл, состоящий из 20 записей. -Район; -№школы; -количество учеников; -количество неуспевающих учеников; -количество отличников и хорошистов. Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший. Информацию выводить, отсортировав по наименованию района.
Файл то я конечно создал. А вот в остальном запутался. Много что-то условий. Помогите пожалуйста. Напишите хотя бы примерный алгоритм действий, а дальше думаю сам разберусь.
Артемий
15.05.2007 0:18
Цитата
Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший.
А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой"
А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой"
Ну это я незнаю, но я так понял нужно высчитать процент этих самых отличников в каждой школе и потом вывести тока школы с наибольшим процентом от каждого района.
ko1hoz
15.05.2007 16:22
Вот так собственно я создаю файл
uses crt; const n=5; type spisok=record raion:string; p_p,nom,kol_uch,neus_uch,otl_hor:integer; end; var i:integer; sp:spisok; F:file of spisok; begin assign (F,'d:\kurs.dat'); rewrite (F); for i:=1 to n do begin with sp do begin writeln ('raion:'); readln(raion); writeln ('p/p:'); readln(p_p); writeln ('nomer shkoli:'); readln(nom); writeln ('kolichestvo uch:'); readln(kol_uch); writeln ('kolichestvo neusp:'); readln(neus_uch); writeln ('kolichestvo otl i hor:'); readln(otl_hor); end; write(F,sp); end; close(F); readln; end.
А вот это я написал сортировку.
uses crt; Const name='d:\kurs2.txt'; Type spisok=record raion:string; p_p,nom,kol_uch,neusp,otl_hor:integer; end; Var k,i:integer;sum:real; sp:spisok;Ot:char; sp1:array [1..50] of spisok; pr:array [1..50] of real; F:file of spisok; F1:text; begin clrscr; assign(F,'d:\kurs.dat'); reset(F); Writeln('Zapisat v fail? Y/N'); Readln(Ot); If (Ot='Y') or (Ot='y') then assign (F1,name) else assign (F1,'con'); Rewrite(F1); Writeln(F1,' Svedeniya o shkolah raionov'); k:=0; For i:=1 to 77 do write(F1,'-'); writeln(F1); Writeln(F1,'| raion |nom_p/p|nom_shkoli|kol uch|kol neusp uch|otl i hor|procent|'); For i:=1 to 77 do write(F1,'-'); writeln(F1); While not eof(F) do begin Read(F,sp); With sp do begin if raion='oktyabrskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='centralnii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='zaelcovskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='zheleznodorozhnii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; if raion='kirovskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='pervomaiskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='kalininskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; if raion='leninskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='dzerzhinskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end; if raion='sovetskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/kol_uch*100; end;
end; end; end; For i:=1 to k do with sp1[i] do begin write(F1,'|', raion:12 ,'|',p_p:7,'|',nom:10,'|'); writeln(F1,kol_uch:7,'|',neusp:13,'|',otl_hor:9,'|',pr[i]:7:2,'|'); end; For i:=1 to 77 do write(F1,'-'); writeln(F1); Close(F1);Readln; end; end.
Почему выводится только один район(заельцовский)? И как сделать, чтобы из каждого района выводилася школа только с мах процентом?
ko1hoz
17.05.2007 10:40
Нуу
Lapp
17.05.2007 11:01
Проясни ситуацию, плз.. Вот у тебя длинный набор операторов if идет в проге (по названиям районов). Но в каждом таком if'е ты делаешь абсолютно одно и то же. Спрашивается: зачем тебе эти "иф"ы?
И еще: прикрепи, пожалуйста, файл с данными (запакуй в архив и приаттач).
ko1hoz
17.05.2007 18:15
Цитата(Lapp @ 17.05.2007 11:01)
Проясни ситуацию, плз.. Вот у тебя длинный набор операторов if идет в проге (по названиям районов). Но в каждом таком if'е ты делаешь абсолютно одно и то же. Спрашивается: зачем тебе эти "иф"ы?
И еще: прикрепи, пожалуйста, файл с данными (запакуй в архив и приаттач).
Ну как бы считаю процент отличников для каждой школы в данном районе и соответственно переписываю в массив. P.S. Прикрепил данные, там 5 школ из 3ёх районов с произвольно введёнными данными. Соответственно в результате должно получится 3 школы.
Гость
18.05.2007 10:19
осталась 1 неделя до сдачи
ko1hoz
18.05.2007 10:21
Цитата(Гость @ 18.05.2007 10:19)
осталась 1 неделя до сдачи
изивине, от гостя написал.
ko1hoz
23.05.2007 20:45
Подскажите пожалуйста, вот программа а также файл с данными. В итоге у меня выводятся все школы районов (20 штук) с их качественными процентными, всё как и нужно. А как сделать, чтобы от каждого района выводилось только по одной школе с максимальным процентом?
uses crt; Const name='d:\kurs2.txt'; Type spisok=record raion:string; p_p,nom,kol_uch,neusp,otl_hor:integer; end; Var k,i:integer;sum:real; sp:spisok;Ot:char; sp1:array [1..50] of spisok; pr:array [1..50] of real; F:file of spisok; F1:text; max:real; begin clrscr; assign(F,'d:\kurs.dat'); reset(F); Writeln('Zapisat v fail? Y/N'); Readln(Ot); If (Ot='Y') or (Ot='y') then assign (F1,name) else assign (F1,'con'); Rewrite(F1); Writeln(F1,' Svedeniya o shkolah raionov'); k:=0; For i:=1 to 77 do write(F1,'-'); writeln(F1); Writeln(F1,'| raion |nom_p/p|nom_shkoli|kol uch|kol neusp uch|otl i hor|procent|'); For i:=1 to 77 do write(F1,'-'); writeln(F1); While not eof(F) do begin Read(F,sp); begin if sp.raion='oktyabrskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='centralnii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='zaelcovskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='sovetskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='pervomaiskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='kalininskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='leninskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='dzerzhinskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='zheleznodorozhnii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end; if sp.raion='kirovskii' then begin k:=k+1; sp1[k]:=sp; pr[k]:=sp.otl_hor/sp.kol_uch*100; end;
end; end; For i:=1 to k do with sp1[i] do begin write(F1,'|', raion:12 ,'|',p_p:7,'|',nom:10,'|'); writeln(F1,kol_uch:7,'|',neusp:13,'|',otl_hor:9,'|',pr[i]:7:2,'|'); end; For i:=1 to 77 do write(F1,'-'); writeln(F1); Close(F1);Readln; close(F) end.
ko1hoz
25.05.2007 2:38
Сделал, можно тему закрыть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.