Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sora_ori en 18 Abril 2013, 21:22 pm



Título: While de numeros hasta introducir uno más pequeño
Publicado por: sora_ori en 18 Abril 2013, 21:22 pm
Buenas,

No consigo hacer este programa en C:

  • Escribir numeros por teclado
  • Acabará cuando el ultimo numero sea más pequeño que el anterior introducido
  • Nos dira la largada de escala, es decir, todos los numeros introducidos excepto el ultimo.

Ejemplo: 3, 5, 6, 6, 8, 9, 11, 4

El programa termina cuando introducimos el número 4, y nos responderá 7, que es la cantidad de números que hemos entrado antes del 4.




Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(){
  6.    int num1, num2;
  7.    int i=0;
  8.  
  9.  
  10.    while (num2 <= num1){
  11.          printf("Escribe un numero: ");
  12.          scanf("%d", &num1);
  13.          num2 = num1;
  14.          if (num2 <= num1){
  15.                   i++;
  16.          }
  17.    }
  18.  
  19.  
  20.        printf("Se han contado %d veces", i-1);
  21.  
  22.  
  23.  
  24.    printf("\n\n");
  25.  system("pause");
  26.  return 0;
  27. }
  28.  


Título: Re: While de numeros hasta introducir uno más pequeño
Publicado por: pacoperico en 18 Abril 2013, 21:52 pm
Estas usando las variables num1 y num2 antes de darles cualquier valor. Por ejemplo puedes hacer un do..while en lugar del while que tienes.


Título: Re: While de numeros hasta introducir uno más pequeño
Publicado por: leosansan en 18 Abril 2013, 21:58 pm
Sin entrar en memoria dinámica para abreviar, esto podría servirte, creo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int main(){
  6.    int num1 ,num2;
  7.    int i=0;
  8.    printf("Escribe un numero: ");
  9.    scanf("%d", &num1);
  10.    for (i=1;;i++){
  11.          printf("Escribe un numero: ");
  12.          scanf("%d", &num2);
  13.          if (num2<num1)
  14.            break;
  15.          else
  16.            num1=num2;
  17.    }
  18.    printf("Se han contado %d veces", i);
  19.    printf("\n\n");
  20.    system("pause");
  21.    return 0;
  22. }
  23.  
Saluditos!. .... (http://st.forocoches.com/foro/images/smilies/simba1.gif)

P.D: Perdón, era con un while:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. int main(){
  6.    int num1 ,num2;
  7.    int i=0;
  8.    printf("Escribe un numero: ");
  9.    scanf("%d", &num1);
  10.    while (1){
  11.          i++;
  12.          printf("Escribe un numero: ");
  13.          scanf("%d", &num2);
  14.          if (num2<num1)
  15.            break;
  16.          else
  17.            num1=num2;
  18.    }
  19.    printf("Se han contado %d veces", i);
  20.    printf("\n\n");
  21.    system("pause");
  22.    return 0;
  23. }
  24.  
  25.  

Saluditos otra vez ....(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: While de numeros hasta introducir uno más pequeño
Publicado por: sora_ori en 19 Noviembre 2013, 11:21 am
Perdón por revivir el tema... Estoy haciendo este ejercicio en Python y me da error en el bucle.

SOLUCIONADO!

Código
  1. #!/usr/bin/env python
  2.  
  3. num1 = input('Escribe un numero: ')
  4.  
  5. i=0
  6.  
  7. while (True):
  8. i=i+1
  9. num2 = input('Escribe un numero: ')
  10.  
  11. if (num2<num1):
  12. break
  13. else:
  14. num1=num2
  15.  
  16. print 'Se han contado',i,'veces'
  17.  


Título: Re: While de numeros hasta introducir uno más pequeño
Publicado por: leosansan en 19 Noviembre 2013, 14:58 pm
Supongo que estas usando Python 3.X, más que nada por el uso que haces del input.

Pues bien, Lo único que aparentemente te falla es la ausencia de los paréntesis en la instrucción print, que debería ser:

Código
  1. print ('Se han contado',i,'veces')

Con esa simple corrección el código se ejecuta sin problemas.

Saluditos!!¡...


Título: Re: While de numeros hasta introducir uno más pequeño
Publicado por: sora_ori en 19 Noviembre 2013, 20:22 pm
Ya lo había solucionado, gracias por la ayuda de todos modos :)

Lo había editado el msg con el código correcto.


Saludos