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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema l requerir números
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: problema l requerir números  (Leído 5,605 veces)
7hongo7

Desconectado Desconectado

Mensajes: 27



Ver Perfil
problema l requerir números
« en: 17 Febrero 2013, 03:15 am »

Hola aqui ando de nuevo con mis dudas sobre programacion jejejeje :huh: :huh: :huh: :huh:
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
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: problema l requerir números
« Respuesta #1 en: 17 Febrero 2013, 03:43 am »

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 Desconectado

Mensajes: 166


Ver Perfil
Re: problema l requerir números
« Respuesta #2 en: 17 Febrero 2013, 06:13 am »

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.

Código
  1. #include <stdio.h>
  2. #define SIZE 1000
  3.  
  4. int main (int argc, char **argv) {
  5.    int lista[SIZE];
  6.    char N[5]="";
  7.    int i,I;
  8.    while (1) {
  9.        fflush(stdin);
  10.        printf("Cantidad de elementos: ");
  11.        fgets(N,5*sizeof(char),stdin);
  12.        if (((I = atoi(N)) >= 1 ) && (I <= 1000)) break;
  13.    }
  14.    for(i=0; i<I; i++) {
  15.        printf("Elemento %d: ", i);
  16.        scanf("%d", &lista[i]); // para simplificar
  17.    }
  18.    return 0;
  19. }
  20.  

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

Puede que desees aprender a programar desde 0: www.espascal.es
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: problema l requerir números
« Respuesta #3 en: 17 Febrero 2013, 11:45 am »

Unas observaciones a ese código:

Código
  1. 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:

Código
  1. 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:

Código
  1. #include <stdio.h>
  2. #define SIZE 1000
  3.  
  4. int main (int argc, char **argv)
  5. {
  6.    int lista[SIZE];
  7.    char N[5]="";
  8.    int i,I;
  9.  
  10.    do
  11.    {
  12.        while (getchar() != '\n' && getchar() != EOF);
  13.        printf("Cantidad de elementos: ");
  14.        fgets(N,5*sizeof(char),stdin);
  15.  
  16.    } while (((I = atoi(N)) >= 1 ) && (I <= 1000));
  17.  
  18.    for(i=0; i<I; i++)
  19.    {
  20.        printf("Elemento %d: ", i);
  21.        scanf("%d", &lista[i]);
  22.    }
  23.    return 0;
  24. }

Por cierto, este sería su equivalente en C++ (por si acaso es este tu lenguaje):

Código
  1. #include <stdio.h>
  2.  
  3. using name space std;
  4.  
  5. const int = 1000;
  6.  
  7. int main (int argc, char **argv)
  8. {
  9.    int Lista[SIZE];
  10.    int N;
  11.    int i,I;
  12.  
  13.    do
  14.    {
  15.        cout<<"Cantidad de elementos: ";
  16.        cin>>N;
  17.    } while ((N >= 1 ) && (N <= 1000));
  18.  
  19.    for(i=0; i<I; i++)
  20.    {
  21.        cout<<"Elemento "<<i<<": ";
  22.        cin>>Lista[i];
  23.    }
  24.    return 0;
  25. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: problema l requerir números
« Respuesta #4 en: 17 Febrero 2013, 14:16 pm »

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:

Código
  1. #include <stdio.h>
  2. #define SIZE 1000
  3.  
  4. int main (int argc, char **argv)
  5. {
  6.    int lista[SIZE];
  7.    char N[5]="";
  8.    int i,I;
  9.  
  10.    do
  11.    {
  12.        while (getchar() != '\n' && getchar() != EOF);
  13.        printf("Cantidad de elementos: ");
  14.        fgets(N,5*sizeof(char),stdin);
  15.  
  16.    } while (((I = atoi(N)) < 1 ) || (I > 1000));
  17.  
  18.    for(i=0; i<I; i++)
  19.    {
  20.        printf("Elemento %d: ", i);
  21.        scanf("%d", &lista[i]);
  22.    }
  23.    return 0;
  24. }
  25.  

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 :P
En línea

Puede que desees aprender a programar desde 0: www.espascal.es
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema l requerir números
« Respuesta #5 en: 17 Febrero 2013, 17:34 pm »

¿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?   :silbar:

Código
  1. #include <stdio.h>
  2.  
  3. int main (void) {
  4.    int i,n;
  5.    do {
  6.      printf("Cantidad de elementos: ");
  7.      fflush (stdout);
  8.      scanf ("%d",&n);
  9.    }while (n<1 || n>1000);
  10.    int lista[n];
  11.    for(i=0; i<n; i++){
  12.        printf("Elemento %d: ", i+1);
  13.        scanf("%d", &lista[i]);
  14.    }
  15.    return 0;
  16. }
  17.  

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.  :rolleyes:
En línea

BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: problema l requerir números
« Respuesta #6 en: 17 Febrero 2013, 17:38 pm »

Porque C permite declarar cualquier elemento en cualquier lugar :P

Si no también se podría haber usado memoria dinámica (aunque ocupe más memoria por cada componente).
En línea

Puede que desees aprender a programar desde 0: www.espascal.es
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema l requerir números
« Respuesta #7 en: 17 Febrero 2013, 18:10 pm »

Porque C permite declarar cualquier elemento en cualquier lugar :P


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 Desconectado

Mensajes: 166


Ver Perfil
Re: problema l requerir números
« Respuesta #8 en: 17 Febrero 2013, 20:42 pm »

Te di la razón antes :P

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

Puede que desees aprender a programar desde 0: www.espascal.es
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema l requerir números
« Respuesta #9 en: 17 Febrero 2013, 21:00 pm »


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...

, esa es la gracia de no tener que predefinir un tamaño para el array.

Saluditos!.
En línea

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

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines