Tableaux
Résolu/Fermé
segueda
Messages postés
14
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
29 avril 2013
-
12 avril 2013 à 11:59
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 29 avril 2013 à 19:20
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 29 avril 2013 à 19:20
A voir également:
- Tableaux
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). - Forum Musique / Radio / Clip
- Citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). ✓ - Forum LibreOffice / OpenOffice
- Calculs peu habituels - Forum LibreOffice / OpenOffice
3 réponses
Utilisateur anonyme
12 avril 2013 à 12:55
12 avril 2013 à 12:55
salut !
déclaration de ta fonction :
en contenu ;
naga
PS : non testé mais ca doit être ca =p, redis moi ;)
déclaration de ta fonction :
int* InverserTableauINT(int* tableausource)
en contenu ;
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément int* tabRetour=new int[nbElements]; for(int i = 0 , j = nbElements-1 ; i < nbElements; i++,j--) tabRetour[i] = tableausource[j]; return tabRetour;
naga
PS : non testé mais ca doit être ca =p, redis moi ;)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
13 avril 2013 à 14:21
13 avril 2013 à 14:21
J'arrive trop tard, mais la réponse est archi-fausse.
Ton code fonctionne peut-être mais risque de planter à un moment ou à un autre.
en contenu ;
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément
2 erreurs :
1ère : Diviser un nombre non nul par le même nombre (sizeof (tableausource)) fait toujours 1. Donc nbElements fera 1.
En fait c'est : int nbElements=sizeof(tableausource)/sizeof(*tableausource);
on divise la taille du tableau par la taille d'un élément du tableau pour connaître le nombre d'élément.
2ème : Sauf qu'en C, on ne peut pas passer de tableau mais un pointeur. De fait sizeof(tableausource) vaudra le même nombre quelque soit la taille du tableau.
La solution consiste à calculer la taille dans le main() (dans la fonction appelante) et à l'envoyer en argument de la fonction.
int* tabRetour=new int[nbElements];
Ce n'est pas du C ça mais du C++. En C, il faut utiliser malloc().
for(int i = 0 , j = nbElements-1 ; i < nbElements; i++,j--)
En C (sauf en C99), on ne peut pas déclarer une variable dans un for. Il faut le faire avant.
Cdlt,
Ton code fonctionne peut-être mais risque de planter à un moment ou à un autre.
en contenu ;
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément
2 erreurs :
1ère : Diviser un nombre non nul par le même nombre (sizeof (tableausource)) fait toujours 1. Donc nbElements fera 1.
En fait c'est : int nbElements=sizeof(tableausource)/sizeof(*tableausource);
on divise la taille du tableau par la taille d'un élément du tableau pour connaître le nombre d'élément.
2ème : Sauf qu'en C, on ne peut pas passer de tableau mais un pointeur. De fait sizeof(tableausource) vaudra le même nombre quelque soit la taille du tableau.
La solution consiste à calculer la taille dans le main() (dans la fonction appelante) et à l'envoyer en argument de la fonction.
int* tabRetour=new int[nbElements];
Ce n'est pas du C ça mais du C++. En C, il faut utiliser malloc().
for(int i = 0 , j = nbElements-1 ; i < nbElements; i++,j--)
En C (sauf en C99), on ne peut pas déclarer une variable dans un for. Il faut le faire avant.
Cdlt,
segueda
Messages postés
14
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
29 avril 2013
3
14 avril 2013 à 04:58
14 avril 2013 à 04:58
merci de ton aide... peux tu m'aider à comprendre ce que tu veux dire dans la deuxième erreur, surtout quand tu dis de calculer la taille dans le main() et de l'envoyer en argument de la fonction.
Merci d'avance.
Merci d'avance.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
Modifié par fiddy le 14/04/2013 à 10:31
Modifié par fiddy le 14/04/2013 à 10:31
Oui l
Dans la fonction inverserTableauINT :
Et pour l'appeler :
Dans la fonction inverserTableauINT :
int* inverserTableauINT(int* tableausource, int szTab) { /*nombre d'éléments dans le tableau : szTab*/ }
Et pour l'appeler :
#define TAILLE 50 int main(void) { int tableausource[TAILLE]; /*ici, tu fais une fonction pour initialiser le tableau*/ inverserTableauINT(tableausource, TAILLE); /*ou inverserTableauINT(tableausource, sizeof tableausource / sizeof (*tableausource));*/ return 0; }
segueda
Messages postés
14
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
29 avril 2013
3
14 avril 2013 à 20:30
14 avril 2013 à 20:30
merci
int nbElements = sizeof(tableausource)/sizeof(tableausource);//récupère le nombre d'élément 2 erreurs : 1ère : Diviser un nombre non nul par le même nombre (sizeof (tableausource)) fait toujours 1. Donc nbElements fera 1.
ah oui là c'est de ma faute, il faut diviser par in sizeof(int) (ce qui revient au même que ta solution à l'exception que toi tu n'as pas besoin du type ... ce qui peu être utile en fait x]).
pour les deux autres points c'est ma faute, l'habitude du c++ =p
bne journée !
segueda
Messages postés
14
Date d'inscription
vendredi 12 avril 2013
Statut
Membre
Dernière intervention
29 avril 2013
3
29 avril 2013 à 11:43
29 avril 2013 à 11:43
Ok les gars merci pour votre aide, voici une autre solution que j'ai trouvé:
void inverserDeuxValeurs(float tab[n], int index1, int index2)
{
int tmp = tab[index1];
tab[index1] = tab[index2];
tab[index2] = tmp;
}
Float inverserTableau(float tab[n], int indexMin, int indexMax)
{
while(indexMin < indexMax)
{
inverserDeuxValeurs(tab, indexMin, indexMax);
++indexMin;
--indexMax;
}
Return tab[n] ;
}
void inverserDeuxValeurs(float tab[n], int index1, int index2)
{
int tmp = tab[index1];
tab[index1] = tab[index2];
tab[index2] = tmp;
}
Float inverserTableau(float tab[n], int indexMin, int indexMax)
{
while(indexMin < indexMax)
{
inverserDeuxValeurs(tab, indexMin, indexMax);
++indexMin;
--indexMax;
}
Return tab[n] ;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
29 avril 2013 à 19:20
29 avril 2013 à 19:20
Return tab [n]; que vaut n ? Comment est-il déclaré ? Et que veux-tu que renvoie ta fonction inverserTableau ?
12 avril 2013 à 13:30
12 avril 2013 à 13:31
12 avril 2013 à 13:31
naga