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

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

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

> Файл\\\, javascript:emoticon(':yes2:', 'smid_19')
Rocket
сообщение 4.03.2007 20:11
Сообщение #1


Знаток
****

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

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


Дан файл вещественных чисел. Посчитать произведение компонентов файлов,которые больше удвоенного минимального компонента. Вот сама программа:
Program ZE;
type file_=file of real;
var f:file_;

function Z(var f:file_):real;

var
i:integer;
min:real;
a:array[0..10] of real;
p:real;

begin

reset(f);
p:=1;

begin

for i:=0 to filesize(f)-1 do
begin
read(f,a[i]);
min:=a[0];
for i:=1 to filesize(f)-1 do
begin
if a[i]<min then
min:=a[i];
end;

for i:=0 to filesize(f)-1 do
begin
if a[i]>2*min then begin
p:=p*a[i];
Z:=p;
end;
end;
end;
end;
close(f);
end;

procedure ZE_(var f:file_);
var
x:real;
begin
Reset(f);
While not eof(f) do
begin
read(f,x);
write(x,' ');
end;
Writeln;
Close(f);
end;


Begin
assign(f,'da.dat');
Reset(f);
close(f);
ZE_(f);
writeln('Proiz= ', Z(f));
readln;
end.

Процедура выполняется,а вот функция выдает результат 0. Помогите найти косяк.
yes2.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
мисс_граффити
сообщение 4.03.2007 20:15
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


вот тут в циклах ошибка.
если отформатируешь программу по-человечески, она станет очевидна:
for i:=0 to filesize(f)-1 do
begin
read(f,a[i]);
min:=a[0];
for i:=1 to filesize(f)-1 do //идем по массиву - но ведь он еще не заполнен!
begin
if a[i]<min then
min:=a[i];
end;

вложенный цикл по той же переменной... то есть вообще результаты слабо предсказуемы.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rocket
сообщение 4.03.2007 20:27
Сообщение #3


Знаток
****

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

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


Цитата(мисс_граффити @ 4.03.2007 20:15) *
вот тут в циклах ошибка.

Спасибо. А как тогда переделать?

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

Сообщений в этой теме


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

 



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