Programación General > C/C++
Arreglos unidimensionales!
diego.martinez:
--- Cita de: "asyba" ---y cuando pongo si n == 0 que mediga que no carge nada y si n>0 que haga lo que esta dentro de esas llavaes,,, pero lo que me pasa es que siempre me dice usted no hacargado datos osea me toma n==0 y eh cargado datos..... me ayudan...
--- Fin de la cita ---
si te fijas, en el codigo tu pones :
--- Código: C++ --- case 5: mostrar(v,n); break;
cuando llamas a mostrar , n tiene un valor indeterminado que se carga en el scope de la funcion main. CERO.
Si quieres que el valor de n se mantenga entre funciones tienes que cambiarlo pasandolo por referencia.
Traduzco: cuando defines una variable, esa variable solo mantiene ese valor en la funcion en la que se crea. Cuando la pasas como parametro, se pasa una COPIA de esa variable. La original no la modificas, luego, n siempre vale lo que valia en Main, cosa que es indefinida.
Cuando modifias n en las funciones estas cambiando una COPIA del valor de n. Al volver a la funcion que la llama , main, la variable "vuelve" a su valor anterior (no vuelve por que nunca cambió, pero bueno).
Para evitar esto, modifica las funciones para usar n por referencia.
--- Código: C++ --- void cargar(int v[50],int * n); //le pasamos la DIRECCION de la variable. Modificaremos el CONTENIDO de esa dirección. void cargar(int v[50],int * n){int NuevaN; ... codigo cin>>NuevaN;*n=NuevaN; //metemos el nuevo valor en la variable ... codigo de hacer cosas } //en main la usarias: cargar(v, &n); //le pasamos la DIRECCION de n por referencia.
Asi , en todas las funciones estarias usando la misma variable, y en main tendrias siempre la n actualizada.
Si tienes dudas sobre el paso de parametros por referencia pregunta. No he querido ser muy extenso.
espero que ayude :hola:
asyba:
graxxx por eso del & haora si me anda
otras 2 ultimas cosas
--- Código: C++ ---void menor(int v[100],int n){ int i,j; ///* clrscr(); if(n>0) { for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { if(v[i]<j) { cout<<"El menor valor contenido en el arreglo es: "<<v[i]<<" y se encuentra en el componente: "<<i; } } } } else { cout<<"Usted no ha cargado ningun valor!!!"; } cout<<"nPrecione la tecla ENTER para volver al menu."; getch(); }
aca no se si esta bien la aprte de j si es que esta bien planteado asi......
y en este
--- Código: C++ ---void negativo(int v[50], int n){ int i,x; clrscr(); if(n>0) { for(i=0;i<n;i++) { if(v[i]<0) { x++; cout<<"La cantidad de numeros negativos que tiene el arreglo son: "<<x; } } cout<<"No se encuentran valores negativos en el arreglo!!!"; } else { cout<<"Usted no ha cargado ningun valor!!!"; } cout<<"nPrecione la tecla ENTER para volver al menu."; getch();}
no se por que me da numeros cualquiera en la cantidad,, y repite varias veces el cartel La cantidad de numeros negativos son.....
diego.martinez:
--- Cita de: "asyba" ---if(v<j)
--- Fin de la cita ---
en esta linea estas comparando el valor del array con el INDICE! seguramente querias
--- Código: C++ --- if(v[i]<v[j])
AUN ASI, eso no te encuentra el menor!
Lo que tienes que hacer es:
1) coges el primer elemento del array
2) lo copias en una variable y asumes que es el numero menor
3) iteras el vector:
si el elemento n del vector es < que el numero menor:
copias el elemento n en el numero menor
asi al terminar tendras en esa variable el menor numero del array (o arreglo).
--- Cita de: "asyba" ---
for(i=0;i<n;i++)
{
if(v<0)
{
x++;
cout<<"La cantidad de numeros negativos que tiene el arreglo son: "<<x;
}
}
--- Fin de la cita ---
es que realmente tienes el escribir esa frase DENTRO del for, luego lo hara N veces. Pon el cout al final y en el ciclo simplemente incrementa una variable cada vez que encuentres uno negativo.
:hola:
Evoltd3v:
Holas, espero hacerme entender ; en la funcion menor que pusiste:
--- Código: C++ --- void menor(int v[100],int n) // Mas arriba lo declaraste para que espere 50 elementos y no 100{ int i,j; ///* clrscr(); if(n>0) { for(i=0;i<n;i++) { for(j=i+1;j<n;j++) //¿Creo que estas intentando usar el metodo de la burbuja? { if(v[i]<j) //Aqui estas comparando el valor de cada elemento del vector con el valor de la variable j //j vale uno en la primera vuelta y se va sumando una unidad en cada vuelta { cout<<"El menor valor contenido en el arreglo es: "<<v[i]<<" y se encuentra en el componente: "<<i; /*Este mensaje aparece cada vez que se cumpla la condicion, lo que debiste haber hecho es mostrarlo al final; es decir una vez hallado el valor menor del array */ } } } } else { cout<<"Usted no ha cargado ningun valor!!!"; } cout<<"nPrecione la tecla ENTER para volver al menu."; getch();
Pudiste haber usado un solo for para hallar el menor de todos los valores ingresados:
--- Código: C++ --- void menor(int v[50],int n){ int r = 0; if(n>0){ for(i = 0; i < n; i++){ if(v[i] < v[r]){ r = i; } } } else{ printf("nUsted no ha cargado ningun valor!!!n"); } printf("El menor valor hallado es el:%d", v[r]);}
Es mi sugerencia, espero haberte ayudado.
Navegación
[*] Página Anterior
Ir a la versión completa