Ce qui suit correspond pour l'essentiel à ce que nous avons fait ensemble en classe.
Le code de cette classe suit :
using System;
namespace zcs
{
class Personne
{
const short ÂGE_MIN = 0,
ÂGE_MAX = 140;
const short ÂGE_DÉFAUT = ÂGE_MIN;
const string NOM_DÉFAUT = "INCONNU(E)";
static bool EstÂgeValide(short candidate) =>
Algos.EstEntreInclusif(candidate, ÂGE_MIN, ÂGE_MAX);
static bool EstNomValide(string candidate) =>
candidate.Length > 0;
private short âge;
public short Âge
{
get => âge;
private set
{
âge = EstÂgeValide(value) ? value : ÂGE_DÉFAUT;
}
}
private string nom;
public string Nom
{
get => nom;
private init
{
nom = EstNomValide(value)? value: NOM_DÉFAUT;
}
}
public Personne(string nom, short âge)
{
Nom = nom;
Âge = âge;
}
}
}
Le code de cette classe suit :
using System;
namespace zcs
{
class Algos
{
public static bool EstEntreInclusif(int val, int min, int max) =>
min <= val && val <= max;
}
}
Le programme principal suit :
using System;
using zcs;
int nbPersonnes = LireNbPersonnes();
Personne[] pers = LirePersonnes(nbPersonnes);
for(int i = 0; i != pers.Length; ++i)
{
Console.WriteLine($"Personne {i} : {pers[i].Nom} qui a {pers[i].Âge} ans");
}
Console.WriteLine($"Le plus long nom est {TrouverPersonnePlusLongNom(pers).Nom}");
Console.WriteLine($"Âge moyen : {CalculerÂgeMoyen(pers)}");
/*
Affichera l'âge moyen des personnes
*/
static float CalculerÂgeMoyen(Personne[] pers)
{
int cumul = 0;
foreach(Personne p in pers)
{
cumul += p.Âge;
}
//for(int i = 0; i != pers.Length; ++i)
//{
// cumul += pers[i].Âge;
//}
return (float)cumul / pers.Length;
}
// précondition : pers.Length != 0
static Personne TrouverPersonnePlusLongNom(Personne[] pers)
{
Personne p = pers[0];
for(int i = 1; i < pers.Length; ++i)
{
if(p.Nom.Length < pers[i].Nom.Length)
{
p = pers[i];
}
}
return p;
}
static int LireNbPersonnes()
{
Console.Write("Combien de personnes? ");
int nbPersonnes = int.Parse(Console.ReadLine());
while(nbPersonnes <= 0)
{
Console.Write("Attendu : entier strictement positif. Combien de personnes? ");
nbPersonnes = int.Parse(Console.ReadLine());
}
return nbPersonnes;
}
static Personne[] LirePersonnes(int nbPersonnes)
{
Personne[] personnes = new Personne[nbPersonnes];
for (int i = 0; i != personnes.Length; ++i)
{
personnes[i] = LirePersonne();
}
return personnes;
}
static Personne LirePersonne()
{
string nom = LireNom();
short âge = LireÂge();
return new Personne(nom, âge);
}
static string LireNom()
{
Console.Write("Nom? ");
string nom = Console.ReadLine();
while(!Personne.EstNomValide(nom))
{
Console.Write("Attendu : chaîne non-vide. Nom? ");
nom = Console.ReadLine();
}
return nom;
}
static short LireÂge()
{
Console.Write("Âge? ");
short âge = short.Parse(Console.ReadLine());
while (!Personne.EstÂgeValide(âge))
{
Console.Write("Attendu : entier valide ... Âge? ");
âge = short.Parse(Console.ReadLine());
}
return âge;
}