Pages : 1
#1 Le 22/02/2007, à 20:05
- amwus
[RESOLU] Problème pointeurs en C
Bonjour. Voila, j'ai un petit problème de pointeurs dans une fonction en C. En fait je n'ai pas que ce problème, mais je vais déjà commencer par celui la !
je poste d'abord le code de la fonction :
static void setAverageVector(float std_vector[], float * avg_vector[])
{
int actualPos = 0;
float temp = 0;
while(actualPos < 12) {
for(int pos = 0; pos <= actualPos; pos++) {
temp = temp + std_vector[pos];
}
float average = temp / actualPos;
*avg_vector[actualPos] = average;
actualPos++;
temp = 0;
}
return;
}
Cette fonction prend en premier argument un tableau source, qui contient 12 élements. Ensuite, elle modifie le tableau pointé dans le second argument en y mettant la moyenne des éléments à la position actuelle. Par exemple, à l'indice 5 du tableau pointé, elle devrait mettre la moyenne des 5 premiers éléments du tableau source. Mais.... Problème, ça ne fonctionne pas. Le programme compile mais j'ai l'erreur suivante :
gcc --std=c99 prexix-average.c
prexix-average.c: In function ‘main’:
prexix-average.c:25: warning: passing argument 2 of ‘setAverageVector’ from incompatible pointer type
Et bien entendu, le programme foire :
Exception en point flottant (core dumped)
Une petite aide serait la bienvenue. Je débute dans les pointeurs en C...
Merci d'avance !
Dernière modification par amwus (Le 23/02/2007, à 13:15)
Black holes are where god divided by zero...
Hors ligne
#2 Le 22/02/2007, à 20:15
- best_friend_fr
Re : [RESOLU] Problème pointeurs en C
Si tu nous envoyais la fonction main aussi, ca pourrait aider
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#3 Le 22/02/2007, à 20:24
- best_friend_fr
Re : [RESOLU] Problème pointeurs en C
Bon, le problème vient des pointeurs de tableaux, et des tableaux de pointeurs.
Ce que tu mets
float * avg_vector[]
est un tableau de pointeurs. Ce que tu veux est un pointeur de tableau
float (* avg_vector)[]
Il faut aussi modifier le ligne
*avg_vector[actualPos] = average;
en
(*avg_vector)[actualPos] = average;
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#4 Le 22/02/2007, à 20:37
- amwus
Re : [RESOLU] Problème pointeurs en C
ha oui, tout de suite ça compile mieux
Mais la fonction ne fait pas ce qu'elle devrait apparement. Je poste le code total pour plus de facilité :
/* prefix-average.c Osmalskyj Julien 2007-02-22
*
*
*/
#include <stdio.h>
#include <stdbool.h>
#define OK
// Functions prototypes
static void resetScan();
static void printVector(float vector[]);
static void setAverageVector(float std_vector[], float (*avg_vector)[]);
int main()
{
float first_vector[] = {5, 6.3, 4.2, 8, 9, 2, 5, 3, 1, 3, 9, 5};
float new_vector[12];
printVector(first_vector);
#ifdef OK
setAverageVector(first_vector, &new_vector);
puts("\n");
printVector(new_vector);
#endif
puts("\n");
return 0;
};
// resetScan() : empty scanf buffer. Returns nothing.
static void resetScan()
{
int carac;
while((carac = getchar()) != '\n' && carac != EOF);
return;
}
// printVector(float vector[]) : prints vector contained in float vector[]. Returns nothing.
static void printVector(float vector[])
{
const int MAX_LENGHT = 12;
for(int count = 0; count < MAX_LENGHT; count++) {
printf("%.2f ", vector[count]);
}
return;
}
/* setAverageVector(float std_vector[], float (*avg_vector)[])
* Creates new vector containing first vector's average values.
* Its calculates the average value of the preceding elements to the actual element
* in the vector.
* Reads the values from std_vector, and set the average into avg_vector.
*/
static void setAverageVector(float std_vector[], float (*avg_vector)[])
{
int actualPos = 0;
float temp = 0;
while(actualPos < 12) {
for(int pos = 0; pos <= actualPos; pos++) {
temp = temp + std_vector[pos];
}
float average = temp / actualPos;
(*avg_vector)[actualPos] = average;
actualPos++;
temp = 0;
}
return;
}
Merci d'avance pour votre aide !
Je précise que ce programme n'est pas terminé. Il en est à son stade de développement ^^ !
Le résultat actuel donne ça :
5.00 6.30 4.20 8.00 9.00 2.00 5.00 3.00 1.00 3.00 9.00 5.00
inf 11.30 7.75 7.83 8.12 6.90 6.58 6.07 5.44 5.17 5.55 5.50
Dernière modification par amwus (Le 22/02/2007, à 20:38)
Black holes are where god divided by zero...
Hors ligne
#5 Le 22/02/2007, à 20:45
- best_friend_fr
Re : [RESOLU] Problème pointeurs en C
Salut
Si, ca marche.
Mais il ne faut pas que tu oublies que à chaque tour, actualPos vaut le numéro de la dernière case, soit 1 de moins que le nombre de cases. Il faut diviser par acrualPos+1.
Tu pourrais éviter aussi cette double boucle, en mettant
static void setAverageVector(float std_vector[], float (*avg_vector)[])
{
int actualPos = 0;
float temp = 0;
while(actualPos < 12) {
temp = temp + std_vector[actualPos];
float average = temp / (actualPos+1);
(*avg_vector)[actualPos] = average;
actualPos++;
}
return;
}
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#6 Le 22/02/2007, à 21:08
- amwus
Re : [RESOLU] Problème pointeurs en C
Ha oui pas bête du tout comme ça. Il ne réinitialise pas temp de cette façon. Plus efficace ! Merci du tuyaux ^^. Mais bon, c'est ma première version, le but est de le rendre efficace j'aurais trouvé
Mais c'est super sympa ça marche en tout cas !
Thanks !
Black holes are where god divided by zero...
Hors ligne