Dev - C++ - Cálculos sobre el censo de una ciudad

 
Vista:

Cálculos sobre el censo de una ciudad

Publicado por HEMV (2 intervenciones) el 23/08/2020 07:31:06
Se tiene un conjunto de 2000 formularios de encuestas conteniendo la información del censo de una ciudad, a cada persona se le piden los siguientes datos:

Sexo
Edad
Estado civil (1. Soltero, 2. Casado, 3. Viudo, 4. Divorciado)
Nivel educativo (1. Preescolar, 2. Primaria, 3. Secundaria, 4. Superior, 5. Ningún estudio)
Desarrolle un programa en C++ que lea todos estos datos, e imprima los siguientes resultados:

Cuantas personas son solteras mayores a 30 años
Que porcentaje de la población total son mayores a 60 años
Cuántas personas menores de 18 años no tienen ningún estudio

no me da el resultado ayuda, aqui les adjunto mi codigo.


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
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main(){
	int edad=0, estado_civil=0, educacion=0, solteros=0, soltero=0, casado=0, viudo=0, divorciado=0, menores=0, mayores=0, contador=10, c=1;
	int preescolar=0, primaria=0, secundaria=0, superior=0, nestudio=0;
	double porcentaje_mayores=0;
	char sexo[10];
 
 
	while(c<=contador){
 
		system("cls");
		cout<<"\n********************************ENCUESTA****************************************"<<endl;
 
			cout<<"\nEncuestado #"<<c<<endl;
			c++;
			cout<<"\nEdad: "; cin>>edad;
			cout<<"Sexo: "; cin>>sexo;
			cout<<"Estado Civil: " <<endl;
			cout<<"1.-Soltero  2.-Casado  3.-Viudo  4.-Divorciado" <<endl;
			cout<<"Elija: "; cin>>estado_civil;
 
				 if (estado_civil==1){
			 		soltero++;
			 	}else if(estado_civil==2){
			 		casado++;
				 }else if(estado_civil==3){
				 	viudo++;
				 }else if(estado_civil==4){
				 	divorciado++;
				 }
			cout<<"Nivel Educativo: "<<endl;
			cout<<"1.- Preescolar, 2.- Primaria, 3.- Secundaria, 4.- Superior, 5.- Ningun estudio"<<endl;
			 cout<<"Elija: " ; cin>>educacion;
			 if (educacion==1){
			 		preescolar++;
			 	}else if(educacion==2){
			 		primaria++;
				 }else if(educacion==3){
				 	secundaria++;
				 }else if(educacion==4){
				 	superior++;
				 }else if(educacion==5){
				 	nestudio++;
				 }
 
			fflush(stdin);
 
	}
	 	if((estado_civil==soltero)&&(edad>=30)){
	 		solteros++;
		 }
		 if (edad>=60){
		 	mayores++;
		 }
		  if((edad<=18)&&(educacion==nestudio)){
		 	menores++;
		 }
		 porcentaje_mayores=(mayores*100/contador);
 
	 	cout<<"\nPersonas Solteras mayores de 30 anios: "<<solteros<<endl;
	 	cout<<"\nPorcentaje de personas mayores de 60 anios: "<<porcentaje_mayores<<"%"<<endl;
	 	cout<<"\nPersonas menores de 18 sin ningun estudio: "<<menores<<endl;
 
	system("pause");
	return 0;
}
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 Kabuto
Val: 91
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Cálculos sobre el censo de una ciudad

Publicado por Kabuto (21 intervenciones) el 23/08/2020 14:22:43
Hola.

Primero, usas demasiadas variables. Solo te piden controlar tres datos: solteros mayores de 30, los mayores de 60 y los menores 18 sin estudios.
Todo aquel que no esté en uno de esos casos, no hace falta contabilizarlo.

Segundo, estos if que están fuera del bucle:
1
2
3
4
5
6
7
8
9
if((estado_civil==soltero)&&(edad>=30)){
	 		solteros++;
		 }
		 if (edad>=60){
		 	mayores++;
		 }
		  if((edad<=18)&&(educacion==nestudio)){
		 	menores++;
		 }

Deberían ir dentro. Son preguntas que hay que hacer mientras pides los datos, no una vez ya has terminado de pedirlos.
De todos modos, algunas de esas comparaciones son erróneas
Por ejemplo, esta comparación no te va a decir si el usuario ha indicado que es soltero:
1
if((estado_civil==soltero)
Esos son dos variables int que no tienen relación ninguna.

Si queremos saber si alguien ha indicado que es soltero, la pregunta correcta es esta:
1
if((estado_civil==1)

El único cómputo que hay que hacer fuera del bucle es calcular el porcentaje de mayores de 60, ya que primero hay que contar los mayores (dentro del bucle) y una vez terminado calcular el porcentaje.

Te propongo este código.
Solo usa variables para pedir datos al usuario y para computar los tres puntos que pide el ejercicio.
Elimino el uso de fflush() y dos includes que no son necesarios.
Para el sexo, en lugar de un array de char, ya que estamos con C++, uso string.
El bucle, puesto que sabemos que son 10 repeticiones, utilizo un for en lugar de un while, pero esto ya es a gusto de cada uno.

Cualquier duda pregúntala. Un saludo.

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
#include<iostream>
 
using namespace std;
int main(){
	int solteros_mayor30 = 0, mayor60 = 0, menores_sin_estudios = 0;
	int edad=0, estado_civil=0, educacion=0;
	double porcentaje_mayores=0;
	string sexo;
 
 
	for(int c = 1; c <= 10; c++){
 
		system("cls");
		cout<<"\n********************************ENCUESTA****************************************"<<endl;
 
		cout<<"\nEncuestado #"<<c<<endl;
		cout<<"\nEdad: "; cin>>edad;
		cout<<"Sexo: "; cin>>sexo;
		cout<<"Estado Civil: " <<endl;
		cout<<"1.-Soltero  2.-Casado  3.-Viudo  4.-Divorciado" <<endl;
		cout<<"Elija: "; cin>>estado_civil;
 
		cout<<"Nivel Educativo: "<<endl;
		cout<<"1.- Preescolar, 2.- Primaria, 3.- Secundaria, 4.- Superior, 5.- Ningun estudio"<<endl;
		cout<<"Elija: " ; cin>>educacion;
 
		//Cuantas personas son solteras mayores a 30 años
		if (estado_civil == 1 && edad > 30)
			solteros_mayor30++;
		//Que porcentaje de la población total son mayores a 60 años
		if (edad > 60)
			mayor60++;
		//Cuántas personas menores de 18 años no tienen ningún estudio
		if (edad < 18 && educacion == 5)
			menores_sin_estudios++;
	}
 
	///Que porcentaje de la población total son mayores a 60 años
	porcentaje_mayores=(mayor60*100/10);
 
	cout<<"\nPersonas Solteras mayores de 30 anios: "<<solteros_mayor30<<endl;
	cout<<"\nPorcentaje de personas mayores de 60 anios: "<<porcentaje_mayores<<"%"<<endl;
	cout<<"\nPersonas menores de 18 sin ningun estudio: "<<menores_sin_estudios<<endl;
 
	system("pause");
	return 0;
}
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
Imágen de perfil de Rodrigo
Val: 1.755
Plata
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Cálculos sobre el censo de una ciudad

Publicado por Rodrigo (539 intervenciones) el 23/08/2020 14:26:45
Los solteros los cuentas 2 veces (Lineas 26 y 53), tal vez te conviene incrementar otra variable en la linea 53, o bien eliminar todas las lineas desde la linea 25 a la 33, no pareces estar haciendo nada con esos contadores.

En la linea 61 estas operando con enteros, por lo que el resultado te dara entero. Cambia el 100 por 100.0 (con el decimal explicito) para forzar a que todo el resto de la operacion sea una combinacion de numeros double o float con int y los que son int sean convertidos en float.
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