Aller au contenu principal

Création d'un jeu de données d'élèves

Enoncé

Pour cet exercice le principe est de créer un jeu de données d'étudiants avec pour chacun un nom, un prénom et des notes.

Entrée

N, qui représente le nombre d'élèves à générer. Il est conseillé de tester avec 10, 100, 1 000 voire 10 000 élèves.

Sortie

La sortie doit être de la forme :

(prénom), (nom) (score 1) (score 2) (score 3) (score 4) (score 5)

Sans les parenthèses, évidemment.

Bien sûr le nom, le prénom ainsi que les notes doivent être aléatoires (pas forcément des vrais noms).

Bonus

Aucun doublon dans les noms et prénoms.

Travaux réalisés

Mon code

package;

// Un élève = un nom, un prénom et une liste de notes (ils n'ont pas de vies !)
typedef Student = { name:String, firstname:String, notes:Array<Int> };

class ExoLundi1 {
public static function main() {
// Nombre d'élèves voulus
var n = Std.parseInt(Sys.stdin().readLine());

// La liste des élèves
var students = new Array<Student>();

// Les noms possibles
var names = [
"Martin", "Bernard", "Thomas", "Petit", "Robert",
"Richard", "Durand", "Dubois", "Moreau", "Laurent",
"Simon", "Michel", "Lefebvre", "Leroy", "Roux",
"David", "Bertrand", "Morel", "Fournier", "Girard",
"Bonnet", "Dupont", "Lambert", "Fontaine", "Rousseau",
"Vincent", "Muller", "Lefevre", "Faure", "Andre"
];

// Les prénoms qui seront générés
var firstname_part1 = [
"Ni", "Ya", "Seba", "Si", "Mae", "Ro", "Isa", "Ce", "Ju",
"Vic", "Be", "Chri", "Bea", "Elo", "A", "Hu"
];

var firstname_part2 = [
"colas", "nnick", "stien", "mon", "va", "main", "belle", "dric", "lia",
"tor", "noit", "stophe", "trice", "die", "nais", "go",
"ger", "lie", "ole"
];

// Génération de 1000 élèves extraordinaires
var exists:Bool;
var name:String;
var firstname:String;

for (i in 0 ... n) {
do {
exists = false;
name = rand_array(names).toUpperCase();
firstname = rand_array(firstname_part1) + rand_array(firstname_part2);

for (student in students) {
if (name == student.name && firstname == student.firstname) {
exists = true;
break;
}
}
} while (exists);

students.push({
name: name,
firstname: firstname,
notes: [ for (j in 0 ... 5) rand(0, 20) ]
});
}

// Affichage des élèves
for (student in students) {
Sys.println('${student.name}, ${student.firstname} ${student.notes.join(" ")}');
}

// Petite pause
Sys.stdin().readLine();
}

// Génération d'un nombre [ min ; max ]
public static inline function rand(min:Int, max:Int) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

// Récupération d'une valeur aléatoire dans une liste
public static inline function rand_array(array:Array<String>) {
return array[rand(0, array.length - 1)];
}
}