3

Creo tener el código concluido porque al imprimir el programa el valor máximo me lo da bien es correcto el problema esta con el valor mínimo que siempre me da 0 y no sé por qué, alguien podría ayudarme?

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>

main(){

int n,i,a;

int max=0, min=0;

printf("Numero del arreglo\n");

scanf("%d",&n);

srand(time(NULL));

for(i=0;i<n;i++){

a=0+rand()%((100+0)-0);

printf("%d, ",a);

if(a<min){
    min=a;
}
if(a>max){
    max=a;
}
}
printf("\n\n%d",min);
printf("\n\n%d",max);

getch();

}
eferion
  • 49,291
  • 5
  • 30
  • 72

3 Answers3

4

Al comienzo de tu código estableces min=0, por lo que no vas a tener ningún número más pequeño:

int max=0, min=0;

Inicialo a un número alto, por ejemplo:

int max=0, min=1000;
Flowen
  • 2,147
  • 8
  • 13
  • Gracias, eso me funciono ya pude hacer que funcionara te lo agradezco, la vdd me falta demaciado apenas soy estudiante y pues se muy poco. Gracias por tu respuesta – Carlos Enrique Pacheco Dec 02 '17 at 00:20
1

Extraer el valor mínimo de un arreglo.

¿Arreglo? ¿Qué arreglo? No hay ni un solo arreglo en el código que has compartido.

El valor mínimo que siempre me da 0 y no sé por qué.

Posiblemente el valor mínimo sea 0, tu comprobación es:

if(a<min){
    min=a;
}

Si el valor de a es menor que min (inicializado a0) entonces se iguala min a a. Dado que generas tus números aleatorios con rand:

a=0+rand()%((100+0)-0);

Y rand sólo genera números positivos, no vas a encontrar ningún numero positivo más pequeño que cero.

Propuesta.

Asigna el valor máximo al mínimo y el mínimo al máximo:

int max=std::numeric_limits<int>::min(), min=std::numeric_limits<int>::max();

De esta manera, cualquier número generado (incluido el 0) por rand será menor al valor con el que se inicializa min.

Otras cosas a tener en cuenta.

  • Las cabeceras <stdio.h>, <conio.h>, <time.h> y <stdlib.h> son de C, no de C++, si realmente necesitas usarlas (que no las necesitas) debes usar los equivalentes de C++: <cstdio>, <iostream> y <cstdlib>. Consulta esta pregunta para saber por qué.
  • printf y scanf son las funciones de lectura de consola de C, en C++ se usan los objetos stream: std::cout y std::cin.
  • Las funciones rand y srand son herramientas de C no de C++, deberías usar la cabecera <random>.

¿Estás seguro de que estabas programando en C++? ¡No lo parece!, por cierto, también te falta devolver un valor en main. Y tu generación de números no tiene sentido alguno:

a=0+rand()%((100+0)-0);

Literalmente suma cero (cero es el elemento neutro de la suma) y hace el módulo del resultado de rand contra cien sumando cero y restando cero (que es el elemento neutro de la resta), si realmente quieres usar rand (que no deberías, consulta esta respuesta para saber por qué) la formula debería eliminar las operaciones neutras:

a=rand()%100;
PaperBirdMaster
  • 44,474
  • 6
  • 44
  • 82
0

Si vas a hacerlo con C++ deberías utilizar las librerías iostream, vector y algorithms.

Primero llenas un vector con números aleatorios.

vector<int> numeros;
for(int i = 0; i < TOTAL_DE_NUMEROS; ++i)
    numeros.push_back(numero aleatorio);

Después encuentras el mínimo utilizando la función min_element()

int minimo = std::min_element( std::begin(numeros), std::end(numeros) );
std::cout << "El numero más pequeño es: " << minimo << '\n';
akko
  • 2,378
  • 2
  • 27
  • 56