Pese a que la respuesta de Mauricio Brito señala la solución, hay detalles que se han omitido y que vale la pena mencionar.
Sólo cuatro de seis variables inicializadas.
int vector[5];
int i;
int suma=0, producto=1, mayor=vector[0], menor=vector[0];
Tanto vector
como i
carecen de valor(es) inicial(es), sería aconsejable dar un valor a las variables no inicializadas:
int vector[5] {}; // todos los elementos del arreglo vector contienen 0
int i = 0;
int suma=0, producto=1, mayor=vector[0], menor=vector[0];
¿Por qué es tan importante dar estos valores iniciales? Porque de no acerlo, obtienen valores residuales desde la memoria y estos pueden afectar al funcionamiento del programa... por ejemplo:
al momento que me imprime el menor siempre me sale que es 2(así no ingrese el número 2).
Apuesto que el arreglo vector
obtuvo varios valores desde la memoria y en la posición 0
tendría un 2
, por esto, al inicializar menor
esta variable obtiene ese valor residual y dicho valor residual es menor a cualquiera de los que introduces.
Dado que la variable i
la usas más adelante y lo primero que haces con ella es otorgarle un valor no sería necesario inicializarla; aún así yo acosejo hacerlo.
No escoges los mejores valores para inicializar mayor
y menor
.
Incluso aunque hubieras otorgado valor a los elementos del arreglo vector
, ninguno de esos valores es la mejor elección para mayor
o menor
; las mejores elecciones son respectivamente el menor número entero y el mayor número entero, los cuales puedes obtener con la cabecera <limits>
:
int vector[5] {}; // todos los elementos del arreglo vector contienen 0
int i = 0;
int suma = 0, producto = 1;
int mayor = std::numeric_limits<int>::min(); // Menor entero posible
int menor = std::numeric_limits<int>::max(); // Mayor entero posible
Estas elecciones para inicializar mayor
y menor
te garantizan que sea cual sea el valor de entrada cualquier valor será mayor al que ya contiene mayor
y menor al que ya contiene menor
.
No necesitas el arreglo ni tres de los bucles for
.
¿Por qué hacer las cosas en dos pasos pudiendo hacerlas en uno?
int suma = 0, producto = 1;
int mayor = std::numeric_limits<int>::min();
int menor = std::numeric_limits<int>::max();
for (int i = 0; i < 5; ++i){ // i declarado y usado solo aqui
std::cout << "Ingrese el numero " << (i + 1) << '\n';
int numero = 0;
std::cin >> numero;
mayor = std::max(mayor, numero); // std::max pertenece a la libreria <algorithm>
menor = std::min(menor, numero); // std::min pertenece a la libreria <algorithm>
suma += numero;
producto *= numero;
}
Con estos cambios el programa se comporta igual y pasas de usar cuatro bucles for
a usar tan sólo uno, así que el ordenador trabaja menos.
Además, usando algunas de las funciones de la cabecera de algoritmos (<algorithm>
) seleccionas de manera más fácil el número mayor y menor:
std::max
: Te devuelve el número mayor de los que le pasas por parámetros.
std::min
: Te devuelve el número menor de los que le pasas por parámetros.
Usar estas funciones y eliminar algunas líneas, hace el código algo más legible.
Usas cabeceras innecesarias que además no son de C++.
Estás incluyendo la cabecera <conio>
que forma parte de c y su misión es comunicarse con la consola a la vez que incluyes la cabecera <iostream>
la cuál tiene exáctamente la misma misión pero siendo esta última de c++, el programa ni siquiera debería compilar tal y como lo has compartido.
Las cabeceras de C++ no tienen extensión de archivo: <iostream>
, <vector>
, <string>
, etc... excepto las cabeceras que existen por compatibilidad con C: <math.h>
, <stdlib.h>
, <stdint.h>
, etc...
La mayoría de cabeceras de C
disponen de una versión portada a C++
a la que se le ha quitado la extensión, se les ha añadido el prefijo "c" (por ejemplo <cmath>
, <cstdint>
) y han sido adaptadas a C++
. Si estás trabajando con C++
deberías usar estas últimas no las de C
.
Te falta el espacio de nombres.
Antes de cin
y cout
te falta el espacio de nombres, sin ello el programa no compila; puedes ahorrarte escribir el std::
contínuamente escribiendo la instrucción using namespace std
. Te aconsejo que eches un vistazo a este hilo para conocer más detalles.
Abusas de std::endl
.
Normalmente no es buena idea, te aconsejo echar un vistazo a este hilo para conocer más detalles.
Con todas las correcciones sugeridas aplicadas, el código [quedaría así]:
#include <iostream>
#include <limits>
#include <algorithm>
int main () {
int suma = 0, producto = 1;
int mayor = std::numeric_limits<int>::min();
int menor = std::numeric_limits<int>::max();
for (int i = 0; i < 5; ++i) {
std::cout << "Ingrese el numero " << (i + 1) << '\n';
int numero = 0;
std::cin >> numero;
mayor = std::max(mayor, numero);
menor = std::min(menor, numero);
suma += numero;
producto *= numero;
}
std::cout << "La suma es: " << suma << '\n'
<< "El producto es: " << producto << '\n'
<< "El mayor es: " << mayor << '\n'
<< "El menor es: " << menor << '\n';
return 0;
}
Por cierto, en los bucles for
usa pre-incremento siempre que te sea posible.