int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
Le 22/07/2014 18:48, andre barbaroux écrivit :int main()
{
int ligne;
une déclaration, OKint col;
une autre déclaration, OKligne=2;
une instruction maintenantcol=3;
une autre instruction, OKint tableau[ligne][col];
une déclaration, c'est pas bon !
Normalement, il faut déclarer ses variables avant de commencer à
programmer.
Antoine
P.S.: je sais parfaitement qu'il y a d'autres solutions (C99) mais je ne
pense pas que ce soient de _bonnes_ solutions.
Le 22/07/2014 18:48, andre barbaroux écrivit :
int main()
{
int ligne;
une déclaration, OK
int col;
une autre déclaration, OK
ligne=2;
une instruction maintenant
col=3;
une autre instruction, OK
int tableau[ligne][col];
une déclaration, c'est pas bon !
Normalement, il faut déclarer ses variables avant de commencer à
programmer.
Antoine
P.S.: je sais parfaitement qu'il y a d'autres solutions (C99) mais je ne
pense pas que ce soient de _bonnes_ solutions.
Le 22/07/2014 18:48, andre barbaroux écrivit :int main()
{
int ligne;
une déclaration, OKint col;
une autre déclaration, OKligne=2;
une instruction maintenantcol=3;
une autre instruction, OKint tableau[ligne][col];
une déclaration, c'est pas bon !
Normalement, il faut déclarer ses variables avant de commencer à
programmer.
Antoine
P.S.: je sais parfaitement qu'il y a d'autres solutions (C99) mais je ne
pense pas que ce soient de _bonnes_ solutions.
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
{
printf("%d",nbligne);
}
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
{
printf("%d",nbligne);
}
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
{
printf("%d",nbligne);
}
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
[...]
line 25 error expected ')' 'before' '[' token
[...]
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
[...]
line 25 error expected ')' 'before' '[' token
[...]
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
[...]
line 25 error expected ')' 'before' '[' token
[...]
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Antoine etait gene avec tes declarations melangees au code, mais a cote,int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de raisons...
Antoine etait gene avec tes declarations melangees au code, mais a cote,
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de raisons...
Antoine etait gene avec tes declarations melangees au code, mais a cote,int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de raisons...
In article <53ce95ca$0$2058$,
andre barbaroux wrote:
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
{
printf("%d",nbligne);
}
C'est ton code tel quel ? tu pourrais pas nous donner l'integralite du
code, et pas un fragment ?
parce que la, je vois pas la definition de ta fonction... ca va etre
un peu croquignolesque. Je vois pas non plus
#include <stdio.h>
autre source de probleme possible.
Si tu as juste rajoute "ligne 25": ben ce que tu ecris derriere, c'est
pas une definition de fonction en bonne et due forme... ca devrait
plus ressembler a un truc genre:
int imp_tablo(int nbligne, int nbcol, int tablo[nbligne][nbcol])
Apres, il y a quelques soucis dans tout ca. Tu te bases sur quoi comme
texte pour apprendre ?
Antoine etait gene avec tes declarations melangees au code, mais a cote,int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de
raisons...
In article <53ce95ca$0$2058$426a74cc@news.free.fr>,
andre barbaroux <andre.barbaroux@free.fr> wrote:
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
{
printf("%d",nbligne);
}
C'est ton code tel quel ? tu pourrais pas nous donner l'integralite du
code, et pas un fragment ?
parce que la, je vois pas la definition de ta fonction... ca va etre
un peu croquignolesque. Je vois pas non plus
#include <stdio.h>
autre source de probleme possible.
Si tu as juste rajoute "ligne 25": ben ce que tu ecris derriere, c'est
pas une definition de fonction en bonne et due forme... ca devrait
plus ressembler a un truc genre:
int imp_tablo(int nbligne, int nbcol, int tablo[nbligne][nbcol])
Apres, il y a quelques soucis dans tout ca. Tu te bases sur quoi comme
texte pour apprendre ?
Antoine etait gene avec tes declarations melangees au code, mais a cote,
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de
raisons...
In article <53ce95ca$0$2058$,
andre barbaroux wrote:
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
{
printf("%d",nbligne);
}
C'est ton code tel quel ? tu pourrais pas nous donner l'integralite du
code, et pas un fragment ?
parce que la, je vois pas la definition de ta fonction... ca va etre
un peu croquignolesque. Je vois pas non plus
#include <stdio.h>
autre source de probleme possible.
Si tu as juste rajoute "ligne 25": ben ce que tu ecris derriere, c'est
pas une definition de fonction en bonne et due forme... ca devrait
plus ressembler a un truc genre:
int imp_tablo(int nbligne, int nbcol, int tablo[nbligne][nbcol])
Apres, il y a quelques soucis dans tout ca. Tu te bases sur quoi comme
texte pour apprendre ?
Antoine etait gene avec tes declarations melangees au code, mais a cote,int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de
raisons...
Le 22/07/2014 18:48, andre barbaroux a écrit :int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
^^^^
Ici je sens qu'il y a un pb. En effet tu remplies le tableau juste au
dessus et tu passe au sous programme la valeur en cellule (col,ligne).
Donc d'une part le reste du tableau ne sert à rien et on avait pas besoin
de l'initialiser, mais en plus tu accèdes carrément à l’extérieur des
bornes du tableau et ca, ca plante!
Je pense plutôt que tu voulais envoyer l'intégralité (ou un pointeur
sur...) du tableau au sous-programme.
Est-ce que j'ai bien deviné ce que tu voulais faire?
Par ailleurs je vois que tu utilises des tableaux de taille variable.
C'est pas une super bonne idée. Le C est un vieux langage qui ne possède
pas de sémantique très forte à la Pascal pour le type tableau. Le C
prèfère de loin les tableaux de taille fixe.
Ici moi j'aurais deux #define définissant globalement le nombre de
lignes/colonnes (voir la réponse d'Olivier Miakinen)
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Sauf qu'on ne peut pas déclarer un tableau de taille variable en paramètre
de cette façon. Comme je le disais, le C prèfère de loin les tableaux de
taille fixe. Pour les tailles variables, je pense qu'un pointeur est bien
plus adapté.
// dans cette fonction on accède à l'élement (x,y) par tablo[y][x]
int imp_tablo(int nbligne, int nbcol, int **tablo)
Mais attention car dans ce cas passer le tableau tel qu'initialisé dans le
main() ne sera pas bon. Il faudra passer à imp_tablo en réalité un
pointeur sur les lignes du tableau:
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
// hélas on ne peut pas passer tableau tel
// que à imp_tablo(int, int, int **)
// il faut construire un tableau temporaire
// pour y stocker les pointeurs sur le début
// de ligne
{ // <== on ouvre un bloc pour pouvoir déclarer des vars locales
int *tablo_de_lignes[ligne];
tablo_de_lignes[0] = tableau[0];
tablo_de_lignes[1] = tableau[1];
imp_tablo(ligne, col, tablo_de_lignes);
}
Maintenant il était aussi possible, sachant que le tableau que tu
intialise est organisé ligne à ligne sans trou en mémoire, d'avoir un
autre imp_tablo2 qui prend en argument la taille du tableau et un pointeur
sur la cellule (0,0) du tableau:
// dans cette fonction l'element (x,y) est accédé par tablo[y * nbcol + x]
int imp_tablo2(int nbligne, int nbcol, int *tablo);
int main(int argc, char **argv)
{
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo2(ligne, col, &tableau[0][0]);
}
a+
sam.
Le 22/07/2014 18:48, andre barbaroux a écrit :
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
^^^^
Ici je sens qu'il y a un pb. En effet tu remplies le tableau juste au
dessus et tu passe au sous programme la valeur en cellule (col,ligne).
Donc d'une part le reste du tableau ne sert à rien et on avait pas besoin
de l'initialiser, mais en plus tu accèdes carrément à l’extérieur des
bornes du tableau et ca, ca plante!
Je pense plutôt que tu voulais envoyer l'intégralité (ou un pointeur
sur...) du tableau au sous-programme.
Est-ce que j'ai bien deviné ce que tu voulais faire?
Par ailleurs je vois que tu utilises des tableaux de taille variable.
C'est pas une super bonne idée. Le C est un vieux langage qui ne possède
pas de sémantique très forte à la Pascal pour le type tableau. Le C
prèfère de loin les tableaux de taille fixe.
Ici moi j'aurais deux #define définissant globalement le nombre de
lignes/colonnes (voir la réponse d'Olivier Miakinen)
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Sauf qu'on ne peut pas déclarer un tableau de taille variable en paramètre
de cette façon. Comme je le disais, le C prèfère de loin les tableaux de
taille fixe. Pour les tailles variables, je pense qu'un pointeur est bien
plus adapté.
// dans cette fonction on accède à l'élement (x,y) par tablo[y][x]
int imp_tablo(int nbligne, int nbcol, int **tablo)
Mais attention car dans ce cas passer le tableau tel qu'initialisé dans le
main() ne sera pas bon. Il faudra passer à imp_tablo en réalité un
pointeur sur les lignes du tableau:
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
// hélas on ne peut pas passer tableau tel
// que à imp_tablo(int, int, int **)
// il faut construire un tableau temporaire
// pour y stocker les pointeurs sur le début
// de ligne
{ // <== on ouvre un bloc pour pouvoir déclarer des vars locales
int *tablo_de_lignes[ligne];
tablo_de_lignes[0] = tableau[0];
tablo_de_lignes[1] = tableau[1];
imp_tablo(ligne, col, tablo_de_lignes);
}
Maintenant il était aussi possible, sachant que le tableau que tu
intialise est organisé ligne à ligne sans trou en mémoire, d'avoir un
autre imp_tablo2 qui prend en argument la taille du tableau et un pointeur
sur la cellule (0,0) du tableau:
// dans cette fonction l'element (x,y) est accédé par tablo[y * nbcol + x]
int imp_tablo2(int nbligne, int nbcol, int *tablo);
int main(int argc, char **argv)
{
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo2(ligne, col, &tableau[0][0]);
}
a+
sam.
Le 22/07/2014 18:48, andre barbaroux a écrit :int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
^^^^
Ici je sens qu'il y a un pb. En effet tu remplies le tableau juste au
dessus et tu passe au sous programme la valeur en cellule (col,ligne).
Donc d'une part le reste du tableau ne sert à rien et on avait pas besoin
de l'initialiser, mais en plus tu accèdes carrément à l’extérieur des
bornes du tableau et ca, ca plante!
Je pense plutôt que tu voulais envoyer l'intégralité (ou un pointeur
sur...) du tableau au sous-programme.
Est-ce que j'ai bien deviné ce que tu voulais faire?
Par ailleurs je vois que tu utilises des tableaux de taille variable.
C'est pas une super bonne idée. Le C est un vieux langage qui ne possède
pas de sémantique très forte à la Pascal pour le type tableau. Le C
prèfère de loin les tableaux de taille fixe.
Ici moi j'aurais deux #define définissant globalement le nombre de
lignes/colonnes (voir la réponse d'Olivier Miakinen)
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Sauf qu'on ne peut pas déclarer un tableau de taille variable en paramètre
de cette façon. Comme je le disais, le C prèfère de loin les tableaux de
taille fixe. Pour les tailles variables, je pense qu'un pointeur est bien
plus adapté.
// dans cette fonction on accède à l'élement (x,y) par tablo[y][x]
int imp_tablo(int nbligne, int nbcol, int **tablo)
Mais attention car dans ce cas passer le tableau tel qu'initialisé dans le
main() ne sera pas bon. Il faudra passer à imp_tablo en réalité un
pointeur sur les lignes du tableau:
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
// hélas on ne peut pas passer tableau tel
// que à imp_tablo(int, int, int **)
// il faut construire un tableau temporaire
// pour y stocker les pointeurs sur le début
// de ligne
{ // <== on ouvre un bloc pour pouvoir déclarer des vars locales
int *tablo_de_lignes[ligne];
tablo_de_lignes[0] = tableau[0];
tablo_de_lignes[1] = tableau[1];
imp_tablo(ligne, col, tablo_de_lignes);
}
Maintenant il était aussi possible, sachant que le tableau que tu
intialise est organisé ligne à ligne sans trou en mémoire, d'avoir un
autre imp_tablo2 qui prend en argument la taille du tableau et un pointeur
sur la cellule (0,0) du tableau:
// dans cette fonction l'element (x,y) est accédé par tablo[y * nbcol + x]
int imp_tablo2(int nbligne, int nbcol, int *tablo);
int main(int argc, char **argv)
{
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo2(ligne, col, &tableau[0][0]);
}
a+
sam.
Le 22/07/2014 20:32, Marc Espie écrivit :Antoine etait gene avec tes declarations melangees au code, mais a cote,int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de
raisons...
Oups, je n'avais pas vu le tableau à taille variable... désolé pour la
fausse piste :-(
Antoine
Le 22/07/2014 20:32, Marc Espie écrivit :
Antoine etait gene avec tes declarations melangees au code, mais a cote,
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de
raisons...
Oups, je n'avais pas vu le tableau à taille variable... désolé pour la
fausse piste :-(
Antoine
Le 22/07/2014 20:32, Marc Espie écrivit :Antoine etait gene avec tes declarations melangees au code, mais a cote,int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
ne fonctionnera que dans cet ordre, et que en C99, pour plein de
raisons...
Oups, je n'avais pas vu le tableau à taille variable... désolé pour la
fausse piste :-(
Antoine
Le 22/07/2014 18:48, andre barbaroux a écrit :int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
^^^^
Ici je sens qu'il y a un pb. En effet tu remplies le tableau juste au
dessus et tu passe au sous programme la valeur en cellule (col,ligne).
Donc d'une part le reste du tableau ne sert à rien et on avait pas besoin
de l'initialiser, mais en plus tu accèdes carrément à l’extérieur des
bornes du tableau et ca, ca plante!
Je pense plutôt que tu voulais envoyer l'intégralité (ou un pointeur
sur...) du tableau au sous-programme.
Est-ce que j'ai bien deviné ce que tu voulais faire?
Par ailleurs je vois que tu utilises des tableaux de taille variable.
C'est pas une super bonne idée. Le C est un vieux langage qui ne possède
pas de sémantique très forte à la Pascal pour le type tableau. Le C
prèfère de loin les tableaux de taille fixe.
Ici moi j'aurais deux #define définissant globalement le nombre de
lignes/colonnes (voir la réponse d'Olivier Miakinen)
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Sauf qu'on ne peut pas déclarer un tableau de taille variable en paramètre
de cette façon. Comme je le disais, le C prèfère de loin les tableaux de
taille fixe. Pour les tailles variables, je pense qu'un pointeur est bien
plus adapté.
// dans cette fonction on accède à l'élement (x,y) par tablo[y][x]
int imp_tablo(int nbligne, int nbcol, int **tablo)
Mais attention car dans ce cas passer le tableau tel qu'initialisé dans le
main() ne sera pas bon. Il faudra passer à imp_tablo en réalité un
pointeur sur les lignes du tableau:
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
// hélas on ne peut pas passer tableau tel
// que à imp_tablo(int, int, int **)
// il faut construire un tableau temporaire
// pour y stocker les pointeurs sur le début
// de ligne
{ // <== on ouvre un bloc pour pouvoir déclarer des vars locales
int *tablo_de_lignes[ligne];
tablo_de_lignes[0] = tableau[0];
tablo_de_lignes[1] = tableau[1];
imp_tablo(ligne, col, tablo_de_lignes);
}
Maintenant il était aussi possible, sachant que le tableau que tu
intialise est organisé ligne à ligne sans trou en mémoire, d'avoir un
autre imp_tablo2 qui prend en argument la taille du tableau et un pointeur
sur la cellule (0,0) du tableau:
// dans cette fonction l'element (x,y) est accédé par tablo[y * nbcol + x]
int imp_tablo2(int nbligne, int nbcol, int *tablo);
int main(int argc, char **argv)
{
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo2(ligne, col, &tableau[0][0]);
}
a+
sam.
Le 22/07/2014 18:48, andre barbaroux a écrit :
int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
^^^^
Ici je sens qu'il y a un pb. En effet tu remplies le tableau juste au
dessus et tu passe au sous programme la valeur en cellule (col,ligne).
Donc d'une part le reste du tableau ne sert à rien et on avait pas besoin
de l'initialiser, mais en plus tu accèdes carrément à l’extérieur des
bornes du tableau et ca, ca plante!
Je pense plutôt que tu voulais envoyer l'intégralité (ou un pointeur
sur...) du tableau au sous-programme.
Est-ce que j'ai bien deviné ce que tu voulais faire?
Par ailleurs je vois que tu utilises des tableaux de taille variable.
C'est pas une super bonne idée. Le C est un vieux langage qui ne possède
pas de sémantique très forte à la Pascal pour le type tableau. Le C
prèfère de loin les tableaux de taille fixe.
Ici moi j'aurais deux #define définissant globalement le nombre de
lignes/colonnes (voir la réponse d'Olivier Miakinen)
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Sauf qu'on ne peut pas déclarer un tableau de taille variable en paramètre
de cette façon. Comme je le disais, le C prèfère de loin les tableaux de
taille fixe. Pour les tailles variables, je pense qu'un pointeur est bien
plus adapté.
// dans cette fonction on accède à l'élement (x,y) par tablo[y][x]
int imp_tablo(int nbligne, int nbcol, int **tablo)
Mais attention car dans ce cas passer le tableau tel qu'initialisé dans le
main() ne sera pas bon. Il faudra passer à imp_tablo en réalité un
pointeur sur les lignes du tableau:
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
// hélas on ne peut pas passer tableau tel
// que à imp_tablo(int, int, int **)
// il faut construire un tableau temporaire
// pour y stocker les pointeurs sur le début
// de ligne
{ // <== on ouvre un bloc pour pouvoir déclarer des vars locales
int *tablo_de_lignes[ligne];
tablo_de_lignes[0] = tableau[0];
tablo_de_lignes[1] = tableau[1];
imp_tablo(ligne, col, tablo_de_lignes);
}
Maintenant il était aussi possible, sachant que le tableau que tu
intialise est organisé ligne à ligne sans trou en mémoire, d'avoir un
autre imp_tablo2 qui prend en argument la taille du tableau et un pointeur
sur la cellule (0,0) du tableau:
// dans cette fonction l'element (x,y) est accédé par tablo[y * nbcol + x]
int imp_tablo2(int nbligne, int nbcol, int *tablo);
int main(int argc, char **argv)
{
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo2(ligne, col, &tableau[0][0]);
}
a+
sam.
Le 22/07/2014 18:48, andre barbaroux a écrit :int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
^^^^
Ici je sens qu'il y a un pb. En effet tu remplies le tableau juste au
dessus et tu passe au sous programme la valeur en cellule (col,ligne).
Donc d'une part le reste du tableau ne sert à rien et on avait pas besoin
de l'initialiser, mais en plus tu accèdes carrément à l’extérieur des
bornes du tableau et ca, ca plante!
Je pense plutôt que tu voulais envoyer l'intégralité (ou un pointeur
sur...) du tableau au sous-programme.
Est-ce que j'ai bien deviné ce que tu voulais faire?
Par ailleurs je vois que tu utilises des tableaux de taille variable.
C'est pas une super bonne idée. Le C est un vieux langage qui ne possède
pas de sémantique très forte à la Pascal pour le type tableau. Le C
prèfère de loin les tableaux de taille fixe.
Ici moi j'aurais deux #define définissant globalement le nombre de
lignes/colonnes (voir la réponse d'Olivier Miakinen)
/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/
ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])
Sauf qu'on ne peut pas déclarer un tableau de taille variable en paramètre
de cette façon. Comme je le disais, le C prèfère de loin les tableaux de
taille fixe. Pour les tailles variables, je pense qu'un pointeur est bien
plus adapté.
// dans cette fonction on accède à l'élement (x,y) par tablo[y][x]
int imp_tablo(int nbligne, int nbcol, int **tablo)
Mais attention car dans ce cas passer le tableau tel qu'initialisé dans le
main() ne sera pas bon. Il faudra passer à imp_tablo en réalité un
pointeur sur les lignes du tableau:
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
// hélas on ne peut pas passer tableau tel
// que à imp_tablo(int, int, int **)
// il faut construire un tableau temporaire
// pour y stocker les pointeurs sur le début
// de ligne
{ // <== on ouvre un bloc pour pouvoir déclarer des vars locales
int *tablo_de_lignes[ligne];
tablo_de_lignes[0] = tableau[0];
tablo_de_lignes[1] = tableau[1];
imp_tablo(ligne, col, tablo_de_lignes);
}
Maintenant il était aussi possible, sachant que le tableau que tu
intialise est organisé ligne à ligne sans trou en mémoire, d'avoir un
autre imp_tablo2 qui prend en argument la taille du tableau et un pointeur
sur la cellule (0,0) du tableau:
// dans cette fonction l'element (x,y) est accédé par tablo[y * nbcol + x]
int imp_tablo2(int nbligne, int nbcol, int *tablo);
int main(int argc, char **argv)
{
int ligne = 2;
int col = 3;
// attention, extension du C avec un tableau de taille
// non défini à la compilation.
int tableau[ligne][col];
tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;
imp_tablo2(ligne, col, &tableau[0][0]);
}
a+
sam.