Páginas: [1]
|
 |
|
Autor
|
Tema: Vectores! (Leído 297 veces)
|
Nocturno7cr
Desconectado
Mensajes: 21
|
Hola de nuevo!! Estoy ahora intentando comprender a nuestros amigos los vectores con un problema que debe mostrar por pantalla si contiene algun valor cero y si es creciente. PD:Por favor ,no quiero un codigo hecho quiero que reactiveis ,con comentarios,la maquina oxidada que hay en mi cabeza,gracias! #include<stdio.h> #include<conio.h> #include<iostream> main() { int i,max=10,a; bool ok=!true; printf("\nTeclee numero de elementos (maximo 10): \n"); scanf("%d",&max); typedef int vector [max]; vector n; for(i=0;i<max;i++) { printf("\nDame elemento :\n"); scanf("%d",&a); if(n[i]==0) ok=true; } printf("\nSi,contiene algun 0\n"); system("PAUSE"); fflush(stdin); getchar(); }
|
|
|
|
« Última modificación: 06 Agosto 2008, 22:16 por Nocturno7cr »
|
En línea
|
|
|
|
Kerber0
Desconectado
Mensajes: 103
Yo me Amo!
|
if(n=0), esta condicion siempre es verdadera ya que asignas a n=0, para comparar usa el '=='
|
|
|
|
|
En línea
|
|
|
|
Flakito81
Desconectado
Mensajes: 378
|
Veo varias cosas extrañas: 1- Cuando se declara typedef int vector [max]; max deberia de ser una constante y no una variable. Este tipo de declaraciones es para que se reserve espacio en tiempo de compilación, para hacer un vector dinámico existe el malloc. 2- utilizas iostream: esta cabecera es especifica del C++, y no del C, y tu programa está escrito en este último. Si lo has puesto por el bool, resulta mejor que te crees una variable short int y luego crees unas macros con true 1 false 0 (el false tmb existe y es más fácil de identificar q el !true, aunque el resultado sea el mismo) 3- No inicializas el vector: Cuando declaras un vector (o cualquier otra variable) no sabes que valor toman, asi q spara comenzar a trabajar con el vector has de darle valores. 4- La variable a no la estas utilizando. 5- el n == 0, pues lo mismo que el paso 3.
Imagino que la variable a la quieres utilizar para darle valores a la posición, y con el if pretendes encontrar si hay un cero, ¿pero para eso te hace falta utilizar un vector? Lo lógico es que leas el número de veces que vas a repetir el proceso y que sea la propia variable a la que kieras evaluar, saliendo si se teclea un cero (0). Como es normal el bucle menos apropiado (aunque se puede mejorar un poco) es el for, lo mejor sería un do-while o un while controlando las dos condiciones de parada que seria i>man y a == 0. Tal como tienes el código al encontrar un cero(0) el bucle terminaría a las max-iteraciones cuando no hace falta ya que se puede salir a la primera coincidencia.
Saludos!
|
|
|
|
|
En línea
|
|
|
|
|
ghastlyX
|
Hay dos cosas que he dicho ya varias veces que me molestan bastante: - conio.h NO es estándar, no se debe usar, lo único que hace es generar malos hábitos, aparte de que realmente no la utilizas en este código. - fflush no tiene comportamiento definido con stdin, no hay que usarlo así. Ahora vamos al programa, lo de comprobar si hay ceros está mal, pase lo que pase muestra que sí que hay tal y como está el código. Deberías añadir antes del printf algo así: if(ok) printf("\nSi,contiene algun 0\n");Además, en el bucle también hay un fallo, ya que el número introducido lo recoges con la variable a, pero antes de meterlo en el vector, que ni lo haces, comparas si el vector es cero. Si quieres usar vectores para el programa, lo que no es realmente necesario, haz algo así: scanf("%d",&n[i]);Y finalmente, como ya te han dicho, el bucle es inútil que si sólo mira si hay ceros siga mirando cuando ha encontrado ya uno. Ahora da igual, pero si en vez de 10 el máximo fueran 20000, habría bastante diferencia... añade a la condición del bucle que no haya ningún cero: for(i=0;i<max && !ok;i++) Un saludo de ghastlyX 
|
|
|
|
|
En línea
|
|
|
|
ҒrεακΠιи∂
Desconectado
Mensajes: 155
|
Buenas if(n[ i]=0), esta condicion siempre es verdadera ya que asignas a n[ i]=0, para comparar usa el '=='
En realidad es siempre falsa, pero es solo un detalle Salu2, FreakMind
|
|
|
|
|
En línea
|
Connoisseurs of C semantics find C++ inferior to ++C 
|
|
|
EvilGoblin
Desconectado
Mensajes: 882
LAIN IS LAIN
|
int *vector; int cantidad =0;
vector = (int *) malloc(2*sizeof(int));
if (vector == NULL) { printf("Error al Solicitar memoria\r\n"); exit(1); }
while(1) { printf("ingrese un valor: "); scanf("%i";&vector[cantidad]); if(vector[cantidad] ==0) break;
cantidad++; vector= (int *) realloc((2+cantidad)*sizeof(int)); }
for(int i=0;i<cantidad;i++) { printf("%i) %i\r\n",i,vector[i]); }
algo asi seria xD no lo probe  no tengo un compilador a mano pero fijate si funciona y sino . es poco lo que hay q modificar =)  es la mejor forma
|
|
|
|
|
En línea
|
 Experimental Serials Lain
|
|
|
Enrikz
Desconectado
Mensajes: 4
|
No entiendo por qué os complicáis tanto: #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; //numero elementos vector<int> v(n,0); for(int i=0;i<n;i++) cin >> v[i]; //entrada de los n elementos bool is=0; for(int i=0;i<n and !is;i++) is=(v[i]==0); if(is) cout << "Almenos uno es cero" << endl; else cout << "No hay ningun cero" << endl; } Y para compilar: g++ archivo.cpp -o archivo.exe -O2
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|