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 �clair� Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    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 �clair� Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    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 �clair� Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    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
    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 �clair� Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    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 �clair� Avatar de meera
    Inscrit en
    Mai 2006
    Messages
    294
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 294
    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