suite =C3=A0 vos conseils, je poursuis mon apprentissage du C++ avec un
livre : Programmation, principes et pratiques avec C++ de Bjarne
Stroustrup. Accelerated C++, mon anglais est insuffisant... :)
En fin de chapitre, il y est propos=C3=A9 des activit=C3=A9s pour s'entrain=
er.
succinctement, je me propose de vous donner les instructions ayant
abouti =C3=A0 l'=C3=A9criture du code situ=C3=A9 en fin de post :
*Ecrire un programme consistant en une boucle while o=C3=B9 =C3=A0 chaque
it=C3=A9ration il doit =C3=AAtre lu deux entiers. *Modifier le programme af=
in
qu'il affiche "la plus petite valeur est : " petiteVal, de m=C3=AAme pour la
plus grande. *Ajouter ce qu'il faut pour que le programme affiche les
nombres sont =C3=A9gaux, si et seulement si, ils le sont. *Modifier le
programme pour qu'il utilise des doubles. *Modifier le programme pour
que le programme affiche les nombres sont presque =C3=A9gaux, apr=C3=A8s av=
oir
affich=C3=A9 le plus grand et le plus petit (au 1.0/100 eme) *Modifier le
corps de la boucle pour qu'elle ne lise qu'un seul double =C3=A0 chaque
passage. Pour chaque it=C3=A9ration, d=C3=A9finir deux variables, m=C3=A9mo=
riser la
plus petite valeur lue et la plus grande. Afficher "le plus petit
double lu est :" minLue, de m=C3=AAme pour le plus grand. *Ajouter une unit=
=C3=A9
=C3=A0 chaque double saisie, autrement dit, saisissez des valeurs comme
10cm, 2.5po, 5 pi les unites accept=C3=A9es sont (m)=C3=A8tres, (c)entim=C3=
=A8tres,
(pi)eds et (po)uces. Supposez les facteurs de conversions. Placez les
symboles de l'unite dans une string.
Je bloque ici, je me rends bien compte, apr=C3=A8s le test des unit=C3=A9s =
si, la
valeur entr=C3=A9e ne correspond pas, il y aura quand m=C3=AAme une inserti=
on
dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions
*Isoler les traitement dans des fonctions
Hormis d=C3=A9clarer le vector en globale, mais tr=C3=A8s in=C3=A9l=C3=A9g=
ant
selon moi, je suis oblig=C3=A9 de passer des arguments (=C3=A9l=C3=A9ments =
de vector
pas de pb pour cela) aux fonctions.Il serait m=C3=AAme tentant pour moi de
passer un vector en argument, surtout pour le traitement de la boucle
for testant les =C3=A9galit=C3=A9 du vector. Cette boucle for me cause un g=
ros
soucis pour l'externaliser dans une fonction, puisque elle fait partie
de la boucle while.
Peut on simplement passer un vector en argument d'une fonction ?
ex : void Afficher(vector<double> mon_Vector);
Cela, est il une bonne facon de proc=C3=A9der ?
Certes c'est un exercice, n=C3=A9anmoins, cela peut =C3=AAtre in=C3=A9l=C3=
=A9gant,
imaginons un vector de lignes de compte... que pr=C3=A9coniseriez vous ?
Y a t'il des choses que j'aurai mal apprehend=C3=A9 et qu'il faudrait que je
corrige ?
Voici mon code (std_lib_facilities.h regroupe les librairies necessaire
=C3=A0 la partie "base" du livre) :
[code]
// activites.cpp - Exercices de fin de chapitre
#include "std_lib_facilities.h"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Michael Doubez
On 14 juin, 01:51, Olivier BURELLI wrote:
suite à vos conseils, je poursuis mon apprentissage du C++ avec un livre : Programmation, principes et pratiques avec C++ de Bjarne Stroustrup. Accelerated C++, mon anglais est insuffisant... :)
En fin de chapitre, il y est proposé des activités pour s'entrainer.
succinctement, je me propose de vous donner les instructions ayant abouti à l'écriture du code situé en fin de post :
*Ecrire un programme consistant en une boucle while où à chaque itération il doit être lu deux entiers. *Modifier le programme afin qu'il affiche "la plus petite valeur est : " petiteVal, de même pour la plus grande. *Ajouter ce qu'il faut pour que le programme affiche les nombres sont égaux, si et seulement si, ils le sont. *Modifier le programme pour qu'il utilise des doubles. *Modifier le programme pour que le programme affiche les nombres sont presque égaux, après avoir affiché le plus grand et le plus petit (au 1.0/100 eme) *Modifier le corps de la boucle pour qu'elle ne lise qu'un seul double à chaque passage. Pour chaque itération, définir deux variables, mémoriser l a plus petite valeur lue et la plus grande. Afficher "le plus petit double lu est :" minLue, de même pour le plus grand. *Ajouter une unit é à chaque double saisie, autrement dit, saisissez des valeurs comme 10cm, 2.5po, 5 pi les unites acceptées sont (m)ètres, (c)entimètres , (pi)eds et (po)uces. Supposez les facteurs de conversions. Placez les symboles de l'unite dans une string.
Je bloque ici, je me rends bien compte, après le test des unités si, la valeur entrée ne correspond pas, il y aura quand même une insertion dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions *Isoler les traitement dans des fonctions
Ou inserer dans le vector après la vérification de l'unité.
Je ne comprends pas en quoi le fait de faire appel à des fonctions résoudrait le problème. Même si mettre en sous fonctions est une bonn e idée pour la clarté.
Hormis déclarer le vector en globale, mais très inélégant
Dans la mesure où tu n'as pas encore accès à toutes le notions et techniques, ça peut être une solution. Surtout dans le cas d'une fonction qui aurait deux informations à renvoyer: le succès de la lecture et la valeur lue.
selon moi, je suis obligé de passer des arguments (éléments de vect or pas de pb pour cela) aux fonctions.Il serait même tentant pour moi de passer un vector en argument, surtout pour le traitement de la boucle for testant les égalité du vector. Cette boucle for me cause un gros soucis pour l'externaliser dans une fonction, puisque elle fait partie de la boucle while.
Peut on simplement passer un vector en argument d'une fonction ?
ex : void Afficher(vector<double> mon_Vector);
C'est possible. A noter que tu ton vector<> sera copié pour être pass é à la fonction.
Si tu as déjà vu cette notion dans le livre, tu peux aussi passer le vector en paramètre par référence.
Cela, est il une bonne facon de procéder ?
De manière générale, il est bien de séparé les responsabilités en sous- fonctions. Si tu as deux nombres à lire par itération, ça permet en particulier de ne pas dupliquer le code.
Certes c'est un exercice, néanmoins, cela peut être inélégant, imaginons un vector de lignes de compte... que préconiseriez vous ?
Y a t'il des choses que j'aurai mal apprehendé et qu'il faudrait que je corrige ?
J'ai l'impression que l'énoncé de l'exercice ne fait pas intervenir de vector<> mais seulement deux valeurs à comparer.
[snip: code]
-- Michael
On 14 juin, 01:51, Olivier BURELLI <oliv...@burelli.fr> wrote:
suite à vos conseils, je poursuis mon apprentissage du C++ avec un
livre : Programmation, principes et pratiques avec C++ de Bjarne
Stroustrup. Accelerated C++, mon anglais est insuffisant... :)
En fin de chapitre, il y est proposé des activités pour s'entrainer.
succinctement, je me propose de vous donner les instructions ayant
abouti à l'écriture du code situé en fin de post :
*Ecrire un programme consistant en une boucle while où à chaque
itération il doit être lu deux entiers. *Modifier le programme afin
qu'il affiche "la plus petite valeur est : " petiteVal, de même pour la
plus grande. *Ajouter ce qu'il faut pour que le programme affiche les
nombres sont égaux, si et seulement si, ils le sont. *Modifier le
programme pour qu'il utilise des doubles. *Modifier le programme pour
que le programme affiche les nombres sont presque égaux, après avoir
affiché le plus grand et le plus petit (au 1.0/100 eme) *Modifier le
corps de la boucle pour qu'elle ne lise qu'un seul double à chaque
passage. Pour chaque itération, définir deux variables, mémoriser l a
plus petite valeur lue et la plus grande. Afficher "le plus petit
double lu est :" minLue, de même pour le plus grand. *Ajouter une unit é
à chaque double saisie, autrement dit, saisissez des valeurs comme
10cm, 2.5po, 5 pi les unites acceptées sont (m)ètres, (c)entimètres ,
(pi)eds et (po)uces. Supposez les facteurs de conversions. Placez les
symboles de l'unite dans une string.
Je bloque ici, je me rends bien compte, après le test des unités si, la
valeur entrée ne correspond pas, il y aura quand même une insertion
dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions
*Isoler les traitement dans des fonctions
Ou inserer dans le vector après la vérification de l'unité.
Je ne comprends pas en quoi le fait de faire appel à des fonctions
résoudrait le problème. Même si mettre en sous fonctions est une bonn e
idée pour la clarté.
Hormis déclarer le vector en globale, mais très inélégant
Dans la mesure où tu n'as pas encore accès à toutes le notions et
techniques, ça peut être une solution. Surtout dans le cas d'une
fonction qui aurait deux informations à renvoyer: le succès de la
lecture et la valeur lue.
selon moi, je suis obligé de passer des arguments (éléments de vect or
pas de pb pour cela) aux fonctions.Il serait même tentant pour moi de
passer un vector en argument, surtout pour le traitement de la boucle
for testant les égalité du vector. Cette boucle for me cause un gros
soucis pour l'externaliser dans une fonction, puisque elle fait partie
de la boucle while.
Peut on simplement passer un vector en argument d'une fonction ?
ex : void Afficher(vector<double> mon_Vector);
C'est possible. A noter que tu ton vector<> sera copié pour être pass é
à la fonction.
Si tu as déjà vu cette notion dans le livre, tu peux aussi passer le
vector en paramètre par référence.
Cela, est il une bonne facon de procéder ?
De manière générale, il est bien de séparé les responsabilités en sous-
fonctions. Si tu as deux nombres à lire par itération, ça permet en
particulier de ne pas dupliquer le code.
Certes c'est un exercice, néanmoins, cela peut être inélégant,
imaginons un vector de lignes de compte... que préconiseriez vous ?
Y a t'il des choses que j'aurai mal apprehendé et qu'il faudrait que je
corrige ?
J'ai l'impression que l'énoncé de l'exercice ne fait pas intervenir de
vector<> mais seulement deux valeurs à comparer.
suite à vos conseils, je poursuis mon apprentissage du C++ avec un livre : Programmation, principes et pratiques avec C++ de Bjarne Stroustrup. Accelerated C++, mon anglais est insuffisant... :)
En fin de chapitre, il y est proposé des activités pour s'entrainer.
succinctement, je me propose de vous donner les instructions ayant abouti à l'écriture du code situé en fin de post :
*Ecrire un programme consistant en une boucle while où à chaque itération il doit être lu deux entiers. *Modifier le programme afin qu'il affiche "la plus petite valeur est : " petiteVal, de même pour la plus grande. *Ajouter ce qu'il faut pour que le programme affiche les nombres sont égaux, si et seulement si, ils le sont. *Modifier le programme pour qu'il utilise des doubles. *Modifier le programme pour que le programme affiche les nombres sont presque égaux, après avoir affiché le plus grand et le plus petit (au 1.0/100 eme) *Modifier le corps de la boucle pour qu'elle ne lise qu'un seul double à chaque passage. Pour chaque itération, définir deux variables, mémoriser l a plus petite valeur lue et la plus grande. Afficher "le plus petit double lu est :" minLue, de même pour le plus grand. *Ajouter une unit é à chaque double saisie, autrement dit, saisissez des valeurs comme 10cm, 2.5po, 5 pi les unites acceptées sont (m)ètres, (c)entimètres , (pi)eds et (po)uces. Supposez les facteurs de conversions. Placez les symboles de l'unite dans une string.
Je bloque ici, je me rends bien compte, après le test des unités si, la valeur entrée ne correspond pas, il y aura quand même une insertion dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions *Isoler les traitement dans des fonctions
Ou inserer dans le vector après la vérification de l'unité.
Je ne comprends pas en quoi le fait de faire appel à des fonctions résoudrait le problème. Même si mettre en sous fonctions est une bonn e idée pour la clarté.
Hormis déclarer le vector en globale, mais très inélégant
Dans la mesure où tu n'as pas encore accès à toutes le notions et techniques, ça peut être une solution. Surtout dans le cas d'une fonction qui aurait deux informations à renvoyer: le succès de la lecture et la valeur lue.
selon moi, je suis obligé de passer des arguments (éléments de vect or pas de pb pour cela) aux fonctions.Il serait même tentant pour moi de passer un vector en argument, surtout pour le traitement de la boucle for testant les égalité du vector. Cette boucle for me cause un gros soucis pour l'externaliser dans une fonction, puisque elle fait partie de la boucle while.
Peut on simplement passer un vector en argument d'une fonction ?
ex : void Afficher(vector<double> mon_Vector);
C'est possible. A noter que tu ton vector<> sera copié pour être pass é à la fonction.
Si tu as déjà vu cette notion dans le livre, tu peux aussi passer le vector en paramètre par référence.
Cela, est il une bonne facon de procéder ?
De manière générale, il est bien de séparé les responsabilités en sous- fonctions. Si tu as deux nombres à lire par itération, ça permet en particulier de ne pas dupliquer le code.
Certes c'est un exercice, néanmoins, cela peut être inélégant, imaginons un vector de lignes de compte... que préconiseriez vous ?
Y a t'il des choses que j'aurai mal apprehendé et qu'il faudrait que je corrige ?
J'ai l'impression que l'énoncé de l'exercice ne fait pas intervenir de vector<> mais seulement deux valeurs à comparer.
[snip: code]
-- Michael
espie
In article , Olivier BURELLI wrote:
Peut on simplement passer un vector en argument d'une fonction ?
C'est entre autres a ca que servent les references, a eviter de copier inutilement des gros trucs comme des vecteurs. Je propose
void Afficher(const vector<double>& mon_Vector);
Il y a des chances qu'Afficher n'ai pas a modifier mon_Vector, donc en le passant par const ref, tu evites les copies, qui sont inefficaces, et en plus tu t'assures que ta fonction ne fera pas de betise, comme modifier l'objet qui lui est passe.
Ca revient bien sur a n'avoir qu'un seul objet vector, puisque celui-ci n'est pas copie, mais ce qui est problematique dans les globales, c'est la facon d'acceder a l'objet, qui est visible de la totalite du programme. A partir du moment ou cet acces est limité (ce qui est le cas ici, puisque tu dois passer le bon vecteur en parametre a ta fonction), tout va bien.
Mais bon, tout ceci est explique au chapitre 8...
In article <20110613235150.0be2f5ea@daenerys.zolive.eu>,
Olivier BURELLI <olivier@burelli.fr> wrote:
Peut on simplement passer un vector en argument d'une fonction ?
C'est entre autres a ca que servent les references, a eviter de copier
inutilement des gros trucs comme des vecteurs.
Je propose
void Afficher(const vector<double>& mon_Vector);
Il y a des chances qu'Afficher n'ai pas a modifier mon_Vector, donc en
le passant par const ref, tu evites les copies, qui sont inefficaces, et
en plus tu t'assures que ta fonction ne fera pas de betise, comme modifier
l'objet qui lui est passe.
Ca revient bien sur a n'avoir qu'un seul objet vector, puisque celui-ci n'est
pas copie, mais ce qui est problematique dans les globales, c'est la facon
d'acceder a l'objet, qui est visible de la totalite du programme. A partir
du moment ou cet acces est limité (ce qui est le cas ici, puisque tu dois
passer le bon vecteur en parametre a ta fonction), tout va bien.
C'est entre autres a ca que servent les references, a eviter de copier inutilement des gros trucs comme des vecteurs. Je propose
void Afficher(const vector<double>& mon_Vector);
Il y a des chances qu'Afficher n'ai pas a modifier mon_Vector, donc en le passant par const ref, tu evites les copies, qui sont inefficaces, et en plus tu t'assures que ta fonction ne fera pas de betise, comme modifier l'objet qui lui est passe.
Ca revient bien sur a n'avoir qu'un seul objet vector, puisque celui-ci n'est pas copie, mais ce qui est problematique dans les globales, c'est la facon d'acceder a l'objet, qui est visible de la totalite du programme. A partir du moment ou cet acces est limité (ce qui est le cas ici, puisque tu dois passer le bon vecteur en parametre a ta fonction), tout va bien.
Mais bon, tout ceci est explique au chapitre 8...
Lucas Levrel
Le 14 juin 2011, Michael Doubez a écrit :
On 14 juin, 01:51, Olivier BURELLI wrote:
Je bloque ici, je me rends bien compte, après le test des unités si, la valeur entrée ne correspond pas, il y aura quand même une insertion dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions *Isoler les traitement dans des fonctions
Ou inserer dans le vector après la vérification de l'unité.
et finir ce test par
else {cout<<"Erreur d'unité, saisissez à nouveau :" ; continue ;}
-- LL
Le 14 juin 2011, Michael Doubez a écrit :
On 14 juin, 01:51, Olivier BURELLI <oliv...@burelli.fr> wrote:
Je bloque ici, je me rends bien compte, après le test des unités si, la
valeur entrée ne correspond pas, il y aura quand même une insertion
dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions
*Isoler les traitement dans des fonctions
Ou inserer dans le vector après la vérification de l'unité.
et finir ce test par
else {cout<<"Erreur d'unité, saisissez à nouveau :" ; continue ;}
Je bloque ici, je me rends bien compte, après le test des unités si, la valeur entrée ne correspond pas, il y aura quand même une insertion dans le vector. Il me faudrait donc :
*Isoler les affichages dans des fonctions *Isoler les traitement dans des fonctions
Ou inserer dans le vector après la vérification de l'unité.
et finir ce test par
else {cout<<"Erreur d'unité, saisissez à nouveau :" ; continue ;}
Il y a des chances qu'Afficher n'ai pas a modifier mon_Vector, donc en le passant par const ref, tu evites les copies, qui sont inefficaces, et en plus tu t'assures que ta fonction ne fera pas de betise, comme modifier l'objet qui lui est passe.
Il y a des chances qu'Afficher n'ai pas a modifier mon_Vector, donc en
le passant par const ref, tu evites les copies, qui sont inefficaces,
et en plus tu t'assures que ta fonction ne fera pas de betise, comme
modifier l'objet qui lui est passe.
Il y a des chances qu'Afficher n'ai pas a modifier mon_Vector, donc en le passant par const ref, tu evites les copies, qui sont inefficaces, et en plus tu t'assures que ta fonction ne fera pas de betise, comme modifier l'objet qui lui est passe.