![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
ko1hoz |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Нужно создать файл, состоящий из 20 записей.
-Район; -№школы; -количество учеников; -количество неуспевающих учеников; -количество отличников и хорошистов. Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший. Информацию выводить, отсортировав по наименованию района. Файл то я конечно создал. А вот в остальном запутался. Много что-то условий. Помогите пожалуйста. Напишите хотя бы примерный алгоритм действий, а дальше думаю сам разберусь. |
Артемий |
![]()
Сообщение
#2
|
![]() Помощник капитана ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 601 Пол: Мужской Реальное имя: Артем Репутация: ![]() ![]() ![]() |
Цитата Так вот, надо вывести данные о школах каждого района, у которых процент качественной успеваемости наибольший. А начиная со скольки процентов отличников и хорошистов в сравнении со всеми учениками школа считается "успеваемой" Сообщение отредактировано: Артемий - -------------------- 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 - |
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 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Сделал, можно тему закрыть.
|
![]() ![]() |
![]() |
Текстовая версия | 15.04.2025 22:36 |