IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача на файловый тип, Подскажите, что неправильно делаю...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 32
Пол: Мужской
Реальное имя: Дима

Репутация: -  0  +


Задание:
Дан файл 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
подкаректируйте что не так делаю.. )
Во-первых, работаешь с целыми числами вместо вещественных. А во-вторых, то, что ты делаешь во второй части программы вообще не поддается описанию. Тебе достаточно вот этого:

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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Строка:

max := 0;


не совсем корректная, т.к. последнее записанное в файл число может быть и отрицательным.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


тогда

reset(f);
read(f,a);
max:=a;
seek(f,0);
...


Сообщение отредактировано: amega -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
т.к. последнее записанное в файл число может быть и отрицательным.
Казалось бы, при чем последнее? Если хоть одна из нечетных компонент будет положительной - код абсолютно корректен. Если все нечетные компоненты отрицательные - надо менять 0 на минимально допустимое вещественное значение.

Добавлено через 3 мин.
amega, тебе привести пример содержимого файла, для которого это не отработает, или сам попытаешься подумать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


не не нада я и так вижу просто написал чтобы человек успокоился)

Сообщение отредактировано: amega -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Больше ПРОСТО так не пиши ничего... Договорились?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


ага smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Все-таки есть вероятность, что при заполнении файла первым введенным пользователем числом будет отрицательное число. Тогда файл будет содержать всего одно число, и программа даст ответ, что максимальное с нечетным номером число равно 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;


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






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

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





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Извиняюсь, был невнимателен.
Не заметил эти строчки:
Код

writeln('Vvedite Chisla:');
readln(a);
while A>=0 do begin
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 4.05.2024 23:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name