passage d'un tableau dans une fonction

passage d'un tableau dans une fonction - C - Programmation

Marsh Posté le 18-04-2008 à 17:20:53    

voila mon problème : je fais un programme des plus basiques avec une tableau à deux dimensions et je voudrais y calculer quelquechose mais dans une fonction sauf que au moment de compiler on me dit : erreur : la valeur indicée n'est ni un tableau ni un pointeur.
 
alors voila mon programme :

Code :
  1. #include<stdio.h>
  2. void affiche(int tableau[3][2])
  3. {
  4. int i,j;
  5. for(j=0;j<2;j++)
  6. {
  7.  for(i=0;i<3;i++)
  8.  {
  9.   printf("%i \t",tableau[i][j]);
  10.  }
  11.  printf("\n" );
  12. }
  13. }
  14. void calcule(int *p)
  15. {
  16. *p[0][0]=0;
  17. }
  18. int main (void)
  19. {
  20. int tableau[3][2]={{1,90},{3,4},{5,6}};
  21. affiche(tableau);
  22. calcul(tableau);
  23. affiche(tableau);
  24. }

Reply

Marsh Posté le 18-04-2008 à 17:20:53   

Reply

Marsh Posté le 18-04-2008 à 20:54:34    

et ca serait cool de nous dire pr quelle ligne :o

Reply

Marsh Posté le 18-04-2008 à 21:13:10    

Bah, au hasard, je dirais la ligne 19. Bon, ta fonction calcule est foireuse, ce qui est étrange car ta fonction affiche() est correcte. Pourquoi ne pas t'être calqué sur celle-ci pour écrire calcule() ?

Reply

Marsh Posté le 19-04-2008 à 10:47:22    

Tout à ait d'accord avec l'intervenant précédent, il aurait préférable de calquer calcul sur affiche.
 
Sinon, je crois qu'au lieu de

*p[0][0]=0;

il suffirait d'avoir

p[0][0]=0;



Message édité par olivthill le 19-04-2008 à 21:24:15
Reply

Marsh Posté le 19-04-2008 à 11:17:39    

non :
 

p[ 0 + 2 * 0 ] = 0;


 
pour acceder à la case (i,j) depuis un int*, c'est

p[ i + 2 * j ];

Reply

Marsh Posté le 19-04-2008 à 11:20:21    

précision : ici le 2 vient du type int[3][2]
en règle générale, mieux vaut passer un tableau en paramètre plutôt qu'un int*, histoire que ce soit + clair et que ce soit le compilo qui fasse les calculs d'indice. Et évite de passer la première dimention, elle ne sert à rien.
 

void affiche(int tableau[][2])
{
   ...
}

Reply

Marsh Posté le 19-04-2008 à 13:50:15    

Un compilo bien réglé devrait râler ici

Code :
  1. void calcule(int *p)
  2. {
  3. *p[0][0]=0;
  4. }

comme déjà signalé  
et là

Code :
  1. int tableau[3][2]={{1,90},{3,4},{5,6}};
  2. affiche(tableau);
  3. calcul(tableau);   <===

car le prototype de calcul est
void calcule(int *p)


Message édité par Trap D le 19-04-2008 à 13:53:29
Reply

Marsh Posté le 21-04-2008 à 10:20:53    

bon vous pourriez pas etre plus clair parce que c'est pas que je comprend rien mais bon ..... je suis débutant aussi !!! vous pourriez pas me mettre ce que je dois écrire explicitement ?????


Message édité par benjolebarbar le 21-04-2008 à 10:21:26
Reply

Marsh Posté le 21-04-2008 à 10:23:01    

Le forum n'est pas la pour resoudre les exercices a la place de celui qui doit les faire, mais pour expliquer ce qui ne va pas. Voir le reglement du forum a ce sujet.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 21-04-2008 à 11:54:04    

non mais oh t'es fou ou quoi ? je dois faire un démineur et j'ai un probleme pour faire une fonction. j'ai pas bien capté ce qu'on ecrit les autres!! j'ai parler d'un démineur ?? j'ai pas demandé de me faire le programme du demineur non ??? non alors arrete d'agresser les gens espece d'abruti tu connait pas ma vie !!!!!!!!!  
A+

Reply

Marsh Posté le 21-04-2008 à 11:54:04   

Reply

Marsh Posté le 21-04-2008 à 13:04:13    

benjolebarbar a écrit :

non mais oh t'es fou ou quoi ? je dois faire un démineur et j'ai un probleme pour faire une fonction. j'ai pas bien capté ce qu'on ecrit les autres!! j'ai parler d'un démineur ?? j'ai pas demandé de me faire le programme du demineur non ??? non alors arrete d'agresser les gens espece d'abruti tu connait pas ma vie !!!!!!!!!  
A+

Bon ben je crois qu'il n'y a plus rien à ajouter !  

Reply

Marsh Posté le 21-04-2008 à 16:57:33    

# void calcule(int *p)
# {
# *p[0][0]=0;
Il faut que tu passes un tableau en paramètre comme a dit trap d

Reply

Marsh Posté le 21-04-2008 à 17:15:40    

benjolebarbar a écrit :

non mais oh t'es fou ou quoi ? je dois faire un démineur et j'ai un probleme pour faire une fonction. j'ai pas bien capté ce qu'on ecrit les autres!! j'ai parler d'un démineur ?? j'ai pas demandé de me faire le programme du demineur non ??? non alors arrete d'agresser les gens espece d'abruti tu connait pas ma vie !!!!!!!!!  
A+


 
A+ [:elmott]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed