Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2813 connectés 

 


Dernière réponse
Sujet : [C++] je débute
Library d'accord, je vais virer tous les pointeurs, t'as surement raison, je dois pas en avoir besoin encore (j'en aurai besoin pour une autre partie de mon programme, mais bcp bcp plus tard)
 
merci a toi :)

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Library d'accord, je vais virer tous les pointeurs, t'as surement raison, je dois pas en avoir besoin encore (j'en aurai besoin pour une autre partie de mon programme, mais bcp bcp plus tard)
 
merci a toi :)
Kristoph En fait, la tu manipule des tableaux de pointeurs vers des int :)
 
Si tu fais :
 
int tableau[3][3];
affiche(tableau);
 
Tu passes déjà un pointeur en paramètre car tableau est équivalent à un pointeur :). Dans ce cas prècis tu n'as pas à t'en faire, ça passe tout seul. La où il y aurait des problèmes se serait si ton tableau n'avait pas une taille fixée à l'avance et alors il faudrait vraiment travailler avec des pointeurs.
Library ben j'en ai besoin pour retourner un tableau dans une fonction. C'est possible ? (par une fonction int fonction (tableau) ?)
Kristoph en fait, il faut enlever TOUTE les * devant tableau dans tout ton programme, même dans le main : int tableau[3][3]; à la place de int * tableau[3][3];
 
Tu n'as pas besoin de pointeurs ici.
Library :bounce: svp j'ai vraiment besoin de vous !
Library j'ai enlevé les deux * comme tu m'as dit, mais maintenant ca me met des erreurs lors de l'appel de la fonction :(
 

Citation :

#include<iostream.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
 
 
 
void affiche (int tableau[3][3])
{
 int i,j;
 for(i=0;i<3;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<" ";
   switch (tableau[i][j])
   {
    case 0:
     cout<<" ";
     break;
    case 1:
     cout<<"X";
     break;
    case 2:
     cout<<"O";
     break;
    default:
     break;
   }
  }
  cout<<"\n\n";
 }
 
}
 
int gagne (int *tableau[3][3])
{
 int i,j,temp,gagne;
 /* verifie possibilité par possibilité */
 for (i=0;i<3;i++)  
 {
  temp=*tableau[i][0];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[i][j] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 for (i=0;i<3;i++)  
 {
  temp=*tableau[0][i];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[j][i] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 if (*tableau[0][0]==*tableau[1][1] && *tableau[0][0]==*tableau[2][2]) {return(*tableau[1][1]);}
 if (*tableau[0][2]==*tableau[1][1] && *tableau[1][1]==*tableau[2][0]) {return(*tableau[1][1]);}
 
 return(0);
 
}
 
void init (int *tableau[3][3])
{
}
 
void main()  
{
 int *tableau[3][3],i,p;
 init(tableau);
 p=0;
 i=0;
 do  
 {
 affiche(tableau);
 cout<<p;
 p=(p+1)%2;
 i++;
 } while (gagne(tableau)==0 || i>100);
 cout<<gagne(tableau);
 
 
}


 
 
les erreurs :

Citation :

Compiling...
morpion.cpp
E:\programmation\morpion.cpp(83) : error C2664: 'affiche' : cannot convert parameter 1 from 'int *[3]' to 'int [][3]'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.
 
morpion.obj - 1 error(s), 0 warning(s)

Kristoph Bah, il va falloir apprendre :)
 
En fait, dans ton tableau "int tableau[3][3];", tableau est un pointeur deguisé. Donc quand tu dit "void affiche (int tableau[3][3])", affiche prend déja un pointeur en paramètre sans que tu ne le sache. Ensuite, pour utiliser ce tableau, tout ce que tu a à faire c'est :
 
   void affiche(int tableau[3][3])
...
   tableau[i][j];
 
et non :
   void affiche(int *tableau[3][3])
...
   *tableau[i][j];
 
Et pour appeler affiche, c'est comme tu as fais.
 
En fait, ( mais je ne suis pas sur ), int * tableau[3][3]; n'est pas un tableau d'entiers mais un tableau de pointeurs vers des entiers :)
Library j'ai continué un peu le programme, au moment ou j'en suis il n'y a pas d'erreur quand je compile et que je crée le .exe mais pourtant lorsque j'execute le .exe ca bug (histoire de mémoire)
 
la source actuelle est :
 

Citation :

#include<iostream.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
 
 
 
void affiche (int *tableau[3][3])
{
 int i,j;
 for(i=0;i<3;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<" ";
   switch (*tableau[i][j]) /* l'erreur est sur cette ligne */
   {
    case 0:
     cout<<" ";
     break;
    case 1:
     cout<<"X";
     break;
    case 2:
     cout<<"O";
     break;
    default:
     break;
   }
  }
  cout<<"\n\n";
 }
 
}
 
int gagne (int *tableau[3][3])
{
 int i,j,temp,gagne;
 /* verifie possibilité par possibilité */
 for (i=0;i<3;i++)  
 {
  temp=*tableau[i][0];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[i][j] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 for (i=0;i<3;i++)  
 {
  temp=*tableau[0][i];
  gagne=1;
  if (temp==0) {continue;}
  for (j=1;j<3;j++)
  {
   if (*tableau[j][i] != temp) {continue; gagne=0;}
  }
  if (gagne==1) {return(temp);}
 }
 
 if (*tableau[0][0]==*tableau[1][1] && *tableau[0][0]==*tableau[2][2]) {return(*tableau[1][1]);}
 if (*tableau[0][2]==*tableau[1][1] && *tableau[1][1]==*tableau[2][0]) {return(*tableau[1][1]);}
 
 return(0);
 
}
 
void init (int *tableau[3][3])
{
}
 
void main()  
{
 int *tableau[3][3],i,p;
 init(tableau);
 p=0;
 i=0;
 do  
 {
 affiche(tableau);
 cout<<p;
 p=(p+1)%2;
 i++;
 } while (gagne(tableau)==0 || i>100);
 cout<<gagne(tableau);
 
 
}


 
j'ai mis la ligne ou il me donne l'erreur lorsqu'il passe en mode débuggage.
Ca doit etre un probleme avec les pointeurs, mais j'y comprend pas grand chose a ces machins...

LeGreg oui enfin le C++ c'est un langage multiparadigme
(dixit son auteur)
Tu n'es pas oblige de faire de l'objet pour
programmer en C++.
La plupart des regles C->C++ sont optionnelles
mais facilitent la tache du programmeur
quand elles sont utilisees donc tu aurais
tort de ne pas les utiliser sauf quand
tu sais que ca te penalise au niveau performance.
(mais pour un morpion les performances ca devrait
aller :P).
 
Sinon le int main c'est pas optionnel
c'est la norme parce que main est une fonction
qui est appelee par l'init du programme
et que cette init attend une valeur de retour.
 
A+
LEGREG
XuTi au fait! ce n est pas de la programmation C++ que tu fais la... mais du C (l utilisation de cout<< et cin>> n est qu une facilite pour remplacer le printf et le scanf).
 
Quand tu feras des classes, la tu programmeras en C++.
GhzMsnet faudra que tu me le passes  :)
Library yes, merci a tous, j'ai remplacé le tableau[3][3] par tableau, viré le ; apres le switch et viré le case NULL et maintenant ca marche tres bien. Merci a tous !
Piksou il rale paske ça renvoie rien
il faut juste ajouter un return
j'avais raison pour gcc
 

Citation :

test.c: In function `main':
test.c:7: warning: return type of `main' is not `int'

Rasta Knight ben là le compilo à l'air de pas apprécier le "int main", c pkoi je comprends pas :/
Piksou bah c considéré comme pas propre
il me semble que gcc envoie un warning
qu'il renvoie plutot zéro
Kristoph A j'oubliais la plus grosse erreur : le passage de tableau en paramètre.
 
     affiche(tableau[3][3]);
 
Il faut faire ca :
 
      affiche(tableau);
Rasta Knight Piksou> Pourquoi, étant donné qu'apparement son prog ne renvoie rien en sortie? :??:
Piksou rasta: :non:: le void poiur main, c mal  :non:
Kristoph Tu a mis un ; à la fin de ton switch et avant ton bloc {} c'est pas bon, retire le.
 
De plus, enleve completement la section case NULL: parceque ca ne sert à rien. En général il n'y a que les pointeurs qui contiennent NULL et ici c'est des entiers.
 
En fait je ne vois pas a quoi pouvait servir cette partie avec case NULL: :)
Rasta Knight chais pa trop méga débutant aussi (6h de cours, et pas à faire des morpions :D )
 
Par contre pour le deuxième warning, tu devrais remplacer "int main" par "void main", ça devrait passer je pense.
Library pour l'instant j'ai voulu faire que le sous programme qui "affiche" les cases du morpion, plus tard (des que les joueurs auront commencé a jouer, je mettrai des 1 ou des 2 dans la matrice "tableau", ce qui devrait afficher des croix et des ronds)
c pas comme ca qu'il faut faire ?
Rasta Knight je comprends pas un truc, tes "cases" doivent prendre d'après ton prog NULL, 0, 1 ou 2 or tu fais switch(tableau(i,j)) et je ne vois pas comment tableau(i,j) pourrait prendre une de ces valeurs... :/
 
PS : Je raconte peut-être des conneries aussi, chuis super débutant en C ;)
Library ben ce sont mes premieres lignes en C++...
 
j'ai corrigé le swich en switch, mais voila les erreurs maintenant :
 

Citation :

Compiling...
morpion.cpp
E:\programmation\morpion.cpp(16) : warning C4060: switch statement contains no 'case' or 'default' labels
E:\programmation\morpion.cpp(18) : error C2046: illegal case
E:\programmation\morpion.cpp(21) : error C2046: illegal case
E:\programmation\morpion.cpp(24) : error C2046: illegal case
E:\programmation\morpion.cpp(27) : error C2046: illegal case
E:\programmation\morpion.cpp(30) : error C2047: illegal default
E:\programmation\morpion.cpp(43) : error C2664: 'affiche' : cannot convert parameter 1 from 'int' to 'int [][3]'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\programmation\morpion.cpp(45) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
 
morpion.obj - 6 error(s), 2 warning(s)


 
merci de ton aide en tous cas

Piksou

Citation :

E:\programmation\morpion.cpp(16) : error C2065: 'swich' : undeclared identifier


c pas clair ?

Piksou 1ere erreur: t'as tapé swich pour switch  :sarcastic:
hectoras :hello: lib
 
désolé moi déjà php ça va un peu mal mais alors la C...
Library Bonjour
 
J'aimerai créer un programme en C++ pour jouer au morpion (sous dos bien sur). J'ai commencé mais deja 7 erreurs lors de la compilation !
j'ai essayé plein de trucs mais a chaque fois c'est pire. Quelqu'un pourrait me dire ce qui ne va pas ?
 
Le programme :

Citation :

#include<iostream.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
 
 
 
void affiche (int tableau[3][3])
{
 int i,j;
 for(i=0;i<3;i++)
 {
  for(j=0;j<3;j++)
  {
   cout<<" ";
   switch (tableau[i][j]);
   {
    case NULL:
     cout<<" ";
     break;
    case 0:
     cout<<" ";
     break;
    case 1:
     cout<<"X";
     break;
    case 2:
     cout<<"O";
     break;
    default:
     break;
   }
  }
  cout<<"\n\n";
 }
 
}
 
 
int main()  
{
 int tableau [3][3];
 affiche(tableau[3][3]);
 
}


 
les erreurs :

Citation :


Compiling...
morpion.cpp
E:\programmation\morpion.cpp(16) : error C2065: 'swich' : undeclared identifier
E:\programmation\morpion.cpp(18) : error C2046: illegal case
E:\programmation\morpion.cpp(21) : error C2046: illegal case
E:\programmation\morpion.cpp(24) : error C2046: illegal case
E:\programmation\morpion.cpp(27) : error C2046: illegal case
E:\programmation\morpion.cpp(30) : error C2047: illegal default
E:\programmation\morpion.cpp(43) : error C2664: 'affiche' : cannot convert parameter 1 from 'int' to 'int [][3]'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\programmation\morpion.cpp(45) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
 
morpion.obj - 7 error(s), 1 warning(s)


 
merci d'avance :)

 

[jfdsdjhfuetppo]--Message édité par Library--[/jfdsdjhfuetppo]


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)