problemes tableaux, global, initialisation
Le
andre barbaroux

Bonsoir à tous,
J'apprend lentement, j'ai mis en global les tableaux « echec,chemin,jouab »
dont je parlerai apres maisj'ai d'abord un trivial problème de syntaxe dans
la fonction 'jouabounon' :
i
f ((jouab[0][i]>7)|| (jouab[1][i]>7)||(echec[jouab[0][i]jouab[1][i]]) != 0)
Le processeur me dit:error expected ']'before 'jouab' quelque bonne âme
peut-elle me fournir l'écriture exacte ? Merci !
Puis 3 question de principe, compte tenu des tableaux mis en globalet que je
n'ai pas reussi à les initialiser en 'global' ma fonction « sortie »
considere « chemin » comme local bien que déclaré en « global »
initialement.
a.. Est-il possible d'initialiser un tableau en global ou suis je obligé
de passzer en parametre chaque fois mes tableaux
b.. serait-il judicieux d'utiliser les pointeurs de tableaux même s'il est
dit que pour des tableaux passer en valeur est identique au passage par
adresse ?
c.. A t'on le droit de passer des pieces jointes dans ce forum comme je
vas tenter de le faire,non je viens de planterà l'envoi.
A tous merci;-)
..Liste du
main.c
#include <stdio.h>
#include <stdlib.h>
/* Prototypes*/
int sorties (int ,int );
int imp_tablo(int , int,int tablo[8][8]);
int jouabounon( );
/* */
int abcisse=3;
int ordonnee=4;
int echec[8][8];
int chemin[8][8];
int jouab[3][8];
int main()
{ int ligne=2;
int col=8;
int chemin[8][8];
chemin[0][0]=1;chemin[1][0]=2;
chemin[0][1]=2;chemin[1][1]=1;
chemin[0][2]=2;chemin[1][2]=-1;
chemin[0][3]=1;chemin[1][3]=-2;
chemin[0][4]=-1;chemin[1][4]=2;
chemin[0][5]=-1;chemin[1][5]=-1;
chemin[0][6]=-2;chemin[1][6]=1;
chemin[0][7]=-1;chemin[1][7]=2;
imp_tablo(ligne, col,chemin); // appel au sous-programme
sorties(abcisse,ordonnee);
}
/*..Sous_programme d'impression d'un tableau ligne à
ligne..*/
int imp_tablo(int n, int m,int tablo[8][8]) //declaration fonction
{
int i;
int j;
for ( i=0; i<n; i++) // rangées
{
for (j=0; j<m; j++) // colonnes
{
printf("%d ",tablo[i][j]); // Pour chaque J
}
printf(""); // pour chaque I
}
}
/* ..recherche coups jouable à partir de abcisse et
ordonnees
et pour chaque case jouable indiquer le nombre de sorties et les coordonnées
dans un tableau*/
int sorties (int abcisse,int ordonnee)
{
int i;
int j;
for (i=0;i<8;i++)
{
jouab[0][i]«cisse+chemin[0][i];
jouab[1][i]=ordonnee+chemin[1][i];
/* cette case est-elle jouable,dans les limites de l'échiquier et non
utilisée */
printf("%d ",chemin[0][i]);
printf("%d ",chemin[1][i]);
printf("");
}
}//return(jouab[[0][i],jouab[1][i]);
/* fonction qui retourne 0 ou 1 si la case est jouable ou non (alt+124=ou
logique
jouab et echec sont "global"*/
int jouabounon( )
{
int i;
int retour;
if ((jouab[0][i]>7)|| (jouab[1][i]>7)||(echec[jouab[0][i]jouab[1][i]]) != 0)
{retour=0; } // jouable
else {retour=1;} // injouable
return (retour);
}
J'apprend lentement, j'ai mis en global les tableaux « echec,chemin,jouab »
dont je parlerai apres maisj'ai d'abord un trivial problème de syntaxe dans
la fonction 'jouabounon' :
i
f ((jouab[0][i]>7)|| (jouab[1][i]>7)||(echec[jouab[0][i]jouab[1][i]]) != 0)
Le processeur me dit:error expected ']'before 'jouab' quelque bonne âme
peut-elle me fournir l'écriture exacte ? Merci !
Puis 3 question de principe, compte tenu des tableaux mis en globalet que je
n'ai pas reussi à les initialiser en 'global' ma fonction « sortie »
considere « chemin » comme local bien que déclaré en « global »
initialement.
a.. Est-il possible d'initialiser un tableau en global ou suis je obligé
de passzer en parametre chaque fois mes tableaux
b.. serait-il judicieux d'utiliser les pointeurs de tableaux même s'il est
dit que pour des tableaux passer en valeur est identique au passage par
adresse ?
c.. A t'on le droit de passer des pieces jointes dans ce forum comme je
vas tenter de le faire,non je viens de planterà l'envoi.
A tous merci;-)
..Liste du
main.c
#include <stdio.h>
#include <stdlib.h>
/* Prototypes*/
int sorties (int ,int );
int imp_tablo(int , int,int tablo[8][8]);
int jouabounon( );
/* */
int abcisse=3;
int ordonnee=4;
int echec[8][8];
int chemin[8][8];
int jouab[3][8];
int main()
{ int ligne=2;
int col=8;
int chemin[8][8];
chemin[0][0]=1;chemin[1][0]=2;
chemin[0][1]=2;chemin[1][1]=1;
chemin[0][2]=2;chemin[1][2]=-1;
chemin[0][3]=1;chemin[1][3]=-2;
chemin[0][4]=-1;chemin[1][4]=2;
chemin[0][5]=-1;chemin[1][5]=-1;
chemin[0][6]=-2;chemin[1][6]=1;
chemin[0][7]=-1;chemin[1][7]=2;
imp_tablo(ligne, col,chemin); // appel au sous-programme
sorties(abcisse,ordonnee);
}
/*..Sous_programme d'impression d'un tableau ligne à
ligne..*/
int imp_tablo(int n, int m,int tablo[8][8]) //declaration fonction
{
int i;
int j;
for ( i=0; i<n; i++) // rangées
{
for (j=0; j<m; j++) // colonnes
{
printf("%d ",tablo[i][j]); // Pour chaque J
}
printf(""); // pour chaque I
}
}
/* ..recherche coups jouable à partir de abcisse et
ordonnees
et pour chaque case jouable indiquer le nombre de sorties et les coordonnées
dans un tableau*/
int sorties (int abcisse,int ordonnee)
{
int i;
int j;
for (i=0;i<8;i++)
{
jouab[0][i]«cisse+chemin[0][i];
jouab[1][i]=ordonnee+chemin[1][i];
/* cette case est-elle jouable,dans les limites de l'échiquier et non
utilisée */
printf("%d ",chemin[0][i]);
printf("%d ",chemin[1][i]);
printf("");
}
}//return(jouab[[0][i],jouab[1][i]);
/* fonction qui retourne 0 ou 1 si la case est jouable ou non (alt+124=ou
logique
jouab et echec sont "global"*/
int jouabounon( )
{
int i;
int retour;
if ((jouab[0][i]>7)|| (jouab[1][i]>7)||(echec[jouab[0][i]jouab[1][i]]) != 0)
{retour=0; } // jouable
else {retour=1;} // injouable
return (retour);
}
^^^^^^^^^^^^^^^^^^^^^^^^
C'est quoi cette juxtaposition de deux variables cotes à cotes sans
opérateur entre les deux ?
Je crois que le compilo ne comprends pas plus que moi l'absence d'un
operateur entre les deux jouab[.][.].
a+
sam.
Il ne s'agit pas de variables mais d'indices de tableau.
Il s'agit de echec[3][8] par exemple ou
-l'indice 3 serait remplacé par jouab[0][i]
-l'indice _ serait remplacé par jouab[1][i]
Après remplacement donne:
echec[jouab[0][i] ][jouab[1][i]]
Cela me donne if ((jouab[0][i]>7)||
(jouab[1][i]>7))||(echec[jouab[0][i] ][jouab[1][i]]) != 0
6 crochets ouverts ouvert ; 6 crochets fermés Contre 5 ouverts et 5fermes
dans mon envoi donc une erreur que je corrige.
Si je teste apres avoir modifié le "IF"
Concernant le "IF" :
error:expected expression before '||" token !!
Merci
"Samuel DEVULDER" <samuel-dot-devulder-at-laposte-dot-net> a écrit dans le
message de news: 53dc0ed7$0$2056$
Il s'agit de echec[jouab[0][i] ][jouab[1][i]]
Oui mais tu as écrit: (echec[jouab[0][i]jouab[1][i]]) != 0)
Il manque des crochets dans ce que tu as écrit.
Voilà. 1ere erreur corrigée.
Oui regarde à nouveau ce que tu as écrit:
if ((jouab[0][i]>7)|| (jouab[1][i]>7)) || (echec[jouab[0][i] ...
^
Il y a une parenthèse fermante en trop. Donc pour le compilo la partie
test du if() se termine prématurément.
a+
sam.
le 02/08/2014 à 12:57, andre barbaroux a écrit dans le message
Si tu présentes ton code correctement, tu t'apercevras que ta syntaxe
n'est pas bonne, la parenthèse fermant la condition du if arrive trop
tôt :
if (
(jouab[0][i] > 7) ||
(jouab[1][i] > 7)
) /* <= fin du if () */
|| (echec[ jouab[0][i] ][ jouab[1][i] ]) != 0
Je pense que ce que tu veux faire est :
if (jouab[0][i] > 7 || jouab[1][i] > 7 || echec[jouab[0][i]][jouab[1][i]])
{
/* ... */
}
Soit en plus lisible :
int x = jouab[0][i];
int y = jouab[1][i];
if (x > 7 || y > 7 || echec[x][y])
{
/* ... */
}
--
Benoit Izac
Comme il te l'a déjà été signalée impliciteùent, tu êux aussi mettre ton
expression complexe sur plusieurs lignes et avoir un indice visuel grâce
à l'indentation.
Un éditeur qui indente automatiquement ton code sera d'une grande aide
dans ce cas.
--
Les simplifications c'est trop compliqué
Comme il te l'a déjà été signalée implicitement, tu peux aussi mettre ton
expression complexe sur plusieurs lignes et avoir un indice visuel grâce
à l'indentation.
Un éditeur qui indente automatiquement ton code sera d'une grande aide
dans ce cas.
--
Les simplifications c'est trop compliqué