С+ определение наименьших элементов в массиве

Тема в разделе "Общие вопросы по С и С++", создана пользователем Andrey0707, 26 апр 2016.

  1. Andrey0707

    Andrey0707 New Member

    Регистрация:
    25 апр 2016
    Сообщения:
    3
    Симпатии:
    0
    Нужно найти 2 наименьших элемента в массиве. Что не так с кодом, потому что он не показывает нужный результат.
    Код (C++):
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <locale.h>
     
     
     
     
    const int m=10;
    int main()
    {
        setlocale(LC_ALL, "rus");
    float Y[m];
    float Z[m];
     
     
     
     
    int i;
     
     
     
     
        for (i = 0; i< m; i++)
        Y[i] = rand() %15 -2;
     
     
     
     
    printf("Массив: n");
    for ( i = 0; i< m; i ++ )
    printf("%3.0f |", Y[i] );  
    printf ("nПолученный массив:n");
    for(i=0;i <m;i++)
    {
    if( (Y[i] > 0) && (Y[i] < 10) )
     
     
     
     
    Z[i] = Y[i];   
    else
    Z[i] = 1;
    printf("%3.0f |", Z[i]);
    }
    float minb = Y[0];  
    float mins = Y[1];  
    float temp;
     
    if( minb < mins) {
      temp = minb;
      minb = mins;
      mins = temp;
    }    
     
    for ( i = 2; i< m; i ++ )  {
      if( minb > Y[i] ) {
        mins = minb;
        minb = Y[i];
      }  
    }
     
     
     
     
    getch();
    }
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Чтобы определить два наименьших элемента массива нужен один цикл, в котором каждый элемент нужно сравнивать с первым наименьшим, а затем со вторым. Примерно так:

    Код (Text):
    // инициализация первого и второго минимумов
    firstmin = min(a[0], a[1]);
    secondmin = max(a[0], a[1]);

    for (int i = 2; i < n; ++i) {
      if (a[i] < firstmin) {
        seconmin = firstmin;
        firstmin = a[i];
      }
      else if (a[i] < secondmin) {
        secondmin = a[i];
      }
    }
    Ну а в вашем коде не понятно какое отношение к задаче имеет это:
    Код (Text):

    for(i=0;i <m;i++)
    {
       if( (Y[i] > 0) && (Y[i] < 10) )
         Z[i] = Y[i];    
       else
         Z[i] = 1;
       printf("%3.0f |", Z[i]);
    }
     
    И вот тут:
    Код (Text):
    for ( i = 2; i< m; i ++ )  {
      if( minb > Y[i] ) {
        mins = minb;
        minb = Y[i];
      }
    }
    вы не учитываете, что элемент может быть больше minb (видимо первый минимум), но при этом меньше mins (второй минимум). В таком случае ваш код сработает неправильно.

    Наконец, ваш код вообще не "показывает результат" - вы же не выводите вычисленные значения на экран.
     
Загрузка...

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