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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Duda lenguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda lenguaje C  (Leído 3,257 veces)
Danichi

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Duda lenguaje C
« 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 ;)


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda lenguaje C
« Respuesta #1 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


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

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Duda lenguaje C
« Respuesta #2 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  :-\
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda lenguaje C
« Respuesta #3 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
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.
Danichi

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Duda lenguaje C
« Respuesta #4 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?
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda lenguaje C
« Respuesta #5 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
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.
Danichi

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Duda lenguaje C
« Respuesta #6 en: 18 Enero 2014, 03:08 am »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con el lenguaje C++/C
Programación C/C++
Juanma_faust 4 3,453 Último mensaje 7 Junio 2010, 00:47 am
por Eternal Idol
Duda con lenguaje
Programación General
Fuen 1 2,695 Último mensaje 13 Junio 2010, 18:48 pm
por [D4N93R]
duda en pila con lenguaje c
Programación C/C++
king1517 2 2,962 Último mensaje 29 Junio 2011, 18:28 pm
por leogtz
[DUDA] Lenguaje de Programaci?n C
Programación C/C++
C45F0RK 1 2,202 Último mensaje 6 Febrero 2012, 20:07 pm
por Eternal Idol
Duda con lenguaje ensamblador
ASM
genomma 0 3,092 Último mensaje 21 Marzo 2012, 10:23 am
por genomma
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines