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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con While y con If
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda con While y con If  (Leído 3,854 veces)
iAmChapin_

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Duda con While y con If
« en: 26 Agosto 2015, 00:02 am »

Hola! Recientemente me registré en este grandioso foro y pues vengo a molestar a ver si alguien puede aclararme las dudas sobre un código de otro ejercicio que me dejaron hacer de la universidad. Aclaro: Los ejercicios los hago en Borland (si, me han dicho que es viejo, pero es el que utilizamos en clase) y las funciones puede que algunas no tenga que usarlas o son desactualizadas, pero en si no se preocupen que solo son programas pequeños y solamente es presentar el código a nuestro profesor.

El ejercicio  que tengo que programar va así:



Y el código que  hice en Borland C++ está así:
Código
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4. int num1;
  5. int num2;
  6. int i;
  7.  
  8. int main(){
  9.  
  10.   cout << "Jugador 1: Ingresa el numero que se va a adivinar: " << endl;
  11.   cin >> num1;
  12.  
  13.   while (num1 >= 1 && num1 <= 50){
  14.  
  15.   cout << "El numero que debes ingresar debe estar entre 1 y 50";
  16.   }
  17.  
  18.   cout << "Ok" << endl << endl << "Jugador 2: Comienza a adivinar!" << endl << endl;
  19.   cout << "Tienes 5 oportunidades, ingresa un numero: " << endl;
  20.   cin >> num2;
  21.  
  22.   while (num2 == num1){
  23.  
  24.   if (num2 > num1){
  25.       for (i=0; i<=5; i++){
  26.  
  27.         cout << "El numero que ingresaste es mayor que el del otro jugador";}
  28.         cout << "Ingresa otro numero";
  29.         i++;
  30.         }
  31.      }
  32.      else if(num2 < num1){
  33.      for (i=0; i<=5; i++){
  34.  
  35.         cout << "El numero que ingresaste es menor que el del otro jugador";}
  36.         cout << "Ingresa otro numero";
  37.         i++;
  38.         }
  39.  
  40.      }
  41.  
  42.   else if (num2 == num1){
  43.  
  44.   cout << "Sorprendente, felicidades, adivinaste, el numero era:" << num1;
  45.  
  46.   }
  47.  
  48.   getch();
  49.   return 0;
  50. }

Pues con los conocimientos que tengo todo debería estar bien, pero a la hora de compilarlo, todo va mal, me saltan errores y ya rebusque en todo el codigo y nada. Quisiera saber que errores tengo y si el programa va bien (porque debido a que no puedo compilarlo, no se si funciona de esta manera como yo lo tengo).

Por si surgen las preguntas otra vez: Solo son ejercicios pequeños, me informaron antes de que algunas funciones que utilizo son desactualizadas o no deben usarse, pero solo son ejercicios de la universidad y utilizo Borland. Saludos a todos  ;D


« Última modificación: 1 Septiembre 2015, 00:50 am por iAmChapin_ » En línea

Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Duda con While y con If
« Respuesta #1 en: 26 Agosto 2015, 00:51 am »

En el while de la linea 13, si ingresas un valor entre 1 y 50 te va a dar "true" y va a hacer ese "cout" en un ciclo infinito. Pero igual si no corre, no es por eso.

Revisa bien tus llaves, tanto de apertura como de cierre. Están mal. Al parecer quieres hacer el "if , else if y else" dentro de ese "while" pero el "else if" está fuera del while.

Creo q tienes una llave de cierre de más.

Si vas a usar "else if", termínalo con "else" para la linea 42.

Trata de usar una llave de cierre en una línea aparte. Por ejemplo el "for" de la linea 25 parece que terminara en la línea 30, pero tienes una llave de cierre al final de la línea 27. Esto complica la lectura de código.


En línea

iAmChapin_

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: Duda con While y con If
« Respuesta #2 en: 26 Agosto 2015, 22:21 pm »

En el while de la linea 13, si ingresas un valor entre 1 y 50 te va a dar "true" y va a hacer ese "cout" en un ciclo infinito. Pero igual si no corre, no es por eso.

Revisa bien tus llaves, tanto de apertura como de cierre. Están mal. Al parecer quieres hacer el "if , else if y else" dentro de ese "while" pero el "else if" está fuera del while.

Creo q tienes una llave de cierre de más.

Si vas a usar "else if", termínalo con "else" para la linea 42.

Trata de usar una llave de cierre en una línea aparte. Por ejemplo el "for" de la linea 25 parece que terminara en la línea 30, pero tienes una llave de cierre al final de la línea 27. Esto complica la lectura de código.

Excelente mi amigo!! Gracias, de la que me salvaste!! Disculpa si no te conteste luego! Ahora tengo otra duda, después de corregir todo eso, el código me quedó así:
Código
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4. int num1;
  5. int num2;
  6. int i;
  7.  
  8. void main(){
  9.  
  10.   cout << "Jugador 1: Ingresa el numero que se va a adivinar: " << endl;
  11.   cin >> num1;
  12.   cout << endl;
  13.  
  14.   //DETERMINAMOS SI EL NUMERO INGRESADO ES DEL 1 AL 50
  15.   while ((num1 < 0) || (num1 > 50))
  16.   {
  17.   cout << "El numero que ingresaste debe estar entre 1 y 50" << endl;
  18.      cin >> num1;
  19.      cout << endl;
  20.   }
  21.   //LIMPIAMOS PANTALLA PARA QUE EL JUGADOR 2 NO VEA EL NUMERO OCULTO
  22.   clrscr();
  23.  
  24.   //INDICAMOS AL JUGADOR 2 LO QUE DEBE DE HACER
  25.   cout << "Ok" << endl << endl << "Jugador 2: Comienza a adivinar!" << endl << endl;
  26.   cout << "Tienes 5 oportunidades! ";
  27.  
  28.   //DETERMINAMOS SI EL JUGADOR 2 NO ADIVINA EL NUMERO EN 5 INTENTOS, PIERDE
  29.   for (i = 0; i <= 8; i++){
  30.   cout << "Ingresa otro numero:" << endl;
  31.   cin >> num2;
  32.   cout << endl;
  33.   //DETERMINAMOS SI NUM2 ES MAYOR A NUM1 E IMPRIME UN INDICIO
  34.   if (num2 > num1){
  35.   cout << "El numero es mayor que el numero oculto!" << endl << endl;
  36.      i++;
  37.      }
  38. //DETERMINAMOS SI NUM2 ES MENOR A NUM1 E IMPRIME UN INDICIO
  39.   else if (num2 < num1){
  40.   cout << "El numero es menor que el numero oculto!" << endl << endl;
  41.      i++;
  42.      }
  43.   //SI EL JUGADOR 2 ADIVINA EL NUMERO, GANA Y SALE DEL CICLO CON BREAK
  44.   else if (num2 == num1){
  45.   cout << "Sorprendente!!, felicidades, adivinaste, el numero oculto era: " << num1 << endl;
  46.      break;
  47.      }
  48.   //SI EL JUGADOR 2 NO ADIVINA, JUGADOR 1 GANA Y TERMINA EL PROGRAMA
  49.   else{
  50.   cout << "Perdiste!! Jugador 1 Gana!! El numero oculto era: " << num1 << endl;
  51.      break;
  52.      }
  53.   }
  54.  
  55.  getch();
  56. }

Todo correcto, me compila y me ejecuta todito! Pero cuando el jugador 2 falla en los 5 intentos, no imprime el ultimo mensaje del else de la linea 49, no se porque!! Podrías ayudarme? Otra cosa: en la linea 29 del for, coloqué 8 a i porque solo de esa manera me podia ingresar 5 intentos a la hora de ejecutarse, si le colocaba 5 solo me dejaba intentar 3 veces!! Por si acaso me preguntas, saludos mi amigo!!
En línea

Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Duda con While y con If
« Respuesta #3 en: 27 Agosto 2015, 02:47 am »

La linea 36 y 41 están de más, por que en el "for" con "i++" ya le estás indicando que incremente uno en cada iteración. Por eso te da 3 intentos cuando pones 5, ya que en cada bucle " i " toma el valor de 0,2,4

Un numero puede ser mayor que otro, menor que otro, o igual q el otro, esas son todas las posibilidades. Por eso nunca vas a llegar a la linea 49.

Fuera del "for" puedes usar un "if" para saber con que valor terminó la variable "i". Si terminó con 5 entonces dices que perdió. Es una forma, tal vez se te ocurra otra mejor.

* Si uso "for(int x=0 ; i<=10 ; i++)" eso son 11 vueltas.
En línea

iAmChapin_

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: Duda con While y con If
« Respuesta #4 en: 27 Agosto 2015, 03:24 am »

La linea 36 y 41 están de más, por que en el "for" con "i++" ya le estás indicando que incremente uno en cada iteración. Por eso te da 3 intentos cuando pones 5, ya que en cada bucle " i " toma el valor de 0,2,4

Un numero puede ser mayor que otro, menor que otro, o igual q el otro, esas son todas las posibilidades. Por eso nunca vas a llegar a la linea 49.

Fuera del "for" puedes usar un "if" para saber con que valor terminó la variable "i". Si terminó con 5 entonces dices que perdió. Es una forma, tal vez se te ocurra otra mejor.

* Si uso "for(int x=0 ; i<=10 ; i++)" eso son 11 vueltas.

Increíble la falta de conocimiento de mi parte jeje, muchísimas gracias mi amigo!! Todo resuelto!
Disculpa las molestias que te provoco, de verdad muchas gracias!  ;-) ;-) ;-)
En línea

Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Duda con While y con If
« Respuesta #5 en: 27 Agosto 2015, 05:10 am »

No hay problema.
Mas bien algo q no me había dado cuenta. Trata de evitar declarar las variables fuera de la función principal. Esto se llama "variables globales".
Y también cuando escribas código dentro de un if,while,etc ponlo "más a la derecha". Esto lo llama identación o sangrado.
En línea

iAmChapin_

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: Duda con While y con If
« Respuesta #6 en: 27 Agosto 2015, 05:53 am »

No hay problema.
Mas bien algo q no me había dado cuenta. Trata de evitar declarar las variables fuera de la función principal. Esto se llama "variables globales".
Y también cuando escribas código dentro de un if,while,etc ponlo "más a la derecha". Esto lo llama identación o sangrado.

Te envié un mensaje privado! Espero me contestes y una vez más, muchísimas gracias por ayudarme!!!  ;-)

Publico el código para que me pudas ayudar nuevamente con otro ejercicio porfavor!

Código
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4. int n;
  5. int i = 0;
  6. float total = 0;
  7. const float numerador = 1.0;
  8. bool bandera = false;
  9.  
  10. void main(){
  11.  
  12.  
  13.   cout << "Calculemos la suma de (1/N) - (2/N-1) + (3/N-2) - (4/N-3) + (5/N-4) + N/1 " << endl << endl;
  14.   cout << "Ingresa un valor para N:" << endl;
  15.   cin >> n;
  16.  
  17.   //HASTA QUE I SEA MENOR O IGUAL QUE N EL CICLO TERMINA
  18.   while(i <= n){
  19.   //DETERMINAMOS LA SUMA DEL TOTAL CON I, NUMERADOR Y SUMANDO EL TOTAL
  20.        if( bandera == false){
  21.            total = total + (numerador/n)-i;
  22.            bandera = true;
  23.        }
  24.   //AL INDICAR QUE BANDERA ES TRUE, SUCESIVAMENTE SE VA A RESTAR EL PROCESO ANTERIOR
  25.        else{
  26.            total = total - (numerador/n)-i;
  27.            bandera = false;
  28.        }
  29.   //SE INCREMENTA I HASTA QUE CUMPLA LA CONDICION DEL CICLO WHILE
  30.        i--;
  31.  
  32.    }
  33.  
  34.    //IMPRIMIMOS EN PANTALLA EL RESULTADO DE LAS DOS OPERACIONES
  35.    cout<<"Total: "<< total <<endl;
  36.    getch();
  37. }
« Última modificación: 28 Agosto 2015, 17:41 pm por iAmChapin_ » En línea

Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Duda con While y con If
« Respuesta #7 en: 28 Agosto 2015, 08:29 am »

En el numerador no puede ir la variable "numerador" por que vale 1, y la secuencia indica que debe ir incrementando. Por lo que lo más adecuado es que aproveches la variable "i" si está inicializada con "1", o "i+1" si está inicializada con "0".

Con:
(1/N) - (2/N-1) + (3/N-2) - (4/N-3) + (5/N-4) + N/1

No me queda claro si quieren decir  "((2/N)-1)" o "(2/(N-1))".

* la linea 32 no incrementa.
« Última modificación: 28 Agosto 2015, 08:32 am por Mientras » En línea

iAmChapin_

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: Duda con While y con If
« Respuesta #8 en: 28 Agosto 2015, 17:40 pm »

Creo que quiere decir ((2/N)-1) porque así esta establecido en el ejercicio, y creo que por ley de signos, la división debe ir primero antes que la resta. Sabes, a pesar de que te copie el codigo y le cambie un par de cosas, lo siento si no te pedi permiso antes, es que vi tan bien tu codigo que decidi quedarme con ese  :-[ y ahora no me esta quedando muy claro lo que indicas, le he cambiado asi como indicas pero no sale igual al del programa que tengo de guía. Te dejo las comparaciones:



El izquierdo es mi programa, y el segundo es el programa guia al que mi programa debe ser igual.

Ahora le hice leves modificaciones al código tratando de lograr un ingenio para ver si lograba el resultado, pues a como esta ahorita es como en mi mente tiene que estar el codigo, observa:

Código
  1. #include <iostream.h>
  2. #include <conio.h>
  3.  
  4. int n;
  5. int i = 1;
  6. float total = 0;
  7. float numerador = 0;
  8. bool bandera = false;
  9.  
  10. void main(){
  11.  
  12.  
  13.   cout << "Calculemos la suma de (1/N) - (2/N-1) + (3/N-2) - (4/N-3) + (5/N-4) + N/1 " << endl << endl;
  14.   cout << "Ingresa un valor para N:" << endl;
  15.   cin >> n;
  16.  
  17.   //HASTA QUE I SEA MENOR O IGUAL QUE N EL CICLO TERMINA
  18.   while(i <= n){
  19.   //DETERMINAMOS LA SUMA DEL TOTAL CON I, NUMERADOR Y SUMANDO EL TOTAL
  20.        if( bandera == false){
  21.            total = total + (i/n);
  22.            i++;
  23.            bandera = true;
  24.        }
  25.   //AL INDICAR QUE BANDERA ES TRUE, SUCESIVAMENTE SE VA A RESTAR EL PROCESO ANTERIOR
  26.        else{
  27.            numerador--;
  28.            total = total - (i/n)-numerador;
  29.            bandera = false;
  30.        }
  31.  
  32.    }
  33.  
  34.    //IMPRIMIMOS EN PANTALLA EL RESULTADO DE LAS DOS OPERACIONES
  35.    cout<<"Total: "<< total <<endl;
  36.    getch();
  37. }

Pero como viste anteriormente no me da el resultado que yo quiero... Podrías presentarme una solucion para el codigo porfavor? Ya no se me ocurre nada :(
En línea

Mientras

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Re: Duda con While y con If
« Respuesta #9 en: 28 Agosto 2015, 19:37 pm »

En el post anterior quise decir que en vez de i-- es i++.

Si haces esto:
numerador--;
total = total - (i/n)-numerador;
la variable "numerador" va a tomar valores negativos, y luego cuando restas, se va a efectuar una suma. Esto es por ley de signos.

 
"(1/N-0) - (2/N-1) + (3/N-2) - (4/N-3) + (5/N-4) + N/1"

Para arreglar la fórmula fíjate que el numero que le vas restando a cada fracción es "1 menos" que el numerador. Entonces si arriba tienes "i" el número que le vas a restar sería "(i-1)".
« Última modificación: 28 Agosto 2015, 22:39 pm por Mientras » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,814 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 5,840 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
Ngeooz 6 8,946 Último mensaje 2 Diciembre 2013, 19:33 pm
por Ngeooz
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,463 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
[DUDA][LICENCIA][GPL]tengo una duda sobre las caracteristicas de la licencia GPL
Dudas Generales
Noxware 0 1,894 Último mensaje 2 Mayo 2014, 00:34 am
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines