// Remplace toutes les occurance "continent" du pays demandé par "newContinent" private static void ModifierContinent(Pays[] pays, string nomPays, char newContinent) { Pays aChercher = new Pays(' ', nomPays, "", 0, 0); int pos; if ((pos = Array.IndexOf(pays, aChercher)) >= 0) { pays[pos].Continent = newContinent; Console.WriteLine(" - Le continent du pays '{0}' a été modifiée avec la valeur '{1}'", nomPays, newContinent); } else { Console.WriteLine(" - Le pays {0} n'a pas été trouvé dans le tableau", nomPays); } }
// Remplace toutes les occurances "capitale" du pays demandé par "newCapitale" private static void ModifierCapitale(Pays[] pays, string nomPays, string newCapitale) { Pays aChercher = new Pays(' ', nomPays, "", 0, 0); int pos; if ((pos = Array.IndexOf(pays, aChercher)) >= 0) { pays[pos].Capitale = newCapitale; Console.WriteLine(" - La capitale du pays '{0}' a été modifié avec la valeur '{1}'", nomPays, newCapitale); } else { Console.WriteLine(" - Le pays {0} n'a pas été trouvé dans le tableau", nomPays); } }
// Modifie toutes les occurances "population" du pays demandé en le multipliant par "produit" private static void ModifierPopulationMultiplier(Pays[] pays, string nomPays, int produit) { Pays aChercher = new Pays(' ', nomPays, "", 0, 0); int pos; if ((pos = Array.IndexOf(pays, aChercher)) >= 0) { pays[pos].Population *= produit; Console.WriteLine(" - La population du pays '{0}' a été multiplée par {1}. Nouvelle valeur = {2}", nomPays, produit, pays[pos].Population); } else { Console.WriteLine(" - Le pays {0} n'a pas été trouvé dans le tableau", nomPays); } }
// Cherche la liste des pays demandés et affiche leur informations private static void ChercheAffichePays(Pays[] pays, string[] listPays) { foreach (var p in listPays) { Pays aChercher = new Pays(' ', p, "", 0, 0); int pos = Array.BinarySearch(pays, aChercher); if (pos > 0) { Console.WriteLine(pays[pos]); } else { Console.WriteLine("Le pays {0} n'existe pas dans le tableau", p); } } }
// Crée un fichier contenant les pays du continent spécifié private static void CreerFichier(Pays[] pays, int nbPays, char codeContinent) { string fileName = Pays.GetContinentName(codeContinent) + ".txt"; FileInfo fichier = new FileInfo(fileName); StreamWriter sw = fichier.CreateText(); for (int i = 0; i < nbPays; i++) { if (pays[i].Continent == codeContinent) { sw.WriteLine("{0}{1,-35}{2,-26}{3,8}{4,15}", pays[i].Continent, pays[i].Nom, pays[i].Capitale, pays[i].Superficie, pays[i].Population); } } sw.Close(); Console.WriteLine("Le fichier '{0}' a été créé.", fileName); }
// Affiche le pays le plus peuplé du continent spécifié private static void AfficherPlusPeuple(Pays[] pays, char codeContinent) { int index = 0; int plusPeuple = int.MinValue; for (int i = 0; i < pays.Length; i++) { if (pays[i] != null && pays[i].Continent == codeContinent) { if (plusPeuple < pays[i].Population) { plusPeuple = pays[i].Population; index = i; } } } Console.WriteLine(" - Le pays le plus peuplé d'{0} est : {1}", Pays.GetContinentName(codeContinent), pays[index].Nom); }
// Lit le fichier passé en paramètre, rempli le tableau avec les données lues et compte le nombre de personnes private static void LireFichier(string nomFichier, Pays[] tab, out int nb) { nb = 0; StreamReader sr = File.OpenText(nomFichier); string ligne = ""; // On parcours le fichier while ((ligne = sr.ReadLine()) != null) { char codeContinent = ligne.Substring(0, 1)[0]; string nom = ligne.Substring(1, 35).Trim(); string capitale = ligne.Substring(36, 25).Trim(); int superficie = int.Parse(ligne.Substring(61, 10)); int population = int.Parse(ligne.Substring(71)); tab[nb++] = new Pays(codeContinent, nom, capitale, superficie, population); } sr.Close(); Console.WriteLine(" - Fin de la lecture du fichier {0}. Il contient {1} pays.", nomFichier, nb); }
// Entrée du programme static void Main(string[] args) { const string fileName = "Nations.txt"; const int maxPays = 250; Pays[] pays = new Pays[maxPays]; //1. lire le fichier, remplir un tableau de pays, compter puis transmettre le nombre effectif de pays lus; AfficheTitre("1. lire le fichier, remplir un tableau de pays, compter puis transmettre le nombre effectif de pays lus :"); LireFichier(fileName, pays, out int nbPays); Console.WriteLine(""); //2. Afficher seulement 15 premiers pays lus (en utilisant, entre autres, la redéfinition de ToString) après la lecture; AfficheTitre("2. Afficher seulement les 15 premiers pays lus :"); AfficheTableau(pays, 15); Console.WriteLine(""); //3. Faire la recherche séquentielle (avec Array.IndexOf …) puis de : // - modifier le continent de la Russie, c’est un pays d’Europe; // - de modifier la capitale de la Chine, c’est Pekin; // - de changer la population de l’Allemagne : c’est 10 fois la population lue // // On réaffiche 15 premiers pays du tableau après ces modifications; AfficheTitre("3a. Faire la recherche séquentielle et modifier le continent de la Russie :"); ModifierContinent(pays, "Russie", '5'); AfficheTitre("3b. Faire la recherche séquentielle et modifier la capitale de la Chine :"); ModifierCapitale(pays, "Chine", "Pekin"); AfficheTitre("3c. Faire la recherche séquentielle et modifier la population de l’Allemagne :"); ModifierPopulationMultiplier(pays, "Allemagne", 10); AfficheTitre("3d. Afficher seulement les 15 premiers pays lus :"); AfficheTableau(pays, 15); Console.WriteLine(""); //4. Afficher les pays dont le nom est identique au nom de la capitale (exemples Luxembourg, Panama, etc) AfficheTitre("4. Afficher les pays dont le nom est identique au nom de la capitale :"); AffichichePaysEgalCapitale(pays); Console.WriteLine(""); //5. Déterminer puis afficher : // - le pays d’Europe dont la densité est la plus petite. // - le pays d’Océanie dont la densité est la plus petite. (densité : nombre d’habitants par km2) AfficheTitre("5a. Déterminer puis afficher le pays d’Europe dont la densité est la plus petite :"); AfficherPlusPetiteDensite(pays, '5'); AfficheTitre("5b. Déterminer puis afficher le pays d’Océanie dont la densité est la plus petite :"); AfficherPlusPetiteDensite(pays, '4'); Console.WriteLine(""); //6. Déterminer puis afficher le pays le plus peuplé // - du continent Amérique ; // - du continent Europe AfficheTitre("6a. Déterminer puis afficher le pays le plus peuplé du continent Amérique :"); AfficherPlusPeuple(pays, '2'); AfficheTitre("6b. Déterminer puis afficher le pays le plus peuplé du continent Europe :"); AfficherPlusPeuple(pays, '5'); Console.WriteLine(""); //7. Déterminer et d’afficher les informations : // a) des pays dont le nom commence par une voyelle // b) du pays d’Amérique dont la capitale contient le plus de lettres alphabétiques AfficheTitre("7a. Déterminer et afficher les informations des pays dont le nom commence par une voyelle :"); AfficherPaysCommenceVoyelle(pays); AfficheTitre("7b. Déterminer et afficher les informations du pays d’Amérique dont la capitale contient le plus de lettres :"); AfficherPaysCapitalePluslettres(pays, '2'); Console.WriteLine(""); //8. Trier (avec Array.Sort) selon les noms des pays et d’afficher les 10 premiers pays après le tri AfficheTitre("8. Trier (avec Array.Sort) selon les noms des pays et d’afficher les 10 premiers pays après le tri : "); Array.Sort(pays, 0, nbPays); AfficheTableau(pays, 10); Console.WriteLine(""); //9. Chercher (en utilisant la recherche avec Array.BinarySearch) puis afficher les pays suivants : // - Chili, France, Chine, Mexique AfficheTitre("9. Chercher (en utilisant la recherche avec Array.BinarySearch) puis afficher les pays Chili, France, Chine, Mexique :"); string[] listPays = { "Chili", "France", "Chine", "Mexique" }; ChercheAffichePays(pays, listPays); Console.WriteLine(""); //10a. Créer le fichier texte du nom Europe.txt qui contient seulement les pays d’Europe; AfficheTitre("10a. Créer le fichier texte du nom Europe.txt qui contient seulement les pays d’Europe :"); CreerFichier(pays, nbPays, '5'); //10b. Créer le fichier texte du nom Asie.txt qui contient seulement les pays d’Asie. AfficheTitre("10b. Créer le fichier texte du nom Asie.txt qui contient seulement les pays d’Asie :"); CreerFichier(pays, nbPays, '3'); Console.WriteLine(""); }
// Affiche le nom dy pays ayant la plus petite densité sur le continent spécifié private static void AfficherPlusPetiteDensite(Pays[] pays, char codeContinent) { int index = 0; float densite = float.MaxValue; for (int i = 0; i < pays.Length; i++) { if (pays[i] != null && pays[i].Continent == codeContinent) { var temp = (float)pays[i].Population / pays[i].Superficie; if (temp < densite) { densite = temp; index = i; } } } Console.WriteLine(" - Le pays d'{0} ayant la plus petite densité est : {1}", Pays.GetContinentName(codeContinent), pays[index].Nom); }