Задача На Нахождение Макс.отрицательного Значения Среди Элементов Масс

vladis222

Active Member
06.12.2011
31
0
#1
Здравствуйте, вот написал код к этой программе, но не работает:
<!--shcode--><pre><code class='"#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<locale>
#define N 100
#define M 100
int main()
{
setlocale(LC_ALL,"Rus");
float p[N'>, max; int i,n;
printf ("Введите число элементов массива : \n");
scanf ("%d",&n);
while(n>N||n<=1)
{printf("Вы ошиблись\n");
scanf ("%d",&n);}
for(i=0;i<n;i++)
{printf("Введите элемент массива : \n",i);
scanf ("%f",&p);
}
for(i=0;i<n;i++)
{
if(p<0||p/2)
{max=p[0];
if((0-p)<max)
max=p;
printf("Макс значение элементов массива :"%f",&max")}
else printf("Нет отрицательных элементов массива");
}


}
}[/CODE]
 

acorn

PHP Developer
29.08.2004
585
3
#2
Оформите код для начала правильно, чтобы как минимум скобки фигурные были на своих местах. Совершенно непонятно, почему вывод максимального числа в самом цикле его нахождения.
 
09.06.2010
107
0
#3
Эх, тряхнем стариной :)

1. В строке "float p[N ruby">, max; int i,n; " какой-то мусор, это при вставке в форум сбажило?

2. Сам цикл упорядочивания совсем странно написан.
Чтобы вы поняли, что вы написали - комментирую ваш код:

C++:
for(i=0;i<n;i++) //выполняете следующее для каждого элемента массива
{
if(p[i]<0||p[i]/2) //если элемент массива отрицателен или при делении на 2 дает число отличное от нуля делаем всё до закрывающей скобки
{
max=p[0]; //сохраняем в max значение нулевого элемента массива
if((0-p[i])<max) max=p[i]; //если 0 минус текущий элемент массива меньше max, сохраняем в max pначение текущего элемента массива
printf("Макс значение элементов массива :"%f",&max") // выводим max на экран с этой строкой
}
else printf("Нет отрицательных элементов массива"); //иначе (к условию сразу после оператора цикла) выводим эту строку
}
Теперь исполните роль "компьютера" - пройдите по своей программе шаг за шагом, попытайтесь её "выполнить" и вам станет ясно, почему у вас "не работает".

Чтобы всё заработало, нужно:

Если вы ищете наибольший из отрицательных элементов в математической терминологии, т.е. -1 > -2:

1. max присвоить значение 0 до начала цикла - это инициализация значения max любым значением, которое вы не можете никак достичь (ибо 0 > любого неотрицательного числа, но сам не отрицательное число)
2. Далее, в цикле по условию if((p<0)&&((p>max)||(max=0))) (т.е. в случае, когда тек. элемент отрицателен и либо больше текущего максимума либо текущий максимум равен начальному значению) присваиваете max = p
3. В конце (уже после выхода из цикла) если max = 0 выводите "нет отрицательных элементов..." а иначе "макс значение ..."

Если вы ищете наибольший из отрицательных элементов по модулю, т.е. |-2|>|-1|:

1. max присвоить значение 0 до начала цикла - это инициализация значения max минимальным возможным значением (которое к счастью также не является отрицательным поэтому будет служить и сигналом о том, было ли найдено хоть одно отрицательное число)
2. Далее, в цикле по условию if((p<0)&&(p<max)) (т.е. в случае, когда тек. элемент отрицателен и меньше текущего "максимума", который реально является минимумом, ибо работаем с отрицательными числами) присваиваете max = p
3. В конце (уже после выхода из цикла) если max = 0 выводите "нет отрицательных элементов..." а иначе "макс значение ..."