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

Andrey0707

New Member
25.04.2016
3
0
#1
Нужно найти 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(); 
}
 
R

rrrFer

Гость
#2
Чтобы определить два наименьших элемента массива нужен один цикл, в котором каждый элемент нужно сравнивать с первым наименьшим, а затем со вторым. Примерно так:

Код:
// инициализация первого и второго минимумов
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];
  }
}
Ну а в вашем коде не понятно какое отношение к задаче имеет это:
Код:
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]); 
}
И вот тут:
Код:
for ( i = 2; i< m; i ++ )  {
  if( minb > Y[i] ) {
    mins = minb;
    minb = Y[i];
  } 
}
вы не учитываете, что элемент может быть больше minb (видимо первый минимум), но при этом меньше mins (второй минимум). В таком случае ваш код сработает неправильно.

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