Esercizio sulle strutture cicliche in C++ n.2

Introduzione

Traccia dell’esercizio

Scrivere un algoritmo e successivamente un programma che per risolvere il seguente problema:
Una scuola vuole effettuare una statistica sulla composizione della propria platea scolastica; in particolare vuole determinare quanti studenti sono maschi, quanti sono femmine, quanti sono maggiorenni e quanti sono minorenni.
Per fare questo l’operatore di segreteria inserisce in un programma informatico per ogni alunno i seguenti dati:
Sesso dello studente;
Età dello studente;
In particolare il risultato che il programma deve fornire è la percentuale delle femmine e dei maschi, la percentuale dei minorenni e dei maggiorenni, e le percentuali fra i minorenni di maschi e femmine.
Tutti i risultati devono essere visualizzati a video.

Svolgimento
Nella traccia è evidente che il numero degli studenti non è noto a priori e quindi deve essere calcolato. Per fare questo è possibile utilizzare un ciclo con ripetizione post – condizionale che si interrompe nel momento in cui non ci sono più studenti da inserire.
La tabella dati pertanto è:
Link sponsorizzato

UsoNomeTipoDescrizione
InputSCarattereSesso dello studente ‘F’ Femmina, ‘M’ Maschio
InputAgeInteroEtà dello studente
InputRisCarattereRisposta ‘S’ sono presenti altri studenti, ‘N’ non sono presenti altri studenti
LavoroNSInteroNumero Studenti da calcolare
LavoroNFInteroNumero Femmine
LavoroNMInteroMu,ero Maschi
LavoroNLInteroNumero Minorenni
LavoroNGInteroNumero Maggiorenni
OutputPF, PM, PG. PL. PFL, PGLRealePercentuale femmine, maschi, maggiorenni, minorenni, femmine minorenni, maschi minorenni

L’algoritmo risolutivo è:

Algoritmo risolutivo

La codifica in C++ è:

#include <iostream>
using namespace std;
int main()
{
	int NF=0,NM=0, NL=0, NG=0, NFL=0, NML=0;
	int N=0;
	float PF=0, PM=0, PL=0, PG=0, PFL=0, PML=0;
	char Ris;
	int Age;
	char S;
	do
	{
		cout << "\nInserisci il sesso e l'età:";
		cin >> S;
		cin >> Age;
		if (S=='f')
			NF++;
		else
			if (S=='m')
				NM++;
		if (Age<18)
			NL++;
		else 
			NG++;
		if ((S=='f')&&(Age <18))
			NFL++;
		else
			if ((S=='m')&&(Age<18))
				NML++;
		N++;
		cout << "\n Altri dati s/n ?";
		cin >> Ris;
		}
	while (Ris=='s');
	PF =((float)NF/(float)N)*100;
	PM =((float)NM/(float)N)*100;
	PL =((float)NL/(float)N)*100;
	PG =((float)NG/(float)N)*100;
	PFL =((float)NFL/(float)NF)*100;
	PF =((float)NML/(float)NM)*100;
	cout << endl<<"La percentuale di studenti femmine è:"<<PF;
	cout << endl<<"La percentuale di studenti maschi è:"<<PM;
	cout << endl<<"La percentuale di studenti minorenni è:"<<PL;
	cout << endl<<"La percentuale di studenti maggiorenni è:"<<PG;
	if (NF>0)
	cout << endl<<"La percentuale di studenti femmine minorenni è:"<<PFL;
	if (NM>0)
	cout << endl<<"La percentuale di studenti maschi minorenni è:"<<PML;
	cout << endl;
	return 0;
}

Annotazioni sul codice C++
Nella codifica in C++ sono state inseriti degli “if” nella valutazione delle percentuale per evitare un errore di divisione per zero nel caso in cui alcuni dei contatori hanno valore zero; infatti se ad esempio nell’inserimento non vi sono “Femmine minorenni”.


Video sulle strutture cicliche