IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

calcul du somme des valeurs ds un fichier


Sujet :

Visual C++

  1. #1
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut calcul du somme des valeurs ds un fichier
    binjour
    svp j'ai rencontré un probléme lors de calcul d'un somme ds un fichier
    par exemple j'ai un fuchier qui contient des données commes suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     exemple: 
    le fichier qui porte le nom novtest209_3 ( 3 c'est le nombre de ligne du mon fichier) continet ces donnée:
    (3,89)-(56,62)
    (6,45)-(11,34)
    (61,81)-(23,14)
     
    sous forme de (pi,qi)
    je veux calculer la somme de 0=>n-1 de ( pi-qi) et afficher le resultat
    pour cela j'ai crée un fichier et j'ai calculé la moyenne ((a- b)+( c- d))/2 de chaque ligne du mon fichier


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    void PurgeStream(FILE *f)
    {
    int c;
    while((c = fgetc(f)) != '\n' && c != EOF)
    	{}
    }
     
     
    void CalculSFichier(LPCTSTR str)
    {
    	FILE *pfIn = NULL;
    	FILE *pfOut = NULL; 
    	CString strIn;
    	CString strOut;
     
    	strIn.Format("c:\\tatouage\\patchwork\\%s",str); // ouvre premier fichier en lecture
    	pfIn = _tfopen(strIn, _T("r"));
    	if(pfIn == NULL)
    	{
    		printf("impossible d'ouvrir le fichier"); 
    	}
     
    	strOut.Format("c:\\tatouage\\patchwork\\detect%s",str);
    	pfOut = _tfopen(strOut, _T("w")); //ouvre le deuxieme fichier en ecriture
    	if(pfOut == NULL)
    	{
    		printf("impossible d'ouvrir le fichier");
    	}
     
    	//Copie les nombres du premier fichier en les incrémentant tous de 1
    	if((pfIn != NULL) && (pfOut!=NULL))
    	{
    		int a, b, c, d;
    		while(fscanf(pfIn, "(%d,%d)-(%d,%d)", &a, &b, &c, &d)==4)
    		{
    			PurgeStream(pfIn);
     
    			//Traitement:
    			//Incrémente
    		//	a++; b--; c++; d--;
    			int w=((a- b)+( c- d))/2;
     
    			//Ecrit
    			fprintf(pfOut, "%d\n", w);
    		}
    	}
    	//Fermeture du ou des fichiers dont l'ouverture a réussi
    	if(pfIn)
    		fclose(pfIn);
    	if(pfOut)
    		fclose(pfOut);
    }
     
    void CTatoDetecpatchDlg::Oncalculer() 
    {
    	// TODO: Add your control notification handler code here
    	CString str1,str2,str3;
    	int n= static_cast< CListBox * >(GetDlgItem(IDC_LIST1))->GetCurSel();
    	// ici je reccupere le nom du fichier pour l'ouvrir
     
    	if(n!=LB_ERR) static_cast< CListBox * >(GetDlgItem(IDC_LIST1))->GetText(n,str1);
     
    	CalculSFichier( str1);
    }
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    le nom du mon fichier est: detectnov209_3 porte les donnés:
    -46
    -31
    -5
    mon probléme c 'est comment je peux calculer la somme de ces valeurs S
    est ce que je dois creer encore un autre fichier??
    merci d'avance

  2. #2
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    j'ai resolu le probléme de calcul de S
    mais svp commet je peux afficher cette valeur ds ma boite dialog
    ds un editBox par exemple//

  3. #3
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    j'essaiyé de faire ce truc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    void CTatoDetecpatchDlg::Oncalculer() 
    {
    	// TODO: Add your control notification handler code here
    	CString str1,str2,str3;
    	int w=0;
    	int n= static_cast< CListBox * >(GetDlgItem(IDC_LIST1))->GetCurSel();
    	// ici je reccupere le nom du fichier pour l'ouvrir
     
    	if(n!=LB_ERR) static_cast< CListBox * >(GetDlgItem(IDC_LIST1))->GetText(n,str1);
     
    	CalculSFichier( str1,w);
    	str2.Format("Resultat de comptage : %d",w);	
    	//	m_Rs = str2;
    		SetDlgItemText(IDC_EDIT1,str2);
    		UpdateData(FALSE);
     
    }
    mais le probléme que j'affiche juste la valeur 0( valeur initialle de w)
    est qq1 peut m'aider!

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    ce n'est pas tres clair tout ça !
    qu'elle signature à la fonction CalculSFichier j'espère que c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void CalculSFichier(int &rn);
    sinon ça ne pourra pas fonctionner...
    il te faut un passage d'argument par référence et non par valeur

  5. #5
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    j'ai fait ce passage là, mais toujous ce que j'affiche c'est 0
    voici les codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
    void PurgeStream(FILE *f)
    {
    int c;
    while((c = fgetc(f)) != '\n' && c != EOF)
    {}
    }
     
     
    void CalculSFichier(LPCTSTR str, int &w)
    {
    FILE *pfIn = NULL;
    FILE *pfOut = NULL; 
    CString strIn;
    CString strOut;
     
    strIn.Format("c:\\tatouage\\patchwork\\%s",str); // ouvre premier fichier en lecture
    pfIn = _tfopen(strIn, _T("r"));
    if(pfIn == NULL)
    {
    printf("impossible d'ouvrir le fichier"); 
    }
     
    strOut.Format("c:\\tatouage\\patchwork\\detect%s",str);
    pfOut = _tfopen(strOut, _T("w")); //ouvre le deuxieme fichier en ecriture
    if(pfOut == NULL)
    {
    printf("impossible d'ouvrir le fichier");
    }
     
    //Copie les nombres du premier fichier en les incrémentant tous de 1
    if((pfIn != NULL) && (pfOut!=NULL))
    {
    int a, b, c, d;
    int w=0;
    while(fscanf(pfIn, "(%d,%d)-(%d,%d)", &a, &b, &c, &d)==4)
    {
    PurgeStream(pfIn);
     
    //Traitement:
     
     
    w+=((a- b)+( c- d))/2;
     
     
    }
    fprintf(pfOut, "%d\n", w);
     
    }
    //Fermeture du ou des fichiers dont l'ouverture a réussi
    if(pfIn)
    fclose(pfIn);
    if(pfOut)
    fclose(pfOut);
    }
    et j'appellerai la fonction ici

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void CTatoDetecpatchDlg::Oncalculer() 
    {
    	// TODO: Add your control notification handler code here
    	CString str1,str2,str3;
    	int w=0;
    	int n= static_cast< CListBox * >(GetDlgItem(IDC_LIST1))->GetCurSel();
    	// ici je reccupere le nom du fichier pour l'ouvrir
     
    	if(n!=LB_ERR) static_cast< CListBox * >(GetDlgItem(IDC_LIST1))->GetText(n,str1);
     
    	CalculSFichier( str1,w);
    	str2.Format("Resultat de comptage : %d",w);	
    	//	m_Rs = str2;
    		SetDlgItemText(IDC_EDIT1,str2);
    		UpdateData(FALSE);
     
    }
    toujours la valeur 0

  6. #6
    Membre du Club Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    Points : 47
    Points
    47
    Par défaut
    maintenat c bon,
    j'affiche ce que je voulais
    au fait j'ai trompée
    je devais eliminer ce int w=0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    void CalculSFichier(LPCTSTR str, int &w)
    {
    	FILE *pfIn = NULL;
    	FILE *pfOut = NULL; 
    	CString strIn;
    	CString strOut;
     
    	strIn.Format("c:\\tatouage\\patchwork\\%s",str); // ouvre premier fichier en lecture
    	pfIn = _tfopen(strIn, _T("r"));
    	if(pfIn == NULL)
    	{
    		printf("impossible d'ouvrir le fichier"); 
    	}
     
    	strOut.Format("c:\\tatouage\\patchwork\\detect%s",str);
    	pfOut = _tfopen(strOut, _T("w")); //ouvre le deuxieme fichier en ecriture
    	if(pfOut == NULL)
    	{
    		printf("impossible d'ouvrir le fichier");
    	}
     
    	//Copie les nombres du premier fichier en les incrémentant tous de 1
    	if((pfIn != NULL) && (pfOut!=NULL))
    	{
    		int a, b, c, d;
    		 w=0;		while(fscanf(pfIn, "(%d,%d)-(%d,%d)", &a, &b, &c, &d)==4)
    		{
    			PurgeStream(pfIn);
    			
    			//Traitement:
    		
    
    			 w+=((a- b)+( c- d))/2;
    			
    	
    		}
    	fprintf(pfOut, "%d\n", w);
    		
    	}
    	//Fermeture du ou des fichiers dont l'ouverture a réussi
    	if(pfIn)
    		fclose(pfIn);
    	if(pfOut)
    		fclose(pfOut);
    }
    je te remercie Mr Farscape du mon coeur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de la somme des valeurs d un champ
    Par JeanduB dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 01/04/2008, 09h20
  2. Réponses: 9
    Dernier message: 18/02/2008, 11h25
  3. Réponses: 3
    Dernier message: 24/08/2006, 11h56
  4. [VB]vérifier des valeurs dans un fichiers et trier
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/02/2006, 17h35
  5. Somme des valeurs de certaines lignes
    Par Tartenpion dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/02/2006, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo