Autor
|
Tema: Duda . (Leído 5,038 veces)
|
Estudiante000000
Desconectado
Mensajes: 38
|
|
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. #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.
|
|
« Última modificación: 19 Noviembre 2018, 03:53 am por Estudiante000000 »
|
En línea
|
|
|
|
|
Estudiante000000
Desconectado
Mensajes: 38
|
|
Re: Duda .
« Respuesta #2 en: 18 Noviembre 2018, 21:46 pm » |
|
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
|
|
Re: Duda .
« Respuesta #3 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: 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: cout << "Numeros pares:" for(i = 0; i < 10; i++) cout << pares[i] << " ";
Y lo mismo para los impares.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Estudiante000000
Desconectado
Mensajes: 38
|
|
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: 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: 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 : #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; }
|
|
|
En línea
|
|
|
|
K-YreX
|
|
Re: Duda .
« Respuesta #5 en: 18 Noviembre 2018, 22:45 pm » |
|
Te ha faltado modificar la siguiente línea: 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
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Estudiante000000
Desconectado
Mensajes: 38
|
|
Re: Duda .
« Respuesta #6 en: 18 Noviembre 2018, 23:39 pm » |
|
Te ha faltado modificar la siguiente línea: 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? #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; }
|
|
« Última modificación: 18 Noviembre 2018, 23:41 pm por Estudiante000000 »
|
En línea
|
|
|
|
K-YreX
|
|
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: 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: 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
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Estudiante000000
Desconectado
Mensajes: 38
|
|
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: 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: 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. while(pares[i]!=0){ cout<<pares[i]<<" "; }
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
Mensajes: 38
|
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
|
revenge1252
|
9
|
9,763
|
13 Febrero 2008, 21:41 pm
por revenge1252
|
|
|
Duda duda y duda de Metasploit
Bugs y Exploits
|
huber_nomas
|
4
|
5,789
|
17 Febrero 2012, 14:00 pm
por MauroMasciar
|
|
|
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
|
Ngeooz
|
6
|
8,869
|
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,330
|
12 Febrero 2014, 17:55 pm
por MrMaticool
|
|
|
[DUDA] Crear servidor telnet o ssh (Windows y Linux) y otra duda
Redes
|
MDd2
|
4
|
4,037
|
13 Abril 2017, 18:29 pm
por Randomize
|
|