Dev - C++ - Ayuda con ejercicio de bucles

 
Vista:

Ayuda con ejercicio de bucles

Publicado por Evelyn (1 intervención) el 07/11/2014 19:29:15
¿Podrías 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#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");
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con ejercicio de bucles

Publicado por vangodp (287 intervenciones) el 07/11/2014 22:48:32
Este es mas o menos adaptado a lo que quieres tu.
El programa usa un arreglo de tuplas. Una tupla es un conjunto de datos o lo que es lo mismo que una estructura.

El arreglo de estructuras puede ser del tamaño que quieras. O sea que puedes guardar cuantos conjuntos de datos quiera solo cambiando el valor a la constante MAXNUMTUPLAS.

Basicamente lo que hace es ir cambiando cada conjunto de datos.
si pones que MAXNUMTUPLAS valga 100 es como tener...
100 conjuntos de ( zona, temperatura y humedad) a los que vas leyendo uno a la vez.
aun que tenga 100 puedes parar de leer cuando entres con la arroba y la comparacion solo se efectua entre las que has entrado.... es todo automatico. XD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
using namespace std;
 
//esto es una tupla
struct Tupla {
    char zona;
    int temperatura;
    int humedad;
};
 
 
int main () {
    const int MAXNUMTUPLAS = 2;  //<--cambiar aqui si quieres leer mas datos, he puesto 2 por que es mas facil para probar pero puedes poner cuantas lecturas quieras XD
 
    //variables que usaremos para anotar lo que se pide que es mayor temperatura y menor humedad ;)
    int mayorTemperatura = 0;
    int menorHumedad     = 100;
    char nombreZona_mayorTemperatura;
    char nombreZona_menorHumedad;
 
    //Esto es un arreglo de tuplas. Crea un X numero de estructuras que contiene variable zona, temperatura y humedad. Ese X numero esta definido por la constante MAXNUMTUPLAS
    Tupla tupla[MAXNUMTUPLAS];
 
    int i = 0;
 
    while ( i < MAXNUMTUPLAS ) {
        //tomamos la letra para la zona en mayuscula
        do {
            cout << "Letra para identificar zone en mayuscula o @ para salir: ";
            cin >>  tupla[i].zona;
            cin.sync();  //sincronisa el buffer con lo escrito por teclado evitando que el molesto caracter enter(\n) cause errores al leer chars y enteros de forma alternada. Quitarlo puede causar errores en el programa.
 
        } while ( tupla[i].zona < '@' && tupla[i].zona < 'Z' );
 
        //Si es arroba godbay
        if ( tupla[i].zona == '@' ) {
            break;
        }
 
        //leemos la temperatura
        do {
            cout << "\nIntroduce la temperatura (entre 0 y 100): ";
            cin >> tupla[i].temperatura;
            cin.sync();
        } while ( ( tupla[i].temperatura < 0 ) || ( tupla[i].temperatura > 100 ) );
 
        //leemos la humedad
        do {
            cout << "\nIntroduce la humedad (entre 0 y 100): ";
            cin >> tupla[i].humedad;
            cin.sync();
        } while ( ( tupla[i].humedad  < 0 ) || ( tupla[i].humedad  > 100 ) );
 
        //limpiamos la pantalla antes de pedir nuevamente los datos
        system ( "cls" );
 
        i++;
    }
 
 
    //bucle que se encarga de encontrar la mayor temperatura
    for ( int z = 0; z < MAXNUMTUPLAS; z++ ) {
        //guardamos la mayor temperatura
        if ( tupla[z].temperatura > mayorTemperatura ) {
            mayorTemperatura = tupla[z].temperatura;
            nombreZona_mayorTemperatura = tupla[z].zona;
        }
 
    }
    //mostramos mayor temperatura
    cout<< "\nMayor temperatura esta en la zona: " << nombreZona_mayorTemperatura
        << " ,La temperatura es: "                 << mayorTemperatura << endl;
 
 
    //bucle que se encarga de encontrar la menor humedad
    for ( int z = 0; z < MAXNUMTUPLAS; z++ ) {
        //guardamos la menor humedad
        if ( tupla[z].humedad < menorHumedad ) {
            menorHumedad = tupla[z].humedad;
            nombreZona_menorHumedad = tupla[z].zona;
        }
    }
    //mostramos menor humedad
    cout<< "\nMenor humedad esta en la  zona: " << nombreZona_menorHumedad
        << " ,La humedad es: "                << menorHumedad << endl;
 
    cin.ignore(); //use esto en vez de system("pause");... Es mejor ;)
    return 0;
}

http://codepad.org/EEfO5LKm
Busco novia!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar