elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda .
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Duda .  (Leído 4,931 veces)
Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Duda .
« en: 18 Noviembre 2018, 19:58 pm »

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
  1.  
  2. #include<iostream>
  3. #include<stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. int numeros[10] = {1,2,3,4,5,6,7,8,9,10};
  10. int pares[10];
  11. int impares[10];
  12. int i,aux1,aux2;
  13.  
  14. for(i=0;i=9;i++){
  15. if(numeros[i]%2==0){
  16. aux1=numeros[i];
  17.    numeros[i]=pares[i];
  18.    pares[i]=aux1;
  19. }
  20. else if(numeros[i]%2==0){
  21. aux2=numeros[i];
  22. numeros[i]=impares[i];
  23. impares[i]=aux2;
  24. }
  25. }
  26.  
  27. for(i=0;i=9;i++){
  28.  
  29. cout<<"\nNUMEROS PARES";
  30. cout<<pares[i]<<endl;
  31. cout<<"\n";
  32. cout<<"\n";
  33. cout<<"\n";
  34. cout<<"\n";
  35. cout<<"\nNUMEROS IMPARES";
  36. cout<<impares[i]<<endl;
  37. }
  38.  
  39. system("pause");
  40. return 0;
  41. }
  42.  
  43.  
  44.  


EL PROGRAMA NO ME MUESTRA ERROR NO SE QUE PASA.



« Última modificación: 19 Noviembre 2018, 03:53 am por Estudiante000000 » En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda .
« Respuesta #1 en: 18 Noviembre 2018, 20:37 pm »

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


En línea

Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Duda .
« Respuesta #2 en: 18 Noviembre 2018, 21:46 pm »

Mira esto:
Código:
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?
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Duda .
« Respuesta #3 en: 18 Noviembre 2018, 22:04 pm »

Mira esto:
Código:
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
  1. 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
  1. cout << "Numeros pares:"
  2. for(i = 0; i < 10; i++)
  3.    cout << pares[i] << " ";

Y lo mismo para los impares.
En línea

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

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Duda .
« Respuesta #4 en: 18 Noviembre 2018, 22:43 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
  1. 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
  1. cout << "Numeros pares:"
  2. for(i = 0; i < 10; i++)
  3.    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
  1.  
  2. #include<iostream>
  3. #include<stdlib.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. int numeros[10] = {1,2,3,4,5,6,7,8,9,10};
  10. int pares[10];
  11. int impares[10];
  12. int i,aux1,aux2;
  13.  
  14. for(i=0;i=9;i++){
  15. if(numeros[i]%2==0){
  16. aux1=numeros[i];
  17.    numeros[i]=pares[i];
  18.    pares[i]=aux1;
  19. }
  20. else if(numeros[i]%2==1){
  21. aux2=numeros[i];
  22. numeros[i]=impares[i];
  23. impares[i]=aux2;
  24. }
  25. }
  26.  
  27.      cout<<"Numeros Pares";
  28.      for(i=0;i<10;i++){
  29.       cout<<pares[i]<<" ";
  30.      }
  31.  
  32.  
  33.          cout<<"Numeros Impares";
  34.      for(i=0;i<10;i++){
  35.       cout<<impares[i]<<" ";
  36.      }
  37.  
  38.  
  39. system("pause");
  40. return 0;
  41. }
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Duda .
« Respuesta #5 en: 18 Noviembre 2018, 22:45 pm »

Te ha faltado modificar la siguiente línea:
Código
  1. 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>.
« Última modificación: 18 Noviembre 2018, 22:54 pm por YreX-DwX » En línea

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

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Duda .
« Respuesta #6 en: 18 Noviembre 2018, 23:39 pm »

Te ha faltado modificar la siguiente línea:
Código
  1. 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
  1.  
  2. #include<iostream>
  3. #include<cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8.  
  9. int numeros[10] = {1,2,3,4,5,6,7,8,9,10};
  10. int pares[10];
  11. int impares[10];
  12. int i,aux1,aux2;
  13.  
  14. for(i=0;i<10;i++){
  15. if(numeros[i]%2==0){
  16. aux1=numeros[i];
  17.    numeros[i]=pares[i];
  18.    pares[i]=aux1;
  19. }
  20. else if(numeros[i]%2==1){
  21. aux2=numeros[i];
  22. numeros[i]=impares[i];
  23. impares[i]=aux2;
  24. }
  25. }
  26.  
  27.      cout<<"Numeros Pares";
  28.      for(i=0;i<10;i++){
  29.       cout<<pares[i]<<" ";
  30.      }
  31.  
  32.      cout<<"Numeros Impares";
  33.      for(i=0;i<10;i++){
  34.       cout<<impares[i]<<" ";
  35.      }
  36.  
  37.  
  38. cin.get();
  39. return 0;
  40. }
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
« Última modificación: 18 Noviembre 2018, 23:41 pm por Estudiante000000 » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Duda .
« Respuesta #7 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
  1. int pares[10] = {0};
  2. 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
  1. 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.
« Última modificación: 18 Noviembre 2018, 23:57 pm por YreX-DwX » En línea

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

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Duda .
« Respuesta #8 en: 19 Noviembre 2018, 01:25 am »

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
  1. int pares[10] = {0};
  2. 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
  1. 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
  1. while(pares[i]!=0){
  2. cout<<pares[i]<<" ";
  3. }
  4.  

Eso dentro del primer for para imprimir los numeros pares pero no se como.
« Última modificación: 19 Noviembre 2018, 01:28 am por Estudiante000000 » En línea

Estudiante000000

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: Duda .
« Respuesta #9 en: 19 Noviembre 2018, 01:42 am »

Ya logre que me salgan los numeros impares bien faltan los pares.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,706 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 5,739 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
Ngeooz 6 8,803 Último mensaje 2 Diciembre 2013, 19:33 pm
por Ngeooz
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,164 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
[DUDA] Crear servidor telnet o ssh (Windows y Linux) y otra duda
Redes
MDd2 4 3,936 Último mensaje 13 Abril 2017, 18:29 pm
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines