Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problemes tableaux, global, initialisation

6 réponses
Avatar
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("\n"); // 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]=abcisse+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("\n");

}

}//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);




}

6 réponses

Avatar
Samuel DEVULDER
Le 01/08/2014 23:49, andre barbaroux a écrit :

if ((jouab[0][i]>7)|| (jouab[1][i]>7)||(echec[jouab[0][i]jouab[1][i]]) != 0)


^^^^^^^^^^^^^^^^^^^^^^^^
C'est quoi cette juxtaposition de deux variables cotes à cotes sans
opérateur entre les deux ?

Le processeur me dit:error expected ']'before 'jouab' quelque bonne âme
peut-elle me fournir l'écriture exacte ? Merci !



Je crois que le compilo ne comprends pas plus que moi l'absence d'un
operateur entre les deux jouab[.][.].

a+

sam.
Avatar
andre barbaroux
Merci ,

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$
Le 01/08/2014 23:49, andre barbaroux a écrit :

if ((jouab[0][i]>7)|| (jouab[1][i]>7)||(echec[jouab[0][i] jouab[1][i]] )
!= 0) >
^^^^^^^^^^^^^^^^^^^^^^^^


C'est quoi cette juxtaposition de deux variables cotes à cotes sans
opérateur entre les deux ?

Le processeur me dit:error expected ']'before 'jouab' quelque bonne âme
peut-elle me fournir l'écriture exacte ? Merci !



Je crois que le compilo ne comprends pas plus que moi l'absence d'un
operateur entre les deux jouab[.][.].

a+

sam.



Il s'agit de echec[jouab[0][i] ][jouab[1][i]]
Avatar
Samuel DEVULDER
Le 02/08/2014 12:57, andre barbaroux a écrit :
Merci ,

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



Oui mais tu as écrit: (echec[jouab[0][i]jouab[1][i]]) != 0)

Il manque des crochets dans ce que tu as écrit.

6 crochets ouverts ouvert ; 6 crochets fermés Contre 5 ouverts et 5fermes
dans mon envoi donc une erreur que je corrige.



Voilà. 1ere erreur corrigée.

Si je teste apres avoir modifié le "IF"

Concernant le "IF" :
error:expected expression before '||" token !!



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.
Avatar
Benoit Izac
Bonjour,

le 02/08/2014 à 12:57, andre barbaroux a écrit dans le message
<53dcc41d$1$2938$ :

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 !!



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
Avatar
Erwan David
"andre barbaroux" écrivait :

Salut et merci Samuel,
J'apprend avec l'environnement codeblocks qui me permet d'appareiller les
parenthèses en les allumant en bleu.
Comme dans mon post precedent j'avais appareillé mes crochets et
parentheses, cela je le verifie toujours mais j'en avais écrit 5 ouvertes
et 5 fermees et il en fallait 6 ouvertes et 6 fermees.
Il en manque 2 quelque part et ou?
J'ai compris chaque expression de comparaison booleenne doit être entre
parenthese et la totalite du If aussi
Merci, il faut de la patience ;-))



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é
Avatar
Erwan David
"andre barbaroux" écrivait :

Salut et merci Samuel,
J'apprend avec l'environnement codeblocks qui me permet d'appareiller les
parenthèses en les allumant en bleu.
Comme dans mon post precedent j'avais appareillé mes crochets et
parentheses, cela je le verifie toujours mais j'en avais écrit 5 ouvertes
et 5 fermees et il en fallait 6 ouvertes et 6 fermees.
Il en manque 2 quelque part et ou?
J'ai compris chaque expression de comparaison booleenne doit être entre
parenthese et la totalite du If aussi
Merci, il faut de la patience ;-))



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é