Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 31.10.2011, 20:24   #1 (permalink)
Alexander9458
Новичок
 
Регистрация: 08.06.2011
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation Помогите сделать одну процедуру

Задача
В файле содержится информация об итогах сессии
Фамилия студента
Группа
Оценка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(вывод названия предмета который был сдан лучше всего)
заранее спасибо.
Alexander9458 вне форума   Ответить с цитированием

Старый 31.10.2011, 20:24
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я отправлю вам похожие топики, они могут вам помочь

На компьютере две ОС, как удалить одну из них?
Двумерные массивы через процедуру
Экран гаснет на одну-две секунды.
Паскаль. Как создать процедуру с БЗ?

Старый 31.10.2011, 22:03   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Alexander9458 Посмотреть сообщение
так вот нужно написать вего лишь процедуру 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.
Vladimir_S вне форума   Ответить с цитированием
Старый 02.11.2011, 15:16   #3 (permalink)
Mr.П 2.0
Member
 
Регистрация: 16.03.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11
По умолчанию

Цитата:
написать программу которая вводит эту информацию и выводит следующие данные: вывести название предмета который был сдан лучше всего
Код:
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 вне форума   Ответить с цитированием
Старый 02.11.2011, 19:42   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, ну опять на мою голову свалилось ЭТО...

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

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

В общем, опять старая песня - "смотрите, какой я молодец!". Подозреваю, что и итог будет тем же, что и в прошлые разы. Прискорбно.
Vladimir_S вне форума   Ответить с цитированием
Старый 03.11.2011, 06:10   #5 (permalink)
Mr.П 2.0
Member
 
Регистрация: 16.03.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 03.11.2011, 06:55   #6 (permalink)
Fenix
404
 
Аватар для Fenix
 
Регистрация: 10.01.2010
Сообщений: 1,749
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3868
По умолчанию

2 Мr.П 2.0:

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

Я так понимаю школота на каникулах и не знает чем заняться?.
Fenix вне форума   Ответить с цитированием
Старый 03.11.2011, 09:10   #7 (permalink)
Mr.П 2.0
Member
 
Регистрация: 16.03.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 11
По умолчанию

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

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

Цитата:
лучше послушали умного человека, который программирует не первый год
Может он и умнее меня, но я слушаю только одного программиста и Vladimir_S
точно не он.
Mr.П 2.0 вне форума   Ответить с цитированием
Старый 03.11.2011, 09:56   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Mr.П 2.0 Посмотреть сообщение
Думайте у всех есть диск D?
Вообще-то я обычно делаю приписку типа "имя файла и путь, естественно, поставьте свои". В этот раз такой фразы не написал.
Цитата:
Сообщение от Mr.П 2.0 Посмотреть сообщение
И Windows с радостью откроет файл без расширения?
Стоя, лёжа и "с колена". Да почему бы и нет?
Цитата:
Сообщение от Mr.П 2.0 Посмотреть сообщение
Может он и умнее меня, но я слушаю только одного программиста и Vladimir_S точно не он.
Ну что же, несколько заслуг авторитетного мэтра я вижу: во-первых, выучено правописание слова "программист", а во-вторых, представленная программа по крайней мере отлажена. Если Вашему Гуру удалось сделать то, в чем я в своё время потерпел поражение - а именно, вдолбить в Вас, что выкладывать сырые неотлаженные программы неприлично, то честь ему и хвала.
Vladimir_S вне форума   Ответить с цитированием
Старый 03.11.2011, 15:05   #9 (permalink)
Fenix
404
 
Аватар для Fenix
 
Регистрация: 10.01.2010
Сообщений: 1,749
Записей в дневнике: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3868
По умолчанию

Неа, Владимир, не научился он выкладывать отлаженые программы. Доказательство сему лежит в соседней ветке в теме "строки".
Fenix вне форума   Ответить с цитированием
Старый 03.11.2011, 15:24   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Fenix Посмотреть сообщение
Неа, Владимир, не научился он выкладывать отлаженые программы. Доказательство сему лежит в соседней ветке в теме "строки".
Да ну его совсем! Жаль, я в С не пишу - задачка-то там пустячная...
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.