Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Danichi en 18 Enero 2014, 00:12 am



Título: Duda lenguaje C
Publicado por: Danichi en 18 Enero 2014, 00:12 am
Buenas noches.
Antes decir que soy un auténtico novato en esto de la programación, pero en su momento tuve que hacer una cosillas en lenguaje C y me picó la curiosidad :p

La duda que tengo es que estaba realizando un programita para familiarizarme con los do while y los if else y me encontré con dos variantes:
Primera

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int d=4;
    int v;
    printf ("introduzca un numero del 1 al 10\n");
    scanf("%d",&v);
   

   
   do
 {
       
    printf ("El numero escogido es diferente al que estoy pensando\n");
    printf ("Escoja otro\n");
     scanf("%d",&v);
 }
while (v!=d);

     

printf ("Muy bien, ese es el numero\n");

  system("PAUSE");   
  return 0;
}

segunda

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
     int d=4;
    int v;
    printf ("introduzca un numero del 1 al 10\n");
    scanf("%d",&v);


    do
    {
      if ((v<1)||(v>10))
         {
          printf ("Ese numero no esta entre 1 y 10. Escribe otro numero\n");
          scanf("%d",&v);                 
         }
      else
         {
           printf ("No ha acertado. Escriba otro numero\n");
          scanf("%d",&v);                               
         }         
    }
    while (v!=d);
   
    printf ("Muy bien, ese es el numero\n");
  system("PAUSE");   
  return 0;
}

El problema es que en el primero si el primer número que pongo es el 4 no me hace un primer bucle. Sin embargo en el segundo sí me hace un primer bucle si escojo el cuatro. Y no sé por qué, pues pienso que la estructura es la misma.
Disculpen por el lío  y muchas gracias ;)


Título: Re: Duda lenguaje C
Publicado por: engel lex en 18 Enero 2014, 01:27 am
altes de reponderte algo, usa las etiquetas GeSHI del foro (arriba de los emoticonos "un cuadro desplegable que dice GeSHI) escojes C y pegas allí tu codigo para que sea mas facil de leer :P


Título: Re: Duda lenguaje C
Publicado por: Danichi en 18 Enero 2014, 02:06 am
ok muchas gracias  :)

Primera versión


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    int d=4;
  7.    int v;
  8.    printf ("introduzca un numero del 1 al 10\n");
  9.    scanf("%d",&v);
  10.  
  11.  
  12.  
  13.   do
  14. {
  15.  
  16.    printf ("El numero escogido es diferente al que estoy pensando\n");
  17.    printf ("Escoja otro\n");
  18.     scanf("%d",&v);
  19. }
  20. while (v!=d);
  21.  
  22.  
  23.  
  24. printf ("Muy bien, ese es el numero\n");
  25.  
  26.  system("PAUSE");
  27.  return 0;
  28. }
  29.  

Segunda versión

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     int d=4;
  7.    int v;
  8.    printf ("introduzca un numero del 1 al 10\n");
  9.    scanf("%d",&v);
  10.   if (v!=d)
  11. {
  12.    do
  13.    {
  14.      if ((v<1)||(v>10))
  15.         {
  16.          printf ("Ese numero no esta entre 1 y 10. Escribe otro numero\n");
  17.          scanf("%d",&v);                
  18.         }
  19.      else
  20.         {
  21.           printf ("No ha acertado. Escriba otro numero\n");
  22.          scanf("%d",&v);                                
  23.         }          
  24.    }
  25.    while (v!=d);
  26. }    
  27.    printf ("Muy bien, ese es el numero\n");
  28.  system("PAUSE");
  29.  return 0;
  30. }

El programa es un poco tonto pero bueno, para familiarizarme me viene bien. Consiste en adivinar un número ya fijado en el código. En el primer caso, al ponerlo bien a la primera el programa reconoce que está bien. Pare el segundo programa no te lo reconoce a la primera, sí a la segunda. La única diferencia es que en el segundo hay un if-else dentro de un do-while y en el primero sólo está el do-while.
No sé si se entiende bien  :-\


Título: Re: Duda lenguaje C
Publicado por: engel lex en 18 Enero 2014, 02:15 am
Citar
El programa es un poco tonto pero bueno, para familiarizarme me viene bien. Consiste en adivinar un número ya fijado en el código. En el primer caso, al ponerlo bien a la primera el programa reconoce que está bien. Pare el segundo programa no te lo reconoce a la primera, sí a la segunda. La única diferencia es que en el segundo hay un if-else dentro de un do-while y en el primero sólo está el do-while.


creo que tus casos están al revés...
en el primero SIEMPRE va a estar "malo" a la primera
porque
Código
  1.  do
  2. {
  3.  
  4.    printf ("El numero escogido es diferente al que estoy pensando\n");
  5.    printf ("Escoja otro\n");
  6.     scanf("%d",&v);
  7. }
  8. while (v!=d);

como vez el codigo, siempre va a comprobar si está bien o mal al final (donde stá ubicada la comprobacion)

en el segundo...
Código
  1. if (v!=d)

descarta la entrada al bucle y si está bueno, está bueno...

para arreglar el primero, en lugar de usar "do-while", podrias usar solo "while"

Código
  1. [code=c]  while (v!=d);
  2. {
  3.     printf ("El numero escogido es diferente al que estoy pensando\n");
  4.    printf ("Escoja otro\n");
  5.     scanf("%d",&v);
  6. }
  7.  
[/code]

en ese caso el va a comprobar la condición antes de entrar al bucle


Título: Re: Duda lenguaje C
Publicado por: Danichi en 18 Enero 2014, 02:44 am


Muchas gracias por la respuesta. Subí el código del segundo ya coregido. Así era como quería mostrarlo.
Y no aprecio diferencia con respecto al primero, dándome uno bien y el otro no.




  

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.     int d=4;
  7.    int v;
  8.    printf ("introduzca un numero del 1 al 10\n");
  9.    scanf("%d",&v);
  10.  
  11.    do
  12.    {
  13.      if ((v<1)||(v>10))
  14.         {
  15.          printf ("Ese numero no esta entre 1 y 10. Escribe otro numero\n");
  16.          scanf("%d",&v);                
  17.         }
  18.      else
  19.         {
  20.           printf ("No ha acertado. Escriba otro numero\n");
  21.          scanf("%d",&v);                                
  22.         }          
  23.    }
  24.    while (v!=d);
  25.  
  26.    printf ("Muy bien, ese es el numero\n");
  27.  system("PAUSE");
  28.  return 0;
  29. }



Lo que yo entiendo entonces, es que al usar eldo-while, primero te hace el bucle y después verifica si se cumple la condición?


Título: Re: Duda lenguaje C
Publicado por: engel lex en 18 Enero 2014, 03:03 am
si, basicamente la unica diferencia entre solo "while" y "do-while" es esa... en el caso del for, evalua igual que el while


Título: Re: Duda lenguaje C
Publicado por: Danichi en 18 Enero 2014, 03:08 am
Ok. Muchísimas gracias  ;)
 Ya seguiré dándole caña a esto  :)