Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Ayuda a un noob del C++

123yatevi

Bovino Milenario
Desde
30 Jun 2009
Mensajes
1.752
Hola
La verdad es que soy un mega archi recontra noob del C++ y de la programacion en general
Apenas hoy empeze a llevar un curso y como tarea tuve hacer un "hello world" (ese si pude) y un programa que pida y sume dos numeros.
Ambos los logre hacer.
Aun asi por querer aprender un poco mas intente poner un loop en el segundo programa.
Algo asi como para que pregunte si desea volver a sumar y dependiendo la respuesta termine o reinicie el programa.
Agradeceria una ayudita hehe, no pude hechar a andar un loop while asi que me rendi y deje el puro codigo de la suma

Código:
#include <iostream>
using namespace std;
int main()
{
 long double A;
 long double B;
 long double suma;
 {
 cout << "Ingrese primer numero" << endl;
 cin >> A;
 cout << "Ingrese segundo numero" << endl;
 cin >> B;
 suma = A + B;
 cout << "El resultado es:" << endl;
 cout << suma << endl;
 }
}

Como se transformaria ese codigo para añadir el loop?

Muchas gracias de antemano y perdonen a este pobre noob U_U
 
Utiliza alguna de las funciones de control de flujo de programa, y acorde al que utilices, busca cómo condicionar la terminación del mismo.
 
Lo más sencillo es utilizar un IF, ej. si respuesta = S entonces, si no (ELSE) salir, no es nada dificil de entender las sentencias, solo es de consultes un poco y rápido sale.
 
Lo más sencillo es utilizar un IF, ej. si respuesta = S entonces, si no (ELSE) salir, no es nada dificil de entender las sentencias, solo es de consultes un poco y rápido sale.

Si, entiendo como funciona una funcion if. El problema es que no se como decirle al programa la accion "repite el programa" y de sintaxis tampoco se mucho
 
Y como siempre nuestro amigo Zephyros que nunca aporta nada mas que una respuesta extraña y que solo el entiende jaja, en todo lado hace lo mismo, pero bueno, mira hazlo asi mira, usa select case y switch, te sale mas sencillo, o bueno yo lo hago asi y me sale o siento que es mucho mas sencillo, no lo he probado pero si no te sirve me avisas. Algo asi mira
#include "stdafx.h"
#include <iostream>
using namespace std;

int main() {
system("color 1a");

do {

cout << "1- Sumar numeros"<< endl;
cout << "2-Salir" << endl;
cin>>opcion;
switch (opcion){

case 1:
long double A;
long double B;
long double suma;
{
cout << "Ingrese primer numero" << endl;
cin >> A;
cout << "Ingrese segundo numero" << endl;
cin >> B;
suma = A + B;
cout << "El resultado es:" << endl;
cout << suma << endl;
}
}
case 2:
cout<<"Desea Salir?: (s/n) "<<endl;
cin>>s;
if(s!="s"){
opcion=-1;
}
cout<<endl;


}


}while(opcion!=2);



}
 
JAJAJA y pense que solo yo lo notaba con ese spam e perdon, forero, pero ya somo hatuk2 y yo que notamos eso
 
De hecho hay varias maneras, pero lo mejor sería que primero aprendas la estructura de los ciclos loop: while, el do-while y for (aunque este último no aplica para lo que quieres hacer, bueno quizás si desearas limitar el número de sumas que pudiera realizar el usuario). También debes aprender la estructura del if-else, aunque no la veo de mucha utilidad en este programa.

También hay otra bronca, la validación de datos. En los ejemplos que ponen los compañeros le preguntan al usuario que introduzca la opción de si quiere salir con un S/N o un s/n. El problema es que un buen programador siempre debe pensar en el usuario como si la verdad estuviera muy tarado y no sabe leer bien las opciones o si se tiene accionado o no el bloqueo de mayúsculas.

Por ejemplo, en:

cout<<"Desea Salir?: (s/n) "<<endl;
cin>>s;
if(s!="s"){
opcion=-1;
}
cout<<endl;

Si el usuario escribe S en vez de s, el programa continuara realizando el ciclo do-while (también, si introduce un número o cualquier otro carácter). Debes asegurarte de que el usuario introduzca un valor válido. Tal vez se podría escribir otro condicional para ver si el usuario está introduciendo un valor válido.

La opción del compañero hatuk2 no se me hace muy correcta. Si cumple con el objetivo, pero como que forza la salida del ciclo.

Déjame explicarte.
El ciclo do-while tiene la siguiente estructura:
do{
aquí va el código de lo que quieres hacer
} while (la opción para continuar o terminar el ciclo);

O sea, dice que va a ejecutar el código hasta que la condición no se cumpla. Cuando no se cumpla va a salirse del código y va a continuar con la siguiente línea de código después del while. En este caso, el compañero hatuk2 le pregunta al usuario si desea realizar otra suma:

cout<<"¿Desea volver a hacer otra suma? S/N"<<endl;
cin>>opc;

Luego pone un condicional:

if( opc=='N')
{
cout<<"Fin del programa"<<endl;
getch(); exit(0);
}

Aquí es donde veo el problema. No le veo la razón de hacer esto, ya que el ciclo propuesto por el compañero es:

do {} while (opc == "S");

Eso quiere decir que si en la pregunta de que si desea realizar otra suma el usuario introduce un valor distinto a S para la variable opc entonces el ciclo se rompe (el while ya tiene la condición para continuar o finalizar el ciclo, en este caso, se rompe si opc es distinta a S). No hay necesidad del if, viene sobrando.

Lo ideal sería:

do {} while (opc == 'S');
cout<<"Fin del programa"<<endl;
getch();
return 0;
} //Llave que cierra el main

Te voy a dar otra opción pero con el ciclo while tomando en cuenta el código del compañero hatuk2 pero con las observaciones anteriores. Tomo el código del compañero porque lo mio es el lenguaje C, no el C++ y estoy acostumbrado al printf y al scanf en vez de al cout y al cin, así que es posible que en alguna parte se me pueda ir un error de sintaxis, pero la estructura debe ser la correcta (siempre y cuando no me haya oxidado, tiene más de 3 años que no hago un programa en C:p).

Código:
#include <iostream>
using namespace std;
int main()
{
 long double A;
 long double B;
 long double suma;
 char opc = "S"; //Importante inicializar la variable para que entre el ciclo while
 while (opc == "S" || opc == "s")  //Condición para continuar o finalizar el ciclo
                                                    //En este caso, le digo que siga haciéndolo
                                                    //cuando opc sea igual a S o a s.
 { 
  cout << "Ingrese primer numero" << endl;
  cin >> A;
  cout << "Ingrese segundo numero" << endl;
  cin >> B;
  suma = A + B;
  cout << "El resultado es:" << endl;
  cout << suma << endl;
  cout<<"¿Desea volver a hacer otra suma? S/N"<<endl; 
  cin>>opc;
 } // Fin del while
 cout<<"Fin del programa"<<endl;
 getch();
 return 0;
} // Fin del main
La diferencia entre el ciclo while y do-while es que el segundo siempre va a correr al menos una vez, el primero sólo cuando cierta condición se cumpla antes. En este caso tuve que inicializar la variable opc para que entrara al ciclo, de no hacerlo se diría directo a la línea que imprime fin del programa.

La verdad, la opción de código que te doy todavía podría mejorarse. Particularmente en la parte donde se le pregunta al usuario si desea hacer otra suma. Aquí podrías utilizar otro ciclo while para asegurarte que el usuario introduzca una opción válida (que sólo introduzca una de las opciones que le ofreces: S, s, N y n). No vaya a ser que introduzca un 1, un $, un *, etc. (aquí me traumó mi profesora de programación estructurada, siempre revisaba las prácticas introduciendo valores que no venían en las opciones sólo para asegurarse que validábamos los datos antes de continuar el programa y en caso de no validarlos de manera correcta, cero). Pero esto ya te lo dejo de tarea. Como tip te puedo decir que no pases el valor de la respuesta a la pregunta directamente a la variable opc, sino que lo pases a una variable intermedia que pueda inicializar el ciclo while (de hecho, puedes meter directamente la pregunta al ciclo while, no se te olvide inicializar la variable intermedia cuando la declares, o quizás utilizar un ciclo do-while para que entre al menos una vez a realizar la pregunta) y que lo siga ciclando hasta que el usuario introduzca un valor válido y ahí ya pasar el valor de la variable intermedia a la variable opc. También podría facilitarte esta tarea cambiar la condición del primer while (el ciclo principal), a si opc es distinto a N o n. El chiste es que juegues con el código para ver todas las posibilidades (eso sí, siempre tratando de ver porque hace tal o cual cosa el programa al realizar los cambios), para que en programas posteriores tengas más experiencia acerca de como encarar los retos que se te vayan presentando.

Te recomiendo comprarte un libro de nivel básico o bajarte uno de aquí para que comprendas mejor como es la estructura básica del lenguaje. Suerte con tu estudio del lenguaje C++. :vientos:
 
De hecho hay varias maneras, pero lo mejor sería que primero aprendas la estructura de los ciclos loop: while, el do-while y for (aunque este último no aplica para lo que quieres hacer, bueno quizás si desearas limitar el número de sumas que pudiera realizar el usuario). También debes aprender la estructura del if-else, aunque no la veo de mucha utilidad en este programa.

También hay otra bronca, la validación de datos. En los ejemplos que ponen los compañeros le preguntan al usuario que introduzca la opción de si quiere salir con un S/N o un s/n. El problema es que un buen programador siempre debe pensar en el usuario como si la verdad estuviera muy tarado y no sabe leer bien las opciones o si se tiene accionado o no el bloqueo de mayúsculas.

Por ejemplo, en:

cout<<"Desea Salir?: (s/n) "<<endl;
cin>>s;
if(s!="s"){
opcion=-1;
}
cout<<endl;

Si el usuario escribe S en vez de s, el programa continuara realizando el ciclo do-while (también, si introduce un número o cualquier otro carácter). Debes asegurarte de que el usuario introduzca un valor válido. Tal vez se podría escribir otro condicional para ver si el usuario está introduciendo un valor válido.

La opción del compañero hatuk2 no se me hace muy correcta. Si cumple con el objetivo, pero como que forza la salida del ciclo.

Déjame explicarte.
El ciclo do-while tiene la siguiente estructura:
do{
aquí va el código de lo que quieres hacer
} while (la opción para continuar o terminar el ciclo);

O sea, dice que va a ejecutar el código hasta que la condición no se cumpla. Cuando no se cumpla va a salirse del código y va a continuar con la siguiente línea de código después del while. En este caso, el compañero hatuk2 le pregunta al usuario si desea realizar otra suma:

cout<<"¿Desea volver a hacer otra suma? S/N"<<endl;
cin>>opc;

Luego pone un condicional:

if( opc=='N')
{
cout<<"Fin del programa"<<endl;
getch(); exit(0);
}

Aquí es donde veo el problema. No le veo la razón de hacer esto, ya que el ciclo propuesto por el compañero es:

do {} while (opc == "S");

Eso quiere decir que si en la pregunta de que si desea realizar otra suma el usuario introduce un valor distinto a S para la variable opc entonces el ciclo se rompe (el while ya tiene la condición para continuar o finalizar el ciclo, en este caso, se rompe si opc es distinta a S). No hay necesidad del if, viene sobrando.

Lo ideal sería:

do {} while (opc == 'S');
cout<<"Fin del programa"<<endl;
getch();
return 0;
} //Llave que cierra el main

Te voy a dar otra opción pero con el ciclo while tomando en cuenta el código del compañero hatuk2 pero con las observaciones anteriores. Tomo el código del compañero porque lo mio es el lenguaje C, no el C++ y estoy acostumbrado al printf y al scanf en vez de al cout y al cin, así que es posible que en alguna parte se me pueda ir un error de sintaxis, pero la estructura debe ser la correcta (siempre y cuando no me haya oxidado, tiene más de 3 años que no hago un programa en C:p).

Código:
#include <iostream>
using namespace std;
int main()
{
 long double A;
 long double B;
 long double suma;
 char opc = "S"; //Importante inicializar la variable para que entre el ciclo while
 while (opc == "S" || opc == "s")  //Condición para continuar o finalizar el ciclo
                                                    //En este caso, le digo que siga haciéndolo
                                                    //cuando opc sea igual a S o a s.
 { 
  cout << "Ingrese primer numero" << endl;
  cin >> A;
  cout << "Ingrese segundo numero" << endl;
  cin >> B;
  suma = A + B;
  cout << "El resultado es:" << endl;
  cout << suma << endl;
  cout<<"¿Desea volver a hacer otra suma? S/N"<<endl; 
  cin>>opc;
 } // Fin del while
 cout<<"Fin del programa"<<endl;
 getch();
 return 0;
} // Fin del main
La diferencia entre el ciclo while y do-while es que el segundo siempre va a correr al menos una vez, el primero sólo cuando cierta condición se cumpla antes. En este caso tuve que inicializar la variable opc para que entrara al ciclo, de no hacerlo se diría directo a la línea que imprime fin del programa.

La verdad, la opción de código que te doy todavía podría mejorarse. Particularmente en la parte donde se le pregunta al usuario si desea hacer otra suma. Aquí podrías utilizar otro ciclo while para asegurarte que el usuario introduzca una opción válida (que sólo introduzca una de las opciones que le ofreces: S, s, N y n). No vaya a ser que introduzca un 1, un $, un *, etc. (aquí me traumó mi profesora de programación estructurada, siempre revisaba las prácticas introduciendo valores que no venían en las opciones sólo para asegurarse que validábamos los datos antes de continuar el programa y en caso de no validarlos de manera correcta, cero). Pero esto ya te lo dejo de tarea. Como tip te puedo decir que no pases el valor de la respuesta a la pregunta directamente a la variable opc, sino que lo pases a una variable intermedia que pueda inicializar el ciclo while (de hecho, puedes meter directamente la pregunta al ciclo while, no se te olvide inicializar la variable intermedia cuando la declares, o quizás utilizar un ciclo do-while para que entre al menos una vez a realizar la pregunta) y que lo siga ciclando hasta que el usuario introduzca un valor válido y ahí ya pasar el valor de la variable intermedia a la variable opc. También podría facilitarte esta tarea cambiar la condición del primer while (el ciclo principal), a si opc es distinto a N o n. El chiste es que juegues con el código para ver todas las posibilidades (eso sí, siempre tratando de ver porque hace tal o cual cosa el programa al realizar los cambios), para que en programas posteriores tengas más experiencia acerca de como encarar los retos que se te vayan presentando.

Te recomiendo comprarte un libro de nivel básico o bajarte uno de aquí para que comprendas mejor como es la estructura básica del lenguaje. Suerte con tu estudio del lenguaje C++. :vientos:

Pues muchisisisisisisisimas gracias porque tu respuesta fue la mas completa. Sin demeritar a los compañeron bartlo y hatuk2 a quienes tambien les agradezco profundamente.
En efecto ahora que veo estos tres ejemplos entiendo cual fue el problema del porque no me salia, mi sintaxis no era correcta, declaraba el while al final y trataba de ejecutar alguna accion "repetir" o algo asi.
Intentare usar estos codigos y cambiarle y terminar formulando uno propio y ir practicando de poco en poco :]
Muchas gracias a todos :vientos:
 
Volver
Arriba