Comment faire la somme de cette somme

Résolu/Fermé
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 - Modifié par geekat le 26/01/2016 à 11:42
 Utilisateur anonyme - 26 janv. 2016 à 16:56
Bonjour,
J'ai un code qui permet de lire une chaîne (4 doubles) à partir d'un fichier sous forme de vecteurs, ligne par ligne, après chaque clic.
Je souhaiterais faire la somme de ces vecteurs. Comment faire dans la boucle while ou en dehors de while ?
Je parle de la ligne 72.
/* Fichiers d'en-tête */
#include <stdlib.h> // allocation dynamique mémoire
#include <stdio.h> // Gestion erreurs et E/S 
#include <math.h> // Fonctions mathématiques
#include <string.h>
#include <time.h>
#define TAILLE_MAX 4700
// 1ère étape : Chargement du fichier IRIS DATA = OK
int main()
{ /* Descripteur fichier */
    FILE* fichier = NULL;
    /* Ouverture fichier */
    fichier = fopen("iris_data.txt", "r+");
    if (fichier != NULL)
    {
        char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
        char c ;
        //vect : Matrice
        double **vect;
        int i,b=1;
  // On peut lire et écrire dans le fichier
        printf("Le fichier IRIS DATA est ouvert \n");
        
        // Si je n'ai pas assez d'espace pour 150 lignes => pour les 5 colonnes aussi en conséquence
        if ((vect = malloc(150*sizeof(double*)))==NULL)
        {
            printf("Erreur espace");
            b=0;
        }
        //sinon 
        for(i=0;i<150;i++)
        {
            if ((vect[i] = malloc(5*sizeof(double)))==NULL)
            {
                printf("Erreur espace");
                b=0;
            }
        }
        if (b==1)
        {
            printf("Espace alloue \n");

        }
        i=0;
        while(fgets(chaine, TAILLE_MAX, fichier)!= NULL) // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
        {
 /* Ici j'ai fait quelques opérations */  

            /*----------------- Etape 2 : Allocation mémoire-------------------- => OK */
            /* Allocation mémoire d'un tableau de 100 valeurs flottantes */
            if (b==1)
            {
                sscanf(chaine, "%lf ,%lf ,%lf ,%lf", &vect[i][0], &vect[i][1], &vect[i][2], &vect[i][3]);
                printf("Le vecteur de donnees x%d est : %f,%f,%f,%f \n",i, vect[i][0], vect[i][1], vect[i][2], vect[i][3]);
                
    printf("***********************FIN*************************\n");    
    
// Etape 3 : initialisation des vecteurs normalisés
// Vmoy = Somme des wi des colonnes / 150
double Vmoy = 0.0;
// Vmin
double Vmin = Vmoy-0.002;
// Vmax
double Vmax = Vmoy+0.005;
// Calculer Vmoy = Somme (matrice) / 150
double somme1 = 0.0;

/* Ici je dois faire la somme de toutes les somme1 */
somme1 = vect[i][0]+vect[i][1]+vect[i][2]+vect[i][3];
printf("La somme est : %f \n", somme1); ;
    
          
            }
      getchar();
            i++;
    
  }
  fclose(fichier);
    }
    else
    {
        // On affiche un message d'erreur si on veut
        printf("Impossible d'ouvrir le fichier iris_data.txt");
    }
    return 0;
}
A voir également:

1 réponse

Utilisateur anonyme
26 janv. 2016 à 14:59
Salut,

L'idée c'est seulement d'avoir à la fin la somme de tous les vecteurs ?

Si c'est bien le cas il suffit d'avoir ta variable déclarée en dehors du while, à chaque itération tu incrémente avec la somme trouvé, et en sortant de la boucle tu auras la somme totale.

naga
0
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
Modifié par geekat le 26/01/2016 à 15:17
Merci pour ta réponse.
Oui c'est ça, la somme de toute la matrice, soit la somme de tous les vecteurs lignes.
J'ai essayé ce que t'as dit, j'ai déclaré : double somme1 = 0.0; en dehors de la boucle while. Mais j'ai les mêmes résultats, soit la somme des vecteurs un à un 0 puis 1 puis 2 ....

double somme1 = 0.0;
while(fgets(chaine, TAILLE_MAX, fichier)!= NULL)
{
somme1 = vect[i][0]+vect[i][1]+vect[i][2]+vect[i][3];
printf("La somme est : %f \n", somme1);
}
getchar();
i++;
}

EDIT : en sortant de la boucle pour afficher la somme, j'ai la somme de la dernière ligne seulement.
0
Utilisateur anonyme
26 janv. 2016 à 15:35
Re,

Normal la tu n'incrémente pas mais édite la valeur.

ecris plutôt :


somme1 += vect[i][0]+vect[i][1]+vect[i][2]+vect[i][3];


ou encore

somme1 = somme1 + vect[i][0]+vect[i][1]+vect[i][2]+vect[i][3];


naga
0
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 > Utilisateur anonyme
26 janv. 2016 à 15:41
Ah je suis bête :P
Merci beaucoup, ça marche !! :)
0
Utilisateur anonyme
26 janv. 2016 à 15:51
ok parfais, bon dev ;)

naga
0
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017
26 janv. 2016 à 16:14
Merci. J'ai une autre question : finalement, ce n'est pas les sommes des lignes que je dois calculer mais les sommes des colonnes. Mais vu que je parcoure mon fichier par chaîne, lignes par lignes, je devrais changer en colonnes par colonnes. Comment faire ?
0