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

Тема в разделе "C/C++/C#", создана пользователем vladis222, 6 фев 2012.

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Здравствуйте, вот написал код к этой программе, но не работает:
    <!--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]
     
  2. acorn

    acorn PHP Developer

    Регистрация:
    29 авг 2004
    Сообщения:
    599
    Симпатии:
    3
    Оформите код для начала правильно, чтобы как минимум скобки фигурные были на своих местах. Совершенно непонятно, почему вывод максимального числа в самом цикле его нахождения.
     
  3. Истребитель

    Истребитель Well-Known Member

    Регистрация:
    9 июн 2010
    Сообщения:
    110
    Симпатии:
    0
    Эх, тряхнем стариной :)

    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 выводите "нет отрицательных элементов..." а иначе "макс значение ..."
     
Загрузка...

Поделиться этой страницей