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

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

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

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

Помогите сделать одну процедуру

Alexander9458

Ученик
Регистрация
8 Июн 2011
Сообщения
7
Реакции
0
Баллы
0
Помогите сделать одну процедуру

Задача
В файле содержится информация об итогах сессии
Фамилия студента
Группа
Оценка1(математика)
Оценка2(история)
Оценка3(биология)
написать программу которая вводит эту информацию и выводит следующие данные: вывести название предмета который был сдан лучше всего

Короче я написал часть программы:
Uses crt;
Type itogi=record
soname:string[20];
groop:string[10];
math:string[2];
history:string [2];
biology:string[2];
end;
var f:file of itogi;
x:char;

procedure vvod;
Var k:itogi;
begin
reset(f);
while not(eof(f)) do read(d,k);
write('введите фамилию');
readln(k.soname);
write('введите группу');
readln(k.groop);
write('оценка по математике');
readln(k.math);
write('оценка по истории');
readln(k.history');
write('Оценка по биологии');
readln(k.biology);
write(f,k);
close(f);
end;

procedure vivod;
Var k:itogi;
begin
reset(f);
while not(eof(f)) do
begin
read(f,k);
writeln(k.soname:20,k.groop:5,k.math:2,k:history:2,k.biology:2);
end;
close(f);
readln;
end;

procedure best;
...

begin
1:label;
assign(f,'.....');
rewrite(f);
close(f);
1:clrscr;
writeln('Меню');
writeln('1.Ввод');
writeln('2.Вывод');
writeln('3.Лучший предмет');
writeln('0.Выход');
writeln('Ваш выбор');
readln(x);
case x of
'1':begin vvod; goto1;end;
'2':begin vivod; goto1;end;
'3':begin best; goto1;end;
'0':exit;else goto1 ;end;
end.

так вот нужно написать вего лишь процедуру best(вывод названия предмета который был сдан лучше всего)
заранее спасибо.
 
так вот нужно написать вего лишь процедуру best(вывод названия предмета который был сдан лучше всего) заранее спасибо.
Ну, положим, этим ограничиться не удалось, в виду большого количества ошибок. Исправил. Кроме того:
1. Убрал кириллицу - это просто чтобы путаться с кодировками. Восстановите, если надо.
2. Убрал метки, и НАСТОЯТЕЛЬНО рекомендую забыть о них. Применение меток - дурной стиль программирования.
3. Исправил ошибки в англоязычных идентификаторах.
4. Кое-что оптимизировал.

Вот работающий код:
Код:
Uses crt;
Const
 Name:Array[1..3] of String=('mathematics','history','biology');
Type itogi=record
 surname:string[20];
 group:string[10];
 marks:Array[1..3] of byte;
end;
var
 f:file of itogi;
 Nst,x:byte;

procedure vvod;
Var
 k:itogi;
 yn:Char;
begin
 rewrite(f);
 Nst:=0;
 Repeat
  Inc(Nst);
  writeln('Enter the surname:');
  readln(k.surname);
  writeln('Enter the group:');
  readln(k.group);
  write('Mark on mathematics: ');
  readln(k.marks[1]);
  write('Mark on history: ');
  readln(k.marks[2]);
  write('Mark on biology: ');
  readln(k.marks[3]);
  write(f,k);
  write('Continue (Y/N) ');
  Readln(yn);
  writeln;
 Until (yn='n') or (yn='N');
 writeln;
 close(f);
end;

procedure vivod;
Var
 k:itogi;
 v,w:byte;
begin
 reset(f);
 for v:=1 to Nst do
 begin
  read(f,k);
  write(k.surname:20,'  ',k.group:10,'  ');
  for w:=1 to 3 do write(k.marks[w]:3);
  writeln;
 end;
 close(f);
 readln;
end;

procedure best;
Var
 k:itogi;
 v,w,num,max:byte;
begin
 reset(f);
 for v:=1 to Nst do
 begin
  read(f,k);
  max:=k.marks[1];
  num:=1;
  for w:=2 to 3 do
   if k.marks[w]>max then
    begin
     max:=k.marks[w];
     num:=w;
    end;
  writeln(k.surname:20,'  ',k.group:10,'  best - ',Name[num]);
 end;
 close(f);
 readln;
end;

BEGIN
 assign(f,'D:\Stud');
 Repeat
  clrscr;
  writeln('Choose:');
  writeln('1 - Input');
  writeln('2 - Output');
  writeln('3 - Best marks');
  writeln('0 - Quit');
  readln(x);
  case x of
   1: vvod;
   2: vivod;
   3: best;
  end;
 Until x=0;
END.
 
написать программу которая вводит эту информацию и выводит следующие данные: вывести название предмета который был сдан лучше всего
Код:
type
student=record
fam:string[30];
groop:string[40];
math,histor,biol:1..5;
end;
procedure vvod (var k:student; var f:text);
begin
Writeln('Vvedite familiy');
readln(k.fam);
writeln('Vvedite groopy');
readln(k.groop);
repeat
writeln('Vvedite ocenky po math, histor and biology');
readln(k.math,k.histor,k.biol);
until ((k.math in [2..5]) and (k.histor in [2..5]) and (k.biol in [2..5]));
writeln(f,k.fam);
writeln(f,k.groop);
writeln(f,k.math);
writeln(f,k.histor);
writeln(f,k.biol);
end;
procedure vivod(var k:student);
begin
Writeln(k.fam,' ',k.groop,' ',k.math,' ',k.histor,' ',k.biol);
end;
procedure best(var k:student);
begin
if ((k.math>k.histor) and (k.math>k.biol))
then Writeln('Best math ',k.math,' ballov')
else if ((k.histor>k.math) and (k.histor>k.biol))
then Writeln('Best histor ',k.histor,' ballov')
else if ((k.biol>k.histor) and (k.biol>k.math))
then Writeln('Best biology ',k.biol,' ballov')
else Writeln('Best net!!!');
end;
Var k:student; f:text; filename:string;
begin
Writeln('Vvedite ima faila');
readln(filename);
assign(f,filename+'.txt');
rewrite(f);
vvod(k,f);
vivod(k);
best(k);
close(f);
readln;
end.
 
Так, ну опять на мою голову свалилось ЭТО...

MrП_2.0, Вы действительно уверены, что написали программу лучшую, чем я? Если так, то не сочтите за труд ответить на несколько вопросов:

1. Моя программа обрабатывает данные по практически неограниченному количеству студентов, Ваша - только по одному студенту. Смысл?
2. Вы заменили типизированный файл текстовым - зачем? Потому что не умеете работать с типизированными файлами?
3. У заказчика, а также в моей программе, предусмотрен вывод меню с возможностью выбора позиции - Вы заменили этот сервис простым последовательным перебором процедур. Почему? Всё с оператором выбора (Case) разобраться не можете?

В общем, опять старая песня - "смотрите, какой я молодец!". Подозреваю, что и итог будет тем же, что и в прошлые разы. Прискорбно.
 
1) Да смысла нет.
2) Умею, но я захотел использовать обычный текстовой.
3) Зачем делать меню если все надо делать последовательно, пока не введешь данные программа ничего выводить не будет. (Вылетит с ошибкой о не нахождении файла).
Код:
assign(f,'D:\Stud');
Думайте у всех есть диск D? И Windows с радостью откроет файл без расширения?
 
2 Мr.П 2.0:

1)Научитесь оформлять код.
2)Если у автора было меню, значит оно было нужно
3)Windows данный фаил без разрешения прекрасно откроет через любой текстовый редактор.
4)Когда вы научитесь слушать критику? Вместо того, чтоб орать какой вы крутой программист (а это ооочень спорно) лучше послушали умного человека, который программирует не первый год и, однозначно, лучше вас.
Слушайте старших и более опытных людей, блин, вам же пытаются помочь!

Я так понимаю школота на каникулах и не знает чем заняться?.
 
Я так понимаю школота на каникулах и не знает чем заняться?
Рот закрой

орать какой вы крутой программист
Мда, если написание программы это значит кричать, что ты крутой программист, то мне жаль этот форум.

лучше послушали умного человека, который программирует не первый год
Может он и умнее меня, но я слушаю только одного программиста и Vladimir_S
точно не он.
 
Думайте у всех есть диск D?
Вообще-то я обычно делаю приписку типа "имя файла и путь, естественно, поставьте свои". В этот раз такой фразы не написал.
И Windows с радостью откроет файл без расширения?
Стоя, лёжа и "с колена". Да почему бы и нет?
Может он и умнее меня, но я слушаю только одного программиста и Vladimir_S точно не он.
Ну что же, несколько заслуг авторитетного мэтра я вижу: во-первых, выучено правописание слова "программист", а во-вторых, представленная программа по крайней мере отлажена. Если Вашему Гуру удалось сделать то, в чем я в своё время потерпел поражение - а именно, вдолбить в Вас, что выкладывать сырые неотлаженные программы неприлично, то честь ему и хвала.
 
Неа, Владимир, не научился он выкладывать отлаженые программы. Доказательство сему лежит в соседней ветке в теме "строки".
 
Неа, Владимир, не научился он выкладывать отлаженые программы. Доказательство сему лежит в соседней ветке в теме "строки".
Да ну его совсем! Жаль, я в С не пишу - задачка-то там пустячная...
 
Сейчас сделаем все)
 
Назад
Сверху