Test Foro de elhacker.net SMF 2.1

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


#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 versión

#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);
   if (v!=d)
{
    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 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
CitarEl 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
  do
{

    printf ("El numero escogido es diferente al que estoy pensando\n");
    printf ("Escoja otro\n");
     scanf("%d",&v);
}
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...
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"

[code=c]  while (v!=d);
{
     printf ("El numero escogido es diferente al que estoy pensando\n");
    printf ("Escoja otro\n");
     scanf("%d",&v);
}
[/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.

Cita de: Danichi en 18 Enero 2014, 02:06 AM



 

#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;
}




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  :)