Commit 73baaf49 authored by Anthony Bocquet's avatar Anthony Bocquet
Browse files

NF16 TP3

parent 5c120219
Pipeline #30291 failed with stages
#include "/home/bocboc/Documents/NF16/TP3/tp3.h"
#include <stdio.h>
#include <stdlib.h>
#include "tp3.h"
int main(int argc, char const *argv[])
{
T_Note* lol = creerNote(10, "Maths");
T_Etudiant* etu = creerEtudiant(1,"Bocquet","Anthony");
printf("id : %d\nnom : %s\nprenom : %s\n", etu->identifiant, etu->nom, etu->prenom);
int main(){
char matiere[30] = "histoire";
T_Note* noteA = creerNote(12,matiere);
T_ListeNotes notes = malloc(sizeof(T_ListeNotes));
notes = ajouterNote(15, "Maths", notes);
T_ListeEtu liste = creerListe();
T_ListeEtu liste = etu;
liste = ajouterNoteEtu(12, "Maths", 2, liste);
T_Etudiant* etu1 = creerEtudiant(1,"Bocquet", "Anthony");
T_Etudiant* etu2 = creerEtudiant(2,"Doe", "John");
T_Etudiant* etu3 = creerEtudiant(4,"Test", "Test");
printf("%f", liste->notes->note);
return 0;
etu1->suivant = etu2;
etu2->suivant = etu3;
liste = etu1;
ajouterNoteEtu(1, "SR01", 1, liste);
ajouterNoteEtu(2, "NF16", 1, liste);
ajouterNoteEtu(3, "LO21", 1, liste);
ajouterNoteEtu(5, "SR01", 2, liste);
ajouterNoteEtu(6, "NF16", 2, liste);
ajouterNoteEtu(7, "LO21", 2, liste);
ajouterNoteEtu(12, "SR01", 3, liste);
ajouterNoteEtu(14, "NF16", 3, liste);
ajouterNoteEtu(20, "LO21", 3, liste);
ajouterNoteEtu(20, "SR01", 4, liste);
ajouterNoteEtu(14, "NF16", 4, liste);
ajouterNoteEtu(20, "LO21", 4, liste);
/*
liste = supprimerNoteEtu("NF16", 1, liste);
liste = supprimerNoteEtu("SR01", 1, liste);
liste = supprimerNoteEtu("LO21", 1, liste);
*/
liste = trierListeEtu(liste);
afficherListe(liste);
sousListes(liste, "SR01");
/*
for(int i = 0; i < liste->nbrNotes; i++){
printf("%d\n", liste->liste->note);
liste->liste = liste->liste->suivant;
}*/
//calculMoyenne(liste);
//afficherClassement(liste);
return 0;
}
No preview for this file type
No preview for this file type
#include "/home/bocboc/Documents/NF16/TP3/tp3.h"
#include "tp3.h"
T_Note *creerNote(float note, char *matiere){
T_Note* newNote = malloc(sizeof(T_Note));
newNote->note = note;
newNote->matiere = matiere;
newNote->suivant = NULL;
T_Note* creerNote(float note, char *matiere){
if(note>=0 && note<=20){
T_Note* nouveau = (T_Note*)malloc(sizeof(T_Note));
nouveau->note = note;
nouveau->matiere = matiere;
nouveau->suivant = NULL;
return nouveau;
}
}
/* -------------------------------------------------------------------*/
return newNote;
};
T_ListeEtu creerListe(){
T_ListeEtu l = (T_ListeEtu)(malloc(sizeof(T_Etudiant)));
l->identifiant = -1;
}
/* -------------------------------------------------------------------*/
T_Etudiant *creerEtudiant(int idEtu, char *nom, char *prenom){
T_Etudiant * newEtu = malloc(sizeof(T_Etudiant));
T_Etudiant* e = (T_Etudiant*)(malloc(sizeof(T_Etudiant)));
e->identifiant = idEtu;
e->nom = nom;
e->prenom = prenom;
e->nbrNotes = 0;
e->moyenne = -1;
e->liste = NULL;
e->suivant = NULL;
}
newEtu->identifiant = idEtu;
newEtu->nom = nom;
newEtu->prenom = prenom;
/* -------------------------------------------------------------------*/
return newEtu;
};
T_ListeNotes ajouterNote(float note, char *matiere, T_ListeNotes listeNotes){
T_Note* newNote = creerNote(note, matiere);
newNote->suivant = listeNotes;
return newNote;
};
T_ListeEtu ajouterNoteEtu(float note, char *matiere, int idEtu, T_ListeEtu listeEtu){
T_Etudiant* temp = listeEtu;
T_Etudiant* prec = NULL;
while(temp->suivant != NULL){
if(temp->identifiant > idEtu){
break;
}
if(temp->identifiant != idEtu){
prec = temp;
temp = temp->suivant;
}
}
if(temp->identifiant == idEtu){
temp->notes = ajouterNote(note,matiere, temp->notes);
temp->nb_notes++;
} else{
T_Etudiant* newEtu = malloc(sizeof(T_Etudiant));
newEtu->identifiant = idEtu;
newEtu->notes = NULL;
printf("L'étudiant n'existe pas encore.\n Entrer son nom : ");
scanf("%s", newEtu->nom);
printf("\nPrénom : ");
scanf("%s", newEtu->prenom);
newEtu->notes = ajouterNote(note, matiere, temp->notes);
newEtu->nb_notes = 1;
prec->suivant = newEtu;
newEtu->suivant = temp;
};
};
\ No newline at end of file
T_Note* nouveau = creerNote(note, matiere);
if(listeNotes)
nouveau->suivant = listeNotes;
else{
nouveau = (T_ListeNotes)(malloc(sizeof(T_Note)));
nouveau->note = note;
nouveau->matiere = matiere;
nouveau->suivant = NULL;
}
return nouveau;
}
/* -------------------------------------------------------------------*/
T_ListeEtu ajouterNoteEtu(float note, char *matiere, int idEtu, T_ListeEtu listeEtu){
T_ListeEtu prec;
while(listeEtu && listeEtu->identifiant != idEtu){
if(listeEtu->identifiant > idEtu) break;
prec = listeEtu;
listeEtu = listeEtu->suivant;
}
if(listeEtu && listeEtu->identifiant == idEtu){
listeEtu->liste = ajouterNote(note,matiere,listeEtu->liste);
listeEtu->nbrNotes++;
return listeEtu;
}
else{
char* nom = malloc(sizeof(char)*20);
char* prenom = malloc(sizeof(char)*20);
printf("L'étudiant avec l'id %d n'existe pas, entrez son nom : ", idEtu);
scanf("%s", nom);
printf("Entrez son prenom : ");
scanf("%s", prenom);
T_Etudiant* e = creerEtudiant(idEtu, nom, prenom);
e->liste = ajouterNote(note,matiere,e->liste);
e->suivant=listeEtu;
e->nbrNotes=1;
if(listeEtu->identifiant > idEtu){
prec->suivant = e;
e->suivant = listeEtu;
}else{
listeEtu->suivant = e;
}
return e;
}
}
/* -------------------------------------------------------------------*/
T_ListeEtu supprimerNoteEtu(char *matiere, int idEtu, T_ListeEtu listeEtu){
T_ListeEtu current = listeEtu;
T_ListeEtu previous = NULL;
while(current->suivant && current->identifiant < idEtu){
previous = current;
current = current->suivant;
}
if(current->identifiant != idEtu){
printf("L'étudiant n'existe pas.\n");
return listeEtu;
}
T_ListeNotes current_note = current->liste;
T_ListeNotes previous_note = NULL;
while(strcmp(current_note->matiere, matiere) != 0 && current_note != NULL){
previous_note = current_note;
current_note = current_note->suivant;
}
if(current_note == NULL){
printf("La note n'existe pas.\n");
return listeEtu;
}
if(previous_note == NULL){
T_ListeNotes temp = current->liste;
current->liste = current->liste->suivant;
free(temp);
}
else{
previous_note->suivant = current_note->suivant;
free(current_note);
}
current->nbrNotes--;
if(current->nbrNotes == 0){
printf("\nSuppression de l'étudiant avec l'id %d car il n'a plus de notes.\n\n", current->identifiant);
if(previous == NULL){
T_ListeEtu temp = current;
listeEtu = current->suivant;
free(temp);
} else{
previous->suivant = current->suivant;
free(current);
}
}
return listeEtu;
}
/* -------------------------------------------------------------------*/
T_ListeEtu ajouterEtu(int idEtu, char *nom, char *prenom, T_ListeEtu listeEtu){
T_Etudiant* e = creerEtudiant(idEtu, nom, prenom);
if(listeEtu->identifiant != -1) e->suivant = listeEtu;
return e;
}
/* -------------------------------------------------------------------*/
void afficherListeEtu(T_ListeEtu listeEtu){
if(listeEtu == NULL) printf("\nAucun étudiant dans la liste.");
while(listeEtu){
printf("Nom: %s, prenom: %s, liste des notes: \n",listeEtu->nom, listeEtu->prenom);
T_ListeNotes l = listeEtu->liste;
while(l){
printf("Matiere: %s \t Note obtenue: %d \n",l->matiere, l->note);
l = l->suivant;
}
if(listeEtu->moyenne>0) printf("Pour une moyenne de %.2f \n",listeEtu->moyenne);
listeEtu = listeEtu->suivant;
}
}
/* -------------------------------------------------------------------*/
float calculMoyenneEtu(T_Etudiant* etu){
int i;
float somme=0;
T_ListeNotes noteActuelle = etu->liste;
for(i = 0; i < etu->nbrNotes; i++){
somme += noteActuelle->note;
noteActuelle = noteActuelle->suivant;
}
return somme/etu->nbrNotes;
}
/* -------------------------------------------------------------------*/
void calculMoyenne(T_ListeEtu liste){
while(liste){
liste->moyenne = calculMoyenneEtu(liste);
liste=liste->suivant;
}
}
/* -------------------------------------------------------------------*/
T_ListeEtu trierListeEtu(T_ListeEtu liste){
calculMoyenne(liste);
T_ListeEtu trie = malloc(sizeof(T_ListeEtu));
T_ListeEtu max = liste;
T_ListeEtu prec = NULL;
int n = 1;
for(T_ListeEtu temp = liste; temp->suivant != NULL; temp = temp->suivant){
if(max->moyenne < temp->suivant->moyenne){
max = temp->suivant;
prec = temp;
}
n++;
}
trie = max; // on met max en première position
//suppression du max dans la liste originale et initialisation de max à la première valeur de la liste
if(prec){
prec->suivant = max->suivant;
max = liste;
}else{
liste = liste->suivant;
}
for(int i = 0; i < n-1; i++){
for(T_ListeEtu temp = liste; temp->suivant != NULL; temp = temp->suivant){
if(max->moyenne < temp->suivant->moyenne){
max = temp->suivant;
prec = temp;
}
}
T_ListeEtu temp2 = trie;
while(temp2->suivant != NULL){
temp2 = temp2->suivant;
} //on va se placer à la fin de la listre triée
temp2->suivant = max;
if(prec){
prec->suivant = max->suivant;
max = liste;
}else{
liste = liste->suivant;
}
}
return trie;
}
/* -------------------------------------------------------------------*/
void afficherListe(T_ListeEtu listeEtu){
printf("\nClassement des étudiants dans l'ordre décroissant de leur moyenne: \n");
while(listeEtu){
printf("Nom: %s, prenom: %s, Moyenne: %.2f\n",listeEtu->nom, listeEtu->prenom, listeEtu->moyenne);
listeEtu = listeEtu->suivant;
}
}
void sousListes(T_ListeEtu listeEtu, char* matiere){
T_ListeEtu current = listeEtu;
T_ListeEtu listeSucces = creerListe();
T_ListeEtu listeEchecs = creerListe();
T_ListeEtu listeNonInscrits = creerListe();
while(current != NULL){ //On parcours notre liste d'étudiants
T_ListeNotes currentNote = current->liste;
while(currentNote != NULL && strcmp(currentNote->matiere, matiere) != 0){
currentNote = currentNote->suivant;
}
if(currentNote == NULL) listeNonInscrits = ajouterEtu(current->identifiant, current->nom, current->prenom, listeNonInscrits);
else if (currentNote->note < 10.0) listeEchecs = ajouterEtu(current->identifiant, current->nom, current->prenom, listeEchecs);
else if (currentNote->note >= 10.0) listeSucces = ajouterEtu(current->identifiant, current->nom, current->prenom, listeSucces);
current = current->suivant;
}
if(listeNonInscrits->identifiant == -1){
printf("\nTous les étudiant sont inscris.\n");
} else{
printf("\nNon inscrits : \n");
afficherSousListe(listeNonInscrits);
}
if(listeEchecs->identifiant == -1){
printf("\nAucun échec.\n");
} else{
printf("\nListe échecs : \n");
afficherSousListe(listeEchecs);
}
if(listeSucces->identifiant == -1){
printf("\nAucune réussite.\n");
}else{
printf("\nListe succès :\n");
afficherSousListe(listeSucces);
}
}
void afficherSousListe(T_ListeEtu listeEtu){
if(listeEtu == NULL) printf("\nAucun étudiant dans la liste.");
while(listeEtu){
printf("Nom: %s, prenom: %s\n",listeEtu->nom, listeEtu->prenom);
listeEtu = listeEtu->suivant;
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Note
{
int note;
char* matiere;
struct Note* suivant;
};
typedef struct Note T_Note;
typedef T_Note* T_ListeNotes;
struct Etudiant
{
int identifiant;
char* nom;
char* prenom;
T_ListeNotes liste;
int nbrNotes;
float moyenne;
struct Etudiant* suivant;
};
typedef struct Etudiant T_Etudiant;
typedef T_Etudiant * T_ListeEtu;
T_Note* creerNote(float note, char *matiere);
T_Etudiant *creerEtudiant(int idEtu, char *nom, char *prenom);
typedef struct Note{
float note;
char* matiere;
struct Note * suivant;
} T_Note;
T_ListeNotes ajouterNote(float note, char *matiere, T_ListeNotes listeNotes);
T_ListeEtu ajouterNoteEtu(float note, char *matiere, int idEtu, T_ListeEtu listeEtu);
typedef T_Note * T_ListeNotes;
T_ListeEtu supprimerNoteEtu(char *matiere, int idEtu, T_ListeEtu listeEtu);
typedef struct Etudiant{
int identifiant;
char* nom;
char* prenom;
T_ListeNotes notes;
int nb_notes;
float moyenne;
struct Etudiant* suivant;
} T_Etudiant;
void afficherListeEtu(T_ListeEtu listeEtu);
typedef T_Etudiant* T_ListeEtu;
void afficherListe(T_ListeEtu listeEtu);
T_Note *creerNote(float note, char *matiere);
T_ListeEtu ajouterEtu(int idEtu, char *nom, char *prenom, T_ListeEtu listeEtu);
T_ListeEtu creerListe();
void calculMoyenne(T_ListeEtu);
T_ListeEtu trierListeEtu(T_ListeEtu);
T_Etudiant *creerEtudiant(int idEtu, char *nom, char *prenom);
T_ListeNotes ajouterNote(float note, char *matiere, T_ListeNotes listeNotes);
void sousListes(T_ListeEtu listeEtu, char* matiere);
void afficherSousListe(T_ListeEtu);
T_ListeEtu ajouterNoteEtu(float note, char *matiere, int idEtu, T_ListeEtu listeEtu);
\ No newline at end of file
No preview for this file type
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment