Duda .

Iniciado por Estudiante000000, 18 Noviembre 2018, 19:58 PM

0 Miembros y 1 Visitante están viendo este tema.

Estudiante000000

Un programa que lea 10 numeros en un vector y que cuando consiga numeros pares e impares los guarde en un vector aparte por separado , si me corrigen mis fallas lo agradeceria  , estoy fallando en pasar los pares e impares  a sus vectores destinados.

Código (cpp) [Seleccionar]


#include<iostream>
#include<stdlib.h>

using namespace std;

int main(){

int numeros[10] = {1,2,3,4,5,6,7,8,9,10};
int pares[10];
int impares[10];
int i,aux1,aux2;

for(i=0;i=9;i++){
if(numeros[i]%2==0){
aux1=numeros[i];
   numeros[i]=pares[i];
   pares[i]=aux1;
}
else if(numeros[i]%2==0){
aux2=numeros[i];
numeros[i]=impares[i];
impares[i]=aux2;
}
}

for(i=0;i=9;i++){

cout<<"\nNUMEROS PARES";
cout<<pares[i]<<endl;
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\nNUMEROS IMPARES";
cout<<impares[i]<<endl;
}

system("pause");
return 0;
}





EL PROGRAMA NO ME MUESTRA ERROR NO SE QUE PASA.


MAFUS

Mira esto:
for(i=0;i=9;i++)
¿Qué ves?

Estudiante000000

Cita de: MAFUS en 18 Noviembre 2018, 20:37 PM
Mira esto:
for(i=0;i=9;i++)
¿Qué ves?

Veo un ciclo que iterara desde la posicion 0 hasta la posicion 9 , desde el 0 de 1 en 1.

No entiendo que me quieres decir , me explicas?

K-YreX

Cita de: MAFUS en 18 Noviembre 2018, 20:37 PM
Mira esto:
for(i=0;i=9;i++)
¿Qué ves?
A lo que se refiere es que si haces <i = 9> estás haciendo una asignación, no una comparación. La comparación se hace con dos iguales <i == 9> como en:
Código (cpp) [Seleccionar]
If(numeros[i] % 2 == 0)
De todos modos ese for se ejecuta cuando <i == 9> y dudo que eso sea lo que quieres ya que entonces solo se ejecuta para la última posición del vector.

Además donde comparas si es par o impar has puesto la misma condición osea que si es par, hace tal y sino, si es par, hace tal... Osea que el segundo if está mal.

Y en el último for para meter los resultados estás poniendo el primer par, 6 saltos de línea y el primer impar, etc; es decir, imposible de leer (además de que repites el título en cada iteración). Más correcto sería:
Código (cpp) [Seleccionar]
cout << "Numeros pares:"
for(i = 0; i < 10; i++)
    cout << pares[i] << " ";

Y lo mismo para los impares.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Estudiante000000

Cita de: YreX-DwX en 18 Noviembre 2018, 22:04 PM
A lo que se refiere es que si haces <i = 9> estás haciendo una asignación, no una comparación. La comparación se hace con dos iguales <i == 9> como en:
Código (cpp) [Seleccionar]
If(numeros[i] % 2 == 0)
De todos modos ese for se ejecuta cuando <i == 9> y dudo que eso sea lo que quieres ya que entonces solo se ejecuta para la última posición del vector.

Además donde comparas si es par o impar has puesto la misma condición osea que si es par, hace tal y sino, si es par, hace tal... Osea que el segundo if está mal.

Y en el último for para meter los resultados estás poniendo el primer par, 6 saltos de línea y el primer impar, etc; es decir, imposible de leer (además de que repites el título en cada iteración). Más correcto sería:
Código (cpp) [Seleccionar]
cout << "Numeros pares:"
for(i = 0; i < 10; i++)
   cout << pares[i] << " ";

Y lo mismo para los impares.



Ya le hice las modificaciones , pero cuando compilo en la consola no me muestra nada

El codigo quedo asi :



Código (cpp) [Seleccionar]

#include<iostream>
#include<stdlib.h>

using namespace std;

int main(){

int numeros[10] = {1,2,3,4,5,6,7,8,9,10};
int pares[10];
int impares[10];
int i,aux1,aux2;

for(i=0;i=9;i++){
if(numeros[i]%2==0){
aux1=numeros[i];
   numeros[i]=pares[i];
   pares[i]=aux1;
}
else if(numeros[i]%2==1){
aux2=numeros[i];
numeros[i]=impares[i];
impares[i]=aux2;
}
}

     cout<<"Numeros Pares";
     for(i=0;i<10;i++){
      cout<<pares[i]<<" ";
     }


          cout<<"Numeros Impares";
      for(i=0;i<10;i++){
      cout<<impares[i]<<" ";
      }


system("pause");
return 0;
}






K-YreX

#5
Te ha faltado modificar la siguiente línea:
Código (cpp) [Seleccionar]

for(i=0;i=9;i++){

El segundo campo de <i = 9> como te hemos comentado antes no es correcto.
Primero: si tu idea era poner como condición que i sea igual a 9, entonces se pone como <i == 9> con dos iguales.
Segundo: en tal caso ese bucle empezaría con <i = 0> y se ejecutaría si <i == 9>, es decir, nunca.
Tercero: fíjate en como has hecho el <for> para recorrer el vector y mostrarlo más abajo.

PD: Si este programa si lo estás haciendo tú te recuerdo lo que te comenté en tus primeros posts. En lugar de "#include <stdlib.h>" utiliza mejor "#include <cstdlib>" aunque el programa va a funcionar igual es más correcto usar las librerías de C++ en vez de las de C. Y en segundo lugar evita usar <system("pause")> como ya te comente es preferible sustituirlo por <cin.get()> a no ser que te obliguen a usar eso en la universidad (si usas <cin.get()> puedes eliminar la librería <cstdlib> ya que en este programa sólo es necesaria para hacer la llamada al sistema <system>.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Estudiante000000

#6
Cita de: YreX-DwX en 18 Noviembre 2018, 22:45 PM
Te ha faltado modificar la siguiente línea:
Código (cpp) [Seleccionar]

for(i=0;i=9;i++){

El segundo campo de <i = 9> como te hemos comentado antes no es correcto.
Primero: si tu idea era poner como condición que i sea igual a 9, entonces se pone como <i == 9> con dos iguales.
Segundo: en tal caso ese bucle empezaría con <i = 0> y se ejecutaría si <i == 9>, es decir, nunca.
Tercero: fíjate en como has hecho el <for> para recorrer el vector y mostrarlo más abajo.

PD: Si este programa si lo estás haciendo tú te recuerdo lo que te comenté en tus primeros posts. En lugar de "#include <stdlib.h>" utiliza mejor "#include <cstdlib>" aunque el programa va a funcionar igual es más correcto usar las librerías de C++ en vez de las de C. Y en segundo lugar evita usar <system("pause")> como ya te comente es preferible sustituirlo por <cin.get()> a no ser que te obliguen a usar eso en la universidad (si usas <cin.get()> puedes eliminar la librería <cstdlib> ya que en este programa sólo es necesaria para hacer la llamada al sistema <system>.


Listo ya le hice las correciones  pero me esta imprimiendo unos numeros extraños antes de darme cada numero par e impar , porque sera eso?



Código (cpp) [Seleccionar]


#include<iostream>
#include<cstdlib>

using namespace std;

int main(){

int numeros[10] = {1,2,3,4,5,6,7,8,9,10};
int pares[10];
int impares[10];
int i,aux1,aux2;

for(i=0;i<10;i++){
if(numeros[i]%2==0){
aux1=numeros[i];
   numeros[i]=pares[i];
   pares[i]=aux1;
}
else if(numeros[i]%2==1){
aux2=numeros[i];
numeros[i]=impares[i];
impares[i]=aux2;
}
}
     
     cout<<"Numeros Pares";
     for(i=0;i<10;i++){
      cout<<pares[i]<<" ";
     }

     cout<<"Numeros Impares";
     for(i=0;i<10;i++){
      cout<<impares[i]<<" ";
     }


cin.get();
return 0;
}










K-YreX

#7
El problema está en que los vectores <pares> e <impares> no están inicializados a 0. Entonces en el <for> como el primer número es impar se guarda en <impares[0]> pero ¿qué queda en pares[0]? basura, es decir, un número desconocido. Siguiente iteración: el 2 es par entonces se guarda en pares[1]; pero... ¿qué hay en impares[1]? basura. Y así hasta el final.

Para que veas lo que te digo si inicializamos los vectores <pares> e <impares> a 0 de esta manera:
Código (cpp) [Seleccionar]

int pares[10] = {0};
int impares[10] = {0};

Veremos como nos sale el resultado esperado pero intercalando un 0. El 0 sale porque ahora en vez de haber basura hemos llenado el vector de 0. Entonces en cada iteración se guarda el número en un vector y en el otro vector habrá un 0.

PD: Para mejorar un poco más el código, si para saber si es par hacemos:
Código (cpp) [Seleccionar]

if(numeros[i]%2==0)

Cuando es impar? Siempre que no sea par. Por lo tanto con poner el else sin otra condición el programa funciona correctamente y nos ahorramos el segundo <if>.

Ahora puedes pensar como hacer para no ir guardando un 0 en cada posición que te saltas. Pista: usas el índice i para recorrer todos los vectores, pero los vectores <pares> e <impares> no avanzan al mismo ritmo que <numeros> por lo que tendrás que usar índices distintos.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Estudiante000000

#8
Cita de: YreX-DwX en 18 Noviembre 2018, 23:52 PM
El problema está en que los vectores <pares> e <impares> no están inicializados a 0. Entonces en el <for> como el primer número es impar se guarda en <impares[0]> pero ¿qué queda en pares[0]? basura, es decir, un número desconocido. Siguiente iteración: el 2 es par entonces se guarda en pares[1]; pero... ¿qué hay en impares[1]? basura. Y así hasta el final.

Para que veas lo que te digo si inicializamos los vectores <pares> e <impares> a 0 de esta manera:
Código (cpp) [Seleccionar]

int pares[10] = {0};
int impares[10] = {0};

Veremos como nos sale el resultado esperado pero intercalando un 0. El 0 sale porque ahora en vez de haber basura hemos llenado el vector de 0. Entonces en cada iteración se guarda el número en un vector y en el otro vector habrá un 0.

PD: Para mejorar un poco más el código, si para saber si es par hacemos:
Código (cpp) [Seleccionar]

if(numeros[i]%2==0)

Cuando es impar? Siempre que no sea par. Por lo tanto con poner el else sin otra condición el programa funciona correctamente y nos ahorramos el segundo <if>.

Ahora puedes pensar como hacer para no ir guardando un 0 en cada posición que te saltas. Pista: usas el índice i para recorrer todos los vectores, pero los vectores <pares> e <impares> no avanzan al mismo ritmo que <numeros> por lo que tendrás que usar índices distintos.


Eso que me dices es algo que he tratado de aprender pero aun no lo aprendo pero me gustaria saber como es ,  debo declarar otra variable que se llame j?

Trate de colocarle una condicion para que si lo que encuentra en el vector es 0 no lo imprima pero no se hacerlo bien , ya no me imprime 0 pero me repite infinitamente el 2, queria ponerle esto.


Código (cpp) [Seleccionar]
while(pares[i]!=0){
cout<<pares[i]<<" ";
}


Eso dentro del primer for para imprimir los numeros pares pero no se como.

Estudiante000000

Ya logre que me salgan los numeros impares bien faltan los pares.