Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ Как устранить ошибку?

Автор: savedata 4.9.2011, 6:30

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

Program z472v;
Uses crt;
Var f:file of integer;
v,k,max:integer;
Begin
clrscr;
Assign(f,'execute.dat');
Reset(f);
max:=0;

while not eof(f) do
begin
read(f,v);
writeln(v:0);
k:=k+1;
if (k mod 2<>0) and (abs(v)>max) then max:=abs(v);
end;
close(f);
writeln('naibolshii modul komponent s necetnim nomerom - ',max:0);
readln;
end.

Содержание файла execute.dat:

2
-3
12
44
-21
23
13
-15
8

Автор: savedata 4.9.2011, 7:12

После перезагрузки компа ошибка исчезла. но теперь из файла считывается какая то ерунда:

3378
11530
3379
12554
3378
13322
3380
11530
12594
2573
13106
2573
13105
2573
12589
3381
14346
naibolshii modul komponent s necetnim nomerom - 14346

почему?

Автор: Борман 4.9.2011, 8:30

Переменная K не инициализирована... наверное.

Автор: savedata 4.9.2011, 11:22

Оказалось что я в файл execute.dat просто через блокнот ввел данные) а нужно интерпретировать чтобы pascal понял)

Я осуществил ввод через программу и все заработало:

Program z472v;
Uses crt;
Var f:file of integer;
i,n,v,k,max:integer;
s:string;
Begin
clrscr;
Assign(f,'execute.dat');

write('create[C] a new or use(any key) an existing file? - ');
readln(s);

if (s='c') or (s='C') then
begin
Rewrite(f);

Write('enter n - ');
Readln(n);

for i:=1 to n do
begin
readln(v);
write(f,v);
end;

end;


Reset(f);
max:=0;

while not eof(f) do
begin
read(f,v);
writeln(v:0);
k:=k+1;
if (k mod 2<>0) and (abs(v)>max) then max:=abs(v);
end;
close(f);
writeln('naibolshii modul komponent s necetnim nomerom - ',max:0);
readln;
end.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)