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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  programa que lee solo la primera parte en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: programa que lee solo la primera parte en c++  (Leído 1,271 veces)
yina07

Desconectado Desconectado

Mensajes: 41


Ver Perfil
programa que lee solo la primera parte en c++
« en: 24 Noviembre 2019, 04:12 am »

Hola! necesitaba ayuda en esta tarea, no se por que razón no me lee la parte de la resta debajo de
la suma, intente ponerle un break y no funciona, no se que es lo que me falta pero me detuve en la
parte de la resta porque solo me lee lo primero y cuando introduzco 2 valores aunque ponga el numero
2 del menu, que es la resta, sigue sumandome los numeros. Por favor ayuda, y a parte al final del
programa debe preguntar si quiere que lo cierre presione 1 y si desea continuar presionar 0, y debo
hacer esto segun mi profesor con un bucle while, pero no me funciona, no se si lo puse donde no iba,
pero segun él, el programa entero debe estar dentro del bucle, les agradeceria que me expliquen lo que
esta mal por favor. Gracias (el enunciado del programa esta al inicio)


#include <iostream>
using namespace std;


/*

Realizar la operaciones matemáticas básicas (suma, resta, multiplicación, división
y las demás funciones que quiera agregar libremente) utilizando un menú donde el
usuario seleccione primero la operación que desea realizar.  Luego que seleccione
la operación, debe pedir que digite dos valores a usar en la operación.






*/



int main (){
   

   
   
   int Suma;
   int Resta;
   int Multiplicacion;
   int Division;
   
   
   //valores de la suma
   
   int a;
   int b;
   
   int valoressum = a + b;
   
   
   
   //valores de la resta
   
   int c;
   int d;
   
   int valoresresta = c - d;
   
   
   
   cout<<"Menu"<<endl<<"Que operacion desea realizar?"<<endl<<"1. Suma"<<endl<<"2. Resta"<<endl<<"3. Multiplicacion"<<endl<<"4. Division"<<endl;
   
   
   //suma
   

   

   cin>>Suma;
   
   
   
   if (Suma = 1){
      
      
      cout<<"Digite 2 valores"<<endl;
      
         cin>>a;
         cin>>b;
   
   
      
   }
   
   
   if (valoressum = a + b)
   {
      
      
      cout<<"El resultado es"<<endl<<valoressum<<endl;
   }
   
   
   //resta

   cin>>Resta;
   
   
   
   if (Resta = 2){
      
      
      cout<<"Digite 2 valores"<<endl;
      
         cin>>a;
         cin>>b;
   
   
      
   }
   
   
   if (valoressum = c - d)
   {
      
      
      cout<<"El resultado es"<<endl<<valoresresta<<endl;
   }
   
   
   
   
   
   
   
   
   
   
   
   return 0;
}


En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 874



Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #1 en: 24 Noviembre 2019, 05:00 am »

Ya llevas varios mensajes en el foro por lo que deberías empezar a aplicar las normas básicas como poner tu código entre etiquetas de Código GeSHi y aplicar unos mínimos de orden como no poner un código con más líneas en blanco entre medias que las que tienen algo de código. Si sigues sin hacer caso, llegará un día que nadie te ayude...

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main (){
  5.   int Suma;
  6.   int Resta;
  7.   int Multiplicacion;
  8.   int Division;
  9.  
  10.   //valores de la suma
  11.   int a;
  12.   int b;
  13.  
  14.   int valoressum = a + b;
  15.  
  16.   //valores de la resta
  17.  
  18.   int c;
  19.   int d;
  20.  
  21.   int valoresresta = c - d;
  22.  
  23.   cout<<"Menu"<<endl<<"Que operacion desea realizar?"<<endl<<"1. Suma"<<endl<<"2. Resta"<<endl<<"3. Multiplicacion"<<endl<<"4. Division"<<endl;
  24.  
  25.  
  26.   //suma
  27.  
  28.   cin>>Suma;
  29.  
  30.   if (Suma = 1){  
  31.      cout<<"Digite 2 valores"<<endl;
  32.         cin>>a;
  33.         cin>>b;
  34.   }
  35.  
  36.   if (valoressum = a + b)
  37.   {
  38.      cout<<"El resultado es"<<endl<<valoressum<<endl;
  39.   }
  40.  
  41.   //resta
  42.  
  43.   cin>>Resta;
  44.  
  45.   if (Resta = 2){
  46.      cout<<"Digite 2 valores"<<endl;
  47.         cin>>a;
  48.         cin>>b;
  49.   }
  50.  
  51.   if (valoressum = c - d)
  52.   {
  53.      cout<<"El resultado es"<<endl<<valoresresta<<endl;
  54.   }
  55.  
  56.   return 0;
  57. }
Ese código es un auténtico caos... Sobran variables por todos los lados, hay operaciones que no tienen sentido, se utilizan variables que no poseen ningún valor (poseen basura), las condiciones de los <if> están mal implementadas y además no tienen ningún sentido.
Mi humilde opinión es que debes buscar un rato para dedicarle a la programación y empezar desde el principio ya que veo muchos errores de un nivel muy básico.

No sirve de nada que intentes hacer un <while()> cuando estoy viendo que el propio planteamiento del programa está mal pensado y por ende, mal implementado.

Lo que tienes que hacer en ese programa, olvidándonos del bucle, es:
  • Crear dos variables: numero1 y numero2 que serán los que almacenen los valores del usuario para los operandos.
  • Crear una variable: resultado que será la que almacene el resultado de la operación que elija el usuario.
  • Crear una variable: opcion que será la que guarde la operación a realizar (ej: 1 = suma, 2 = resta, 3 = multiplicación, etc).

Ahora el proceso es sencillo:
  • Mostrar en un mensaje las posibles operaciones y pedir al usuario que elija una de ellas (y guardarla en la variable <opcion>).
  • Pedir al usuario que introduzca dos operandos (y guardarlos en <numero1> y <numero2>).
  • Implementar unos condicionales <if()> para comprobar la opción elegida y según la opción asignar a la variable <resultado> el resultado de realizar la operación correspondiente.
  • Mostrar el resultado.

En pseudocódigo sería algo como esto:
Código:
INICIO
    PEDIR "Elige una operacion: " opcion
    PEDIR "Introduce el primer operando: " numero1
    PEDIR "Introduce el segundo operando: " numero2

    SI opcion == 1 ENTONCES // suponiendo que 1 es la suma
        resultado = numero1 + numero2
    SINO SI opcion == 2 ENTONCES // suponiendo que 2 es la resta
        resultado = numero1 - numero2
    // asi con cada una de las posibles operaciones
    FIN SI

    MOSTRAR "El resultado de la operacion es: " + resultado
FIN

Intenta hacer eso. Si tienes algún problema en alguna parte concreta siempre puedes poner un mensaje con el código (repito: entre etiquetas de Código GeSHi) y explicando tu problema o duda para que te ayudemos. Cuando tengas eso conseguido, será más fácil ayudarte con lo del bucle. De momento, vamos con lo fácil y después vamos agregando cosas nuevas.

PD: En C/C++ las comparaciones se realizan con ==, el operador = es el de asignación:
  • a == b -> Comprueba si a es igual a b
  • a = b -> Asigna el valor de b a la variable a


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
yina07

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #2 en: 24 Noviembre 2019, 16:18 pm »

Ya llevas varios mensajes en el foro por lo que deberías empezar a aplicar las normas básicas como poner tu código entre etiquetas de Código GeSHi y aplicar unos mínimos de orden como no poner un código con más líneas en blanco entre medias que las que tienen algo de código. Si sigues sin hacer caso, llegará un día que nadie te ayude...


Ok! disculpa si te ofendi, soy nueva en esto de la programacion y no se mucho, me imagino que tu tambien pasaste por esto, pero en fin. Esto es lo que he hecho y no se por que me da error en el if

Código
  1.  
  2. int numero1;
  3. int numero2;
  4.  
  5. int resultado;
  6.  
  7. int opcion [] = {0, 1, 2, 3, 4};
  8.  
  9. cout<<"Que operacion desea realizar?"<<endl;
  10.  
  11. cin>>numero1;
  12. cin>>numero2;
  13.  
  14. if (opcion == 1) {
  15.  
  16.  
  17.  
  18. resultado = numero1 + numero2;
  19.  
  20. }
  21.  
  22. else if (opcion == 2){
  23.  
  24.  
  25. resultado = numero1 - numero2;
  26. }
  27.  
  28.  
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 874



Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #3 en: 24 Noviembre 2019, 18:27 pm »

Obviamente yo también tuve unos inicios y no me ofende que no sepas programar o que tengas errores básicos porque para eso es el foro, para ayudar. Lo que me molesta es que haya muchas personas que comentan ocasionalmente y no se molesten en poner los códigos entre etiquetas y más cuando siempre aconsejo usar dichas etiquetas (puedes comprobar en el otro post que hiciste AQUÍ que también te avisé de poner los códigos entre etiquetas y creo que lo hice con toda la educación que tengo).
Dicho esto, que no quiero que sea el comienzo de una pelea, sólo mostrar porque a veces no tengo tanta paciencia para repetir lo de las etiquetas, vamos al problema.
Ahora tu código ya tiene mejor pinta, lo que te falta es pedir al usuario una opción:
Cuando en la línea 9 preguntas qué operación realizar, lo que responda el usuario debe ir a la variable <opcion> y dicha variable no tiene que ser un array/vector. El array sería para almacenar a la vez todas las opciones (que eso es lo que tienes tú hecho en la línea 7). En tu caso debe ser una variable normal porque sólo contendrá 1 de esos 5 valores.
Y después de haber guardado la opción, es cuando hay que pedir los dos operandos. Los condicionales están bien, te faltaría hacer más para el resto de opciones, pero vas bien.

No sé si habrás visto el <switch>. Es otra estructura como el <if()> muy común para realizar menús y temas de opciones:
Código
  1. switch(opcion){ // Segun lo que vale opcion...
  2.    case 1: // ...si vale 1...
  3.        resultado = numero1 + numero2; // ...hace esto
  4.        break; //...y Sale. Si no se pone el break haria tambien las instrucciones del case 2, del 3... hasta el default o hasta encontrar un break
  5.    case 2:
  6.        resultado = numero1 - numero2;
  7.        break;
  8.    // todos los case que quieras con su numero de opcion correspondiente
  9.    default: // ...si opcion no vale ninguna de las cosas anteriores...
  10.        cout << "La opcion no es valida" << endl; // ...muestra esto
  11.    // Como despues del default ya no hay mas opciones, el break es opcional.
  12. }


Como veo que eso ya lo llevas bastante bien, aprovecho para explicarte lo del bucle.
Lo normal es hacerlo con una estructura <do{} while()> pero si te mandan hacerlo con un <while()> también se puede adaptar.
Para ello hay que tener una condición que será la que determine si el programa se repite o no. En tu caso es 1=sale 0=repite. Esto se puede hacer con otra variable <int> por ejemplo llamada <salir> o con una variable de tipo <bool salir> que valdrá true/false (1/0).

Te hago un pequeño programa muy sencillo para que veas su uso y después aplicarlo tú a tu problema:
Código
  1. // ALTERNATIVA 1: Usando un int
  2. int main(){
  3.    int salir = 0; // le damos el valor 0 para que la primera vez que se ejecuta, funcione.
  4.  
  5.    // La condicion para finalizar el programa es que salir valga 1. Entonces el programa se repetira mientras salir sea distinto de 1:
  6.    while(salir != 1){
  7.        cout << "Hola" << endl;
  8.  
  9.        cout << "Desea salir: (1 = Si / 0 = No): ";
  10.        cin >> salir;
  11.    }
  12. }
  13.  
  14. // ALTERNATIVA 2: Usando un bool de forma un poco rara
  15. int main(){
  16.    bool salir = false;
  17.  
  18.    while(!salir){ // esto es equivalente a decir: salir == false
  19.        cout << "Hola" << endl;
  20.  
  21.        cout << "Desea salir: (1 = Si / 0 = No): ";
  22.        cin >> salir; // Si no recuerdo mal, el 0 lo guardara como false y cualquier otro numero lo guardara como true
  23.    }
  24. }
  25.  
  26. //ALTERNATIVA 3: Usando un bool de forma mas facil de entender
  27. int main(){
  28.    bool salir = false;
  29.    int respuesta; // para guardar la respuesta del usuario y no hacerlo directamente en bool
  30.  
  31.    while(!salir){
  32.        cout << "Hola" << endl;
  33.  
  34.        cout << "Desea salir (1 = Si / 0 = No): ";
  35.        cin >> respuesta;
  36.        // Ahora si la respuesta vale 1, salir debe valer true y si vale 0, salir debe valer false
  37.        salir = (respuesta == 1); // Asi valdra true cuando respuesta sea 1 y false en cualquier otro caso
  38.    }
  39. }

Como ves hay muchas formas de hacerlo y esto sólo usando el while(), si usas el <do while()> tendrás el doble de alternativas. Lo que todas tienen en común es que si el usuario no introduce ni 1 ni 0, el programa tomará una decisión según la alternativa.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
@XSStringManolo
<svg/onload=alert()>
Colaborador
***
Desconectado Desconectado

Mensajes: 2.264


Turn off the red ligth


Ver Perfil WWW
Re: programa que lee solo la primera parte en c++
« Respuesta #4 en: 24 Noviembre 2019, 18:33 pm »

Lo primero de todo, el ejercicio te dice que utilices funciones. Una función podríamos decir que es un programa que puede funcionar de forma independiente al tuyo. Por ejemplo un programa que suma puede funcionar por si solo y cumplir su función de sumar sin necesidad de hacer nada más.
Debes hacer mínimo una función para cada operación básica. Y opcionalmente puedes utilizar alguna otra función para otra cosa. Por ejemplo una función para el menú. Después haces llamadas a dichas funciones.

Te hice el programa para que te orientes un poco. Ayuda bastante tener algún código de ejemplo de exactamente lo que quieres hacer. Todo lo que no entiendas búscalo en Google. Y si no te queda claro puedes hacer un post con todas tus dudas recopiladas.



Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. /* Prototipos de funciones para avisar al compilador */
  7. int Sumar(int numero1, int numero2);
  8. int Restar(int numero1, int numero2);
  9. int Multiplicar(int numero1, int numero2);
  10. int Dividir(int numero1, int numero2);
  11. int PedirNumero(string operacion);
  12.  
  13. /* Funcion principal */
  14. int main()
  15. {
  16. cout << "Calculadora básica." << endl;
  17.  
  18. int opcionDelMenu = 1;
  19.  
  20.  
  21.   while (opcionDelMenu !=0)
  22.   {  
  23.  
  24.   cout << endl << "Opciones Disponibles:" << endl << "1. Sumar" << endl << "2. Restar" << endl << "3. Multiplicar" << endl << "4. Dividir" << endl << endl << "0. Salir" << endl << endl;
  25.  
  26. /* Comentario #1 */
  27. opcionDelMenu = PedirNumero("seleccionar una opción");
  28.  
  29. /* Comentario #2 */
  30.      switch (opcionDelMenu)
  31.      {
  32.         case 0:
  33.         {
  34.         cout << "Hasta Luego!" << endl;
  35.         cin.ignore();
  36.         cin.get();
  37.         return 0;
  38.         }
  39.  
  40.         case 1:
  41.         {
  42.  
  43.         int num1 = PedirNumero("sumar");
  44.         int num2 = PedirNumero("sumar");
  45.         cout << "El resultado es: " << Sumar(num1, num2) << endl;
  46.         } break;
  47.  
  48.         case 2:
  49.         {
  50.         int num1 = PedirNumero("restar");
  51.         int num2 = PedirNumero("restar");
  52.         cout << "El resultado es: " << Restar(num1, num2) << endl;
  53.         } break;
  54.  
  55.         case 3:
  56.         {
  57.         int num1 = PedirNumero("multiplicar");
  58.         int num2 = PedirNumero("multiplicar");
  59.         cout << "El resultado es: " << Multiplicar(num1, num2) << endl;
  60.         } break;
  61.  
  62.         case 4:
  63.         {
  64.         int num1 = PedirNumero("dividir");
  65.         int num2 = PedirNumero("dividir");
  66.         cout << "El resultado es: " << Dividir(num1, num2) << endl;
  67.         } break;
  68.  
  69.         default:
  70.         {
  71.         cout << "La opción " << opcionDelMenu << " introducida no está contemplada" << endl;
  72.         }
  73.  
  74.      }
  75.  
  76.   }
  77.  
  78.  
  79. return 0;
  80. }
  81.  
  82.  
  83. /* Definición de Funciones */
  84. int Sumar (int numero1, int numero2)
  85. {
  86. return numero1+numero2;
  87. }
  88.  
  89. int Restar (int numero1, int numero2)
  90. {
  91. return numero1-numero2;
  92. }
  93.  
  94. int Multiplicar (int numero1, int numero2)
  95. {
  96. return numero1 * numero2;
  97. }
  98.  
  99. int Dividir (int numero1, int numero2)
  100. {
  101. return numero1/numero2;
  102. }
  103.  
  104. int PedirNumero(string operacion)
  105. {
  106. int numero = 0;
  107. cout << "Introduzca el numero para " << operacion << endl;
  108. cin >> numero;
  109. return numero;
  110. }

Comentario #1:
Pudes guardar el valor de retorno de una función en una variable. Ejemplos con distintos parámetros:
int resultadoSuma = suma();

int resultadoResta = resta(3 , 2);

int resultadoMulti = multiplicacion(7, numero);

int resultadoDivision = dividir(resultadoMulti, resultadoSuma);

La sentencia: opcionDelMenu = PedirNumero("seleccionar una opción"); se compone de:
-La variable opcionDelMenu que fue declarada anteriormente.
-El operador de asignación = que asigna el return o resultado de la expresión a su derecha a la variable o contendor de su izquierda.
- La llamada a la función PedirNumero(); que está declarada al final del código. Al llamarla, se ejecuta el código que contiene. Esta llamada tiene como parámetro el texto entrecomillado "seleccionar una opción". Esto es un string literal. Es usado en el cout de la función. Esto es lo mismo que hacer lo siguiente:

string miTexto = "seleccionar una opción";
opcionDelMenu = PedirNumero(miTexto);



Comentario #2:
Utilizo un switch(parámetro) en lugar de varios if, else if, else.

Utilizando los if, else if y else sería:
Código
  1. if (opcionDelMenu == 0)
  2. {
  3. cout << "Hasta Luego!" << endl;
  4. cin.ignore();
  5. cin.get();
  6. return 0;
  7. }
  8.  
  9. else if (opcionDelMenu == 1)
  10. {
  11. int num1 = PedirNumero("sumar");
  12. int num2 = PedirNumero("sumar");
  13. cout << "El resultado es: " << Sumar(num1, num2) << endl;
  14. }
  15.  
  16. else if (opcionDelMenu == 2)
  17. {
  18. int num1 = PedirNumero("restar");
  19. int num2 = PedirNumero("restar");
  20. cout << "El resultado es: " << Restar(num1, num2) << endl;
  21. }
  22.  
  23. else if (opcionDelMenu == 3)
  24. {
  25. int num1 = PedirNumero("multiplicar");
  26. int num2 = PedirNumero("multiplicar");
  27. cout << "El resultado es: " << Multiplicar(num1, num2) << endl;
  28. }
  29.  
  30. else if (opcionDelMenu == 4)
  31. {
  32. int num1 = PedirNumero("dividir");
  33. int num2 = PedirNumero("dividir");
  34. cout << "El resultado es: " << Dividir(num1, num2) << endl;
  35. }
  36.  
  37. else
  38. {
  39. cout << "La opción " << opcionDelMenu << " introducida no está contemplada" << endl;
  40. }

cin.ignore(); sirve para ignorar los caracteres que estén en el buffer.
cin.get(); es una forma de pausar el programa hasta que se introduzca un caracter. En algunos IDE como CodeBlocks se pausa automáticamente la consola para ver el resultado del programa hasta que pulses enter. Pero si vas a la carpeta del .exe (en caso de windows) generado y lo ejecutas, esta pausa no se produce. Por lo que utilizo cin.get para que el programa no finalice automáticamente y se pueda ver el mensaje de despedida.
Despues utilizo return 0; para finalizar la función int main() y por tanto el programa cuando se seleccione salir. Otra opción es utilizar la propia funcionalidad del while. Vacias el case 0: y le añades el break. De tal forma que salte al final del while, se compruebe que la condición del bucle ya no se cumple, y continue la ejecución hasta el return 0; que se encuentra en el final del cuerpo de la función main. Es más eficiente retornar 0 directamente desde case 0: pero no siempre va a ser el comportamiento que deseas. A veces quieres salir de un bucle, y entrar en otro bucle nuevo por ejemplo, y si hicieses el return 0 dentro del case 0: abandonarias el programa directamente sin continuar la ejecucción hasta el siguiente bucle.

Comentario Final:
Por último están declaradas todas las funciones del programa. Todas retornan un entero. En los cout dentro de los case puedes ver como están las llamadas a las funciones dentro del propio cout. cout << "El resultado es: " << Sumar(num1, num2) << endl; Como ves en la ejecución, Sumar(num1, num2) es remplazado por su valor de retorno.

Tambien puedes utilizar funciones sin retorno del tipo void. Ej:
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int vecesSaludado = 0;
  7.  
  8. void Saludo(string nomb);
  9.  
  10. int main()
  11. {
  12. string miNombre = "";
  13. cout << "Hola cómo te llamas?" << endl;
  14. cin >> miNombre;
  15.  
  16. Saludo(miNombre);
  17. Saludo("Paco");
  18. Saludo(miNombre);
  19.  
  20. int veces;
  21. cout << "Cuantas veces quieres que te salude?" << endl;
  22. cin >> veces;
  23.  
  24. for ( int i = 0; i < veces; ++i)
  25. {
  26. Saludo(miNombre);
  27. }
  28.  
  29. cout << miNombre << " fuiste saludado " << vecesSaludado << " veces." << endl;
  30.  
  31.  
  32. cin.get();
  33. return 0;
  34. }
  35.  
  36. void Saludo(string nomb)
  37. {
  38. cout << "Hola " << nomb << " bienvenido a mi programa." << endl << endl;
  39.  
  40. ++vecesSaludado;
  41. }

En el foro de dudas generales tienes un listado con libros. Si te manejas en inglés en concreto te recomiendo leer el del Apress Learn C++ for game developers.
« Última modificación: 24 Noviembre 2019, 18:43 pm por @?0!,5^34 » En línea

yina07

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #5 en: 24 Noviembre 2019, 21:32 pm »




No sé si habrás visto el <switch>. Es otra estructura como el <if()> muy común para realizar menús y temas de opciones:




Hey, ya pude hacerlo, lo unico que me faltaria es ordenarlo un poco más y poner todo  el codigo dentro del while como me pidieron que lo haga, que intenté hacerlo y no me funcionaba no sé por qué, pero veo que el programa funciona como quería aunque el while esté al final. Gracias!

Código
  1.  
  2. int numero1;
  3. int numero2;
  4.  
  5. int resultado;
  6.  
  7. int opcion;
  8.  
  9. cout<<"Que operacion desea realizar?"<<endl;
  10.  
  11. cin>>opcion;
  12. cout<<"Introduzca un valor"<<endl;
  13. cin>>numero1;
  14. cout<<"Introduzca otro valor"<<endl;
  15. cin>>numero2;
  16.  
  17.  
  18.  
  19. switch(opcion){ .
  20.    case 1:
  21.        resultado = numero1 + numero2;
  22.        break;
  23.    case 2:
  24.        resultado = numero1 - numero2;
  25.        break;
  26.  
  27.        case 3:
  28.        resultado = numero1 * numero2;
  29.        break;
  30.  
  31.  
  32.        case 4:
  33.        resultado = numero1 / numero2;
  34.        break;
  35.  
  36.    default:
  37.        cout << "La opcion no es valida" << endl;
  38.  
  39. }
  40.  
  41.  
  42. cout<<"El resultado es:"<<endl<<resultado<<endl;
  43.  
  44. // bucle while
  45.  
  46.  
  47.  
  48.    bool salir = false;
  49.    int respuesta;
  50.  
  51.    while(!salir){
  52.        cout << "Hola" << endl;
  53.  
  54.        cout << "Desea salir (1 = Si / 0 = No): ";
  55.        cin >> respuesta;
  56.  
  57.        salir = (respuesta == 1);
  58. }
  59.  
  60.  
  61.  
  62.  
  63.  
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 874



Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #6 en: 24 Noviembre 2019, 22:03 pm »

Bueno a ver, hasta la línea 42 está bien. Pero el bucle... :xD :xD
Si te he puesto lo de:
Código
  1. bool salir = false;
  2. int respuesta;
  3.  
  4. while(!salir){
  5.    cout << "Hola" << endl;
  6.  
  7.    cout << "Desea salir (1 = Si / 0 = No): ";
  8.    cin >> respuesta;
  9.  
  10.    salir = (respuesta == 1);
  11. }
Era para que vieses un ejemplo sencillo de un programa que muestra "hola" cada vez que lo repites. Pero lo que tú quieres hacer no es que te muestre "hola" sino que te haga una operación con dos números.
A eso se refería tu profesor al decir que el programa debe ir dentro del <while()>.

En tu caso tendrías que coger TU PROGRAMA que es el que va de la línea 1 a la 43 y ponerlo donde está el "cout << "Hola" << endl;" de mi ejemplo.
El resultado sería el siguiente:
Código
  1. int main(){
  2.    // Declaramos las variables antes del bucle porque si lo hacemos dentro las estaremos declarando cada vez que se repita el programa
  3.    int numero1, numero2, resultado;
  4.    int opcion;
  5.    bool salir = false;
  6.  
  7.    while(!salir){
  8.        cout<<"Que operacion desea realizar?"<<endl;
  9.        cin>>opcion;
  10.  
  11.        cout<<"Introduzca un valor"<<endl;
  12.        cin>>numero1;
  13.  
  14.        cout<<"Introduzca otro valor"<<endl;
  15.        cin>>numero2;
  16.  
  17.        switch(opcion){ .
  18.            case 1:
  19.                resultado = numero1 + numero2;
  20.                break;
  21.            case 2:
  22.                resultado = numero1 - numero2;
  23.                break;
  24.            case 3:
  25.                resultado = numero1 * numero2;
  26.                break;
  27.            case 4:
  28.                resultado = numero1 / numero2;
  29.                break;
  30.            default:
  31.                cout << "La opcion no es valida" << endl;
  32.        }
  33.        cout << "El resultado es: " << resultado << endl;
  34.        // AQUI TERMINA LO QUE SERIA TU PROGRAMA SIN REPETICIONES
  35.        // Ahora ponemos la pregunta para repetir el programa
  36.        cout << "Terminar programa (1 = Si / 0 = No): ";
  37.        cin >> opcion; // podemos reutilizar la variable opcion para no tener que crear otra al principio. Si se crea otra tambien funciona bien
  38.        salir = (opcion == 1);
  39.    }
  40. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
yina07

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #7 en: 24 Noviembre 2019, 23:05 pm »



En tu caso tendrías que coger TU PROGRAMA que es el que va de la línea 1 a la 43 y ponerlo donde está el "cout << "Hola" << endl;" de mi ejemplo.
El resultado sería el siguiente:
Código
  1. int main(){
  2.    // Declaramos las variables antes del bucle porque si lo hacemos dentro las estaremos declarando cada vez que se repita el programa
  3.    int numero1, numero2, resultado;
  4.    int opcion;
  5.    bool salir = false;
  6.  
  7.    while(!salir){
  8.        cout<<"Que operacion desea realizar?"<<endl;
  9.        cin>>opcion;
  10.  
  11.        cout<<"Introduzca un valor"<<endl;
  12.        cin>>numero1;
  13.  
  14.        cout<<"Introduzca otro valor"<<endl;
  15.        cin>>numero2;
  16.  
  17.        switch(opcion){ .
  18.            case 1:
  19.                resultado = numero1 + numero2;
  20.                break;
  21.            case 2:
  22.                resultado = numero1 - numero2;
  23.                break;
  24.            case 3:
  25.                resultado = numero1 * numero2;
  26.                break;
  27.            case 4:
  28.                resultado = numero1 / numero2;
  29.                break;
  30.            default:
  31.                cout << "La opcion no es valida" << endl;
  32.        }
  33.        cout << "El resultado es: " << resultado << endl;
  34.        // AQUI TERMINA LO QUE SERIA TU PROGRAMA SIN REPETICIONES
  35.        // Ahora ponemos la pregunta para repetir el programa
  36.        cout << "Terminar programa (1 = Si / 0 = No): ";
  37.        cin >> opcion; // podemos reutilizar la variable opcion para no tener que crear otra al principio. Si se crea otra tambien funciona bien
  38.        salir = (opcion == 1);
  39.    }
  40. }



Como te habia dicho, lo intente hacer así pero me daba errores, asi como lo pones sigue dando errores, empieza en el cout de la linea 8, probe borrandolo y sigue dando errores en la linea siguiente y así, ahí no se como arreglarlo realmente, me estuve fijando y no se que es lo que esta mal.
En línea

@XSStringManolo
<svg/onload=alert()>
Colaborador
***
Desconectado Desconectado

Mensajes: 2.264


Turn off the red ligth


Ver Perfil WWW
Re: programa que lee solo la primera parte en c++
« Respuesta #8 en: 24 Noviembre 2019, 23:36 pm »

Se te coló un punto después del switch.

El compilador te dice exactamente que error estás comentiendo, la línea en la cual se encuentra, el motivo del error y algunos compiladores hasta el caracter que está causando el problema y como solucionarlo. Aprende a leer los errores.

Esta sentencia no sé si es válida.
salir = (opcion == 1);
Entiendo que (opcion == 1) es lo mismo que true, pero nunca ví utilizar expresiones así.

Si te da error ahí haz un if (opcion == 1) { salir = true; } else {salir = false;}
El else sobra pero por si lo modificas te lo dejo.
« Última modificación: 24 Noviembre 2019, 23:40 pm por @?0!,5^34 » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 874



Ver Perfil
Re: programa que lee solo la primera parte en c++
« Respuesta #9 en: 24 Noviembre 2019, 23:58 pm »

Como te habia dicho, lo intente hacer así pero me daba errores, asi como lo pones sigue dando errores, empieza en el cout de la linea 8, probe borrandolo y sigue dando errores en la linea siguiente y así, ahí no se como arreglarlo realmente, me estuve fijando y no se que es lo que esta mal.
Como te ha dicho @?0!,5^34, el error parece que es que hay un punto por ahí suelto en la línea del switch() (línea 17).
Si te da algún error más en las líneas del <cout> asegúrate de haber incluido la cabecera <iostream> y la línea "using namespace std;" porque son las encargadas de hacer que <cout>, <cin> y <endl> funcionen.

Esta sentencia no sé si es válida.
salir = (opcion == 1);
Entiendo que (opcion == 1) es lo mismo que true, pero nunca ví utilizar expresiones así.

Si te da error ahí haz un if (opcion == 1) { salir = true; } else {salir = false;}
El else sobra pero por si lo modificas te lo dejo.
Y sobre esta sentencia, sí es válida. Como tú dices la comparación (opcion == 1) es una operación booleana por lo que el resultado sólo puede ser {true, false}. Dicho resultado se puede almacenar directamente en una variable como aparece ahí para ahorrarse los <if()>.
Es algo similar al operador ternario:
Código
  1. salir = (opcion == 1)?true:false;
pero que permite hacer la expresión todavía más sencilla.

Al final es lo mismo que cuando quieres hacer una función que devuelva un bool:
Código
  1. // La primera opcion seria:
  2. bool esPar(int numero){
  3.    bool par;
  4.    if(numero % 2 == 0)
  5.        par = true; // o bien hacer un return true
  6.    else
  7.        par = false; // y aqui un return false
  8.    return par;
  9. }
  10.  
  11. // La otra opcion un poco mas simple seria:
  12. bool esPar(int numero){
  13.    bool par = false;
  14.    if(numero % 2 == 0)
  15.        par = true;
  16.    return par;
  17. }
  18.  
  19. // Y la opcion aprovechando dicha propiedad quedaria:
  20. bool esPar(int numero){
  21.    return (numero % 2 == 0);
  22. }
Al menos para mí parece más sencilla la última y más rápida de leer.
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines