Cargando la página...

hola me pueden ayudar con un problema que tengo con un programa de clases en c++

Por andres ospina el 13 de mayo de 2011 en los siguientes foros: C++

hola me pueden ayudar con un problema que tengo con un programa de clases en c++

Avatar de andres  ospina
El programa anda bien hasta LargoF=a; luego se me puso complicado, estoy tratando de solucionar esto les agradezco la ayuda que me puedan dar. gracias *******************

#include<conio.h>
#include<stdio.h>

class rectangulo
{
public:
int calcArea(int b,int h);
int getLargo();
int getAncho();
void setLargoF(int a);
void setAnchoF(int a);
};


int rectangulo::calcArea(int b,int h)
{

return b * h;

}

int rectangulo::getLargo()
{
int LargoN;
printf("Digite el largo de la nave");
scanf("%d",&LargoN);
return LargoN;
}

int rectangulo::getAncho()
{
int Ancho;
printf("Digite el ancho de la nave");
scanf("%d",&Ancho);
return Ancho;
}

void rectangulo::setLargoF(int a)
{
LargoF=a;
}

void rectangulo::setAnchoF(int a)
{
AnchoF=a;

}


void main()
{
int LargoN, AnchoN, LargoV, AnchoV, LargoF, AnchoF, tiempo;
rectangulo O;

printf("Cual es el largo de la Nave ");
scanf("%d",&LargoN);
printf("Cual es el ancho de la Nave ");
scanf("%d",&AnchoN);

printf("Cual es el largo de la ventana ");
scanf("%d",&LargoV);
printf("Cual es el ancho de la ventana ");
scanf("%d",&AnchoV);

O.setLargoF(O.getLargo-LargoV);
O.setAnchoF(O.getAncho-AnchoV);



tiempo=O.calcArea(int b,int h)*10;

printf("El tiempo total para pintar toda la nave es de %d minutos",tiempo);


getch();
}

Respuestas

1
17
mayo
2011
Avatar de Administrador

Administrador 0 puntos

Lamentablemente veo que tenes varios errores, muchos conceptuales. Afortunadamente, todo se puede aprender.
Te paso a detallar lo que veo.

La clase no encapsula, no tiene estado. Al estado se lo dan los atributos, sus propiedades. Asi como la tenes solo es un conjunto de metodos (funciones) sueltos.

Si tu clase va a modelar un rectangulo, tiene que definirse a si misma como tal.
Un rectangulo se define a partir de su ancho y alto tal como lo pensaste, asi que vamos a modificarlo un poco.

Ademas de errores de sintaxis (te falta un ; al cerrar la clase por ejemplo), veo que usas metodos GETTER y SETTER. Esos métodos permiten controlar los cambios sobre los atributos y ejecutar código extra, tanto al leer como al escribir sobre estos atributos. En este caso no hacen faltan, por lo que dejaré públicos dichos atributos.

#include <stdio.h>

/**
* Lo ideal sería poner esta clase en otro archivo.
*
* Clase Rectangulo
*/

class rectangulo {
public:
int largo;
int ancho;
int area();
};

int rectangulo::area() {
return this->ancho * this->largo;
}


int main () {
//Una constante a veces es la mejor respuesta ante numeros magicos
const int tiempo_por_metro_cuadrado = 10;

int LargoN, AnchoN, LargoV, AnchoV, tiempo;
rectangulo nave, ventana;

//Primero la nave

printf("Cual es el largo de la Nave ");
scanf("%d",&LargoN);
printf("Cual es el ancho de la Nave ");
scanf("%d",&AnchoN);

//Asignamos a la nave
nave.largo = LargoN;
nave.ancho = AnchoN;


//Despues la ventana
printf("Cual es el largo de la ventana ");
scanf("%d",&LargoV);
printf("Cual es el ancho de la ventana ");
scanf("%d",&AnchoV);

//Asignamos a la ventana
ventana.largo = LargoV;
ventana.ancho = AnchoV;

//Calculamos el tiempo total como la diferencia entre areas por el tiempo por metro cuadrado
tiempo = (nave.area() - ventana.area()) * tiempo_por_metro_cuadrado;

printf("El tiempo total para pintar toda la nave es de %d minutos",tiempo);
getchar();
return 0;
}


Como verás, cambie el programa, los calculos no eran correctos.
Tambien quite conio.h, asi tu programa puede ser compilado incluso en linux.

Leelo, cualquier cosa consultá.

Un abrazo.
2
21
mayo
2011
Avatar de andres  ospina

andres ospina (iniciador del tema) 0 puntos

oe parce se le agradece en la buena.

aunque yo el código ya lo había resuelto por otro lado....
para el que le interese aquí esta el código mio, le agradezco al único que me respondió.

#include <iostream>
using namespace std;

class rectangulo
{
private:
double largo;
double ancho;
double largoV;
double anchoV;
public:
void theLar(double largo);
void theAnc(double ancho);
void theLarV(double largoV);
void theAncV(double anchoV);
double calculateArea ();
double calculateAreaV ();
double calculateTiempo();

};
void rectangulo::theLar(double L)
{
largo=L;
}
void rectangulo::theLarV(double LV)
{
largoV=LV;
}
void rectangulo::theAnc(double H)
{
ancho=H;
}
void rectangulo::theAncV(double HV)
{
anchoV=HV;
}
double rectangulo::calculateArea()
{
double A;
A=largo*ancho;
return A;
}
double rectangulo::calculateAreaV()
{
double AV;
AV=largoV*anchoV;
return AV;
}
double rectangulo::calculateTiempo()
{
double T,Y,W;
Y=(largo*ancho);
W=(largoV*anchoV);
T=(Y-W)*10;
return T;
}

int main()
{
double largo, ancho,largoV,anchoV;
rectangulo objectX;
cout << "ESCRIBA EL LARGO DE LA PARED EN METROS : ";
cin >> largo;
objectX.theLar(largo);

cout << "ESCRIBA EL ANCHO DE LA PARED EN METROS : ";
cin >> ancho;
objectX.theAnc(ancho);

cout << "ESCRIBA EL LARGO DE LA VENTANA EN METROS : ";
cin >> largoV;
objectX.theLarV(largoV);

cout << "ESCCRIBA EL ANCHO DE LA VENTANA EN METROS : ";
cin >> anchoV;
objectX.theAncV(anchoV);

cout <<"---------------------------------------------------------"<<endl;
cout <<"EL AREA DE LA PARED EN METROS CUADRADOS ES : "<< objectX.calculateArea() << endl;
cout <<"---------------------------------------------------------"<<endl;
cout <<"EL AREA DE LA VENTANA EN METROS CUADRADOS ES : "<< objectX.calculateAreaV() << endl;
cout <<"---------------------------------------------------------"<<endl;
cout <<">>>>EL TIEMPO QUE SE DEMORA PINTANDO LA PARED EN MINUTOS(10min/metro cuadrado) ES : " <<objectX.calculateTiempo()<<endl;
cout <<"________________________________________________________________________________________________________"<<endl;
cout <<"Por: Andres Ospina."<<endl;


fflush(stdin);
cin.get();
return 0 ;

}

Tema cerrado por inactividad mayor a 90 días