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

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

Форум «Всё о Паскале» _ Задачи _ Баг

Автор: fr33m 8.01.2007 2:48

Ребят, помогите пожалуйста с прогой, не знаю в чем проблема, вроде написано всё верно, а вылетает. Програмка маленькая mega_chok.gif

Цитата
Найти номер и значение минимального положительного элемента массива. Рассматривать элементы массива, имеющие четные значения.


Uses Crt ;
Var
A: Array[1..20] of Integer;
I,min,n: Integer;
Begin
ClrScr;
Writeln('Лабораторная работа 1');
Writeln('Найти номер и значение минимального положительного элемента массива.');
Writeln('Рассматривать элементы массива, имеющие четные значения.');
Writeln('Количество элементов массива - целое число <=20');
Writeln('Введите n');
Readln (N);
If (N>=1) and ( N<=20) then
begin
Writeln('Значения элементов массива - целые числа');
For I := 1 to N do
Begin
Write('A[',I,']=');
Readln(A[I]);
End;
Writeln('В исходном массиве ', N, ' элементов');
Writeln('Исходный массив');
For I:=1 to N do
Write(A[I]:4);
Writeln;
i:=2;
min:=a[2];
while a[i]<=n do
If (a[i]<=min) and (a[i]>0) Then
begin
A[i]:=min;
i:=i+2;
End;
writeln('Минимальный положительный элемент равен ',min);
readln;
end
Else
Writeln('Ошибка ! Число элементов массива от 1 до 20');
readln;
End.


while a[i]<=n do
If (a[i]<=min) and (a[i]>0) Then
begin
A[i]:=min;
i:=i+2;
End;

в этом месте что-то происходит не так sad.gif

Автор: Bokul 8.01.2007 2:51

Должно быть так:


while i<=n do begin
If (a[i]<=min) and (a[i]>0) Then
A[i]:=min;
i:=i+2;
End;


Автор: мисс_граффити 8.01.2007 2:51

зацикливается или выходит за границы массива?

   while a[i]<=n do {почему a[i], а не i?}
If (a[i]<=min) and (a[i]>0) Then
begin
A[i]:=min;
i:=i+2;{а если a[i] не меньше минимума, на след. элемент переходить не надо?}
End;

Автор: fr33m 8.01.2007 3:02

 while a[i]<=n do {почему a[i], а не i?}

да , здесь я понял . исправил на i . но почемуто всё равно не пашет sad.gif

Автор: мисс_граффити 8.01.2007 3:04

а во втором месте исправил?
тебе же Bokul написал, как должно быть

Автор: Malice 8.01.2007 3:08

Bokul тоже накосячил чуть-чуть smile.gif

   while i<=n do begin
If (a[i]<=min) and (a[i]>0) Then
min:=i;
i:=i+2;
End;
writeln('Минимальный положительный элемент равен ',a[min]);
writeln('Индекс равен ',min);

Автор: fr33m 8.01.2007 3:21

Цитата(мисс_граффити @ 7.01.2007 23:04) *

а во втором месте исправил?
тебе же Bokul написал, как должно быть

так я не понял begin ставить после do или после if .у вас по-разному написано.в любом случае и так и так получается ,что 2ой элемент всегда считается отрицательным sad.gif

Цитата(Malice @ 7.01.2007 23:08) *

Bokul тоже накосячил чуть-чуть smile.gif

   while i<=n do begin
If (a[i]<=min) and (a[i]>0) Then
min:=i;
i:=i+2;
End;
writeln('Минимальный положительный элемент равен ',a[min]);
writeln('Индекс равен ',min);


да .попробовал вот так .прога проходит больше тестов smile.gif , но неполностью . например ввожу n=4 . дальше ввожу элементы 1,5,2,3 . то есть четные элементы - это 5 и 3. минимальный из низ 3. а прога напишет что 5 sad.gif blink.gif


может не надо перед циклом min:=a[2] . может в этом проблема ? непонимаю sad.gif

Автор: Bokul 8.01.2007 3:25


Uses Crt ;
Var
A: Array[1..20] of Integer;
I,min,n: Integer;
Begin
ClrScr;
Writeln('Лабораторная работа 1');
Writeln('Найти номер и значение минимального положительного элемента массива.');
Writeln('Рассматривать элементы массива, имеющие четные значения.');
Writeln('Количество элементов массива - целое число <=20');
Writeln('Введите n');
Readln (N);
If (N>=1) and ( N<=20) then
begin
Writeln('Значения элементов массива - целые числа');
For I := 1 to N do Begin
Write('A[',I,']=');
Readln(A[I]);
End;
Writeln('В исходном массиве ', N, ' элементов');
Writeln('Исходный массив');
For I:=1 to N do
Write(A[I]:4);
Writeln;
i:=2;
min:=0;
while i<=n do begin
If (a[i]<=min) and (a[i]>0) Then
min:=A[i];
i:=i+2;
End;
if min>0 then
writeln('Минимальный положительный элемент равен ',min)
else
writeln('Нету положительных элементов, стоящих на четных местах');
readln;
end
Else
Writeln('Ошибка ! Число элементов массива от 1 до 20');
readln;
End.


Автор: Malice 8.01.2007 3:26

Цитата(fr33m @ 7.01.2007 23:21) *

может не надо перед циклом min:=a[2] . может в этом проблема ? непонимаю sad.gif

Это потому, что я тоже накосячил smile.gif
Вариант №2:
   min:=2;
while i<=n do begin
If (a[i]<=a[min]) and (a[i]>0) Then
min:=i;
i:=i+2;
End;

Автор: Bokul 8.01.2007 3:30

Malice, опять косяк, смотри мою прогу.. wink.gif

Автор: мисс_граффити 8.01.2007 3:33

все понакосячили smile.gif)
давайте, что ли, определимся: min - это индекс эл-та или он сам? а то в этом дружно путаемся.

fr33m, я ничего не переделывала. просто указала на места с ошибками...

Автор: Malice 8.01.2007 3:34

Цитата(Bokul @ 7.01.2007 23:30) *

Malice, опять косяк, смотри мою прогу.. wink.gif

Точно косяк - не нашел у тебя нахождение индекса blum.gif

Автор: Bokul 8.01.2007 3:35

В авторской версии - он сам. Это Malice обозвал его индексом.

Автор: fr33m 8.01.2007 3:35

Цитата(Bokul @ 7.01.2007 23:30) *

Malice, опять косяк, смотри мою прогу.. wink.gif

спасибо Bokul . твоя прога работает ! только вот вопрос .допутим второй элемент массива отрицательное число . в цикле этого не проверяется . там проверяется только >0 . и тогда этот второй элемент засчитается за минимальный , потому что будет меньше всех, даже меньше положительных значений. то есть если есть 4 элемента массива 1 -9 3 6 , то -9 будет минимальным положительным , хотя нужно 6 . вот не знаю ,как это на паскале написать
p.s. почему я репу не могу никому дать ? smile.gif)

Автор: Bokul 8.01.2007 3:46

fr33m, посмотри еще раз - я вносил изменения ..

Цитата
не нашел у тебя нахождение индекса


min:=0;
ind:=0;
while i<=n do begin
If (a[i]<min) and (a[i]>0) Then begin
ind:=i;
min:=A[i];
end;
i:=i+2;
End;



Цитата
Точно косяк - не нашел у тебя нахождение индекса

Я имел ввиду что у тебя косяк, описанный fr33m.. smile.gif

Автор: Malice 8.01.2007 3:49

Цитата(Bokul @ 7.01.2007 23:46) *

min:=0;
ind:=0;
while i<=n do begin
If (a[i]<min) and (a[i]>0) Then begin
ind:=i;
min:=A[i];
end;
i:=i+2;
End;

Эх, чую не один я пиво пил smile.gif Наверное у тебя всегда 0 будет..

Автор: fr33m 8.01.2007 3:50

просто если будет хоть один отрицательный четный элемент, то в этом случает переменная min примет значение 0 . но ведь это неправильно blink.gif wacko.gif

Автор: Bokul 8.01.2007 4:01

Это ты видел?


if min>0 then
writeln('Минимальный положительный элемент равен ',min)
else
writeln('Нету положительных элементов, стоящих на четных местах');
readln;



Цитата
Эх, чую не один я пиво пил smile.gif Наверное у тебя всегда 0 будет..




Uses Crt ;
Var
A: Array[1..20] of Integer;
I,n,ind: Integer;
Begin
ClrScr;
Writeln('Лабораторная работа 1');
Writeln('Найти номер и значение минимального положительного элемента массива.');
Writeln('Рассматривать элементы массива, имеющие четные значения.');
Writeln('Количество элементов массива - целое число <=20');
Writeln('Введите n');
Readln (N);
If (N>=1) and ( N<=20) then
begin
Writeln('Значения элементов массива - целые числа');
For I := 1 to N do Begin
Write('A[',I,']=');
Readln(A[I]);
End;
Writeln('В исходном массиве ', N, ' элементов');
Writeln('Исходный массив');
For I:=1 to N do
Write(A[I]:4);
Writeln;
i:=2;
ind:=0;
while i<=n do begin
If (a[i]>0) Then
if ind=0 then
ind:=i
else
if a[i]<a[ind] then
ind:=i;
i:=i+2;
end;
if ind>0 then
writeln('Минимальный положительный элемент равен ',a[ind], ' Index ',ind)
else
writeln('Нету положительных элементов, стоящих на четных местах');
readln;
end
Else
Writeln('Ошибка ! Число элементов массива от 1 до 20');
readln;
End.



Автор: fr33m 8.01.2007 4:09

я конечно понимаю что всех за%%ал на этом форуме но всё равно не получается unsure.gif YYY.gif ypriamii.gif
если брать самый конечный вариант Bokul , то получается,что вводя например 4 элемента таких : 1 -7 5 8
прога напишет, что нет таких положит . минимальных элементов. но они то есть !

Автор: мисс_граффити 8.01.2007 4:13

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

Автор: Bokul 8.01.2007 4:14

Цитата
если брать самый конечный вариант Bokul , то получается,что вводя например 4 элемента таких : 1 -7 5 8

blink.gif blink.gif blink.gif

Прикрепленное изображение

Автор: fr33m 8.01.2007 4:23

Цитата(мисс_граффити @ 8.01.2007 0:13) *

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


ну да .
Цитата
Найти номер и значение минимального положительного элемента массива.


Цитата(Bokul @ 8.01.2007 0:14) *

blink.gif blink.gif blink.gif

Прикрепленное изображение


ура заработало! всем спасибо .
пойду писать внешнюю спецификацию и прочую муть smile.gif


Эскизы прикрепленных изображений
Прикрепленное изображение