![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
ko1hoz |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Нужно создать файл, состоящий из 20 записей.
-Район; -№школы; -количество учеников; -количество неуспевающих учеников; -количество отличников и хорошистов. Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший. Информацию выводить, отсортировав по наименованию района. Файл то я конечно создал. А вот в остальном запутался. Много что-то условий. Помогите пожалуйста. Напишите хотя бы примерный алгоритм действий, а дальше думаю сам разберусь. |
Артемий |
![]()
Сообщение
#2
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Цитата Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший. А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой" Сообщение отредактировано: Артемий - 14.05.2007 20:19 -------------------- Dum spiro spero!
|
Renbo |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 86 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сортировку зри тут: сортировка записей
|
ko1hoz |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой" Ну это я незнаю, но я так понял нужно высчитать процент этих самых отличников в каждой школе и потом вывести тока школы с наибольшим процентом от каждого района. |
ko1hoz |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Вот так собственно я создаю файл
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 - 15.05.2007 12:24 |
ko1hoz |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Нуу
![]() |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Проясни ситуацию, плз..
Вот у тебя длинный набор операторов if идет в проге (по названиям районов). Но в каждом таком if'е ты делаешь абсолютно одно и то же. Спрашивается: зачем тебе эти "иф"ы? И еще: прикрепи, пожалуйста, файл с данными (запакуй в архив и приаттач). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
ko1hoz |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Проясни ситуацию, плз.. Вот у тебя длинный набор операторов if идет в проге (по названиям районов). Но в каждом таком if'е ты делаешь абсолютно одно и то же. Спрашивается: зачем тебе эти "иф"ы? И еще: прикрепи, пожалуйста, файл с данными (запакуй в архив и приаттач). Ну как бы считаю процент отличников для каждой школы в данном районе и соответственно переписываю в массив. P.S. Прикрепил данные, там 5 школ из 3ёх районов с произвольно введёнными данными. Соответственно в результате должно получится 3 школы. Прикрепленные файлы ![]() |
Гость |
![]()
Сообщение
#9
|
Гость ![]() |
осталась 1 неделя до сдачи
![]() |
ko1hoz |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
|
ko1hoz |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Подскажите пожалуйста, вот программа а также файл с данными. В итоге у меня выводятся все школы районов (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 |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Сделал, можно тему закрыть.
|
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 14:47 |