Помогите найти ошибку

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

Ответить
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Это та старая задача, про Transform. Но это не важно, главное то, что программа не правильно находит максимальное и минимальное значения. (или я не правильно прогу написал)

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


uses crt;
const n=10;
type mas = array [1..n] of integer;
var a: mas;
    b: mas;
    i,s,sum: integer;
max,min,k,mxb,mib,no,ansv,t,j: integer;
procedure transform;
begin
b:=a;
k:=0;
while k<>no do begin
for i:= 1 to n do b[i]:=sum-b[i];
inc(k);
end;
for i:= 1 to n do begin
mxb:=b[1];
mib:=b[1];
if mib>b[i] then mib:=b[i];
if mxb<b[i] then mxb:=b[i];
end;
for i:= 1 to n do writeln(b[i]);
end;
begin
clrscr;
writeln('Elementi massiva A');
for i:= 1 to n do begin
a[1]:=45;
a[2]:=52;
a[3]:=47;
a[4]:=46;
a[5]:=44;
a[6]:=48;
a[7]:=49;
a[8]:=43;                   {при этих значениях           }
a[9]:=50;                   {ответ должен быть равен 9}
a[10]:=51;
end;
for i:= 1 to n do writeln(b[i]);
for i:= 1 to n do begin
max:=a[1];
min:=a[1];
if min>a[i] then min:=a[i];
if max<a[i] then max:=a[i];
end;
sum:=0;
for i:= 1 to n do sum:=sum+a[i];
writeln(' Slolko raz delat "Transform"?');
readln(no);
transform;

ansv:=mxb-mib;

writeln('OTBET ',ansv);
writeln(max,' ',min);
writeln(mxb,' ',mib);
readkey;


end.

Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Естественно, неправильно!
for i:= 1 to n do begin
max:=a[1];
min:=a[1];
if min>a then min:=a;
if max<a then max:=a;
end;
На каждом шаге у тебя максимальное и минимальное значение устанавливается равным первому элементу массива, а надо это делать один раз, перед циклом.
max:=a[1];
min:=a[1];
for i:= 1 to n do begin
if min>a then min:=a;
if max<a then max:=a;
end;
То же самое с массивом b
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Сообщение от Хыиуду
На каждом шаге у тебя максимальное и минимальное значение устанавливается равным первому элементу массива, а надо это делать один раз, перед циклом.
А-а, точно! Как я не заметил!! Спасибо, друг!
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
Oleg_Rus
Сообщения: 335
Зарегистрирован: 16 окт 2006, 09:56
Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
Контактная информация:

min:=a[1];
max:=a[1];
for i:=2 to n do begin
if min>a then min:=a;
if max<a then max:=a;
end;
получаешь выигрыш в кол-ве операции (небольшой правда, но более правильный!)
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
Ответить