elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
08 Septiembre 2008, 02:59  



+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderador: ®®)
| | |-+  Duda respecto a una evaluacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Duda respecto a una evaluacion  (Leído 147 veces)
y_young

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Duda respecto a una evaluacion
« en: 02 Julio 2008, 05:37 »

Buenas noches,

//Disculpen el titulo es que no sabia como expresar  la idea.

Disculpen es que tengo una duda, he buscado un poco pero no me aclaro en un libro de programación no recuerdo el nombre saque una copia de por hay xD ponen un programa que dice lo siguiente: "Leer el valor en grados centigrados de las temperaturas registradas c/dia durante las 2 ultimas semanas de Lunes a domingo. Encuentre e imprima el día más caliente y la temperatura registrada ese día."

Este problema lo he resuelto con el siguiente codigo:
Código:
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#include "string.h"

int di=1, di1=1; //Contadores empleados para los métodos leer_s1() y leer_s2()

class problema {

double Tem, Tem2, c, c1;  /* Variables donde se cargan y que posterior mente uso para evaluar la impresión.*/

char Dia[10];      //Utilizado en leer_s1() para imprimir el día que indique el contador
char Dia1[10];   //Utilizado en leer_s2() para imprimir el día que indique el contador
char Dres[10];   //Guarda el día mas cálido luego de la evaluación.
char Dres1[10];  //Guarda el día mas cálido luego de la evaluación.

public:

void leer_s1(){


if(di==1)
strcpy(Dia, "Lunes");
else if (di==2)
strcpy(Dia, "Martes");
else if (di==3)
strcpy(Dia, "Miercoles");
else if (di==4)
strcpy(Dia, "Jueves");
else if (di==5)
strcpy(Dia, "Viernes");
else if (di==6)
strcpy(Dia, "Sabado");
else if (di==7)
strcpy(Dia, "Domingo");

cout<<"\n\nIngrese la temperatura del "<<Dia<<"  ";
cin>>Tem;

di=di+1; //contador se incrementa a cada ciclo
}

void leer_s2(){


if(di1==1)
strcpy(Dia1, "Lunes");
else if (di1==2)
strcpy(Dia1, "Martes");
else if (di1==3)
strcpy(Dia1, "Miercoles");
else if (di1==4)
strcpy(Dia1, "Jueves");
else if (di1==5)
strcpy(Dia1, "Viernes");
else if (di1==6)
strcpy(Dia1, "Sabado");
else if (di1==7)
strcpy(Dia1, "Domingo");

cout<<"\n\nIngrese la temperatura del "<<Dia1<<"  ";
cin>>Tem2;

di1=di1+1; // misma fusión que el anterior contador.
}

void evalu_s1(){

if(Tem>c){
c=Tem;
strcpy(Dres, Dia);
}
}

void evalu_s2(){

if(Tem2>c1){
c1=Tem2;
strcpy(Dres1, Dia1);
}
}

resul(){
if(c>c1)
cout<<"El dia mas caliente fue "<<Dres<<" con una temperatura de "<<c<<" grados.";

else if(c==c1){
cout<<"En la semana uno y la semana dos se repitio la temperatura mas calida en el siguiente orden";
cout<<"\n\n"<<Dres<<" con "<<c<<" grado. ";
cout<<"\n\n"<<Dres1<<" con "<<c1<<" grados. ";
}

else
cout<<"El dia mas caliente fue "<<Dres1<<" con una temperatura de "<<c1<<" grados.";
}


};

void main (void) {
clrscr();

int contador=0; //variable que controla el primer ciclo while.
int contador1=0;  //variable que controla el segundo  ciclo while.

class problema ob;

cout<<"\t Primera semana";

while(contador != 7){

ob.leer_s1();
ob.evalu_s1();
contador=contador+1;

}

cout<<"\n\n\t Segunda semana";

while(contador1 != 7){

ob.leer_s2();
ob.evalu_s2();
contador1=contador1+1;

}

cout<<"\n\n La respuesta es: \n\n";

ob.resul();

getch();
}

Esto fue compilado en TC 3.0 corre sin ningún problema ahora bien mi duda es la siguiente " Como puedo validar cuando el día mas cálido se repite en la misma semana mas de dos veces ? anexe un condicional en el método resul() que evalúa si el día mas cálido se da en las dos semanas. pero no se como   hacer por ejemplo:

Semana n.
Lunes 40º
martes 30º
miercoles40º
-
-
 
Osea el día mas cálido fueron lunes y miércoles de la misma semana. como hago para imprimir eso. no se me estaré ahogando en un baso de agua pero la verdad no
se me ha ocurrido bien como.

Bueno me despido gracias por su atención y disculpen la molestias...

y_young
En línea
Flakito81

Conectado Conectado

Mensajes: 329



Ver Perfil
Re: Duda respecto a una evaluacion
« Respuesta #1 en: 02 Julio 2008, 15:18 »

Antes de nada decir que el código no me gusta, demasiado engorroso para leer.
Por otra parte usas el mismo código con diferentes nombres para las diferentes semanas ¿crees que si kieres calcular la temperatura del año tienes que hacer 52 funciones (una por semana)?
Lo más normal es que hagas una clase para gestionar las temperaturas de manera genérica y luego crees arrays(tantos como semanas) de objetos(uno para cada dia), o bien que la clase tenga un array de 7 elementos donde guardar la temperatura y un array de short (o enteros si lo prefieres) para guardar el día. Luego sólo será usar los métodos para cada objeto.
Para evitar tener if anidados o swith podrías tener un array de punteros a cadena de caracteres
Código
 char *dias[] = {"Lunes", "Martes", "Miercoles"};
y sólo tendrías que pasarle el indice que será el valor del dia de la semana (será un atributo de la clase). Si kisieras sacar la temperatura de la dos semanas tendrías que hacer una función (no tendría que pertenecer a la clase) y le pasas los dos objetos. Obviamente tendrías que hacer métodos para ver los valores de los atributos, ya que  estos están encapsulados (serían atributos privados).
Hay más formas como la de crear un único con todos los dias de las dos semanas y controlar los adecuadamente los dias (0-6/7-13).

Supongo que con lo dicho ya podrás comenzar ha trabajar en el problema. Un saludo!

En línea
Flakito81

Conectado Conectado

Mensajes: 329



Ver Perfil
Re: Duda respecto a una evaluacion
« Respuesta #2 en: 02 Julio 2008, 16:53 »

El dia de la semana tambien lo puedes calcular de manera indirecta, si las semanas comienzan los lunes y terminan los domingo ...
Te dejo un ejemplito:
Código
#include<iostream>
 
char *ArrayDias[] = {"Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"};
 
class Temperatura
{
  private:
          float grados[7];
  public:
         Temperatura();
         ~Temperatura();
         void MayorGrado();
         void CargarDatos();    
};
 
Temperatura::Temperatura()
{
  //-- si kieres hacer alguna inicilizacion puedes hacerla aki                          
}
Temperatura::~Temperatura()
{
  //-- no hace falta hacer nada                          
}
 
void Temperatura::MayorGrado()
{
  short i, k;
  float max;
 
  k = 0;
  max = grados[k];
  for (i = 1; i < 7; i++)
     if ( max < grados[i])
     {
        k = i;
        max = grados[i]; //-- actualizamos
     }
  std::cout << "El maximo de temperatura se alcanzo el " << ArrayDias[k] << " con "<< grados[k] << " grados" << std::endl;
}
 
void Temperatura::CargarDatos()
{
  short i;
 
  for (i = 0; i < 7; i++)
  {
     std::cout << "Temperatura para el " << ArrayDias[i] << ":";
     std::cin >> grados[i];
  }    
}
int main ()
{
  class Temperatura semana;
 
  semana.CargarDatos();
  semana.MayorGrado();
 
  system("pause");
  return 0;
}
 

Suerte!
En línea
TheMaker

Desconectado Desconectado

Mensajes: 256



Ver Perfil
Re: Duda respecto a una evaluacion
« Respuesta #3 en: 02 Julio 2008, 23:16 »

Deberias de hacer tmb el constructor de copias, sino cuando pases una fecha como referencia a una función no funcionará correctamente
En línea
y_young

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Duda respecto a una evaluacion
« Respuesta #4 en: 03 Julio 2008, 01:15 »

Vale, muchas gracias por tu atención   y lo del Array no lo domino, por eso no lo asocie.
 
Aver  con tu code creo que me   e aclarado isa que voy a  hacerle

Nos vemos y gracias por sus comentarios.
 
En línea
Páginas: [1] Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC