ГОРЮ! Ошибки помогите исправить!

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

повстанец
Сообщения: 18
Зарегистрирован: 13 мар 2008, 19:50

Нужно из исходного массива сформировать другой с заменой нулевых элементов (если они есть) значениями, равными максимальному элементу

Вот прога (не работаеть...)
Program Z6_15;
Var
a,b:array[1..15] of integer;
i,j,n,x:integer;
f1,f2:text;
Begin
Assign(f1,'1.txt');
Assign(f2,'2.txt');
reset(f1);
Read(f1,n);
For i:=1 to n do Read(f1,a);
close(f1);
x:=a[1];
n:=a[1];
For i:=2 to n do if x<a then x:=a;

For i:=1 to n do
begin

if a=0 then x:=0;


Rewrite(f2);
For i:=1 to n do Write(f2,a,' ');
Close(f1);
Close(f2);
end;

End.



Вся фишка в том, что обязательно задействовать тестовые файлы. Помогите, горю!!
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

&quot писал(а):For i:=1 to n do
begin

if a=0 then x:=0;


Rewrite(f2);
For i:=1 to n do Write(f2,a,' ');
Close(f1);
Close(f2);
end;

End.

Так ты много раз перезаписываешь файл=)
А так нет:
For i:=1 to n do if a=0 then x:=0;
Rewrite(f2);
For i:=1 to n do Write(f2,a,' ');
Close(f1);
Close(f2);
end.
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Вот подправил, теперь вроде работает:
[syntax='Delphi']
Program Z6_15;
Var
a,b:array[1..15] of integer;
i,j,n,x:integer;
f1,f2:text;

Begin
Assign(f1,'1.txt');
Assign(f2,'2.txt');
reset(f1);
Read(f1,n);
For i:=1 to n do Read(f1,a);
close(f1);
x:=a[1];
For i:=2 to n do if a>x then x:=a;

For i:=1 to n do
if a=0 then a:=x;


Rewrite(f2);
For i:=1 to n do Write(f2,a,' ');
Close(f2);

End.
[/syntax]

P.S. Первый раз у меня Касперский обматерил паскалевскую программу, троян, однако :)
Ни что так не ограничивает фантазию программиста, как компилятор...
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Опоздал на 2 минуты! =)
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Medved писал(а):Опоздал на 2 минуты! =)
Да, но одну из ошибок Вы не нашли:

For i:=1 to n do if a=0 then x:=0;

а надо

For i:=1 to n do if a=0 then a:=x;
Ни что так не ограничивает фантазию программиста, как компилятор...
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Я просмотрел именно по смыслу- begin/end не имело назначения
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
повстанец
Сообщения: 18
Зарегистрирован: 13 мар 2008, 19:50

Спасибо всем огромное! Прога заработала, но...
В текстовом фыйле 1 находится такой массив 1 20 -80 3 8 4 0 3 7 5 4 2 4 6 0
По идее в файл 2 он должен записать его с заменой двух нулей на 20 (это максимальное).
А мне он почему-то упорно записывает число 20 и все...
Я ночь не буду спать, пока не разберусь!!
Поможите кто чем может)
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Странно, у меня все работает:
Входной файл:

Код: Выделить всё

8 1 4 2 0 19 -10 0 1
Выходной файл:

Код: Выделить всё

1 4 2 19 19 -10 19 1 
Вы код из поста #2 или #3 используете?
Ни что так не ограничивает фантазию программиста, как компилятор...
повстанец
Сообщения: 18
Зарегистрирован: 13 мар 2008, 19:50

Это что-то удивительное. С последовательностью 8 1 4 2 0 19 -10 0 1
все отлично работает! Но в некоторых случаях, включая последовательность 1 20 -80 3 8 4 0 3 7 5 4 2 4 6 0 программа выдает максимальный элемент. И еще: как можно организовать, чтобы максимальный элемент тоже записывался в конечный файл?
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

В приведенном вами коде кол-во чисел определяется по первому элементу файла, а у вас файл начинается сразу с первого числа.
Ни что так не ограничивает фантазию программиста, как компилятор...
Закрыто