Hola,
Soy nuevo en esto de la programación, vi tu duda y me pareció un buen reto el poder encontrar solución tanto al programa, como a tus dudas, espero haber ayudado.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int arreglo[5], i, numero = 5, positivos = 0, negativos = 0, mayor = 0, menor = 0, posicion = 0, posicion1 = 0,x;
int pos[5] = {}, neg[5] = {};//inicializamos todas las posiciones en 0, ya que por defecto el compilador inicializa los elementos que no tienen un valor específico.
for (i = 0; i < numero; i++)//Se llena el arreglo con los 10 elementos que le pones
{
printf("Introduzca numero: \n");
cin >>arreglo[i];
//vamos guardando en nuestros array auxiliares los valor negativos y positivos
if (arreglo[i] > 0) {
pos[i] = arreglo[i];
}else {
neg[i] = arreglo[i];
}
}
for (i = 0; i < numero; i++) {
if (arreglo[i] > mayor) {
mayor = arreglo[i];
posicion = i;
}
if (arreglo[i] < menor) {
menor = arreglo[i];
posicion1 = i;
}
}
for (i = 0; i < numero; i++)
{
if (arreglo[i] > 0)
positivos += arreglo[i];
}
for (i = 0; i < numero; i++)
{
if (arreglo[i] < 0)
negativos += arreglo[i];
}
//Salidas por pantalla
cout << "Los numero positivos son: ";
for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
{
if (pos[i] > 0)
{
cout << (pos[i]) << " ";
}
}
printf("\nSuma de numeros positivos: %d", positivos);
printf("\nEl numero mayor es: %d y se encuentra en la posicion: %d", mayor, posicion);
cout << "\nLos numero negativos son: ";
for (i = 0; i < numero; i++) //bucle que nos permitira imprimir todos los numero positivos como negativos
{
if (neg[i] < 0)
{
cout << (neg[i]) << " ";
}
}
printf("\nSuma de numeros negativos: %d", negativos);
printf("\nEl numero menor es: %d y se encuentra en la posicion: %d", menor, posicion1);
return 0;
}
Ya que estás empezando vamos a comentar el programa aunque he de decir que no se hacen tareas por lo que no deberías haber puesto tu código tan pronto. De todos modos tiene algunos fallos así que vamos a verlos. Al final dejo otras correcciones aunque no son errores como tal está bien corregirlos también:
- ¿Has probado a ejecutarlo?
Cuando muestras los negativos y los positivos, seguro que no aparecen como esperarías. Estás guardando valores en dos arrays/arreglos distintos por lo que cada uno va a su "ritmo". No puedes usar sólo el contador <i>. Piénsalo a ver.
- Problema si todos los valores son positivos o si todos los valores son negativos
Estás igual que al principio. Si ponemos <maximo = 0> y <minimo = 0>, si introducimos todo números positivos nos va a dar como resultado que el más pequeño es 0 cuando no lo es y si introducimos todo números negativos, nos va a dar que el máximo es 0 cuando tampoco lo es.
No sé si me he dejado algún error más, pero los más visibles son esos.
Ahora vamos a ver algunos detalles:
Esa librería no es estándar por lo que no todos los compiladores pueden usarla y es una librería que no es necesaria. La función más común de esa librería suele ser <getch()> que podemos sustituir por <getchar()> que se encuentra en <stdio.h> (en C) o <cstdio> (en C++) o por <cin.get()> que se encuentra en <iostream> en C++.
- Mezcla de <printf()> y <cout>
<printf()> es una función incluida en <stdio.h> (en C) y <cstdio> (en C++). Sin embargo es más típica de C ya que en C++ se suele optar por usar <cin> y <cout> (incluído en <iostream>) para entrada y salida sustituyendo a <printf()> y <scanf()> de C.
No se recomienda usar "números mágicos", es decir, números literales que aparecen de repente y no sabes por qué tienen ese valor. ¿Por qué un 5? Imagina que tienes un programa muy grande y tienes muchos arrays/arreglos de tamaño 5 y un día dices "voy a aumentar la capacidad a 10", tendrías que sustituir todos los "5" por "10" con cuidado de que haya algún 5 que no tengas que cambiar. Para ello usa constantes y sólo tendrás que cambiar el valor de la constante una vez para que cambie en todo el programa.
const int MAX_SIZE = 5;
int main(){
int array[MAX_SIZE];
// ...
}
PD: La variable <numeros = 5> es lo que hace en tu caso de constante pero no lo aprovechas tanto como podrías/deberías (además constante mejor para asegurarte de que no vas a cambiar su valor por error).
Asegúrate de que puedes saber qué indica una variable leyendo únicamente su nombre y no porque lo hayas programado tú y te acuerdes que "x" es tal cosa.
PD: Tienes una variable <x> que no usas en todo el programa me parece.
Por ejemplo el array de <pos> podría dar lugar a equivocación ya que "posiciones" se suele abreviar como "pos" en muchos sitios. Igual que <posicion> y <posicion1>; mejor que sean algo como <posicion_maximo> y <posicion_minimo>.
A partir de la línea 60, cuando quieres mostrar los positivos y los negativos. Recorres los vectores/arrays/arreglos
donde has guardado por un lado los positivos y por otro los negativos. No tienes que comprobar otra vez que el valor que hay guardado sea positivo o negativo respectivamente. Además usa dos contadores para saber cuántos positivos hay (esos serán los que tienes que recorrer cuando los quieras mostrar) y otro igual pero para los negativos. (Si tienes 3 positivos y 2 negativos, no muestres 5 posiciones porque las últimas contendrán basura o 0).
Creo que no me dejo nada más. Suerte y ya me comentarás lo que consigas avanzar... O lo que no.