Autor
|
Tema: problema l requerir números (Leído 6,412 veces)
|
7hongo7
Desconectado
Mensajes: 27
|
Hola aqui ando de nuevo con mis dudas sobre programacion jejejeje bueno espero me entiendan asi voy a plantear el problema: Tengo un entero I que va de 1 hasta 1000 y enteros N1,N2,...,Nn el punto es que tengo que introducir un valor I por ejemplo 5 y despues introducir 5 valores de N, y después correr de nuevo el programa y si quiero pedir que I sea 7 e introducir 7 valores de N, osea que yo pueda meter cualquier numero e introducir esa cantidad de numeros. osea 4 1 1 1 1 ó 5 6 3 4 5 2 ó 2 2 1 No se si me supe entender me dijeron que era con un ciclo while o for pero esa es mi duda como hacer que solamente meta los valores que me piden sin mas ni menos
|
|
|
En línea
|
|
|
|
engel lex
|
que llevas de código? en donde exactamente es tu duda?
por lo que entiendo con vectores y un while deberia bastar
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
A ver, en C y parecidos. Usar un for, while o do while es prácticamente lo mismo. Aunque, teóricamente, usaremos un for cuando haya unos límites fijos (punto de partida y punto de salida). Usaremos un ciclo do while, cuando desconozcamos alguno de los límites del recorrido y además sepamos que el ciclo se va a ejecutar como mínimo una vez. Usaremos el ciclo while en cualquier otro caso. En este caso, teóricamente lo correcto sería usar un for porque conocemos los límites: 1..I, donde I es introducido por el usuario. #include <stdio.h> #define SIZE 1000 int main (int argc, char **argv) { int lista[SIZE]; char N[5]=""; int i,I; while (1) { printf("Cantidad de elementos: "); fgets(N ,5*sizeof(char),stdin ); if (((I = atoi(N )) >= 1 ) && (I <= 1000)) break; } for(i=0; i<I; i++) { scanf("%d", &lista [i ]); // para simplificar } return 0; }
Espero que este código te sirva de ejemplo. Los usuarios de este foro (incluyéndome a mí) rara vez facilitan tanto las cosas. Trata de comprender el código y si tienes alguna duda, tan sólo pregunta. Ten claro que si no programas tú mismo, jamás aprenderás. "La práctica hace al maestro."
|
|
« Última modificación: 17 Febrero 2013, 06:27 am por BatchianoISpyxolo »
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Unas observaciones a ese código: fflush(stdin);
Eso no es estándar, solo funcionará en Windows. Es una buena práctica usar las cosas lo más estándar posible, de esa forma funcionará en casi cualquier plataforma. Este es su equivalente: while (getchar() != '\n' && getchar() != EOF);
Así mismo, en lugar de usar un break. Creo que es más correcto poner la condición directamente en el while. Así te ahorras una condición. Por último, creo que las llaves quedan mejor abajo. Este sería mi código: #include <stdio.h> #define SIZE 1000 int main (int argc, char **argv) { int lista[SIZE]; char N[5]=""; int i,I; do { printf("Cantidad de elementos: "); fgets(N ,5*sizeof(char),stdin ); } while (((I = atoi(N )) >= 1 ) && (I <= 1000)); for(i=0; i<I; i++) { } return 0; }
Por cierto, este sería su equivalente en C++ (por si acaso es este tu lenguaje): #include <stdio.h> using name space std; const int = 1000; int main (int argc, char **argv) { int Lista[SIZE]; int N; int i,I; do { cout<<"Cantidad de elementos: "; cin>>N; } while ((N >= 1 ) && (N <= 1000)); for(i=0; i<I; i++) { cout<<"Elemento "<<i<<": "; cin>>Lista[i]; } return 0; }
|
|
|
En línea
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
Gracias por tus aclaraciones y en este caso el ciclo do while era más apropiado. De todas formas fíjate que al cambiar de ciclo su lógica también cambia: #include <stdio.h> #define SIZE 1000 int main (int argc, char **argv) { int lista[SIZE]; char N[5]=""; int i,I; do { printf("Cantidad de elementos: "); fgets(N ,5*sizeof(char),stdin ); } while (((I = atoi(N )) < 1 ) || (I > 1000)); for(i=0; i<I; i++) { } return 0; }
Pedir número mientras que I sea menor que 1 o que I sea mayor que 1000. Por otra parte, con el getchar() para salto de línea y final de archivo no lee bien la entrada ._. Será que no lo sé usar
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
¿Me he perdido algo en el camino?.¿ Qué sentido tiene reservar un array de 1000 elementos cuando puede que sólo tenga 10?. ¿No creéis que es mejor crearlo sobre la marcha? #include <stdio.h> int main (void) { int i,n; do { printf("Cantidad de elementos: "); fflush (stdout); scanf ("%d",&n); }while (n<1 || n>1000); int lista[n]; for(i=0; i<n; i++){ printf("Elemento %d: ", i+1); scanf("%d", &lista[i]); } return 0; }
Saluditos!.P.D: Por cierto, el uso de "while (getchar() != '\n' && getchar() != EOF);" es usualmente usado para limpiar el buffer "después" de una entrada, pero donde está no tiene como mucho sentido.
|
|
|
En línea
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
Porque C permite declarar cualquier elemento en cualquier lugar Si no también se podría haber usado memoria dinámica (aunque ocupe más memoria por cada componente).
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Porque C permite declarar cualquier elemento en cualquier lugar Creo que no has entendido el sentido de mi observación. Precisamente como se puede declarar en cualquier lugar, por qué dimensionar la "a priori" a 1000 en lugar de "esperar" a recibir la entrada de la dimensión y dimensionara justito después con ese valor, que es justo lo que yo hago. El ya hacerlo estáticamente o dinámicamente sería otra historia a debatir.
Saluditos!.
|
|
|
En línea
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
Te di la razón antes Ahora lo que no tengo claro es que tú pides el tamaño del array al usuario... y, ¿reservamos la memoria estática en tiempo de ejecución? Supongo que será posible...
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Ahora lo que no tengo claro es que tú pides el tamaño del array al usuario... y, ¿reservamos la memoria estática en tiempo de ejecución? Supongo que será posible...
Sí, esa es la gracia de no tener que predefinir un tamaño para el array.Saluditos!.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con generador de numeros
Programación Visual Basic
|
bautistasbr
|
6
|
2,491
|
11 Julio 2006, 22:41 pm
por bautistasbr
|
|
|
[Problema] Programa para averiguar números pares entre 2 números
Programación Visual Basic
|
Dreamaker
|
3
|
5,846
|
21 Mayo 2010, 23:45 pm
por Shell Root
|
|
|
Como convertir numeros decimales a numeros binario en c++?
Programación C/C++
|
fco_noh
|
3
|
9,269
|
31 Agosto 2010, 07:38 am
por do-while
|
|
|
Ordenar 5 números de menor a mayor e imprimir los números impares
Programación C/C++
|
ERIK546
|
6
|
25,749
|
23 Junio 2012, 00:36 am
por ERIK546
|
|
|
Problema con números largos
Programación C/C++
|
DickGumshoe
|
6
|
3,947
|
5 Julio 2012, 12:28 pm
por DickGumshoe
|
|