Нужно создать файл, состоящий из 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:fileof spisok;
begin
assign (F,'d:\kurs.dat');
rewrite (F);
for i:=1to n dobeginwith sp dobegin
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;
Constname='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:fileof 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:=1to77do write(F1,'-');
writeln(F1);
Writeln(F1,'| raion |nom_p/p|nom_shkoli|kol uch|kol neusp uch|otl i hor|procent|');
For i:=1to77do write(F1,'-');
writeln(F1);
Whilenot eof(F) dobegin
Read(F,sp);
With sp dobeginif raion='oktyabrskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='centralnii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='zaelcovskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='zheleznodorozhnii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
if raion='kirovskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='pervomaiskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='kalininskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
if raion='leninskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='dzerzhinskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
if raion='sovetskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/kol_uch*100;
end;
end;
end;
end;
For i:=1to k dowith sp1[i] dobegin
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:=1to77do 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;
Constname='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:fileof 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:=1to77do write(F1,'-');
writeln(F1);
Writeln(F1,'| raion |nom_p/p|nom_shkoli|kol uch|kol neusp uch|otl i hor|procent|');
For i:=1to77do write(F1,'-');
writeln(F1);
Whilenot eof(F) dobegin
Read(F,sp);
beginif sp.raion='oktyabrskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='centralnii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='zaelcovskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='sovetskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='pervomaiskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='kalininskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='leninskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='dzerzhinskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='zheleznodorozhnii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
if sp.raion='kirovskii'thenbegin
k:=k+1;
sp1[k]:=sp;
pr[k]:=sp.otl_hor/sp.kol_uch*100;
end;
end;
end;
For i:=1to k dowith sp1[i] dobegin
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:=1to77do write(F1,'-');
writeln(F1);
Close(F1);Readln;
close(F)
end.
ko1hoz
25.05.2007 2:38
Сделал, можно тему закрыть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.