Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Programador91 en 1 Febrero 2012, 21:25 pm



Título: Presentación + dudas de principiante
Publicado por: Programador91 en 1 Febrero 2012, 21:25 pm
Buenas a tod@s:

Soy un chico de 20 años, no me dedico ni a la informática ni a la electrónica, sino a la automoción, sin embargo, todo el tema de ordenadores, y electrónica, siempre me ha ido mucho. Es más, cuando fue la hora de escojer qué estudios quería cursar, estaba entre estos 3. Pero escogí automoción porque es lo que me gusta más y a parte, los otros dos también se pueden aplicar a este campo.

Se poquito de eléctronica, ahora estoy un poco en ello y en informática solo informática de usuario. Pero ahora me estoy poniendo en programación. He empezado a hacer mis primeros programitas y van de fábula. Si queréis os lo paso para que digáis vuestra opinión.

Bueno el caso es que en uno de mis programas quiero centrar el texto en la pantalla, no quiero que me quede una lista de opciones en el menú principal del programa, pegado en el margen izquierdo de la pantalla. Como puedo hacerlo para que me quede centrado?

Muchas gracias de antemano y felicidades por el foro, me gusta mucho tanto su organización como el nivel que hay en él y los posts que hay colgados. Creo que me voy a pasar muchas horas navegando.

Vaya rabia no haberlo descubierto antes.




Título: Re: Presentación + dudas de principiante
Publicado por: тαптяα en 1 Febrero 2012, 21:26 pm
¿Que lenguaje de programación usas?
Más datos.


Título: Re: Presentación + dudas de principiante
Publicado por: Anastacio en 1 Febrero 2012, 22:45 pm
Si puso esto aca, es probable que sea C, o C++, u otra variante del C.

No tengo ni idea, vendria mejor saber algo de tu programa para eso.


Título: Re: Presentación + dudas de principiante
Publicado por: rir3760 en 2 Febrero 2012, 00:16 am
Como ya se comento vamos a suponer que Programador91 esta aprendiendo C o C++.

En ese caso lo mejor es continuar aprendiendo este en su forma estándar ya que así lo aprendido esta garantizado a funcionar correctamente sin importar el compilador y SO utilizado.

Una vez lo domines (me refiero a Programador91) pasas a las extensiones del lenguaje como es el caso con las dimensiones de la consola.

Un saludo


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 2 Febrero 2012, 16:20 pm
Buenas a tod@s:

Disculpad, estoy trabajando en C++ como muy bien algun@s habéis intuido por aquí. En concreto, trabajo con DEV-C++, no es por nada en concreto. Tan solo porque en uno de los tutoriales que vi en You tube, es el que utilitzaban para programar. Y de todos los que ví fue el que me convenció más. No sé si fue una buena o mala elección. Pero de momento me apaño con este.

Volviendo a las preguntas, hoy he estado trabajando en un nuevo programa que nos han pedido en clase y me han surgido nuevas dudas/problemas. Por lo tanto los añado en la lista de preguntas anteriormente formuladas:

-Centrar texto en pantalla (esta en modo completo)

-Como puedo hacer para que, en cualquier momento, el programa me vuelva al menú principal pulsando la tecla "ESC". Por ejemplo seleccionas una opción que no deseabas, para no tener que cerrar y volver abrir el programa, me gustaría que pulsando la tecla de escape el programa te devolviera al menú principal.

-Si introduzco un dato y este es incorrecto, como puedo hacer para que una vez escrito el dato, al pulsar enter para introducirlo y el pc verifique que este dato es incorrecto, me lo cambie a un color rojo por ejemplo (el mismo dato anteriormente introducido, no que me aparezca de nuevo en rojo)

-Tengo esta duda:

cout<<"Introduce el valor obtenido"<<endl;
               cout<<""<<endl;
               cin>>a;
 
               cout<<""<<endl;
               if (a < 0.5)           
               {
               cout<<"La resistencia interna de la bomba de la gasolina es inferior que la minima marcada por el fabricante"<<endl;
               cout<<""<<endl;
               cout<<"Substituir la bomba de combustible"<<endl;
               }
               if (a > 4.5)
               {
               cout<<"La resistencia interna de la bomba de la gasolina es mayor que la maxima marcada por el fabricante"<<endl;
               cout<<""<<endl;
               cout<<"Substituir la bomba de combustible"<<endl;
               }
               cout<<""<<endl;
               if ( 0.5<=a<=4.5)

                {   
               cout<<"La resistencia interna de la bomba de la gasolina es la correcta"<<endl;
               }

Me da un fallo que es: Si pongo un valor inferior a 0.5 primero me sale que es incorrecto porque es inferior a la que marca por el fabricante, sin embargo, acto seguido me sale la frase que si que es correcta.

Y lo mismo pasa si lo pongo superior a 4.5. Me pone primero que es incorrecto el dato porque es mayor al que dicta el fabricante pero acto seguido me la toma como correcta.

Donde está el fallo????

Muchas gracias

Disculpad por el error de no haber especificado el lenguaje utilitzado, y cualquier duda estaré el caso para poderla resolver lo antes posible.


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 2 Febrero 2012, 17:06 pm

cout<<"Introduce el valor obtenido"<<endl;
               cout<<""<<endl;
               cin>>a;
 
               cout<<""<<endl;
               if (a < 0.5)           
               {
               cout<<"La resistencia interna de la bomba de la gasolina es inferior que la minima marcada por el fabricante"<<endl;
               cout<<""<<endl;
               cout<<"Substituir la bomba de combustible"<<endl;
               }
               if (a > 4.5)
               {
               cout<<"La resistencia interna de la bomba de la gasolina es mayor que la maxima marcada por el fabricante"<<endl;
               cout<<""<<endl;
               cout<<"Substituir la bomba de combustible"<<endl;
               }
               cout<<""<<endl;
               if ( 0.5<=a<=4.5)

                {   
               cout<<"La resistencia interna de la bomba de la gasolina es la correcta"<<endl;
               }



Buenas a tod@s:

He podido solucionar el problema que cito arriba, al final lo he solucionado del siguiente modo:

cout<<"Introduce el valor obtenido"<<endl;
               cout<<""<<endl;
               cin>>a;
 
               cout<<""<<endl;
               if (a < 0.5)           
               {
               cout<<"La resistencia interna de la bomba de la gasolina es inferior que la minima marcada por el fabricante"<<endl;
               cout<<""<<endl;
               cout<<"Substituir la bomba de combustible"<<endl;
               }
               else if (a > 4.5)
               {
               cout<<"La resistencia interna de la bomba de la gasolina es mayor que la maxima marcada por el fabricante"<<endl;
               cout<<""<<endl;
               cout<<"Substituir la bomba de combustible"<<endl;
               }
               cout<<""<<endl;
               else if ( 0.5<=a<=4.5)

                {   
               cout<<"La resistencia interna de la bomba de la gasolina es la correcta"<<endl;
               }

El resto de dudas aún siguen en pie :huh:

Muchas gracias de antemano


Título: Re: Presentación + dudas de principiante
Publicado por: eleon en 2 Febrero 2012, 20:49 pm
Buenas:

Para centrar el texto tienes el famoso "gotoxy(x, y)" de la biblioteca "conio.h" pero es un crimen contra la programación, está totalmente desaconsejada esa librería asi que si la ves por ahi no la uses, de la que no tengo malas referencias es de la función "setw(num)" de la librería "iomanip" que viene por defecto en muchos compiladores. Aqui te dejo un ejemplo:

Código
  1. #include <iostream>
  2. #include<iomanip>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     cout << setw(30) << "texto" << setw(30) << "texto" << endl;
  8. }
  9.  

Acerca de lo de "presionar ESC para volver al inicio" hasta donde tengo entendido hay que usar una API para leer el "presionar" o "soltar" una tecla, para lo cual primero debes aprender a programar bien en C++ antes de meterte en esas cosas, lo que si que puedes hacer es un menú y un bucle:

Código
  1. while (opcion != 0)
  2. {
  3.     cout << "1- Opcion" << endl << "2- Opcion" << endl << "3-Salir";
  4.     cin >> opcion;
  5.  
  6.     switch (opcion)
  7.     {
  8.        case 1:
  9.            //Instrucciones
  10.            break;
  11.        case 2:
  12.            //Instrucciones
  13.            break;
  14.         case 3:
  15.             opcion = 0; //Al asignarle 0 a "opcion" saldrá del bucle y no volverá a mostrar el menú
  16.             break;
  17. }

Y para comprobar que la opcion seleccionada es correcta debes usar otro bucle dentro del anterior:

Código
  1. while (opcion < 1 || opcion > 3) //Mientras se salga del rango de las opciones se volverá a imprimir el mensaje y a pedir una opcion
  2. {
  3.     cout << "1- Opcion" << endl << "2- Opcion" << endl << "3-Salir";
  4.     cin >> opcion;
  5. }

Espero que te sirva, saludos.


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 2 Febrero 2012, 21:16 pm
Buenas a tod@s:

Muchas gracias por las respuestas. Lo pondré en práctica a ver que tal. ;-)


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 4 Febrero 2012, 11:24 am
Buenas a tod@s:

Continuo con mi proyecto para presentar en clase.

Ahora me encuentro que tengo que introducir 2 variables y compararlas. En caso de que una de las dos no cumpla los requisitos saber cual es para diagnosticar el problema y la consecuente solución.

Aquí os ejemplifico el problema.

Tenemos que introducir dos valores diferentes que les vamos a llamar X e Y.

La X tiene que estar entre los valores 35 y 45 y la Y entre 3.0 y 4.0. Pero si X nos da 80 la Y entonces tendrá que darnos unos valores comprendidos entre los 300 y 400.

En caso de que alguna de las dos variables no entre dentro de estos parámetros como lo puedo hacer para que me diga por ejemplo X está por debajo de los valores indicados por el fabricante? Y por supuesto esto con el resto, es decir que me diga cual de las dos está mal y si está por encima o por debajo.

Muchas gracias de antemano. Por supuesto, en el final del trabajo en los agredicimientos aparecerá vuestro foro. Es lo mínimo que puedo hacer después de esta acojida ;-)


Título: Re: Presentación + dudas de principiante
Publicado por: eleon en 4 Febrero 2012, 13:48 pm
La misma respuesta que antes, usa un bucle para evitar que el usuario introduzca un dato erróneo y usa un análisis de casos o condicionales para tratar los elementos. Ejemplo:

Código
  1. while (x < 35 || x > 80)  //Aqui se pedirá el valor de x mientras no esté entre 35 y 80 (min y max)
  2. {
  3.   cout << "Valor de X: ";
  4.   cin >> x;
  5. }
  6. if (x >= 35 && x <= 45)  //Si está comprendido entre 35 y 45...
  7. {
  8.   while (y < 3 || y > 4) //...Se pide un valor de Y entre 3 y 4
  9.   {
  10.       cout << endl << "El valor de Y debe estar comprendido entre 3 y 4: ";
  11.       cin >> y;
  12.   }
  13. else  //Y si no es asi...
  14. {
  15.    while (y < 300 || y > 400)  //... se pide un valor de Y entre 300 y 400
  16.    {
  17.       cout << endl << "El valor de Y debe estar comprendido entre 300 y 400: ";
  18.       cin >> y;
  19.     }
  20. }
  21.  
  22. //Tratamiento de X e Y

Te lo dejo como guía de cómo plantear estos ejercicios, por supuesto tienes que acomodarlo a tu programa en particular.

Saludos.


Título: Re: Presentación + dudas de principiante
Publicado por: Xandrete en 4 Febrero 2012, 15:21 pm
Oh, otro consejo. Cambia de IDE. Dev-Cpp lleva desatendido algunos años (y, entre otras cosas, tiene el MinGW desactualizado). Si te gusta mucho Dev-Cpp tienes wxDev-Cpp, que sí recibe actualizaciones periódicamente. Aquí el link (http://wxdsgn.sourceforge.net/) de su web. Y aquí (http://wxdsgn.sourceforge.net/) tienes un artículo en que dan varias razones para no usar Dev-Cpp y alternativas (entre estas alternativas está wxDev-Cpp).

Saludos


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 4 Febrero 2012, 18:15 pm
Buenas a tod@s:

Gracias eleon por resolver mi duda. Voy a ponerlo en práctica a ver que tal funciona.

Xandrete, el link que me has pasado veo que hay diversos programas, cual escojo? No hay ninguna versión en inglés?

De todos modos muchas gracias.


Título: Re: Presentación + dudas de principiante
Publicado por: Xandrete en 5 Febrero 2012, 02:26 am
Buenas a tod@s:

Gracias eleon por resolver mi duda. Voy a ponerlo en práctica a ver que tal funciona.

Xandrete, el link que me has pasado veo que hay diversos programas, cual escojo? No hay ninguna versión en inglés?

De todos modos muchas gracias.

Ya que usas Dev-Cpp, pues te recomiendo wxDev-Cpp, para que el cambio sea lo menos radical posible. ¿Versión en inglés? Claro. De hecho, lo raro es que cualquiera de estos programas no salga originalmente en inglés. Las traducciones suelen ser cosa de las comunidades de usuarios.

Saludos


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 5 Febrero 2012, 12:53 pm
Buenas a tod@s:

Ups Xandrete, quería decir en español, jeje, disculpa. Es que en el link están todos en inglés.


Título: Re: Presentación + dudas de principiante
Publicado por: Xandrete en 5 Febrero 2012, 14:12 pm
¡Ah, amigo!

Diría que wxDev-C++ tiene disponible versión en español. Prueba a descargar el instalador y mira si en algún momento te pregunta por el idioma. Pero vamos, tiene que tener porque en el artículo de la wikipedia que corresponde a este IDE se dice que hay versión en español. De todas formas, en tu lugar ya me iría acostumbrando a que todo esté en inglés, es el idioma de la ciencia y la tecnología.

Saludos, jefe.


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 12 Febrero 2012, 15:37 pm

Código
  1. while (x < 35 || x > 80)  //Aqui se pedirá el valor de x mientras no esté entre 35 y 80 (min y max)
  2. {
  3.   cout << "Valor de X: ";
  4.   cin >> x;
  5. }
  6. if (x >= 35 && x <= 45)  //Si está comprendido entre 35 y 45...
  7. {
  8.   while (y < 3 || y > 4) //...Se pide un valor de Y entre 3 y 4
  9.   {
  10.       cout << endl << "El valor de Y debe estar comprendido entre 3 y 4: ";
  11.       cin >> y;
  12.   }
  13. else  //Y si no es asi...
  14. {
  15.    while (y < 300 || y > 400)  //... se pide un valor de Y entre 300 y 400
  16.    {
  17.       cout << endl << "El valor de Y debe estar comprendido entre 300 y 400: ";
  18.       cin >> y;
  19.     }
  20. }
  21.  
  22. //Tratamiento de X e Y


Buenas a tod@s:

Aún continuo peleandome con el programa y aun hay cositas que hay que perfilar.

Bueno volviendo al caso del ejemplo de arriba. Aquí, tal y como lo has puesto si no introduces un valor que no esté comprendido dentro de los margenes no te lo deja introducir y a mi me interesaría que si te dejara introducirlo y posteriormente te dijese que está fuera de los rangos especificando si es inferior o superior.

Muchas gracias de antemano. Y eso de la programación tiene sus intringuilis. Que hasta no ves donde te has equivocado jode un huevo porque te comes el tarro un montón. O a veces te complia bien y no te dice que haya ningun error, pero sin embargo, el programa no correc omo lo tendría que hacer, dando por buenos valores que están mal.

Muchas gracias de nuevo y nada, a seguir peleando porque todo funcione como debe ser.


Título: Re: Presentación + dudas de principiante
Publicado por: eleon en 12 Febrero 2012, 17:58 pm
Citar
Bueno volviendo al caso del ejemplo de arriba. Aquí, tal y como lo has puesto si no introduces un valor que no esté comprendido dentro de los margenes no te lo deja introducir y a mi me interesaría que si te dejara introducirlo y posteriormente te dijese que está fuera de los rangos especificando si es inferior o superior.

Quita el bucle y pon condicionales, si es menor de 35 que imprima "tal", si es mayor que 80 que imprima "tal" y sino (ni menor de 35 ni mayor de 80, es decir, entre 35 y 80) que haga tal cosa.

No sé dónde podrías tener problemas, haz el código y luego pregunta dudas concretas.

Saludos.


Título: Re: Presentación + dudas de principiante
Publicado por: Programador91 en 12 Febrero 2012, 21:18 pm
Buenas a tod@s:

Mira aquí te dejo el codigo a ver si le encuentras el fallo, yo lo he hecho de este modo, antes de leer tu recomendación.

De todos modos, lo he probado de poner de diferentes formas y ninguna da los resultados esperados. A parte, en el segundo case, el 9, que tan solo hay una variable, tampoco funciona del todo bien, ya que cuando le pongo 4.7, que tendría que estar dentro de los valores dados por el fabricante, no me lo da por bueno, sino por inferior al establecido.

Tengo otros case que funcionan igual dar una variable y decir si está dentro de los margenes establecidos o si es superior o inferior y funcionan correctamente. Sin embargo, estos, están escritos de la misma forma, y no me sale correctamente.

Bueno aquí os dejo el código y a ver si es que es un problema de sintaxis o es porque al no estar bien aprovechado, es decir, que si se puede reducir de algun modo o algo, y de este modo hacerlo más eficaz y por lo tanto rule bien o que.

Sé que en el primer apartado se podría poner mejor, pero esta ya era mi ultima tentativa de modo que si coincidian dos opciones pues me salieran ambas, pero ni de ese modo me sale  :(
Primero lo hacía todo junto j y k y todas sus variables pero juntas, si una estaba bien y la otra más baja de lo recomendado o más alta o viceversa con la j. Pero tampoco me salía por eso probé con esta opción individual pero tampoco.

cout<<"Mide la resistencia interna de la sonda de temperatura del aire entre los puntos  1 y 4"<<endl;
              cout<<""<<endl;
              cout<<"Introduce el valor obtenido"<<endl;
              cout<<""<<endl;
              cin>>j;
              cout<<""<<endl;
              cout<<"Mide la temperatura del aire"<<endl;
              cout<<""<<endl;
              cout<<"Introduce el valor obtenido"<<endl;
              cout<<""<<endl;
              cin>>k;
              cout<<""<<endl;
             
              if (15<=k<=25 & 2.3<=j<=2.7)
              {
              cout<<"Ambos valores introducidos son correctos"<<endl;
              }
              else if (k<15)
              {
              cout<<"La temperatura introducida es mas baja a la necessaria para realizar la prueba"<<endl;
              }
              else if (k>25)
              {
              cout<<"La temperatura introducida es mas alta a la necessaria para realitzar la prueba"<<endl;
              }
              else if (j<2.3)
              {
              cout<<"La resistencia introducida es mas baja a la marcada por el fabricante"<<endl;
              }
              else if (j>2.7)
              {
              cout<<"La resistencia introducida es mas alta a la marcada por el fabricante"<<endl;
              }
              cout<<""<<endl;
              system ("PAUSE");
              system ("CLS");
              break;
     
     case 9:
             
             cout<<""<<endl;
             cout<<"VERIFICACION DEL SENSOR DE LA PRESSION ABSOULTA"<<endl;
             cout<<""<<endl;
             cout<<"Mide la tension entre los puntos C (+) i A (-) del sensor, que corresponen a la tension d'alimentacion"<<endl;
             cout<<""<<endl;         
             cout<<"Introduce el valor obtenido"<<endl;
             cout<<""<<endl;
             cin>>l;
             cout<<""<<endl;
             
             if (l<4.7)
             {
             cout<<"La tension introducida es mas baja a la indicada por el fabricant"<<endl;
             }
             else if (l<=4.7 && l <= 5.2)
             {
             cout<<"La tension introducida esta dentro los parametres del fabricante"<<endl;
             }
             if (5.2<l)
             {
             cout<<"La tension introducida es mes alta a la marcada por el fabricante"<<endl;
             }
             cout<<""<<endl;
             system ("PAUSE");
             system ("CLS");
             break;

Muchas gracias de antemano, continuaré mirando donde está el fallo o que pero es que me da rabia porque como el case 9 tengo muchos, que solo son una sola variable y tambien me fallan, porque no me terminan de ir bien, porque me dan valores como malos cuando me los tendría que dar por buenos.

Y perdonad las molestias. Ya digo, soy un principiante, y aunque me leo los muchos manuales que me he descargado, no termino de encontrar solución alguna a las pegas que me voy encontrando.


Título: Re: Presentación + dudas de principiante
Publicado por: eleon en 12 Febrero 2012, 22:15 pm
Esto no es correcto:

Código
  1.             if (l<4.7)
  2.             {
  3.             cout<<"La tension introducida es mas baja a la indicada por el fabricant"<<endl;
  4.             }
  5.             else if (l<=4.7 && l <= 5.2)
  6.             {
  7.             cout<<"La tension introducida esta dentro los parametres del fabricante"<<endl;
  8.             }
  9.             if (5.2<l)
  10.             {

Para un análisis de casos se deben cumplir dos condiciones:
1- Todas las posibilidades deben estar abarcadas.
2- Una posibilidad no puede aparecer en dos casos distintos.

Tanto el primer como el segundo if se ejecutarán si el valor de "l" es menor que 4.7, por tanto es erróneo. Además en el segundo if poner "l<=4.7 && l <= 5.2" es redundante, ya que si es menor que 4.7 también va a ser menor que 5.2.

Saludos.


Título: Re: Presentación + dudas de principiante
Publicado por: rir3760 en 14 Febrero 2012, 04:19 am
Aparte de lo ya comentado por eleon hay otros errores al principio del programa, en este condicional:
Código
  1. if (15<=k<=25 & 2.3<=j<=2.7) ...
Cuando deseas verificar si un valor esta dentro de un rango no puedes utilizar la forma usual en matemáticas "15 <= k <= 25". En su lugar debes indicar las dos condiciones, por ejemplo "15 <= k && k <= 25".

También debes utilizar de forma consistente los operadores, en tu caso debes utilizar el operador lógico "&&". El operador '&' es valido pero su uso tiene otra intención (operación AND a nivel de bits).

Un saludo