Помощь - Поиск - Пользователи - Календарь
Полная версия: Баг
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
fr33m
Ребят, помогите пожалуйста с прогой, не знаю в чем проблема, вроде написано всё верно, а вылетает. Програмка маленькая 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
Должно быть так:

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

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

   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
 while a[i]<=n do {почему a[i], а не i?}

да , здесь я понял . исправил на i . но почемуто всё равно не пашет sad.gif
мисс_граффити
а во втором месте исправил?
тебе же Bokul написал, как должно быть
Malice
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
Цитата(мисс_граффити @ 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

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
Цитата(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
Malice, опять косяк, смотри мою прогу.. wink.gif
мисс_граффити
все понакосячили smile.gif)
давайте, что ли, определимся: min - это индекс эл-та или он сам? а то в этом дружно путаемся.

fr33m, я ничего не переделывала. просто указала на места с ошибками...
Malice
Цитата(Bokul @ 7.01.2007 23:30) *

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

Точно косяк - не нашел у тебя нахождение индекса blum.gif
Bokul
В авторской версии - он сам. Это Malice обозвал его индексом.
fr33m
Цитата(Bokul @ 7.01.2007 23:30) *

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

спасибо Bokul . твоя прога работает ! только вот вопрос .допутим второй элемент массива отрицательное число . в цикле этого не проверяется . там проверяется только >0 . и тогда этот второй элемент засчитается за минимальный , потому что будет меньше всех, даже меньше положительных значений. то есть если есть 4 элемента массива 1 -9 3 6 , то -9 будет минимальным положительным , хотя нужно 6 . вот не знаю ,как это на паскале написать
p.s. почему я репу не могу никому дать ? smile.gif)
Bokul
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
Цитата(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
просто если будет хоть один отрицательный четный элемент, то в этом случает переменная min примет значение 0 . но ведь это неправильно blink.gif wacko.gif
Bokul
Это ты видел?

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

blink.gif blink.gif blink.gif

Нажмите для просмотра прикрепленного файла
fr33m
Цитата(мисс_граффити @ 8.01.2007 0:13) *

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


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


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


ура заработало! всем спасибо .
пойду писать внешнюю спецификацию и прочую муть smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.