• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Собрать в файле g сведения о лучших учениках школы

shkolnik

Новые
Регистрация
22 Июн 2014
Сообщения
18
Реакции
0
Баллы
0
Собрать в файле g сведения о лучших учениках школы

Дан файл f, содержащий сведения об учениках. Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится и отметки полученные учеником в последней четверти. Собрать в файле g сведения о лучших учениках школы, т.е. об учениках, не имеющих отметок ниже 4 и по сумме баллов не уступающих другим ученикам своего и параллельных классов.
 
Ответ традиционный: тыц!
 
Попробовал сделать по шаблону, но не знаю как сделать вывод нескольких учеников и как вывести сумму баллов
 
Попробовал сделать по шаблону, но не знаю как сделать вывод нескольких учеников и как вывести сумму баллов
Выкладывайте свои наработки - посмотрим. И ОБЯЗАТЕЛЬНО входной файл f, можно в текстовом виде.
 
Наверно самый идиотский набросок, ну как то так
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.
 
Нет-нет, такие задачи решаются через тип "запись" ("record") и организацию массива записей. Кроме того, я просил Вас показать, как Вы представляете себе вид исходного файла. Чтобы было видно где, что и в каком порядке расположено.

Кроме того, если Вы используете команду Readkey, то будьте любезны поставить в начале uses CRT; , потому что это команда модуля CRT.
 
Вот есть еще такой
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 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.

это опираясь на тему в первом сообщении
 
Вот есть еще такой
Уже лучше. Правда, обычно в таких случаях тип вводят отдельно, т.е. так:
Код:
Type 
 Stud=Record
       Lastname:string;
       Name:string;
       Klass:Word;
       Mark:Word;
      end;
Var
 Student:Array[1..N] of Stud;
И в третий (и последний) раз повторяю: покажите пример исходного файла! Т.е. список, содержащий фамилии учеников, класс и оценки.
Тогда можно будет продолжить. Но только завтра. А если указанный перечень так и не появится, то - извините, ничем не могу помочь.
 
1 Ученик
Фамилия: Иванов
Имя: Иван
Класс: 5А
Оценка: 5

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

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

4 Ученик
Фамилия: Козлов
Имя: Олег
Класс: 5А
Оценка: 5
Единственное ни как не могу сообразить, как сделать несколько оценок (которые получены за четверть)
 
Сразу скажу: с таким файлом работать ОЧЕНЬ трудно. Предлагаю такой вариант:

Иванов
Иван

5 4 3 4 3 5

Петров
Петр

4 4 3 4 3 3

и т.д.



Количество оценок целесообразно задать в виде константы (напр. Nm = 6). Как их считать - поясню. Но не сегодня.
 
Хорошо, повожусь я с Вашей задачкой, только вот обнаружил, что вот этого:
и по сумме баллов не уступающих другим ученикам своего и параллельных классов.
напрочь не понимаю! Каким "другим ученикам"? Всем? Или имеется в виду выше средней суммы? Допустим, нашли мы ученика с максимальной суммой баллов, например, круглого отличника. Тогда все "хорошисты", естественно, будут ему уступать. Как быть?
 
Так, ну поскольку разъяснений по поводу вышеуказанного мутного условия не последовало, ограничимся пока частью задачи:
Дан файл f, содержащий сведения об учениках. Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится и отметки полученные учеником в последней четверти. Собрать в файле g сведения о лучших учениках школы, т.е. об учениках, не имеющих отметок ниже 4
Код:
Const
 Nm=6;

Type
 Pup=Record
      Surname, Name, Class:String;
      Ball:Array[1..Nm] of Byte;
     end;

Var
 f,g:Text;
 Pupil:Array[1..100] of Pup;
 i,j,N:byte;
 b:boolean;

Begin
 Assign(f,'D:\Data.txt');
 Reset(f);
 N:=0;
 Repeat
  Inc(N);
  with Pupil[N] do
   begin
    Readln(f,Surname);
    Readln(f,Name);
    Readln(f,Class);
    for j:=1 to Nm do read(f,Ball[j]);
    Readln(f);
   end;
  if not EoF(f) then readln(f);
 Until EoF(f);
 Close(f);
 Writeln('Full list of pupils:');
 for i:=1 to N do
  with Pupil[i] do
   begin
    write(Surname:15,Name:10,Class:4);
    for j:=1 to Nm do write(Ball[j]:4);
    writeln;
   end;
 writeln;
 Assign(g,'D:\Result.txt');
 Rewrite(g);
 Writeln('List of pupils having no marks less then 4:');
 for i:=1 to N do
  with Pupil[i] do
   begin
    b:=true;
    for j:=1 to Nm do
     if Ball[j]<4 then b:=false;
    if b then
     begin
      writeln(g,Surname);
      writeln(g,Name);
      writeln(g,Class);
      for j:=1 to Nm do write(g,Ball[j],' ');
      writeln(g);
      writeln(g);
      write(Surname:15,Name:10,Class:4);
      for j:=1 to 6 do write(Ball[j]:4);
      writeln;
     end;
   end;
 Close(g);
 Readln
End.

К сожалению, с использованием кириллицы у меня некие сложности, связанные с кодировкой, поэтому использована латиница (англ. яз.). Поправьте, если надо. Кроме того, имена файлов и пути к ним тоже можете поставить свои.
 

Вложения

  • Pup_1.webp
    Pup_1.webp
    12.3 KB · Просмотры: 71
  • Pup_2.webp
    Pup_2.webp
    11.9 KB · Просмотры: 65
  • Pup_3.webp
    Pup_3.webp
    7.6 KB · Просмотры: 72
про условие вы правы, скорее всего нужно просто найти круглого отличника. Спасибо большое вам за помощь!
 
Назад
Сверху