Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на файловый тип
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
D1ma
Задание:
Дан файл f, компоненты которого являются действительные числами.Найти наибольшее из значений компонент
с нечетными номерами.
Вот мой код, подкаректируйте что не так делаю.. )
Код
program pr;
uses crt;
var
f:file of integer;
a,b,max:integer;
begin
clrscr;
assign(f,'C:/laba');
rewrite(f);
writeln('Vvedite Chisla:');
readln(a);
while A>=0 do begin
write(f,a);
read(a);
end;
reset(f);
max:=0;
while not eof(f) do
begin
read(f,a);
if (b mod 2>0) then
if b>max then max:=b;
end;
writeln('Max=',max);
End.
volvo
Цитата
подкаректируйте что не так делаю.. )
Во-первых, работаешь с целыми числами вместо вещественных. А во-вторых, то, что ты делаешь во второй части программы вообще не поддается описанию. Тебе достаточно вот этого:

reset(f);
max := 0; b := 1;
while not eof(f) do begin
  read(f, a); { <--- Читаем ЧИСЛО }

  { Если _индекс_ - нечетный, и _число_ больше максимума }
  if odd(b) and (a > max) then max := a;

  inc(b); { <--- Увеличиваем ИНДЕКС }
end;
bura
Строка:

max := 0;


не совсем корректная, т.к. последнее записанное в файл число может быть и отрицательным.
amega
тогда

reset(f);
read(f,a);
max:=a;
seek(f,0);
...
volvo
Цитата
т.к. последнее записанное в файл число может быть и отрицательным.
Казалось бы, при чем последнее? Если хоть одна из нечетных компонент будет положительной - код абсолютно корректен. Если все нечетные компоненты отрицательные - надо менять 0 на минимально допустимое вещественное значение.

Добавлено через 3 мин.
amega, тебе привести пример содержимого файла, для которого это не отработает, или сам попытаешься подумать?
amega
не не нада я и так вижу просто написал чтобы человек успокоился)
volvo
Больше ПРОСТО так не пиши ничего... Договорились?
amega
ага smile.gif
bura
Все-таки есть вероятность, что при заполнении файла первым введенным пользователем числом будет отрицательное число. Тогда файл будет содержать всего одно число, и программа даст ответ, что максимальное с нечетным номером число равно 0.
Тогда лучше сделать так:

 reset(f);
 b := 1;
 while not eof(f) do begin
  read(f, a);
  if (b=1) or (odd(b) and (a > max))  
   then max := a;
  inc(b); 
 end;


volvo
Цитата
Все-таки есть вероятность, что при заполнении файла первым введенным пользователем числом будет отрицательное число.
В таком случае файл не будет содержать ни одного числа, он будет пустым, и твой вариант тоже выдаст тот же ответ: максимальное число = 0.

Смотри внимательно: ни одно отрицательное число в файл записано не будет, поскольку запись происходит внутри цикла While a >= 0, поэтому все, начиная с третьего поста, не имеет шансов сбыться...
bura
Извиняюсь, был невнимателен.
Не заметил эти строчки:
Код

writeln('Vvedite Chisla:');
readln(a);
while A>=0 do begin
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.