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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2015, 20:04   #1
qwerty2106
Новичок
Джуниор
 
Регистрация: 07.06.2015
Сообщений: 2
По умолчанию Ввести два файла F1, F2. Найти максимальные значения в каждом файле. В каждом файле заменить компоненты

Помогите исправить программу.

Ввести два файла F1, F2. Найти максимальные значения в каждом файле. В каждом файле заменить компоненты, расположенные после максимального, на значение максимума другого файла. Файлы отпечатать. Подпрограммы: ввод файла, поиск максимума и его местоположения, преобразование файла, вывод файла.


Код:
program zd1;
var
 F1: file of integer;
F2: file of integer;
b1,b2,max1,max2,p1,p2,p:integer;
 
 Procedure vvod (var g:file of integer);
   var c:integer;
   begin
    writeln('Ввод файла');
     rewrite(g);
    readln(c);
    while c<>12345 do
     begin
       write(g,c);
       readln(c);
     end;
    close(g);
    end;
    
procedure poiskmax(var h:file of integer;var max,p:integer);
 var b:integer;
   begin 
    reset(h);
      max:=b;
     while NOT EOF(h) do
    begin
    read(h,b);
    if b>max then
     max:=b;
     p:=filepos(h);
     end;
     writeln('p= ',p);
   close(h);
   
   end; 
   
procedure zamena(var h:file of integer;b:integer);
   begin
   reset(h);
    while NOT EOF(h) do
    read(h,b);
    begin
      seek(h,p+1);
      write(h,b);
      end;
    close(h)
   end;
   
   Procedure vivod(f:file of integer);
   var b:integer;
   begin
   writeln('Вывод файла');
   reset(F);
     while NOT EOF(F) do
     begin
     read(F,b);
     writeln(b);
     end;
   close(F);
   end;
 
begin   
   assign(f1,'f1.dat');
   assign(f2,'f2.dat');
   vvod (f1);
   vvod (f2);
    poiskmax(f1,max1,p1);
   writeln('b1= ,p1= ',max1,p1);
   poiskmax (f2,max2,p2);
   writeln('b2= ,p2= ',max2,p2);
   zamena(f1,b2);
   zamena(f2,b1);
   vivod(f1);
   vivod(f2);
end.

Последний раз редактировалось Аватар; 07.06.2015 в 20:12.
qwerty2106 вне форума Ответить с цитированием
Старый 07.06.2015, 22:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

поиск с ошибкой написан.
1) не учитывается возможность пустого файла
2) нельзя использовать неиницилизирванную переменную b
3) p нужно присваивать только если очередное значение больше максимума (у вас нет операторных скобок begin / end после if b>max then ...)

я бы так написал:
Код:
procedure poiskmax(var h:file of integer;var max,p:integer);
var b:integer;
begin 
    reset(h);
    p := -1;
    while NOT EOF(h) do
      begin
        read(h,b);
        if (p<0) or (b>max) then begin
           max:=b;
           p:=filepos(h);
        end; 
     end;
     writeln('p= ',p);
   close(h);
end;
в процедуру замены ОБЯЗАТЕЛЬНО передавать и позицию максимума и значение максимума! ну и seek нужно сделать ОДИН раз, ДО ЦИКЛА:
Код:
   procedure zamena(var h:file of integer;max, position :integer);
   begin
    if position<0 then Exit;
    reset(h);
    seek(h, position+1);
    while Not EOF(h) do
         write(h, max);
    close(h)
   end;

да, и ещё, чтобы избежать случайного ошибочного использования глобальных переменных, сначала опишите все процедуры, потом - блок переменных var:
Код:
program zd1;
 
   Procedure vvod (var g:file of integer);
   ...
    
   procedure poiskmax(var h:file of integer;var max,p:integer);
   ...
   
   procedure zamena(var h:file of integer;max, position :integer);
   ...
   
   Procedure vivod(f:file of integer);
   ...

var
 f1, f2: file of integer;
 b1,b2,max1,max2,p1,p2,p:integer;
 
begin   
   assign(f1,'f1.dat');
   assign(f2,'f2.dat');
 ....
p.s. так как компилятор не указан, код я не проверял!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить в файле q все компоненты файла f являющиеся точными квадратами (Pascal) Ziner_Fisher Помощь студентам 2 02.12.2013 14:11
Поиск максимального значения в каждом столбце Mikl___ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 18.11.2011 05:57
Работа с файлами (найти и заменить в файле)) Смородинка Общие вопросы C/C++ 0 04.12.2010 18:08
Поиск данных в текстовом файле (в самом файле! а не в Memo и не загружая всю инфу из файла в одну строку glagoff Помощь студентам 1 05.05.2010 13:00