public void ReinitialiserCombinaison() //Fonction permettant, quand on a fini une combinaison, de remettre un espace vide à chaque espace { for (int i = 0; i < Projets.Count(); i++) { Combinaison[i] = Eleves[0]; } }
public void Repartir() { //On met un élève vide dans chaque espace que devra prendre un elève dans la combinaison //ça permet de voir si un elève a déjà été mis à la place en question for (int i = 0; i < Projets.Count(); i++) { Combinaison.Add(Eleves[0]); } TesterCombinaison(Eleves[1]); }
public bool VerifierComplet() { foreach (Personne eleve in Eleves) { if (eleve != Eleves[0]) { if (eleve.Affinite.Count() != 0) { foreach (Personne e in eleve.Affinite) { if (Projets[Combinaison.IndexOf(e)] != Projets[Combinaison.IndexOf(eleve)]) { return(false); } } } int voeux = eleve.RecupererVoeux(Projets[Combinaison.IndexOf(eleve)]); if (voeux < Seuil) { return(false); } if (!Combinaison.Contains(eleve)) { return(false); } } } //Attention à séparer mieux les tâches dans le prochain code for (int i = 0; i < Projets.Count() - 1; i++) { //Console.WriteLine(i); if (Combinaison[i] != Eleves[0]) { for (int k = 0; k < NbPlaces; k++) { if (Combinaison[i + k] == Eleves[0]) { return(false); } } } i += 3; } return(true); }
public void TesterCombinaison(Personne eleve) //Fonction recursive permettant de tester toutes les possibilités { int index = Eleves.IndexOf(eleve); foreach (string p in eleve.Projets) { int indexP = Projets.IndexOf(p); //Comme va être automatiquement pris seulement le premier projet de la liste quand plusieurs projet sont en fait le même, on regarde si les autres sont libre if (Combinaison[indexP] != Eleves[0]) { bool present = false; int i = 0; while ((present == false) && (i < NbPlaces) && (indexP + i < Projets.Count() - 1)) { i++; if ((Projets[indexP] == Projets[indexP + i]) && (Combinaison[indexP + i] == Eleves[0])) { present = true; indexP += i; } } } if (Combinaison[indexP] == Eleves[0]) { //Condition d'arret de la recursivité : Si on a plus d'élèves à traiter en stock Combinaison[indexP] = eleve; if (index + 1 >= Eleves.Count()) { if (VerifierComplet()) { CalculerNote(); } Combinaison[indexP] = Eleves[0]; } else { TesterCombinaison(Eleves[index + 1]); Combinaison[indexP] = Eleves[0]; } } } }
public int[,] ExtraireCsv(string lien) ///Permet d'extraire d'un fichier csv une matrice int[,] { int i = 0; StreamReader reader = new StreamReader(lien); List <string> ligne = new List <string>();; //Récupération des projets ligne.Add(reader.ReadLine()); Projets = ligne[0].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); //Récupération du nombre de places par projets ligne[0] = reader.ReadLine(); string[] nbpp = new string[Projets.Count()]; nbpp = ligne[0].Split(new string[] { "," }, StringSplitOptions.None); ProjetsV = new int[Projets.Count()]; int nombre; for (int j = 1; j < Projets.Count() + 1; j++) { //MessageBox.Show("RAS a j=" + j+" nbpp= "+ nbpp[j]); if (nbpp[j] != "") { ProjetsV[j - 1] = 1; } } //AfficherNbParProjet(); //Récupération des voeux do { ligne.Add(reader.ReadLine()); i++; }while (ligne[i] != null); int[,] matrice = new int[i - 1, Projets.Count()]; string[] voeux = new string[Projets.Count()]; string[] eleves = new string[i - 1]; for (int x = 1; x < i; x++) { voeux = ligne[x].Split(new string[] { "," }, StringSplitOptions.None); eleves[x - 1] = voeux[0]; for (int y = 1; y < Projets.Count() + 1; y++) { //MessageBox.Show(x+" "+y+" "+voeux[y]); if (int.TryParse(voeux[y], out nombre)) { matrice[x - 1, y - 1] = nombre; } else { matrice[x - 1, y - 1] = 0; } //MessageBox.Show("RAS à x = " + x+" et y = "+y); } } //AfficherMatrice(Conversion(matrice)); //AfficherListe("Eleves : ", eleves); //AfficherListe("Projets : ", Projets); //AfficherListe("Nombre par projet : ",ProjetsV.Select(x => x.ToString()).ToArray()); Eleves = eleves; return(matrice); }