Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2009, 16:57   #1
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
Подмигивание Записи. Задача-1 штука.

Помогите исправить программку на тему: Записи!
Вот задачка: Ведомость содержит следующие сведения о сдавших вступительные экзамены: Ф.И.О., оценки по отдельным дисциплинам.Вывести на экран фамилии абитуриентов, имеющих средний балл 4,5 и выше, и их количество.
Код:
Uses crt;
 Type
   vedomost=record
    FIO: string [20];
    Matematika: byte;
    Fizika: byte;
    Istoriya: byte;
    Ball: byte;
   end;
Var
  F:text;
  F1:file of vedomost;
  p: vedomost;
Procedure CreateArchive;
Var
  M,F,I:byte;
Begin
  Reset(F);
  Rewrite(F1);
  While not eof (F) do
  With P do
  Begin
     Readln (F,FIO,Matematika,Fizika,Istoriya,Ball);
     if Matematika > 4.5 then M:=0
     else M:=Matematika;
     if Fizika > 4.5 then F:=0
     else F:=Fizika;
     if Istoriya > 4.5
     else I:=Istoriya;
     Ball:=trunc((M+F I)/3);
     Write(F1,P);
  end;
  Close(F);
  Close(F1);
  Writeln ('ENTER!');
  readln;
end;
Procedure WriteArchive;
Var
  i:integer
Begin
  Reset(F1);
  Writeln('Resultati');
  Writeln('_____________________________________');
  Writeln(':FIO:Matematika:Fizika:Istoriya:Ball:');
  Writeln('_____________________________________');
  While not eof (F1) do
begin
    Read(F1,P);
    With P do
    Writeln(':', FIO, ':',Matematika,':',Fizika,':',Istoriya,':',Ball,':');
end;
  writeln('_____________________________________');
  Close(F1);
  writeln('ENTER');
  readln;
End;
Procedure Sr_Ball;
Var
  n,k,i,j:integer;
  Sr:byte;
Begin
  Reset(F1);
  i:=0;
  n:=filesize(f1)-1;
  k:=0;
  while i<=n do
  Begin
       seek(f1,i);
       read(F1,P);
       with p do
            if Ball=0 then
            begin
                for j:=i to n-1 do
                begin
                     seek(f1,j 1);
                     read(f1,p);
                     seek(f1,j);
                     write(f1,p);
                end;
                seek(f1,n);
                truncate(f1);
                n:=n-1;
                k:=k 1;
              end
              else i:=i 1;
   end;
   Close(F1);
   writeln('proizoshlo udalenie zapisei dlya abiturintov so srednim ballom,menshe 4.5 ');
   writeln('udaleno,'k',zapisei');
   writeln('ostalos,'n',zapisei');
   readln;
   writeln('ENTER!');
end;
Procedure U_Ball;
Var
  s,k,i:integer;
  r,b:stud;
begin
  Reset(F1);
  for k:=0 to filesize(f1)-2 do
  begin
      for i:=0 to filesize(f1)-k-2 do
      begin
          seek (f1,i);
          read (f1,p);
          seek (f1,i 1);
          read (f1,r);
          if p.ball<r.ball then
          begin
              b:=p;
              seek (f1,i);
              write(f1,r);
              seek (f1,i 1);
              write(f1,b);
          end;
      end;
 end;
 writeln('proizvedeno uporyadochivanie zapisei po srednemu ballu!');
 writeln('ENTER');
 readln;
end;
Begin
  Assign(F1,'st.dat');
  Assign(F,'stud.txt');
  CreateArchive;
  WriteArchive;
  Sr_Ball;
  WriteArchive;
  U_Ball;
  WriteArchive;
end.
Т.к. я новичок в программировании, "собирала" эту программу из нескольких, беря из разных книжек. Поэтому она такая длинная <_< . Если знаете как решить проще напишите, пожалуйста!

Последний раз редактировалось maliyusha; 23.02.2009 в 17:51.
maliyusha вне форума Ответить с цитированием
Старый 23.02.2009, 17:00   #2
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
По умолчанию

Забыла написать, программа не работает
maliyusha вне форума Ответить с цитированием
Старый 23.02.2009, 17:23   #3
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

хорошим тоном в программировании считается использование отступов
например вместо
Код:
begin
for i:=1 to 2 do
begin
writeln;
end;
dosmth;
end.
лучше написать
Код:
begin
	for i:=1 to 2 do
	begin
		writeln;
	end;
	dosmth;
end.
И сразу понятно что к какому блоку относится.
+ исправьте синтаксические ошибки например "Whth P do" (такого вроде в паскале нет)
XeN0N вне форума Ответить с цитированием
Старый 23.02.2009, 17:31   #4
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
По умолчанию

Ладно, сейчас исправлю
maliyusha вне форума Ответить с цитированием
Старый 23.02.2009, 17:54   #5
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
По умолчанию

Так лучше? Я с блокнота копировала, поэтому все было в столбик, а так в программе в правильном варианте
maliyusha вне форума Ответить с цитированием
Старый 23.02.2009, 17:59   #6
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
По умолчанию

Ну воть XeN0N меня покинул ((
maliyusha вне форума Ответить с цитированием
Старый 23.02.2009, 18:21   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Procedure CreateArchive;
Цитата:
Код:
Var
  M,F,I:byte;
Begin
  Reset(F);
Нельзя использовать переменную F типа byte, раз уж Вы используете глобальную файловую переменную F (:text);
Внутри процедур используйте переменную, например Fiz
дальше пропущен then ...

и дальше пропущены знаки + (или - ):
Цитата:
Код:
          seek(f1,j 1);

          k:=k 1;

          else i:=i 1;
          
          seek (f1,i 1);
          
          seek (f1,i 1);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.02.2009, 18:23   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от maliyusha
Забыла написать, программа не работает
Это называется - не "не работает"!
Это называется - программа НЕ КОМПИЛИРУЕТСЯ!
до работы тут дело ещё не дошло!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.02.2009, 18:24   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот мне кажется условие задачи примитивное, но Вы и типизированные файлы привлекли и работу с ними и вывод в таблицу и еще черт те что. Вы можете написать то условие, которое Вам конкретно задано? Мне кажется задачка очень простая, а Вы искусственно ее усложнили. Если из Вашего кода выкинуть процентов 70, то получится то, что надо.
puporev вне форума Ответить с цитированием
Старый 23.02.2009, 18:25   #10
maliyusha
Пользователь
 
Аватар для maliyusha
 
Регистрация: 23.12.2008
Сообщений: 49
По умолчанию

Мда... наверно идея составить одну прогу из нескольких была ужасно глупой ;/
maliyusha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на записи quake1 Помощь студентам 5 07.03.2009 16:00
Задача на тему Записи leoneedka Паскаль, Turbo Pascal, PascalABC.NET 2 20.11.2008 21:50
задача на записи!!! Нана Паскаль, Turbo Pascal, PascalABC.NET 2 18.04.2008 12:36
DevExpress - Сильная штука Баламут Общие вопросы Delphi 6 20.04.2007 08:14