elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con ejercicio de bucles.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ejercicio de bucles.  (Leído 1,767 veces)
eveelynn24

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con ejercicio de bucles.
« en: 7 Noviembre 2014, 19:33 pm »

¿Podríais ayudarme con este ejercicio de bucles? Tengo exámen el lunes y está siendo un quebradero de cabeza ya que todos los ejercicios que hago tienen algún problema. Os dejo el ejercicio y mi código. Os estaré eternamente agradecida si me ayudáis a corregirlo correctamente. Gracias.


Un satélite meteorológico envía diariamente a la tierra una serie de datos indicando la temperatura (0-100) y la humedad (0-100) medidas en distintas zonas del planeta donde cada zona del planeta se representa mediante una letra del alfabeto (A..Z) (sólo mayúsculas). Diseñar un programa que lea desde el teclado una serie de t-uplas compuestas por <zona, temperatura, humedad> y diga cuál es la zona del planeta que tiene la temperatura más alta y la humedad más baja. La serie de datos termina cuando la zona coincide con el carácter ’@’.

Por ejemplo, ante una secuencia como:

A 30 10
B 40 70
C 20 20
D 40 80
E 25 70
F 38 10
G 40 30
H 20 33
I 28 56
J 40 10
K 20 10
@

La salida es:

ZONA: J
TEMPERATURA: 40
HUMEDAD: 10

Código:

 #include <iostream>
using namespace std;

int main ()

{
char zona1, zona2;
int temp1, temp2, hum1, hum2;

do {
cout << "\nIntroduce la zona (Mayúsculas): ";
cin >> zona1;
}
while (((zona1<'A') || (zona1>'Z'))&& zona1!='@');

do {
cout << "\nIntroduce la temperatura (entre 0 y 100): ";
cin >> temp1;
}
while ((temp1<0) || (temp1>100));

do {
cout << "\nIntroduce la humedad (entre 0 y 100): ";
cin >> hum1;
}
while ((hum1<0) || (hum1>100));


while ( (zona1!='@') || (zona2!='@'))
{
do {
cout << "\nIntroduce otra zona (Mayúsculas): ";
cin >> zona2;
}
while (((zona2<'A') || (zona2>'Z'))&& zona2!='@');

do {
cout << "\nIntroduce la temperatura (entre 0 y 100): ";
cin >> temp2;
}
while ((temp2<0) || (temp2>100));

do {
cout << "\nIntroduce la humedad (entre 0 y 100): ";
cin >> hum2;
}
while ((hum2<0) || (hum2>100));

if (temp1<temp2)
{
temp1 = temp2;
hum1 = hum2;
zona1 = zona2;
}
else if (temp1 == temp2)
{
if (hum1>hum2)
{
hum1 = hum2;
zona1 = zona2;
}
}
}
cout << "\n\nZona: " << zona1 << "\nTemperatura: " << temp1 << "\nHumedad: " << hum1;

system ("pause");
}



« Última modificación: 7 Noviembre 2014, 19:36 pm por eveelynn24 » En línea

lluvplay

Desconectado Desconectado

Mensajes: 27



Ver Perfil
Re: Ayuda con ejercicio de bucles.
« Respuesta #1 en: 8 Noviembre 2014, 18:18 pm »

Buenas tardes Sr. eveelynn24.

Tengo una observación sobre su codificación y es la siguiente. He logrado comprobar que cuando la variable zona2 = @ no sale del while es por eso que he añadido la siguiente parte de código:

Citar
  //SOLUCION
if (zona2 == '@')
   break;

Estas 2 lineas logran ver que su programa esta correctamente y realiza el trabajo como usted lo indica en el ejemplo descrito arriba.

En conclusión seria el siguiente código:

Código:
#include <iostream>
 #include <stdio.h>
using namespace std;

int main ()

{
char zona1, zona2;
int temp1, temp2, hum1, hum2;

do {
cout << "\nIntroduce la zona (Mayúsculas): ";
cin >> zona1;
}
while (((zona1<'A') || (zona1>'Z'))&& zona1!='@');

do {
cout << "\nIntroduce la temperatura (entre 0 y 100): ";
cin >> temp1;
}
while ((temp1<0) || (temp1>100));

do {
cout << "\nIntroduce la humedad (entre 0 y 100): ";
cin >> hum1;
}
while ((hum1<0) || (hum1>100));


while ( (zona1!='@') || (zona2!='@'))
{
do {
cout << "\nIntroduce otra zona (Mayúsculas): ";
cin >> zona2;
}
while (((zona2<'A') || (zona2>'Z'))&& zona2!='@');

//SOLUCION
        if (zona2 == '@')
        break;

do {
cout << "\nIntroduce la temperatura (entre 0 y 100): ";
cin >> temp2;
}
while ((temp2<0) || (temp2>100));

do {
cout << "\nIntroduce la humedad (entre 0 y 100): ";
cin >> hum2;
}
while ((hum2<0) || (hum2>100));

if (temp1<temp2)
{
temp1 = temp2;
hum1 = hum2;
zona1 = zona2;
}
else if (temp1 == temp2)
{
if (hum1>hum2)
{
hum1 = hum2;
zona1 = zona2;
}
}

}
cout << "\n\nZona: " << zona1 << "\nTemperatura: " << temp1 << "\nHumedad: " << hum1;
getchar();
//system ("pause");
}


Si he comprendido mal el problema, podemos seguir discutiéndolo.

Cordiales Saludos.


En línea

* Determinismo Causal !! Estamos Programados Para Necesitar Respuestas!!

* No deberías copiar un código, sin antes haber comprendido porque funciona de esa manera !
plataplomo2948

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Ayuda con ejercicio de bucles.
« Respuesta #2 en: 8 Noviembre 2014, 18:55 pm »

Hola amiga, estaba aburrido hoy y trabaje un poquito en eso. Espero ayudarla con lo siguiente (eso solo es mi opinion en como yo lo haria, puede hacer como quiera):

Es proyecto tiene 2 objectivo principales:

1. Aceptar input del teclado del "stdin" y guardar el input en una manera en que la programa puede analizarla

2. Analiza la informacion para identificar

   A. La temperatura mas alta

   B. La humedad mas baja

Con eso dicho, su codigo y instruciones tienen varias problemas. Primera, no hay "tuplas" en C ni C++. Eso es de python. Segunda, su codigo no esta analizando los temp y humedades mas bajas/altas. Tercera, no esta inicializando sus variables para guardar el input para analizar. Hay otros problemas tambien, muchos, y en mi opinion es mejor impesar de nuevo porque ese codigo no lograra los objectivo principales de su proyecto.

Aun que en es caso (windows espacio usuario) la estatica inicializacion puede funcionar - no es buen habito. Cuando inicializa un variable estatica, los bytes van en el stack, en en muchas sistemas (kernel, embedido, y mas) su tamano de stack es limitada. Por eso, yo voy a usar alocaciones dinamicas. Estoy usando malloc/free estilo C, pero si quiere hacerlo estila C++ puede poner new/delete.

Yo he hecho mas o menos 30-40% del proyecto, y no hare todo porque usted tiene que aprender a hacerlo. Ese codigo puede aceptar el input por zona y temperatura, y averiguar la temp mas baja. Aun tiene que poner la humedad, y averiguar la humedad mas alta. Suerte.

pd - Cuando acepta cualquier tipo de input, es muy muy importante a hacer un checkeo de errores para evitar buffer overflows, para que no le chingan ; )



Código:
#include <iostream>
#include <conio.h>


int main ()
{
    
        int Conta = 0;
        // A - K
        int NumeroDeEntradas = ('L' - 'A');
        int NumeroDeElementos = (sizeof(char**) * 5);

char** Zona = (char**)malloc(NumeroDeElementos);
char** Temp  = (char**)malloc(sizeof(int**) * NumeroDeEntradas);
char** Humedad  = (char**)malloc(sizeof(int**) * NumeroDeEntradas);

for (int i = 0; i < NumeroDeEntradas; i++)
{
            Zona[i] = (char*)malloc(4);
            Temp[i] = (char*)malloc(4);
        
            printf("Introduzca la zona:\n");
        
            // despues de cada llama a scanf tiene que checkear por errores, algo asi
            // si Zona[i] > 4, libera y salga
            scanf("%[^\n]%*c", Zona[i]);
            //fgets(Zona[i], 2, stdin);
        
            //if (memcmp(Zona[i], (char*)'@', 1) == 0)
            //goto FINAL;
        
TEMPDENUEVO:        
            printf("Introduzca la temp:\n");
            scanf("%[^\n]%*c", Temp[i]);
            int VerificaTemp = atoi(Temp[i]);

            if (VerificaTemp < 0 || VerificaTemp > 100)
            {
                printf("[!] Temperatura Invalido. Introduzcala de nuevo...\n");
                goto TEMPDENUEVO;                
            }
        
            printf("Zona #%i: %s - Temp: %i\n", i, Zona[i], VerificaTemp);
        
            Conta += 1;
    }
    
FINAL:    
    
        for (int b = 0; b < Conta; b++)
            printf("temp%i = % i\n" , Conta, atoi(Temp[b]));
    
    
int LaMasBaja = atoi(Temp[0]);
for (int c = 1; c < Conta; c++)
{
            int Num = atoi(Temp[c]);
            //printf("Num = %i LaMasBaja = %i\n", Num, LaMasBaja);
            if (Num < LaMasBaja)
                LaMasBaja = Num;
        
        }
printf("la mas baja = %i\n", LaMasBaja);
/*for (int i = 0; i < 11; i++)
{
        printf("Zona: %i = %s\n", i, Zona[i]);
            
    }*/
printf("Conta = %d\n", Conta);
for (int i = 0; i < Conta; i++)
{
        printf("liberando %i...\n", i);
        free(Zona[i]);
        free(Temp[i]);    
    }
free(Zona);
free(Temp);
free(Humedad);


_getch ();
//system ("pause");
}
« Última modificación: 8 Noviembre 2014, 18:58 pm por plataplomo2948 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con bucles
Programación C/C++
NLkurosaki 2 2,245 Último mensaje 13 Diciembre 2010, 16:55 pm
por NLkurosaki
Ayuda con bucles VB 2010 « 1 2 »
.NET (C#, VB.NET, ASP)
juanlulete 17 8,442 Último mensaje 22 Julio 2012, 11:32 am
por juanlulete
Ayuda!!! Ejercicio bucles c++
Programación C/C++
afrocardo 3 2,079 Último mensaje 18 Octubre 2015, 19:42 pm
por ivancea96
ejercicio de bucles, acumuladores, banderas...
Java
riomundo 2 1,836 Último mensaje 23 Octubre 2015, 00:25 am
por Lind L. Tailor
Problema con bucles (Ayuda)
Programación C/C++
orakelove 1 1,312 Último mensaje 16 Octubre 2018, 00:38 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines