Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kaede_ en 13 Agosto 2011, 04:03 am



Título: triangulo problema al compilar
Publicado por: kaede_ en 13 Agosto 2011, 04:03 am
Hola amigos sigo en mi curso de programacion solo que aun no encuentro la manera de compilarlo..
el ejercicio es multiple tanto en baze areaa y altur

alguien me puede echar una mano?

#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])

{
    int opera;
    printf("EJERCICIOS DE LOS TRIANGULOS ........ /n");
    printf("============================ \n\n\n");
    printf("1) para calcular el area de un triangulo \n");
    printf("\t2) para calcular la base \n");
printf("3) para calcular la altura \n\n");
printf("ingrese una opcion ........ ");
scanf("%f",&operacion);
switch(operacion)
{
                 float area, altura, base;
                 case A:
                      printf("\nAREA DEL TRIANGULO \n");
                      printf("ingrese la base ........ ");
                      scanf("%d",&base);
                      printf("ingrese la altura ........ ");
                      scanf("%d",&altura);
                      printf("el area del triangulo es %d ",base*altura/2);
                      break;
                     
                      case 2:
                           printf("\nBASE DE UN TRIANGULO \n");
                           printf("ingrese el area ........ ");
                           scanf("%d",&area);
                           printf("ingrese la altura ........ ");
                           scanf("%d",&altura);
                           printf("la base de area del triangulo es %d ",2*area/altura);
                           break;
                           
                           case 3:
                                printf("\nALTURA DE UN TRIANGULO \n");
                                printf("ingrese el area ........ ");
                                scanf("%d",&area);
                                printf("ingrese la base ........ ");
                                scanf("%d",&base);
                                printf("la base de area del triangulo es %d ",2*area/base);
                                break;
                               
                                default:
                                        printf(" nada mas ........ ");
                                       
                                        }
                                       
                                        system("PAUSE");
                                        return EXIT_SUCCESS;
                                       
                                        }

                                       
                               
                           
                     
                     
                 


Título: Re: triangulo problema al compilar
Publicado por: Beakman en 13 Agosto 2011, 04:55 am
Primero:
Código
  1. scanf("%f",&operacion);
No definiste la variable "operacion".

Supongo que la defines aca:
Código
  1. int opera;
Pero esto debería ser:
Código
  1. float operacion;

Después en el switch haces esto:
Código
  1. case A:
  2. (...)
  3. case 2:
¿ ... ?

Tenés que verificar los errores que tira cuando intentas compilarlo, si los lees seguramente te das cuenta de estas cosas.

Edito:
No te acostumbres al system("pause"); tenés otras alternativas.
Y si pones tu código con las etiquetas [ code=c ][ /code] sería más legible.


Título: Re: triangulo problema al compilar
Publicado por: Alien-Z en 13 Agosto 2011, 16:27 pm
Buenas:

Soy un "super-principiante", asi que para practicar he decidido corregir los errores de este script y modificarlo un pelín para que funcione (aun después de corregir los errores, el programa se ejecuta pero no realiza ninguna operación), aqui te dejo el código final y abajo lo comento:

Código:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{
    int operacion, salir=0;
    float area, altura, base;
    
    do {
    
    printf("EJERCICIOS DE LOS TRIANGULOS........ \n\n");
    printf("============================ \n\n\n");
    printf("1) para calcular el area de un triangulo \n");
    printf("2) para calcular la base \n");
    printf("3) para calcular la altura \n");
    printf("4) Salir \n");
    scanf("%i", &operacion);
    
    switch (operacion)
    
    {
                 case 1:
                      printf("\nAREA DEL TRIANGULO \n");
                      printf("ingrese la base ........ ");
                      scanf("%d",&base);
                      printf("ingrese la altura ........ ");
                      scanf("%d",&altura);
                      printf("el area del triangulo es %d ", base*altura/2);
                      break;
                    
                      case 2:
                           printf("\nBASE DE UN TRIANGULO \n");
                           printf("ingrese el area ........ ");
                           scanf("%d",&area);
                           printf("ingrese la altura ........ ");
                           scanf("%d",&altura);
                           printf("la base de area del triangulo es %d ",2*area/altura);
                           break;
                          
                      case 3:
                                printf("\nALTURA DE UN TRIANGULO \n");
                                printf("ingrese el area ........ ");
                                scanf("%d",&area);
                                printf("ingrese la base ........ ");
                                scanf("%d",&base);
                                printf("la base de area del triangulo es %d ",2*area/base);
                                break;
                                
                                case 4:
                                    
                                     salir = 1;
                                     break;
                                    
                              
                                default:
                                        printf(" Opcion invalida. \n\n");
                                      
                                        }
                                        
                                        }while (salir == 0);
                                      
                                        system("pause");
                                        return 0;
                                        }


En primer lugar te listo los errores para que los tengas en cuenta:

1- Has puesto:

Código:
int opera;

En vez de:

Código:
int operacion;

Esto no tiene ninguna importancia, puede pasarle a cualquiera con las prisas.

2- Has puesto:

Código:
case A:
(...)
case 2:

En cierto modo es correcto, pero deberás especificarle al usuario que si quiere usar la primera opción debe ingresar "A". Sin embargo hay un error al llamar a esta función, te explico:

Cuando es número se pone :

Código:
case 1:
(...)

Pero cuando es una letra debe ir entre comillas:

Código:
case 'A': //COMILLAS SIMPLES [''], NO COMILLAS DOBLES [""]
(...)

Hasta ahi los errores comentados por CrisQC.

3- Has llamado mal la variable "operacion", fíjate que has puesto:

Citar
scanf("%f",&operacion);

Sin embargo, tú la has declarado como un integer (int), por tanto debes llamarla asi:

Citar
scanf("%i",&operacion);

Esos son los errores, sin embargo yo le he añadido una cuarta opción, "salir", de la siguiente manera:

1- Cuando declaras las variables añades una más:

Citar
int operacion, salir=0;
float area, altura, base;

Y ahora usamos la función "do while". Se quedaría asi:

Citar
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{
    int operacion, salir=0;
    float area, altura, base;
    
    do {

//TODO LO QUE SUCEDERÁ MIENTRAS SE CUMPLA LA OPCIÓN SEÑALADA EN WHILE

                                        
                                        }while (salir == 0); // MIENTRAS SALIR VALGA CERO EL PROGRAMA CONTINUARÁ, Y CUANDO HAGAS UNA OPERACIÓN VOLVERÁ A COMENZAR DESDE EL PRINCIPIO PIDIÉNDOTE QUE SELECCIONES SI QUIERES CALCULAR EL AREA LA BASE O LA ALTURA, SIN EMBARGO CUANDO DEJE DE CUMPLIRSE ESTA OPCIÓN EL PROGRAMA FINALIZARÁ.

                                      
                                        system("pause");
                                        return 0;
                                        }


Entonces añadimos un nuevo caso:

Citar
(...)
                      case 3:
                                printf("\nALTURA DE UN TRIANGULO \n");
                                printf("ingrese el area ........ ");
                                scanf("%d",&area);
                                printf("ingrese la base ........ ");
                                scanf("%d",&base);
                                printf("la base de area del triangulo es %d ",2*area/base);
                                break;
                                
                                case 4:
                                    
                                     salir = 1;
                                     break;

                                    
                              
                                default:
                                        printf(" Opcion invalida. \n\n");
                                      
                                        }
                                        
                                        }while (salir == 0);
                                      
                                        system("pause");
                                        return 0;
                                        }

Si seleccionas 4, "salir" cambiará su valor y ahora valdrá 1, por tanto ya no se cumple la condición de "while" y entonces el programa finaliza.

================================================


Bueno, hasta ahi lo que he conseguido hacer con mis bajos conocimientos de 2 dias leyendo tutoriales, asi que si los expertos pueden echarle un vistazo y decirme si puedo mejorar en algo lo agradecería (como ya dije en otro tema yo uso "cout", "cin", y otras funciones, no sé como se le llamaría a este "estilo" de programación en C++, pero asi aprendo las diversas formas también).

Espero que te sirva kaede. Saludos.


Título: Re: triangulo problema al compilar
Publicado por: satu en 13 Agosto 2011, 21:43 pm
Hola Alien-Z

cin y cout son de C++, que se encuentran en <iostream> (no existe en C), pero printf y scanf se encuentran en <stdio.h> de C o <cstdio> de C++, por lo tanto para que tu código funcione debes incluirla o sustutuir printf por cout y scanf por cin. Otra cosa, no te acostumbres a utilizar system("pause"), procura que tu código sea estándar, léete esto (https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) que te vendrá muy bien.

Otra cosa que quería decirte es que me gusta que estructures el código con las líneas en blanco y las indentaciones, así es mucho más legible, aunque te vas hacia la derecha jajajaja.

En cuanto al código no puedo probarlo ahora mismo asíque no puedo ayudarte con eso.

Saludos



EDITO: estoy viendo que utilizas scanf("%d",&base), scanf("%d",&altura)..... cuando base y altura son de tipo float. Deberías utilizar scanf("%f",&base);


Título: Re: triangulo problema al compilar
Publicado por: Alien-Z en 13 Agosto 2011, 22:27 pm
Gracias por el comentario Satu, me leeré el link que me has pasado.

Citar
EDITO: estoy viendo que utilizas scanf("%d",&base), scanf("%d",&altura)..... cuando base y altura son de tipo float. Deberías utilizar scanf("%f",&base);

Esa parte la copié literal del código de kaede (es él/ella el que se va a la derecha xD) ni me había dado cuenta de ese fallo, de todas formas, lo he compilado y ejecutado con las correciones que hice y me ha ido correctamente, ¿eso es normal? (o alomejor si lo arreglé cuando lo compilé pero aqui se me olvidó).


Título: Re: triangulo problema al compilar
Publicado por: satu en 15 Agosto 2011, 15:51 pm
Hola

Sí es normal que compile, pero el compilador te lanza unos warnings avisándote

Saludos