Commit 2251c838 authored by Benoit AUGER--DUBOIS's avatar Benoit AUGER--DUBOIS
Browse files

modif

parent 06f066b5
......@@ -2,43 +2,52 @@
using namespace std;
int main ( )
{
/*
j'affiche l'adresse et/ou la mémoire contenu dans les pointeurs
p1 et p2 lorsqu'ils sont modifiés, pour pouvoir suivre leurs évolutions.
*/
int a = 1, b = 2, c = 3;
cout << "valeurs de a b c ligne 1, a = " << a << ",b = " << b <<
",c = " << c << endl;
int *p1, *p2;
p1 = &a;
cout << "valeur de p1 ligne 3:" << *p1 << endl;
cout << "valeur contenu a l'adresse p1 ligne 3:" << *p1 << endl;
cout << "Adresse de p1 ligne 3:" << &p1 << endl;
p2 = &c;
cout << "valeur de p2 ligne 4:" << *p2 << endl;
cout << "valeur contenu a l'adresse p2 ligne 4:" << *p2 << endl;
cout << "Adresse de p2 ligne 4:" << &p2 << endl;
*p1 = ( *p2 )++;
cout << "valeur de p1 ligne 5:" << *p1 << endl;
cout << "valeur contenu a l'adresse p1 ligne 5:" << *p1 << endl;
cout << "Adresse de p1 ligne 5:" << &p1 << endl;
cout << "valeur de p2 ligne 5:" << *p2 << endl;
cout << "valeur contenu a l'adresse p2 ligne 5:" << *p2 << endl;
cout << "Adresse de p2 ligne 5: " << &p2 << endl;
p1 = p2;
cout << "valeur de p1 ligne 6:" << *p1 << endl;
cout << "valeur contenu a l'adresse p1 ligne 6:" << *p1 << endl;
cout << "Adresse de p1 ligne 6: " << &p1 << endl;
p2 = &b;
cout << "valeur de p2 ligne 7:" << *p2 << endl;
cout << "valeur contenu a l'adresse p2 ligne 7:" << *p2 << endl;
cout << "Adresse de p2 ligne 7: " << &p2 << endl;
*p1 -= *p2;
cout << "valeur de p1 ligne 8:" << *p1 << endl;
cout << "valeur contenu a l'adresse p1 ligne 8:" << *p1 << endl;
cout << "Adresse de p1 ligne 8: " << &p1 << endl;
++( *p2 );
cout << "valeur de p2 ligne 9:" << *p2 << endl;
cout << "valeur contenu a l'adresse p2 ligne 9:" << *p2 << endl;
cout << "Adresse de p2 ligne 9: " << &p2 << endl;
*p1 *= *p2;
cout << "valeur de p1 ligne 10:" << *p1 << endl;
cout << "valeur contenu a l'adresse p1 ligne 10:" << *p1 << endl;
cout << "Adresse de p1 ligne 10: " << &p1 << endl;
a = ( ++( *p2 ) ) * *p1;
cout << "valeur de a ligne 11:" << a << endl;
cout << "valeur de a ligne 11:" << a << endl; // affiche la valeur de a car modifié.
p1 = &a;
cout << "valeur de p1 ligne 12:" << *p1 << endl;
cout << "valeur contenu a l'adresse p1 ligne 12:" << *p1 << endl;
cout << "Adresse de p1 ligne 12: " << &p1 << endl;
*p2 = *p1 /= *p2 ;
cout << "valeur de p2 ligne 13:" << *p2 << endl;
cout << "valeur contenu a l'adresse p2 ligne 13:" << *p2 << endl;
cout << "Adresse de p2 ligne 13: " << &p2 << endl;
cout << "valeurs de a b c a la fin du programme, a = " << a << ",b = " << b <<
",c = " << c << endl;
return 0;
/* on remarque que les adresses de p1 et p2 ne change jamais une fois affectés,
seulement le contenu de ces adresses change contrairement a notre éxécution a la main.*/
seulement le contenu de ces adresses change contrairement a notre éxécution a la main,
par contre les valeurs dans p1 et p2 sont les mêmes a la fin de l'éxécution.*/
}
\ No newline at end of file
#include <iostream>
#include <string> //permet l'utilisation du type string.
using namespace std;
typedef char T_chaine[50];
/* Nous allons utilisé le type string plutôt que le tableau de caractères
pour pouvoir utiliser la fonction getline,
et ainsi pouvoir utiliser des espaces lors d'une saisie */
struct T_date {
T_chaine jour;
T_chaine mois;
T_chaine annee;
// structure représentant une date sous la forme JJ/MM:AAAA.
// les type string sont plus simple que les entiers pour l'affichage.
string jour;
string mois;
string annee;
};
struct T_personne {
T_chaine nom;
T_chaine prenom;
T_date naiss;
T_chaine age;
T_chaine adresse;
// structure qui représente une personne
string nom;
string prenom;
T_date naiss; // date de naissance de la forme T_date définie au dessus.
string age; // les type string sont plus simple que les entiers pour l'affichage.
string adresse; // adresse de la personne
};
// Permet l'affichage des informations d'une structure T_personne
void affPers(T_personne pers){
cout << "nom :" << pers.nom << " prenom :" << pers.prenom
<< endl << " Date de naissance : " << pers.naiss.jour << "/" << pers.naiss.mois <<
......@@ -24,6 +31,8 @@ void affPers(T_personne pers){
<< endl << " adresse :" << pers.adresse << endl;
}
/* Permet l'affichage des informations d'une structure T_personne
en utilisant un pointeur de type t_personne en entrée. */
void affPers2(T_personne* pers){
cout << "nom,prenom : " << pers->nom << " " << pers->prenom << endl
<< "date de naissance : " << pers->naiss.jour << "/"
......@@ -33,47 +42,54 @@ void affPers2(T_personne* pers){
}
// Avantage moins long, désaventage efface les valeurs précedente du T_personne.
/* Procédure de saisie d'un T_personne.
Avantage par rapport a une fonction : moins long, pas besoin de crée une nouvelle variable,
pas besoin de cloné les données car pers est en modification.
Donc on as moins de coût mémoirs et de temps d'éxécution.
Désaventage : efface les valeurs précedemment stocké dans le T_personne. */
void saisieP (T_personne &pers){
cout << "entre le nom de la personne : ";
cin >> pers.nom;
getline (cin,pers.nom); // getline permet d'utiliser des espaces lors d'une saisie
cout << "entre le prenom de la personne : ";
cin >> pers.prenom;
getline (cin,pers.prenom);
cout << "entrer l'adresse de la personne : ";
cin >> pers.adresse;
getline (cin,pers.adresse);
cout << "entrer l'age de la personne : ";
cin >> pers.age;
getline (cin,pers.age);
cout << "entrer l'année de naissance : ";
cin >> pers.naiss.annee;
getline (cin,pers.naiss.annee);
cout << "entrer le mois de naissance : ";
cin >> pers.naiss.mois;
getline (cin,pers.naiss.mois);
cout << "entrer le jour de naissance : ";
cin >> pers.naiss.jour;
getline (cin,pers.naiss.jour);
}
// Avantage crée une nouvelle variable, désaventage plus long;
/* Fonction saise T_personne.
Avantage : crée une nouvelle variable sans écrasées les données d'un autre T_personne
Désaventage : plus long, plus de couts en mémoirs et plus longue éxécution
selon les arguments cités plus haut*/
T_personne saisieP2(){
T_personne P;
cout << "entre le nom de la personne : ";
cin >> P.nom;
getline (cin,P.nom); // getline permet d'utiliser des espaces lors d'une saisie
cout << "entre le prenom de la personne : ";
cin >> P.prenom;
getline (cin,P.prenom);
cout << "entrer l'adresse de la personne : ";
cin >> P.adresse;
getline (cin,P.adresse);
cout << "entrer l'age de la personne : ";
cin >> P.age;
getline (cin,P.age);
cout << "entrer l'année de naissance : ";
cin >> P.naiss.annee;
getline (cin,P.naiss.annee);
cout << "entrer le mois de naissance : ";
cin >> P.naiss.mois;
getline (cin,P.naiss.mois);
cout << "entrer le jour de naissance : ";
cin >> P.naiss.jour;
getline (cin,P.naiss.jour);
return P;
}
/* les saisies bug lorsque l'on met des espaces sinon cela fonctionne que ce soit
avec la variable string ou tableau de caractère*/
/* crée une structure T_personne, appelle saisieP pour saisir les champs de la structure
puis affiche ces champs*/
int main () {
T_personne humain;
//humain = saisieP2() variante
......
#include <iostream>
#include <string> //permet l'utilisation du type string.
using namespace std;
typedef char T_chaine[50];
/* Nous allons utilisé le type string plutôt que le tableau de caractères
pour pouvoir utiliser la fonction getline,
et ainsi pouvoir utiliser des espaces lors d'une saisie */
struct T_date {
T_chaine jour;
T_chaine mois;
T_chaine annee;
// structure représentant une date sous la forme JJ/MM:AAAA.
// les type string sont plus simple que les entiers pour l'affichage.
string jour;
string mois;
string annee;
};
struct T_personne {
T_chaine nom;
T_chaine prenom;
T_date naiss;
T_chaine age;
T_chaine adresse;
// structure qui représente une personne
string nom;
string prenom;
T_date naiss; // date de naissance de la forme T_date définie au dessus.
string age; // les type string sont plus simple que les entiers pour l'affichage.
string adresse; // adresse de la personne
};
/* Permet l'affichage des informations d'une structure T_personne
en utilisant un pointeur de type t_personne en entrée. */
void affPers2(T_personne* pers){
cout << "nom,prenom : " << pers->nom << " " << pers->prenom << endl
<< "date de naissance : " << pers->naiss.jour << "/"
......@@ -25,68 +33,94 @@ void affPers2(T_personne* pers){
<< "adresse : " << pers->adresse << endl;
}
/* Procédure de saisie d'un T_personne.
Avantage par rapport a une fonction : moins long, pas besoin de crée une nouvelle variable,
pas besoin de cloné les données car pers est en modification.
Donc on as moins de coût mémoirs et de temps d'éxécution.
Désaventage : efface les valeurs précedemment stocké dans le T_personne. */
void saisieP (T_personne &pers){
cout << "entre le nom de la personne : ";
cin >> pers.nom;
getline (cin,pers.nom); // getline permet d'utiliser des espaces lors d'une saisie
cout << "entre le prenom de la personne : ";
cin >> pers.prenom;
getline (cin,pers.prenom);
cout << "entrer l'adresse de la personne : ";
cin >> pers.adresse;
getline (cin,pers.adresse);
cout << "entrer l'age de la personne : ";
cin >> pers.age;
getline (cin,pers.age);
cout << "entrer l'année de naissance : ";
cin >> pers.naiss.annee;
getline (cin,pers.naiss.annee);
cout << "entrer le mois de naissance : ";
cin >> pers.naiss.mois;
getline (cin,pers.naiss.mois);
cout << "entrer le jour de naissance : ";
cin >> pers.naiss.jour;
getline (cin,pers.naiss.jour);
}
/*
Le pointeur vers un T_personne est utile si il faut changer de binome pour ne pas avoir a réecrire
toutes les informations de la personnes.
Le T_pointeur est moins ergonomique si les binomes change au cours du temps.
toutes les champs du T_personne.
Le T_personne est moins ergonomique si les binomes change au cours du temps pour la raison cités plus haut.
*/
struct T_binome
{
// structure définissant un binôme composé de 2 T_personne
T_personne* etu1;
T_personne* etu2;
bool isBinome; /* si les deux pointeurs sont affectés avec des valeurs différentes
bool isBinome; /* si les deux pointeurs sont affectés a des addresses différentes
isBinome est vrai sinon il est faux. */
};
/* les différents scenario sont pris en compte en amont lors
de l'affectation du booleen isBinome comme préciser dans le T_binome*/
/*
Cette procédure affiche succinctement les 2 personnes d'un binome.
*/
void affBSuccinct(T_binome b){
if (b.isBinome){
cout << b.etu1->nom << " " << b.etu1->prenom << " est en binome avec : " <<
b.etu2->nom << " " << b.etu2->prenom << endl;
}else{
cout << "Le binome est incorrect";
cout << "Le binome est incorrect"; // cas d'erreur.
}
}
/*
Cette procédure affiche les 2 personnes d'un binome avec toutes leurs informations.
*/
void affBComplet(T_binome b){
if (b.isBinome){
affPers2(b.etu1);
cout << endl << "est en binome avec : " << endl;
affPers2(b.etu2);
}else{
cout << "Le binome est incorrect";
cout << "Le binome est incorrect"; // cas d'erreur.
}
}
void addB(T_personne P1, T_personne P2,T_binome &B){
/*
Cette procédure crée un binôme avec 2 personne en entrée.
P1 et P2 en modification pour économiser de la mémoirs et
éviter tous conflits.
*/
void addB(T_personne &P1, T_personne &P2,T_binome &B){
B.etu1 = &P1;
B.etu2 = &P2;
if (&P1 != &P2){
B.isBinome = true;
} else {
cout << "Entrer différents étudiants";
cout << "Entrer différents étudiants"; //cas d'erreur.
}
}
/*
Cette fonction retourne un binome en fonction des 2 pointeurs
T_personne en entrée
*/
T_binome addB2(T_personne* P1, T_personne* P2){
T_binome B;
B.etu1 = P1;
......@@ -99,8 +133,11 @@ T_binome addB2(T_personne* P1, T_personne* P2){
return B;
}
/* les saisies bug lorsque l'on met des espaces sinon cela fonctionne que ce soit
avec la variable string ou tableau de caractère*/
/*
Crée un T_binome et 2 T_personne puis demande a l'utilisateur de saisir les champs
des T_personne a l'aide de la procédure SaisieP(), crée le binome a l'aide de la fonction addB2()
puis l'affiche avec la procédure affBsuccinct()
*/
int main () {
T_binome B;
T_personne etu1,etu2;
......
#include <iostream>
using namespace std;
typedef int T_nb[6];
void saisieGrille (T_nb tab) {
for (int y=1;y<7;y++){
tab[y]=-1;
}
int temp,verif;
int i = 1;
while (i<7) {
cout << "entrer un entier : " << endl;
cin >> temp;
verif = estPresent(temp,tab);
if (temp > 0 && temp < 50 && verif == 0){
tab[i] = temp;
i++;
}
}
cout << "Les 6 entiers sont entrées" << endl;
}
typedef int T_nb[6];// on crée un type tableaux de 6 entier utile par la suite.
/* Cette fonction renvoie 1 si un entier est deja présent dans une grille 0 sinon. */
int estPresent(int n,T_nb tab){
int x = 0;
for (int i=1;i<7;i++){
for (int i=0;i<6;i++){
if (tab[i] == n){
x = 1;
}
......@@ -31,25 +14,90 @@ int estPresent(int n,T_nb tab){
return x;
}
void affTab(T_nb T){
cout << "les tirages du loto sont : ";
for (int i=1;i<7;i++){
cout << T[i];
/*
affiche les valeurs du tirage loto
*/
void afftirage(T_nb T){
cout << "les tirages du loto sont : " << endl;
for (int i=0;i<6;i++){
cout << T[i] << endl;
}
}
/*
affiche les valeurs de votre grille de loto
*/
void affGrille(T_nb T){
cout << "votre grille : " << endl;
for (int i=0;i<6;i++){
cout << T[i] << endl;
}
}
/*
préconditon : vérif initialiser a false
cette procédure vérifie si un entier est present dans
un tableau d'entiers.
*/
void estPresent2(int n,T_nb tab,bool &verif){
for (int i=0;i<6;i++){
if (tab[i] == n){
verif = true;
}
}
}
/*
procédure qui demande a l'utilisateur de saisir une grille
Précondition : les entier de cette grille sont compris entre
[1,49] et ne peuvent être présent qu'une fois.
*/
void saisieGrille (T_nb &tabN) {
/* initialise le tableau avec des valeurs impossible
pour pouvoire utiliser la procédure estPrésent2*/
for (int y=0;y<6;y++){
tabN[y]=0;
}
cout << endl;
bool verif = false; // utile pour la procédure estPrésent2
int temp;
int i = 0;
while (i<6) {
cout << "entrer un entier : " << endl;
cin >> temp;
estPresent2(temp,tabN,verif); // permet la vérification des préconditions
if (temp > 0 && temp < 50 && !verif){ // question 4.e), permet la vérification des préconditions
tabN[i] = temp;
i++;
} else {
verif = false;
cout << "cette entier n'est pas valide retaper un entier" << endl; //cas d'erreur
}
}
cout << "Les 6 entiers sont entrées, grille complète." << endl; // permet de savoir quand une grille est complète
}
/* fonction main :
Crée,saisie et affiche un tirage du loto et une grille,
si les 6 entier de la grille sont gagnant, affiche un message de victoire,
sinon affiche un message de défaite avec le nombre de numéro gagnant.
*/
int main() {
T_nb tirage,grille;
int compteur = 0;
bool verif; // utile pour vérifié si une grille correspond au tirage.
int compteur = 0; // pour stocker le nombre de numéro gagnant
saisieGrille(tirage);
saisieGrille(grille);
affTab(grille);
cout << endl;
for (int i=1;i<7;i++){
compteur = compteur + estPresent(tirage[i],grille);
afftirage(tirage);
affGrille(grille);
cout << endl; // passage a la ligne pour plus de visibilité
for (int i=0;i<6;i++){ // vérifie les numéro gagnant et met a jours le compteur
verif = false;
estPresent2(grille[i],tirage,verif);
if (verif){
compteur++;
}
}
if (compteur == 6){
if (compteur == 6){ // message de fin selon le scenario
cout << "Félicitation vous avez les 6 numéros gagant !" << endl;
} else {
cout << "Vous avez perdu avec " << compteur << " numéro gagnant" << endl;
......
Supports Markdown
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