Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Собрать в файле g сведения о лучших учениках школы (http://www.tehnari.ru/f43/t97111/)

shkolnik 22.06.2014 14:04

Собрать в файле g сведения о лучших учениках школы
 
Дан файл f, содержащий сведения об учениках. Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится и отметки полученные учеником в последней четверти. Собрать в файле g сведения о лучших учениках школы, т.е. об учениках, не имеющих отметок ниже 4 и по сумме баллов не уступающих другим ученикам своего и параллельных классов.

Vladimir_S 22.06.2014 14:12

Ответ традиционный: тыц!

shkolnik 22.06.2014 18:13

Попробовал сделать по шаблону, но не знаю как сделать вывод нескольких учеников и как вывести сумму баллов

Vladimir_S 22.06.2014 19:30

Цитата:

Сообщение от shkolnik (Сообщение 1042763)
Попробовал сделать по шаблону, но не знаю как сделать вывод нескольких учеников и как вывести сумму баллов

Выкладывайте свои наработки - посмотрим. И ОБЯЗАТЕЛЬНО входной файл f, можно в текстовом виде.

shkolnik 22.06.2014 21:47

Наверно самый идиотский набросок, ну как то так
var f: text;
Lastname: string;
Name: string;
Klass: string;
Mark:integer;
n,i,k: integer;

begin
assign(f,filename);
reset(f);

writeln('Ученик:');
k := 0;
readln(f,n);
for i := 1 to n do
begin
readln(Lastname);
readln(Name);
readln(Klass);
readln(Mark);
if (Mark > 4) then {}
begin
if Mark = then

close(f);
readkey;
end.

Vladimir_S 22.06.2014 22:03

Нет-нет, такие задачи решаются через тип "запись" ("record") и организацию массива записей. Кроме того, я просил Вас показать, как Вы представляете себе вид исходного файла. Чтобы было видно где, что и в каком порядке расположено.

Кроме того, если Вы используете команду Readkey, то будьте любезны поставить в начале uses CRT; , потому что это команда модуля CRT.

shkolnik 22.06.2014 22:05

Вот есть еще такой
const
N=4;
var
Student:Array[1..N] of Record
Lastname:string;
Name:string;
Klass:Word;
Mark:Word;
end;
i,i0:integer;
Rate:integer;
Begin
Rate:=4;
For i:=1 to N do
With Student[i] do
begin
Writeln(i,' Ученик');
Write('Фамилия: ');
Readln(Lastname);
Write('Имя: ');
Readln(Name) ;
Write('Класс: ');
Readln(Klass);
Write('Оценка: ');
Readln(Mark);
Writeln;
If Mark>Rate then
begin
i0:=i;
Rate:=Mark;
end;
end;
Writeln('Лучшиие ученики:');
With Student[i0] do
begin
Writeln('Name: ',Name);
Writeln('Lastname: ',Lastname);
Writeln('Klass: ',Klass);
Writeln('Mark: ',Mark);
end;
readln;
End.

это опираясь на тему в первом сообщении

Vladimir_S 22.06.2014 22:21

Цитата:

Сообщение от shkolnik (Сообщение 1042809)
Вот есть еще такой

Уже лучше. Правда, обычно в таких случаях тип вводят отдельно, т.е. так:
Код:

Type
 Stud=Record
      Lastname:string;
      Name:string;
      Klass:Word;
      Mark:Word;
      end;
Var
 Student:Array[1..N] of Stud;

И в третий (и последний) раз повторяю: покажите пример исходного файла! Т.е. список, содержащий фамилии учеников, класс и оценки.
Тогда можно будет продолжить. Но только завтра. А если указанный перечень так и не появится, то - извините, ничем не могу помочь.

shkolnik 22.06.2014 22:30

1 Ученик
Фамилия: Иванов
Имя: Иван
Класс: 5А
Оценка: 5

2 Ученик
Фамилия: Петров
Имя: Петр
Класс: 9В
Оценка: 4

3 Ученик
Фамилия: Соколов
Имя: Алексей
Класс: 6А
Оценка: 3

4 Ученик
Фамилия: Козлов
Имя: Олег
Класс: 5А
Оценка: 5
Единственное ни как не могу сообразить, как сделать несколько оценок (которые получены за четверть)

Vladimir_S 22.06.2014 22:43

Сразу скажу: с таким файлом работать ОЧЕНЬ трудно. Предлагаю такой вариант:

Иванов
Иван

5 4 3 4 3 5

Петров
Петр

4 4 3 4 3 3

и т.д.



Количество оценок целесообразно задать в виде константы (напр. Nm = 6). Как их считать - поясню. Но не сегодня.


Часовой пояс GMT +4, время: 20:35.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.