Programmation en C++
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Programmation en C++



  1. #1
    invite93845cf6

    Programmation en C++


    ------

    Bonjour à tous,
    Le but de ce programme écrit en C++ est d'inscrire des notes dans un tableau. Après cela, on calcule la moyenne, on recherche le mini et le maxi puis, on recherche une valeur parmis les notes saisies. On souhaite pouvoir la modifier ou non et éventuelle recalculer la nouvelle moyenne. C'est sur ces derniers points que mon programme fait un peu n'importe quoi.
    Je souhaiterai donc savoir ce qui ne va pas.
    Merci d'avance de votre aide.

    /
    Code:
    / exo 5.4.cpp : tableau de notes.
    //
    
    #include "stdafx.h"
    #include<iostream>
    #include<iomanip>
    using namespace std;
    
    
    int main()
    {
                int t[50],Notes,NbNotes,compteur,variable,somme,min,max,valeur,valeurn;
    	int memvaleuroui;
    	int a;
    	int i,somme1,somme2,sommenew,moyennenew,noter,noter2;
    	double moyenne;
    	int prog,rep;
    	NbNotes=1;
    
    	do{
    		cout<<" Nombre de Notes ?"<<endl;
    		cin>>NbNotes;
    	}while((NbNotes<1)||(NbNotes>50));
    
    	for(compteur=0;compteur<NbNotes;compteur++)
    	{
    		do{
    			cout<<" Note ? "<<endl;
    			cin>>Notes;
    		}while((Notes<0)||(Notes>20));
    		t[compteur]=Notes;
    	}
    	cout<<endl;
    	for(compteur=0;compteur<NbNotes;compteur++)
    	{
    		cout<<t[compteur]<<endl;
    	}
    	variable=1;
    	compteur=0;
    	somme=0;
    	while(variable<=NbNotes)
    	{
    		somme=t[compteur]+somme;
    		variable++;
    		compteur++;
    	}
    	moyenne=somme/NbNotes;
    	cout<<" Moyenne = "<<moyenne<<endl;
    
    	max=0;
    	for(compteur=0;compteur<NbNotes;compteur++)
    	{
    		if(t[compteur]>max)
    		{
    			max=t[compteur];
    		}
    	}
    	cout<<endl;
    	cout<<" max = "<<max<<endl;
    	min=max;
    	for(compteur=0;compteur<NbNotes;compteur++)
    	{
    		if(t[compteur]<min)
    		{
    			min=t[compteur];
    		}
    	}
    	cout<<" min = "<<min<<endl;
    
    	cout<<" Valeur ? "<<endl;
    	cin>>valeur;
    	for(compteur=0;compteur<NbNotes;compteur++)
    	{
    		if(t[compteur]==valeur)
    		{
    			memvaleuroui=t[compteur];
    		}
    		
    	}
    	if(memvaleuroui==valeur)
    	{
    		cout<<" La valeur "<<memvaleuroui<<" est bien presente "<<endl;
    	}
    	else
    	{
    		cout<<" La valeur "<<valeur<<" n'est pas presente"<<endl;
    	}
    	cout<<endl;
    
    	cout<<" Vous pouvez chercher si toutes les notes sont superieures a une valeur choisie. Veuillez inscrire cette valeur. "<<endl;
    	cin>>valeurn;
    	if(valeurn<min)
    		{
    			cout<<" Toutes les notes sont supérieures a la valeur "<<valeurn<<" . "<<endl;
    		}
    	else
    	{
    		cout<<" Toutes les notes ne sont pas superieures a cette valeur."<<endl;
    	}
    	cout<<endl;
    	prog=1;
    	while(prog!=0)
    	{
    		cout<<"Voulez-vous executer le programme ? Tapez 0 pour l'arreter et 1 pour continuer."<<endl;
    		cin>>prog;
    		if(prog==1)
    		{
    			for(compteur=0;compteur<NbNotes;compteur++)
    			{
    
    				cout<<" Note recherchee ? "<<endl;
    				cin>>noter;
    				rep=1;
    				if(t[compteur]!=noter)
    				{
    					cout<<" La note recherchee n'existe pas."<<endl;
    					cout<<" Fin du programme "<<endl;
    				}
    				if(t[compteur]==noter)
    				{
    					while(rep!=0)
    					{
    						cout<<" Voulez-vous modifier la note ? Tapez 1 pour oui et 0 pour non. "<<endl;
    						cin>>rep;
    						if(rep==1)
    						{
    							cout<<" Saisissez la nouvelle valeur."<<endl;
    							cin>>noter2;
    							i=0;
    							somme1=0;
    							while(i<compteur)
    							{
    								somme1=t[i]+somme1;
    								i++;
    							}
    							somme2=0;
    							i=i+2;
    							while((i>compteur)&&(i<NbNotes))
    							{
    								somme2=t[i]+somme2;
    								i++;
    							}
    						sommenew=somme1+somme2+noter2;
    						moyennenew=sommenew/NbNotes;
    						cout<<" La nouvelle moyenne est: "<<moyennenew<<"."<<endl;
    						}
    					}
    				}
    			}
    			compteur=NbNotes;
    		}
    	} 
    		
    		
    			
    	cout<<"Fin du programme."<<endl;
    	cin>>a;
    }
    Merci d'utiliser les différentes balises à ta disposition. Dans ton cas, il aurait fallu utiliser la balise "Code" symbolisée par ceci:

    yoda1234.

    -----
    Dernière modification par yoda1234 ; 22/02/2010 à 09h33.

  2. #2
    invite93845cf6

    Re : Programmation en C++

    Citation Envoyé par SebMC12 Voir le message
    Merci d'utiliser les différentes balises à ta disposition. Dans ton cas, il aurait fallu utiliser la balise "Code" symbolisée par ceci:

    yoda1234.
    Ah merci yoda dsl j'y avais pas pensé.
    Quelqu'un pourrait-il m'aider parce-que j'y ai passé au moins 4h dessus et je vois pas la solution. C'est la dernière partie lorsqu'on demande à rechercher une valeur, modifier la note et recalculer la moyenne qui me pose problème.
    Merci beaucoup.
    Dernière modification par yoda1234 ; 22/02/2010 à 17h35.

  3. #3
    Jack
    Modérateur

    Re : Programmation en C++

    On peut savoir ce qui ne va pas exactement. Donne une séquence qui ne marche pas par exemple.

    En passant, tu aimes bien te compliquer la vie. Par exemple:
    Code:
        while(variable<=NbNotes)
        {
            somme=t[compteur]+somme;
            variable++;
            compteur++;
        }
    Ce n'est pas plus simple comme çà?
    Code:
    for (compteur=0; compteur<NbNotes; compteur++)
       somme = t[compteur];
    Je te conseille également de commenter tes programmes si tu veux qu'on puisse les comprendre. Rien de plus énervant de devoir chercher à quoi sert telle ou telle variable, pour ce etst, etc.

    A+

    PS C'est un hasard ou bien ...
    http://forums.futura-sciences.com/lo...l-express.html

  4. #4
    invite93845cf6

    Re : Programmation en C++

    Citation Envoyé par Jack Voir le message
    On peut savoir ce qui ne va pas exactement. Donne une séquence qui ne marche pas par exemple.

    En passant, tu aimes bien te compliquer la vie. Par exemple:
    Code:
        while(variable<=NbNotes)
        {
            somme=t[compteur]+somme;
            variable++;
            compteur++;
        }
    Ce n'est pas plus simple comme çà?
    Code:
    for (compteur=0; compteur<NbNotes; compteur++)
       somme = t[compteur];
    Je te conseille également de commenter tes programmes si tu veux qu'on puisse les comprendre. Rien de plus énervant de devoir chercher à quoi sert telle ou telle variable, pour ce etst, etc.

    A+

    PS C'est un hasard ou bien ...
    http://forums.futura-sciences.com/lo...l-express.html
    En effet c'est plus simple comme ça et non, c'est un hasard pour répondre à ta dernière question. Sinon il est vrai que dès fois je ne sais pas si il faut mettre un while ou un for.
    Sinon le problème est dans la séquence suivante : Il va faire le premier if mais, il n'execute pas le deuxième if mais dans le cas où la note existe bien.
    Il y a aussi un autre problème. J'ai déclaré mes variables somme et NbNote sous forme entières et ma variable moyenne en réel. Le résultat apparaît sous forme entière. Comment faire pour qu'il apparaisse sous forme réelle ?
    Merci.

    Code:
    for(compteur=0;compteur<NbNotes;compteur++)
    			{
    
    				cout<<" Note recherchee ? "<<endl;
    				cin>>noter;
    				rep=1;
    				if(t[compteur]!=noter)
    				{
    					cout<<" La note recherchee n'existe pas."<<endl;
    					cout<<" Fin du programme "<<endl;
    				}
    				if(t[compteur]==noter)
    				{
    					while(rep!=0)
    					{
    						cout<<" Voulez-vous modifier la note ? Tapez 1 pour oui et 0 pour non. "<<endl;
    						cin>>rep;
    						if(rep==1)
    						{
    							cout<<" Saisissez la nouvelle valeur."<<endl;
    							cin>>noter2;
    							i=0;
    							somme1=0;
    							while(i<compteur)
    							{
    								somme1=t[i]+somme1;
    								i++;
    							}
    							somme2=0;
    							i=i+2;
    							while((i>compteur)&&(i<NbNotes))
    							{
    								somme2=t[i]+somme2;
    								i++;
    							}
    						sommenew=somme1+somme2+noter2;
    						moyennenew=sommenew/NbNotes;
    						cout<<" La nouvelle moyenne est: "<<moyennenew<<"."<<endl;
    						}
    					}
    				}
    			}
    			compteur=NbNotes;
    		}
    	}

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Programmation en C++

    Sinon il est vrai que dès fois je ne sais pas si il faut mettre un while ou un for.
    En C, on peut si on veut utiliser indifféremment un "for", un "do ... while" ou un "while".
    Mais d'une manière générale on utilise un "for" lorsqu'on connait le nombre d'itérations à réaliser, ce qui est le cas dans ton programme.

    Il y a aussi un autre problème. J'ai déclaré mes variables somme et NbNote sous forme entières et ma variable moyenne en réel. Le résultat apparaît sous forme entière. Comment faire pour qu'il apparaisse sous forme réelle ?
    Le problème vient de cette ligne:
    Code:
        moyenne=somme/NbNotes;
    En C, pour une affectation, il y a évaluation de l'expression du membre de gauche, en l'occurrence "somme/NbNotes". somme et NbNotes étant toutes 2 entières, le compilateur va décider d'effectuer une division entière. Une fois le résultat obtenu, le compilateur va "voir" que cette valeur doit être affectée à un double et va donc être convertie.

    Il faut donc forcer le compilateur à effectuer une division en "double". Pour cela il suffit qu'un des des termes de la division soit du type double. Un simple cast permet ceci.
    Code:
        moyenne=(double)somme/NbNotes;
    Là, j'ai "casté" somme en double par exemple.

    A+

  7. #6
    ProgVal

    Re : Programmation en C++

    Bonjour,

    Plutôt que d'écrire un énorme bloc de code, essayes de le décomposer en fonctions.
    Ça sera plus compréhensible, et beaucoup plus facile à déboguer.

    Cordialement,
    ProgVal

  8. #7
    invite93845cf6

    Re : Programmation en C++

    Citation Envoyé par ProgVal Voir le message
    Bonjour,

    Plutôt que d'écrire un énorme bloc de code, essayes de le décomposer en fonctions.
    Ça sera plus compréhensible, et beaucoup plus facile à déboguer.

    Cordialement,
    ProgVal
    Désolé mais on n'a pas encore vu les fonctions. Qu'est-ce que c'est ?
    Merci.

  9. #8
    invite93845cf6

    Re : Programmation en C++

    Citation Envoyé par Jack Voir le message
    En C, on peut si on veut utiliser indifféremment un "for", un "do ... while" ou un "while".
    Mais d'une manière générale on utilise un "for" lorsqu'on connait le nombre d'itérations à réaliser, ce qui est le cas dans ton programme.

    Le problème vient de cette ligne:
    Code:
        moyenne=somme/NbNotes;
    En C, pour une affectation, il y a évaluation de l'expression du membre de gauche, en l'occurrence "somme/NbNotes". somme et NbNotes étant toutes 2 entières, le compilateur va décider d'effectuer une division entière. Une fois le résultat obtenu, le compilateur va "voir" que cette valeur doit être affectée à un double et va donc être convertie.

    Il faut donc forcer le compilateur à effectuer une division en "double". Pour cela il suffit qu'un des des termes de la division soit du type double. Un simple cast permet ceci.
    Code:
        moyenne=(double)somme/NbNotes;
    Là, j'ai "casté" somme en double par exemple.

    A+
    Merci beaucoup. Pour le reste j'ai du sans doute faire des erreurs bêtes donc je vais essayer de corriger ça.
    A++

  10. #9
    Jack
    Modérateur

    Re : Programmation en C++

    En C, pour une affectation, il y a évaluation de l'expression du membre de gauche
    En me relisant, je viens de constater une erreur. Il fallait lire "membre de DROITE" évidemment.

    A+

  11. #10
    ProgVal

    Re : Programmation en C++

    Citation Envoyé par SebMC12 Voir le message
    Désolé mais on n'a pas encore vu les fonctions. Qu'est-ce que c'est ?
    Merci.
    C'est un élément de base de la programmation. Ça sert à décomposer le code en petit morceau.

    Par exemple, main, c'est une fonction (un peu particulière, car elle se lance automatiquement). Les autres fonctions, on les appelle à partir, soit de main, soit d'autres fonctions.
    Je te laisse googler

Discussions similaires

  1. Programmation
    Par invite1dee7ead dans le forum Logiciel - Software - Open Source
    Réponses: 24
    Dernier message: 03/01/2009, 10h48
  2. programmation en C
    Par invited2564438 dans le forum Électronique
    Réponses: 5
    Dernier message: 24/05/2007, 17h33
  3. programmation
    Par invite92c7ec27 dans le forum Électronique
    Réponses: 3
    Dernier message: 24/03/2006, 23h00
  4. Programmation en C
    Par KHEOPS1982 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 21/02/2006, 13h23
Découvrez nos comparatifs produits sur l'informatique et les technologies.