Prob avec le code source

Résolu/Fermé
guigui64 - 18 févr. 2010 à 12:41
 guigui64 - 19 févr. 2010 à 12:22
Bonjour,

#include <iostream>
#include <windows.h>

using namespace std;
const int TAILLE_MAX = 100;

int ok[5][5] = { 17, 24, 1, 8, 15,
23, 5, 7, 14, 16,
4, 6, 13, 20, 22,
10, 12, 19, 21, 3,
11, 18, 25, 2, 9 };

int somme_ligne ( const int i , const int ok , const int taille )
{
int som ;


for( int i=0 ; i < taille ; i++ )
{
for ( int j=0 ; j < taille ; j++ )
{
som = som + ok[j][i] ;
}
}

}

int main()


{
int ok,som,i,j,taille ;
cout << "Quel est la taille de votre matrice" ;
cin >> taille;
somme_ligne( i , ok , taille ) ;
cin >> som;

}
j'ai la meme erreur :
C:\Users\Guillaume\Desktop\hey.cpp In function `int somme_ligne(int, int, int)':
23 C:\Users\Guillaume\Desktop\hey.cpp invalid types `const int[int]' for array subscript
A voir également:

2 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
18 févr. 2010 à 15:10
int somme_ligne ( const int i , const int ok , const int taille )
{
int som ;


for( int i=0 ; i < taille ; i++ )

tu mets un const sur i alors que tu le modifies.... t'as pas le droit il me semble.
de plus, tes variables sont passées sur la pile, donc meme si tu modifies ton i, il ne sera pas modifié dans la fonction appellante
0
en enlevant le const j'obtiens tjrs la meme chose coici le code modifié : c'est mla emme erreur qui sort , aidez moi svp c très important

#include <iostream>
#include <windows.h>

using namespace std;
const int TAILLE_MAX = 100;

int ok[5][5] = { 17, 24, 1, 8, 15,
23, 5, 7, 14, 16,
4, 6, 13, 20, 22,
10, 12, 19, 21, 3,
11, 18, 25, 2, 9 };

int somme_ligne ( const int i , int ok , const int taille )
{
int som,j ;

som = 0 ;
for( int i=0 ; i < taille ; i++ )
{

for ( int j=0 ; j < taille ; j++ )
{
som = som + ok[i][j] ;
}
}
return som;
}

int main()
{
int ok,som,i,j,taille ;
cout << "Quel est la taille de votre matrice" ;
cin >> taille;
somme_ligne( i , ok , taille );
cout << som;
Sleep(10000);
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > guigui64
18 févr. 2010 à 17:38
int somme_ligne ( const int i , int ok , const int taille ) //ici y a du const qui dit "je te jure walou sur jérusalem et la bible je vais pas modifier tes variables" (et on en a rien a foutre car de toute facon on modifierai qu'en local)
{
int som,j ;

som = 0 ;
for( int i=0 ; i < taille ; i++ ) //ici le int i=0redéfini le i qui a été déclaré dans tes parametres d'entrée, et en plus tu le modifie... peut etre voulais tu mettre simplement i=0 ??? mais pourquoi donc avoir passé i dans les paramètres ???
{

for ( int j=0 ; j < taille ; j++ )
{
som = som + ok[i][j] ; //t'as déclaré dans les parametres que ok est un entier, pas un tableau d'entier
}
}
return som;
}


en bref, tu me vires ces const qui sont inutiles, et tu ne fais pas de redéfinition de variables (t'en a sur i et sur ok... en plus ok tu le redéfini meme aps du meme type)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > guigui64
18 févr. 2010 à 17:39
en plus dans le main:
int ok,som,i,j,taille ;
cout << "Quel est la taille de votre matrice" ;
cin >> taille;
somme_ligne( i , ok , taille ); //variables non initialisées
0
guigui64 > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
18 févr. 2010 à 17:41
Pouvez vous me reécrir le code svp? car la j'en peux plus s'il vous plait
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > guigui64
18 févr. 2010 à 17:45
1- je n'ai pas le temps
2- je n'ai pas envie de donner la réponse toute prete
3- tu comprendra pas si tu le fais pas toi meme.

je te dis les erreurs que je vois, tu corrige, tu me dis si ca marche... c'est comme ca que ca marche ..

a l'avenir, utilises les balises < code > (a coté de souligné) pour conserver l'indentation du code ...
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
19 févr. 2010 à 09:11
bien sur, car tu fais de la redéfinition de variables....

#include <iostream>
#include <windows.h>

using namespace std;
const int TAILLE_MAX = 100;

typedef int ok[5][5];
ok ok5[5][5]={ //ici tu crées ok5 qui est visible PARTOUT DANS LE PROGRAMME (variable glaobale car déclaré en dehors d'une fonction)
{17, 24, 1, 8, 15},
{23, 5, 7, 14, 16},
{4, 6, 13, 20, 22},
{10, 12, 19, 21, 3},
{11, 18, 25, 2, 9 }
};

int somme_ligne ( int l , ok ok5 , int taille ) //3:tu récupères ton paramèter nommé ok5 qui est la variable
//remplaces cette ligne par
int somme_ligne ( int l , ok tartiflette), int taille //et ca marchera ...
déclaré dans le main, donc non initialisé
{
int som =0 ;
if ( taille > TAILLE_MAX || l > taille ) {
cout << "Erreur fonction som_ligne : depassement de la taille " << endl ;
exit(-1) ;
}
for (int i=0;i<taille;i++){
som=som + ok5[l][i]; //4: tu travailles avec un tableau qui contient des valeurs complètement aléatoires
}
return som;

}

int main()
{
int som,i,j,l,taille ;
ok ok5; //1:ici tu déclare un objet de type ok, nommé ok5, comme ta vcariable globale, mais celle ci n'est jamais initialisé !!!!
cout << "Quel est la taille de votre matrice" ;
cin >> taille;

som=somme_ligne( l,ok5,taille); //2:tu passes en parametre ok5 qui n'est pas initialisé car la variable locale prime sur la variable globale
cout << som;
Sleep(10000);

}
0
Merci , j'ai terminé le code le voila pour ceux qui auront le meme prob que moi:


#include <iostream>
#include <windows.h>

using namespace std;
const int TAILLE_MAX = 100;

// définition d'une matrice carree d'ordre TAILLE_MAX
typedef int Carre[TAILLE_MAX][TAILLE_MAX];

int sommeLigne(const int i, const Carre ok, const int taille);

int main()
{
Carre ok = { {17, 24, 1, 8, 15 },
{23, 5, 7, 14, 16},
{4, 6, 13, 20, 22},
{10, 12, 19, 21, 3},
{11, 18, 25, 2, 9 }};


// calcule et affiche la somme de chaque ligne
for (int i=0 ; i<5 ; i++)
{
cout <<"somme ligne numero "<<i<<" : "<<sommeLigne(i, ok, 5)<<'\n';
}
Sleep(10000);
}

int sommeLigne(const int i , const Carre ok , const int taille)
{
int som = 0;

for (int j=0 ; j < taille ; j++)
{
som = som + ok[i][j] ;
}
return som;
}
0