Pb ds une fonction en c++
Fermé
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
-
31 déc. 2006 à 11:43
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 - 3 janv. 2007 à 11:46
lirey83 Messages postés 75 Date d'inscription mardi 2 janvier 2007 Statut Membre Dernière intervention 18 août 2007 - 3 janv. 2007 à 11:46
A voir également:
- Pb ds une fonction en c++
- Fonction si et - Guide
- M3 ds real ✓ - Forum Jeux vidéo
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Fonction filtre excel n'existe pas - Forum Excel
13 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
31 déc. 2006 à 12:01
31 déc. 2006 à 12:01
Salut,
Pour le test if (position=false) il faut utiliser ==
= c'est pour affectation
== test d'égalité
Prends l'habitude d'indenter ton code, pour le rendre plus lisible :-))
Tu peux écrire plus court (pas besoin d'accolades si'il y a une seule instruction
Pour le test if (position=false) il faut utiliser ==
= c'est pour affectation
== test d'égalité
Prends l'habitude d'indenter ton code, pour le rendre plus lisible :-))
#include<iostream> using namespace std; void saisie(char car1,char car2); int main() { char c1,c2; saisie(c1,c2); return 0; } void saisie(char car1,char car2) { //ona un tableau dont les colonnes vont de A à I et les lignes de J à R, car 1 et car2 désigne les coordonnées (exemple : aj, AJ, ck...) bool position; position=false; do{ cin>>car1; cin>>car2; if((car1>='A' && car1<='I') || (car1>='a' && car1<='i')) { if ((car2>='J' && car2<='R') || (car2>='j' && car2<='r')) { position=true; } } if ((car2>='A' && car2<='I') || (car2>='a' && car2<='i')) { if ((car1>='J' && car1<='R') || (car1>='j' && car1<='r')) { position=true; } } if (position == false) { cout<<"Les coordonnées saisi ne sont pas corretes, veuillez les ressaisir : "<<endl<<"Emplacement : "; } } while (position == false); }
Tu peux écrire plus court (pas besoin d'accolades si'il y a une seule instruction
#include<iostream> using namespace std; void saisie(char car1,char car2); int main() { char c1,c2; saisie(c1,c2); return 0; } void saisie(char car1,char car2) { //ona un tableau dont les colonnes vont de A à I et les lignes de J à R //car 1 et car2 désigne les coordonnées (exemple : aj, AJ, ck...) bool position; position=false; do{ cin>>car1; cin>>car2; if((car1>='A' && car1<='I') || (car1>='a' && car1<='i')) if ((car2>='J' && car2<='R') || (car2>='j' && car2<='r')) position=true; if ((car2>='A' && car2<='I') || (car2>='a' && car2<='i')) if ((car1>='J' && car1<='R') || (car1>='j' && car1<='r')) position=true; if (position == false) cout<<"Les coordonnées saisi ne sont pas corretes, veuillez les ressaisir :" <<endl<<"Emplacement : "; } while (position == false); }
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
31 déc. 2006 à 12:15
31 déc. 2006 à 12:15
ok, j'ai pris note, je savais pour les doubles égale mais c'était un oubli. Par contre notre prof nous dit de mettre des double = dans les if uniquement.
Et j'ai toujours un probleme de plantage... Je ne sais pas d'ou ça vient...
Et j'ai toujours un probleme de plantage... Je ne sais pas d'ou ça vient...
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
31 déc. 2006 à 12:24
31 déc. 2006 à 12:24
Affiche ton code pour voir.
Aussi les erreur de compilation.
Je ne sais pas ce que ton prof t'a dit mais l'opérateur == c'est un opérateur de comparaison (égalité) que tu dois l'utiliser n'importe où tu fait un test
while(position == false)
veut dire : Tant que position égal false
while(postion = false)
veut dire: Tant que tu affectes à la position la valeur false
De point de vue boolean, ça retourne toujours vrai donc elle retourne 1
Tu dois continuer la boucle si position égal avec false et pas si tu affectes à position la valeur false
En bref tu veux exécuter le boucle tante que la valeur et false, mais vu que position=false (donc affectation) et toujours vrai, la boucle s'arrête.
Aussi les erreur de compilation.
Je ne sais pas ce que ton prof t'a dit mais l'opérateur == c'est un opérateur de comparaison (égalité) que tu dois l'utiliser n'importe où tu fait un test
while(position == false)
veut dire : Tant que position égal false
while(postion = false)
veut dire: Tant que tu affectes à la position la valeur false
De point de vue boolean, ça retourne toujours vrai donc elle retourne 1
Tu dois continuer la boucle si position égal avec false et pas si tu affectes à position la valeur false
En bref tu veux exécuter le boucle tante que la valeur et false, mais vu que position=false (donc affectation) et toujours vrai, la boucle s'arrête.
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
31 déc. 2006 à 12:27
31 déc. 2006 à 12:27
#include<iostream> #include<time.h> #include<process.h> using namespace std; void initialisation(int tab[9][9], int nb_a_jouer[5]) { int ligne; int colone; for(ligne=0;ligne<=8;ligne++) { for(colone=0;colone<=8;colone++) { tab[ligne][colone]=rand()%10; if(ligne==0 || ligne==8 || colone==0 || colone==8) tab[ligne][colone]=-1; } } for(ligne=0;ligne<=4;ligne++) nb_a_jouer[ligne]=rand()%10; } void affichage(int tab[9][9], int nb_a_jouer[5]) { int ligne; int colone; cout<<endl<<" AddEmUp"<<endl<<" ABCDEFGHI"<<endl; cout<<'J'; for(colone=0;colone<=8;colone++) { if(tab[0][colone]==-1) cout<<'.'; else cout<<tab[0][colone]; } cout<<" "<<'>'<<nb_a_jouer[0]<<'<'<<endl; for(ligne=1;ligne<=4;ligne++) { cout<<(char)('J'+ligne); for(colone=0;colone<=8;colone++) { if(tab[ligne][colone]==-1) cout<<'.'; else cout<<tab[ligne][colone]; } cout<<" "<<nb_a_jouer[ligne]; cout<<endl; } for(ligne=5;ligne<=8;ligne++) { cout<<(char)('J'+ligne); for(colone=0;colone<=8;colone++) { if(tab[ligne][colone]==-1) cout<<'.'; else cout<<tab[ligne][colone]; } cout<<endl; } cout<<endl; cout<<"Emplacement : "; } void saisie(char car1,char car2) { //ona un tableau dont les colonnes vont de A à I et les lignes de J à R, //car 1 et car2 désigne les coordonnées (exemple : aj, AJ, ck...) bool position; position=false; do{ cin>>car1; cin>>car2; if((car1>='A' && car1<='I') || (car1>='a' && car1<='i')) if ((car2>='J' && car2<='R') || (car2>='j' && car2<='r')) position=true; if ((car2>='A' && car2<='I') || (car2>='a' && car2<='i')) if ((car1>='J' && car1<='R') || (car1>='j' && car1<='r')) position=true; if (position==false) cout<<"Les coordonnées saisi ne sont pas corretes, veuillez les ressaisir :" <<endl<<"Emplacement : "; } while (position==false); } void conversion( char car1, char car2,int tab[9][9],int ligne_jouee, int colone_jouee, int nb_a_jouer[5]) { if(car1>='A' && car1<='I' && car2>='J' && car2<='R') { colone_jouee=car1-'A'; ligne_jouee=car2-'J'; } else { colone_jouee=car2-'A'; ligne_jouee=car1-'J'; } if(car1>='a' && car1<='i' && car2>='j' && car2<='r') { colone_jouee=car1-'a'; ligne_jouee=car2-'j'; } else { colone_jouee=car2-'a'; ligne_jouee=car1-'j'; } if(tab[ligne_jouee][colone_jouee]==-1) tab[ligne_jouee][colone_jouee]=nb_a_jouer[0]; } void addition(int tab[9][9], int somme, int ligne_jouee, int colone_jouee) { int i,j; somme=0; for(i=ligne_jouee-1;i<=ligne_jouee+1;i++) { for(j=colone_jouee-1;j<=colone_jouee+1;j++) { if(i<=8 && i>=0 && j<=8 && j>=0 && tab[i][j]>-1) somme=tab[i][j]+somme; } } somme=somme-tab[ligne_jouee][colone_jouee]; } void comparaison(int tab[9][9],int somme,int ligne_jouee,int colone_jouee) { int i,j; if(somme%10==tab[ligne_jouee][colone_jouee]) { for(i=ligne_jouee-1;i<=ligne_jouee+1;i++) { for(j=colone_jouee-1;j<=colone_jouee+1;j++) { if(i<=8 && i>=0 && j<=8 && j>=0 && tab[i][j]>-1) tab[i][j]=-1; } } } } int somme_du_tableau (int tab[9][9]) { int somme_totale; int i; int j; for(i=0;i<=8;i++) { for(j=0;j<=8;j++) somme_totale=somme_totale+tab[i][j]; } return somme_totale; } int main() { int tab[9][9]; int nb_a_jouer[5]; int ligne_jouee; int colone_jouee; int somme; char car1,car2; srand(time(NULL)); initialisation(tab,nb_a_jouer); do { system("cls"); affichage(tab,nb_a_jouer); saisie(car1,car2); conversion(car1,car2,tab,ligne_jouee,colone_jouee,nb_a_jouer); addition(tab,somme,ligne_jouee,colone_jouee); comparaison(tab,somme,ligne_jouee,colone_jouee); nb_a_jouer[0]=nb_a_jouer[1]; nb_a_jouer[1]=nb_a_jouer[2]; nb_a_jouer[2]=nb_a_jouer[3]; nb_a_jouer[3]=nb_a_jouer[4]; nb_a_jouer[4]=rand()%10; } while (somme_du_tableau(tab)!=(-81)); }
Voici le code.
Merci pour ton aide.
Et sinon, je n'ai pas d'erreur de compilation, c'ets lors de l'execution que ça plante
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
31 déc. 2006 à 12:53
31 déc. 2006 à 12:53
Salut,
j'ai compilé et exécuter ton code et je n'ai pas du plantage.
j'ai compilé et exécuter ton code et je n'ai pas du plantage.
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
31 déc. 2006 à 13:04
31 déc. 2006 à 13:04
tu as entré les premières coordonnées?
Moi c'ets après avoir entré les coordonées et appuyé sur entrée...
Moi c'ets après avoir entré les coordonées et appuyé sur entrée...
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
31 déc. 2006 à 13:18
31 déc. 2006 à 13:18
D'accord mais que comprends par plantage?
En fait c'est un plantage ou tout simplement le code ne fait pas ce que tu veux?
Il faut commenter un peu ton code, aussi spécifier le but (il me semble que c'est un jeu, je n'ai pas parcouru attentivement ton code :-))
En fait c'est un plantage ou tout simplement le code ne fait pas ce que tu veux?
Il faut commenter un peu ton code, aussi spécifier le but (il me semble que c'est un jeu, je n'ai pas parcouru attentivement ton code :-))
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
31 déc. 2006 à 13:26
31 déc. 2006 à 13:26
oui, c'est un jeu, c'est un exercice qu'un prof nous a demandé. Je n'ai pas encore eu le temps de le commenter. Si tu veux voir en quoi consiste le jeun, il y a une démo ici : http://zerogames.com/game/puzzles/addemup.html
bien sur les graphismes ne sont pas les même...
En fait après avoir saisis les premières coordonnées, il m'affiche le message addemup3.exe a rencontré un problème est doit fermer. nous vous prions de nous excuser pour le désagrement encouru....
Débogage/envoyer le rapport d'erreurs/Ne pas envoyer
bien sur les graphismes ne sont pas les même...
En fait après avoir saisis les premières coordonnées, il m'affiche le message addemup3.exe a rencontré un problème est doit fermer. nous vous prions de nous excuser pour le désagrement encouru....
Débogage/envoyer le rapport d'erreurs/Ne pas envoyer
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
31 déc. 2006 à 13:30
31 déc. 2006 à 13:30
excuse moi, j'aurais du t'expliquer au moins le principe... On place dans le tableau les nombres qui sont proposé a droite. Ensuite on fait la somme de ses voisins et si le chiffre des unités et égale au nombre placé, on les enlève du tableau. et cela jusqu'a ce qu'il n'y ait plus rien dans le tableau.
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
1 janv. 2007 à 19:24
1 janv. 2007 à 19:24
*up*
Quelqu'un voit il ce qui ne va pas dans mon programme?
Merci
Quelqu'un voit il ce qui ne va pas dans mon programme?
Merci
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
2 janv. 2007 à 10:50
2 janv. 2007 à 10:50
Salut
Cela ne risque pas de fonctionner si tes procédures ne transmettent pas correctement les arguments. Par exemple ta fonction saisie ne renvoie pas car1 et car2 (fait un "cout" juste après et tu verras qu'il n'y a pas ce que tu attends dans car1 et car2). Faut passer par des pointeurs.
Cela ne risque pas de fonctionner si tes procédures ne transmettent pas correctement les arguments. Par exemple ta fonction saisie ne renvoie pas car1 et car2 (fait un "cout" juste après et tu verras qu'il n'y a pas ce que tu attends dans car1 et car2). Faut passer par des pointeurs.
To1n00
Messages postés
137
Date d'inscription
samedi 30 décembre 2006
Statut
Membre
Dernière intervention
12 octobre 2016
6
2 janv. 2007 à 17:15
2 janv. 2007 à 17:15
bonne année !
je n'ai pas encore vu les pointeurs... Et je ne voit pas ce qui ne vas pas dans ma procédure saisie... Elle demande deux caractère et vérifie que les coordonnée rentré soit cohérentes... les valeur saisies sont bien affectée à car1 et car2...
j'y ai un peu retravaillé depuis, mais maintenant lorsque je rentre des coordonnées, il n'affecte pas la valeur à la case (ou il ne l'affiche pas correctement)...
Voici mon code actuel :
je n'ai pas encore vu les pointeurs... Et je ne voit pas ce qui ne vas pas dans ma procédure saisie... Elle demande deux caractère et vérifie que les coordonnée rentré soit cohérentes... les valeur saisies sont bien affectée à car1 et car2...
j'y ai un peu retravaillé depuis, mais maintenant lorsque je rentre des coordonnées, il n'affecte pas la valeur à la case (ou il ne l'affiche pas correctement)...
Voici mon code actuel :
#include<iostream> #include<time.h> #include<process.h> using namespace std; void initialisation(int tab[9][9], int nb_a_jouer[5]) { //la procédure entre des nbs au hazard ds le tableau et laisse vide tt le pourtour int ligne; int colone; for(ligne=0;ligne<=8;ligne++) { for(colone=0;colone<=8;colone++) { tab[ligne][colone]=rand()%10; if(ligne==0 || ligne==8 || colone==0 || colone==8) tab[ligne][colone]=-1; } } for(ligne=0;ligne<=4;ligne++) nb_a_jouer[ligne]=rand()%10; } void affichage(int tab[9][9], int nb_a_jouer[5]) { int ligne; int colone; cout<<endl<<" AddEmUp"<<endl<<endl<<" ABCDEFGHI"<<endl; cout<<" "<<'J'; for(colone=0;colone<=8;colone++) { if(tab[0][colone]==-1) cout<<'.'; else cout<<tab[0][colone]; } cout<<" "<<'>'<<nb_a_jouer[0]<<'<'<<endl; for(ligne=1;ligne<=4;ligne++) { cout<<" "<<(char)('J'+ligne); for(colone=0;colone<=8;colone++) { if(tab[ligne][colone]==-1) cout<<'.'; else cout<<tab[ligne][colone]; } cout<<" "<<nb_a_jouer[ligne]; cout<<endl; } for(ligne=5;ligne<=8;ligne++) { cout<<" "<<(char)('J'+ligne); for(colone=0;colone<=8;colone++) { if(tab[ligne][colone]==-1) cout<<'.'; else cout<<tab[ligne][colone]; } cout<<endl; } cout<<endl; cout<<"Emplacement : "; } void saisie(char car1,char car2) { //ona un tableau dont les colonnes vont de A à I et les lignes de J à R, //car 1 et car2 désigne les coordonnées (exemple : aj, AJ, ck...) bool position; position=false; do{ cin>>car1; cin>>car2; if((car1>='A' && car1<='I') || (car1>='a' && car1<='i')) if ((car2>='J' && car2<='R') || (car2>='j' && car2<='r')) position=true; if ((car2>='A' && car2<='I') || (car2>='a' && car2<='i')) if ((car1>='J' && car1<='R') || (car1>='j' && car1<='r')) position=true; if (position==false) cout<<"Les coordonnées saisies ne sont pas corretes, veuillez les ressaisir..." <<endl<<"Emplacement : "; } while (position==false); } void conversion( char car1, char car2,int tab[9][9],int ligne_jouee, int colone_jouee, int nb_a_jouer[5]) { if(car1>='A' && car1<='I' && car2>='J' && car2<='R') { colone_jouee=car1-'A'; ligne_jouee=car2-'J'; } else { colone_jouee=car2-'A'; ligne_jouee=car1-'J'; } if(car1>='a' && car1<='i' && car2>='j' && car2<='r') { colone_jouee=car1-'a'; ligne_jouee=car2-'j'; } else { colone_jouee=car2-'a'; ligne_jouee=car1-'j'; } if(tab[ligne_jouee][colone_jouee]==-1) { tab[ligne_jouee][colone_jouee]=nb_a_jouer[0]; } } void addition(int tab[9][9], int somme, int ligne_jouee, int colone_jouee) { int i,j; somme=0; for(i=ligne_jouee-1;i<=ligne_jouee+1;i++) { for(j=colone_jouee-1;j<=colone_jouee+1;j++) { if(i<=8 && i>=0 && j<=8 && j>=0 && tab[i][j]>-1) somme=tab[i][j]+somme; } } somme=somme-tab[ligne_jouee][colone_jouee]; } void comparaison(int tab[9][9],int somme,int ligne_jouee,int colone_jouee) { int i,j; if(somme%10==tab[ligne_jouee][colone_jouee]) { for(i=ligne_jouee-1;i<=ligne_jouee+1;i++) { for(j=colone_jouee-1;j<=colone_jouee+1;j++) { if(i<=8 && i>=0 && j<=8 && j>=0 && tab[i][j]>-1) tab[i][j]=-1; } } } } int somme_du_tableau (int tab[9][9]) { int somme_totale; int i; int j; for(i=0;i<=8;i++) somme_totale=0; { for(j=0;j<=8;j++) somme_totale=somme_totale+tab[i][j]; } return somme_totale; } int main() { int tab[9][9]; int nb_a_jouer[5]; int ligne_jouee; int colone_jouee; int somme; char car1; char car2; srand(time(NULL)); initialisation(tab,nb_a_jouer); do { system("cls"); affichage(tab,nb_a_jouer); saisie(car1,car2); conversion(car1,car2,tab,ligne_jouee,colone_jouee,nb_a_jouer); addition(tab,somme,ligne_jouee,colone_jouee); comparaison(tab,somme,ligne_jouee,colone_jouee); nb_a_jouer[0]=nb_a_jouer[1]; nb_a_jouer[1]=nb_a_jouer[2]; nb_a_jouer[2]=nb_a_jouer[3]; nb_a_jouer[3]=nb_a_jouer[4]; nb_a_jouer[4]=rand()%10; } while (somme_du_tableau(tab)!=(-81)); }
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
3 janv. 2007 à 11:46
3 janv. 2007 à 11:46
Salut et bonne année !
Rajoutes la ligne suivante après l'appel de ta procédure saisie :
cout << car1 << " " << car2 << endl; cin >> car1;
le cin ne sert qu'à stopper l'affichage. Tu verras qu'il ne t'affiche pas ce que tu as saisi. Pourquoi ? Simplement parce que si tu veux qu'une procédure te renvoie une valeur, il faut passer les arguments par adresse et non pas par valeur. Testes d'abord sur un petit exemple :
Mieux, non !
Rajoutes la ligne suivante après l'appel de ta procédure saisie :
cout << car1 << " " << car2 << endl; cin >> car1;
le cin ne sert qu'à stopper l'affichage. Tu verras qu'il ne t'affiche pas ce que tu as saisi. Pourquoi ? Simplement parce que si tu veux qu'une procédure te renvoie une valeur, il faut passer les arguments par adresse et non pas par valeur. Testes d'abord sur un petit exemple :
void saisie_test(char *car1) { cout << "Taper un caractère : "; cin >> *car1; } int main() { char car1; saisie_test(&car1); cout << "Vous avez tapé le caractère : " << car1 << endl; }
Mieux, non !