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

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

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

> Задача на файловый тип, Подскажите, что неправильно делаю...
D1ma
сообщение 8.03.2009 21:54
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 10)
volvo
сообщение 9.03.2009 9:42
Сообщение #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;
 К началу страницы 
+ Ответить 
bura
сообщение 9.03.2009 22:35
Сообщение #3





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

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


Строка:

max := 0;


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


?
***

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

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


тогда

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


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


Гость






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

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


?
***

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

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


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

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


Гость






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


?
***

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

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


ага smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bura
сообщение 9.03.2009 23:01
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.03.2009 0:00
Сообщение #10


Гость






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

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





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

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


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

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

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

 



- Текстовая версия 28.07.2025 5:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"