Duda lenguaje C

Iniciado por Danichi, 18 Enero 2014, 00:12 AM

0 Miembros y 1 Visitante están viendo este tema.

Danichi

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

engel lex

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

Danichi

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

engel lex

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

Danichi



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?

engel lex

si, basicamente la unica diferencia entre solo "while" y "do-while" es esa... en el caso del for, evalua igual que el while
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.

Danichi

Ok. Muchísimas gracias  ;)
Ya seguiré dándole caña a esto  :)