
## Atelier

### Un organisateur de voyages veux pouvoir remplir son véhicule de 8 places avant de savoir si il doit organiser le voyage ou pas. Chaque voyageur a un nom, un prénom, un numero de place, une date de naissance, et un indicateur qui précise si il a payé ou pas. Il n'a pas besoin d'avoir payé pour avoir un numéro de place.


### Ecrire l'objet voyageur avec ces propriétés et au moins une fonction pour pouvoir modifier l'état payé.

```
objet voyageur 
  variable privée nom, prenom : chaine;
  variable privée date_de_naissance : date;
  variable privée numero_de_place : entier;
  variable privée payé : booléen;

  methode constructeur(nom,prenom,date)
    ceci->nom = nom;
    ceci->date_de_naissance = date;
    ceci->prenom = prenom;
    ceci->numero_de_place = 0;
    ceci->payé = faux;
  fin methode

  methode paiement_recu() 
    ceci->payé = vrai;
  fin méthode;

  methode a_payé()
    renvoyer ceci->payé
  fin methode

  methode attribuer_place(numero)
    si numero > 0
      ceci->numero_de_place = numero
    fin si
  fin methode

  methode place()
    renvoyer ceci->numero_de_place;
  fin methode

  methoode identite()
    renvoyer ceci->prenom ~ " " ~ ceci->nom ~ " né le " ~ ceci->date_de_naissance;
  fin methode
fin objet
``` 

### Ecrire un objet chauffeur héritant de voyageur, mais comme il est dans l'équipage, il est forcément indiqué comme ayant payé.

``` 
objet chauffeur étend voyageur
  methode constructeur(nom,prenom,date)
    parent->constructeur(nom,prenom,date);
    ceci->paiement_recu();
  fin methode;
fin objet
``` 


### Ecrire le psuedo code permettant de créer un chauffeur ou un voyageur en fonction du choix de l'utilisateur

```
fonction creer_voyageur(chauffeur_autorisé=vrai)
  var mon_voyageur : objet;
  var est_chauffeur : booléen;
  var nom, prenom : chaine;
  var unedate : date;

  Afficher "Nom ?"
  Lire nom

  Afficher "Prenom ?"
  Lire prenom

  Afficher "Date de naissance ?"
  Lire date

  si chauffeur_autorisé alors
    est_chauffeur = faux;
    Afficher "C'est un chauffeur ?"
    Si reponse_fin == "oui" Alors
      est_chauffeur = vrai
    Fin si
  fin si

  Si est_chauffeur == vrai Alors
    mon_voyageur = nouveau chauffeur(nom,prenom,date);
  Sinon 
    mon_voyageur = nouveau voyageur(nom,prenom,date);
  Fin si;

  renvoyer mon_voyageur;
fin fonction
``` 

### Ecrire le pseudo code permettant de mettre dans un tableau au minimum un chauffeur et un client. Sachant quon ne peut pas avoir plus d'un chauffeur. 

```
  var tdv : tableau;
  var fini, a_chauffeur, vehicule_rempli : booléen;
  var nb_voyageurs : entier;
  var reponse : chaine;

  nb_voyageurs = 0;
  fini = faux;
  a_chauffeur = faux;
  vehicule_rempli = faux;

  Tant que (fini != vrai et a_chauffeur != vrai et !vehicule_rempli)
    tdv[nb_voyageurs] = creer_voyageur(!a_chauffeur);
    nb_voyageurs = nb_voyageurs +1;
    Si tdv[nb_voyageurs] instancede chauffeur 
      a_chauffeur = vrai;
    fin si;

    vehicule_rempli = (a_chauffeur et nb_voyageurs == 9) ou (!a_chauffeur et nb_voyageurs == 8);

    Si taille(tdv) >= 2 alors
      Afficher "fini ?"
      Lire reponse_fin
      Si reponse_fin == "oui" Alors
        fini = vrai
      Fin si 
    Fin si
  Fin tant que;
``` 

## Puis de vérifier si tout le monde a payé ou pas.

``` 
var i entier;
i=0;
fini = false;
Tant que i < taille(tdv) et !fini
  si faux == tdv[i]->a_payé() alors
    Afficher "tout le monde n'a pas payé";
    fini = vrai
  fin si
  i = i+1;
fin tant que

Si i == taille(tdv) et !fini
  Afficher "tout le monde a payé";
fin si

``` 