Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Fadia ATALLA
L2_S1_ALGO_STRUCT_DONNEE
Commits
2251c838
Commit
2251c838
authored
Oct 18, 2021
by
Benoit AUGER--DUBOIS
Browse files
modif
parent
06f066b5
Changes
4
Hide whitespace changes
Inline
Side-by-side
Tp2/ex1.cpp
View file @
2251c838
...
...
@@ -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
d
e p1 ligne 3:"
<<
*
p1
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p1 ligne 3:"
<<
*
p1
<<
endl
;
cout
<<
"Adresse de p1 ligne 3:"
<<
&
p1
<<
endl
;
p2
=
&
c
;
cout
<<
"valeur
d
e p2 ligne 4:"
<<
*
p2
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p2 ligne 4:"
<<
*
p2
<<
endl
;
cout
<<
"Adresse de p2 ligne 4:"
<<
&
p2
<<
endl
;
*
p1
=
(
*
p2
)
++
;
cout
<<
"valeur
d
e p1 ligne 5:"
<<
*
p1
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p1 ligne 5:"
<<
*
p1
<<
endl
;
cout
<<
"Adresse de p1 ligne 5:"
<<
&
p1
<<
endl
;
cout
<<
"valeur
d
e p2 ligne 5:"
<<
*
p2
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p2 ligne 5:"
<<
*
p2
<<
endl
;
cout
<<
"Adresse de p2 ligne 5: "
<<
&
p2
<<
endl
;
p1
=
p2
;
cout
<<
"valeur
d
e p1 ligne 6:"
<<
*
p1
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p1 ligne 6:"
<<
*
p1
<<
endl
;
cout
<<
"Adresse de p1 ligne 6: "
<<
&
p1
<<
endl
;
p2
=
&
b
;
cout
<<
"valeur
d
e p2 ligne 7:"
<<
*
p2
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p2 ligne 7:"
<<
*
p2
<<
endl
;
cout
<<
"Adresse de p2 ligne 7: "
<<
&
p2
<<
endl
;
*
p1
-=
*
p2
;
cout
<<
"valeur
d
e p1 ligne 8:"
<<
*
p1
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p1 ligne 8:"
<<
*
p1
<<
endl
;
cout
<<
"Adresse de p1 ligne 8: "
<<
&
p1
<<
endl
;
++
(
*
p2
);
cout
<<
"valeur
d
e p2 ligne 9:"
<<
*
p2
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p2 ligne 9:"
<<
*
p2
<<
endl
;
cout
<<
"Adresse de p2 ligne 9: "
<<
&
p2
<<
endl
;
*
p1
*=
*
p2
;
cout
<<
"valeur
d
e p1 ligne 10:"
<<
*
p1
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e 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
d
e p1 ligne 12:"
<<
*
p1
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e p1 ligne 12:"
<<
*
p1
<<
endl
;
cout
<<
"Adresse de p1 ligne 12: "
<<
&
p1
<<
endl
;
*
p2
=
*
p1
/=
*
p2
;
cout
<<
"valeur
d
e p2 ligne 13:"
<<
*
p2
<<
endl
;
cout
<<
"valeur
contenu a l'adress
e 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
Tp2/ex2.cpp
View file @
2251c838
#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
...
...
Tp2/ex3.cpp
View file @
2251c838
#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
personne
s
.
Le T_p
ointeur
est moins ergonomique si les binomes change au cours du temps.
toutes les
champs du T_
personne.
Le T_p
ersonne
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 a
vec
des
valeur
s différentes
bool
isBinome
;
/* si les deux pointeurs sont affectés a des
addresse
s 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
;
...
...
Tp2/ex4.cpp
View file @
2251c838
#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
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment