Помощь - Поиск - Пользователи - Календарь
Полная версия: Записи
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ko1hoz
Нужно создать файл, состоящий из 20 записей.
-Район;
-№школы;
-количество учеников;
-количество неуспевающих учеников;
-количество отличников и хорошистов.
Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший. Информацию выводить, отсортировав по наименованию района.

Файл то я конечно создал. А вот в остальном запутался. Много что-то условий. Помогите пожалуйста. Напишите хотя бы примерный алгоритм действий, а дальше думаю сам разберусь.
Артемий
Цитата
Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший.

А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой"
Renbo
Сортировку зри тут: сортировка записей
ko1hoz
Цитата(Артемий @ 15.05.2007 0:18) *

А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой"

Ну это я незнаю, но я так понял нужно высчитать процент этих самых отличников в каждой школе и потом вывести тока школы с наибольшим процентом от каждого района.
ko1hoz
Вот так собственно я создаю файл
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
Нуу rolleyes.gif
Lapp
Проясни ситуацию, плз..
Вот у тебя длинный набор операторов if идет в проге (по названиям районов). Но в каждом таком if'е ты делаешь абсолютно одно и то же. Спрашивается: зачем тебе эти "иф"ы?

И еще: прикрепи, пожалуйста, файл с данными (запакуй в архив и приаттач).
ko1hoz
Цитата(Lapp @ 17.05.2007 11:01) *

Проясни ситуацию, плз..
Вот у тебя длинный набор операторов if идет в проге (по названиям районов). Но в каждом таком if'е ты делаешь абсолютно одно и то же. Спрашивается: зачем тебе эти "иф"ы?

И еще: прикрепи, пожалуйста, файл с данными (запакуй в архив и приаттач).

Ну как бы считаю процент отличников для каждой школы в данном районе и соответственно переписываю в массив.
P.S. Прикрепил данные, там 5 школ из 3ёх районов с произвольно введёнными данными. Соответственно в результате должно получится 3 школы.
Гость
осталась 1 неделя до сдачи rolleyes.gif
ko1hoz
Цитата(Гость @ 18.05.2007 10:19) *

осталась 1 неделя до сдачи rolleyes.gif

изивине, от гостя написал.
ko1hoz
Подскажите пожалуйста, вот программа а также файл с данными. В итоге у меня выводятся все школы районов (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
Сделал, можно тему закрыть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.