Помощь - Поиск - Пользователи - Календарь
Полная версия: В файле переставить компоненты...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
dimaeyeore
Привет всем !! Помогите пожалуйста решить лабу:
Ввести с клавиатуры файл F действ. чисел. Компоненты файла, стоящие между наибольшим и наименьшим компонентом, переставить в обратном порядке. Выдать на печать преобразованный файл.
Умоляю 1.gif
Ozzя
Код
F:file of real;
...
{ Ввести файл }
...
ReWrite(f);
while (Не признак конца ввода } do
begin
  read(r);
  write(f,r);
end;
Найти макс. и мин. элементы - элементарная задача. Поищи на форуме.
Для упрощения файл можно считать в массив. Но можно и без него. Тогда при чтении чисел из файла запоминай номера позиций.

Поменять числа в файле:
Примерно так:
Код
for i:=1 to MaxPos to Minpos do
begin
  ...
seek(f,i);
read(i,r);
temp:=r;
seek(f,maxpos-i);
write(f,temp);
...
end;


Все вышесказанное для идеального случая, когда и макс. и мин. по одному.
dimaeyeore
Не знаю почему но прога не работает

program laba4;
Uses crt;
Type fl=file of real;
Var f:fl;
procedure zap(var f:fl);{##########################################}
Var n,i:integer;
a:real;
Begin
clrscr;
rewrite(f);
write('enter number of elements');
readln(n);
for i:=1 to n do
Begin
write('element#',i,'=');
readln(a);
write(f,a);
end;
close(f);
end;
procedure out(var f:fl);{##########################################}
Var a:real;
Begin
clrscr;
reset(f);
while not eof(f) do
Begin
read(f,a);
write(a:5:5,' ');
end;
end;
procedure oprpos(var f:fl; var imin,imax:integer);{###################}
Var max,min,a:real;
i:integer;
Begin
i:=0;
read(f,max);
min:=max; imax:=1;
imin:=imax;
while not eof(f) do
Begin
read(f,a); i:=i+1;
if a>max then
Begin
imax:=i;
max:=a;
end;
if a<min then
Begin
imin:=i;
min:=a;
end;
end;
end;
procedure preobr(var f:fl);{#########################################}
Var imin,imax,i:integer; max,min:integer;
a,b:real;
Begin
reset(f);
oprpos(f,imin,imax);
if imax>imin then
Begin
max:=imax; min:=imin;
end;
if imin>imax then
Begin
max:=imin; min:=imax;
end;
while (min+i<max-i) do
Begin
seek(f,min+i);
read(f,a);
seek(f,max-i);
read(f,b);
seek(f,min+i);
write(f,b);
seek(f,max-i);
write(f,a);
end;
close(f);
end;
Begin
assign(f,'t.txt');
zap(f);
out(f);
preobr(f);
readkey;
end.


 ! 
Ты сам что, кнопку "CODE" нажать не можешь? Или ты считаешь, что тебе мало того, что программу исправлять, так еще и все посты править модераторы должны? dry.gif

volvo
while (min+i<max-i) do
Begin ...


А где у тебя i изменяется? И, кстати, чему оно равно в начале цикла?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.