begin process at 2012 02 10 06:52:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CALCULETTE

CALCULETTE


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Initié Date de création :03/08/2002 Date de mise à jour :03/08/2002 15:57:21 Vu :3 700

Auteur : THEREALKILLER

Ecrire un message privé
Site perso
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

C'est une calculette sur laquelle je m'entraine pour apprendre le c++.Cet exo est tire du livre visual c++.

Source

  • #include <iostream>
  • #include <cstdlib>
  • #include <cctype>
  • using namespace std;
  • void espace(char *str);
  • double expr (char *str);
  • double term(char *str,int& index);
  • double nombre (char *str,int& index);
  • const int max = 80;
  • int main()
  • {
  • char buffer[max]={0};
  • cout<<endl
  • <<"Salut!Saisir"
  • <<endl;
  • for(;;)
  • {
  • cin.getline(buffer,sizeof buffer);
  • espace(buffer);
  • if (!buffer[0])
  • return 0;
  • cout << "\t="<<expr(buffer)
  • <<endl<<endl;
  • }
  • }
  • // efface les espace
  • void espace (char *str)
  • {
  • int i=0;
  • int j=0;
  • while ((*(str + i)=*(str + j++))!='\0')
  • if (*(str + i)!=' ')
  • i++;
  • return;
  • }
  • //extrait le premier term et fait l'operation
  • double expr (char *str)
  • {
  • double valeur=0.0;
  • int index=0;
  • valeur = term(str,index);
  • for(;;)
  • {
  • switch(*(str + index++))
  • {
  • case '\0':
  • return valeur;
  • break;
  • case '+':
  • valeur+=term(str,index);
  • break;
  • case '-':
  • valeur-=term(str,index);
  • break;
  • default:
  • cout<<endl
  • <<"Erreur mec #?~§!!!!"
  • <<endl;
  • exit(1);
  • }
  • }
  • }
  • //operation mult et div
  • double term(char *str,int& index)
  • {
  • double valeur =0.0;
  • valeur = nombre(str,index);
  • while ((*(str + index) =='*') || (*(str + index) == '/'))
  • {
  • if (*(str + index) =='*')
  • valeur *=nombre(str, ++index);
  • if (*(str + index) =='/')
  • valeur /=nombre(str, ++index);
  • }
  • return valeur;
  • }
  • //du char en nombre puis la virgule
  • double nombre (char *str,int &index)
  • {
  • double valeur =0.0;
  • /*if(*(str+index) == '(')
  • {
  • char* psubstr =0;
  • psubstr = extract(str,++index);
  • valeur=expr(psubstr)
  • delete[]psubstr;
  • return valeur;
  • }*/
  • while (isdigit(*(str + index)))
  • valeur = 10*valeur + (*(str + index++) - 48);
  • if (*(str + index )!='.')
  • return valeur ;
  • double factor = 1.0;
  • while (isdigit(*(str + (++index))))
  • {
  • factor *=0.1;
  • valeur = valeur + (*(str + index)-48)*factor;
  • }
  • return valeur;
  • }
#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

void espace(char *str);
double expr (char *str);
double term(char *str,int& index);
double nombre (char *str,int& index);

const int max = 80;




int main()
{
	char buffer[max]={0};

	cout<<endl
		<<"Salut!Saisir"
		<<endl;

	for(;;)
	{
		cin.getline(buffer,sizeof buffer);
		espace(buffer);

		if (!buffer[0])
			return 0;

		cout << "\t="<<expr(buffer)
			<<endl<<endl;
	}
}

// efface les espace 
void espace (char *str)
{
	int i=0;
	int j=0;

	while ((*(str + i)=*(str + j++))!='\0')

		if (*(str + i)!=' ')
			i++;
			
		return;
}

//extrait le premier term et fait l'operation
double expr (char *str)
{
	double valeur=0.0;
		int index=0;
	valeur = term(str,index);
	
	for(;;)
	{
		switch(*(str + index++))
		{
				case '\0':
				return valeur;
				break;

				case '+':
					valeur+=term(str,index);
					break;

				case '-':
					valeur-=term(str,index);
					break;

				default:
					cout<<endl
						<<"Erreur mec #?~§!!!!"
						<<endl;
							
					exit(1);
		}
	}
}
					
//operation mult et div				
double term(char *str,int& index)
{
	double valeur =0.0;
	valeur = nombre(str,index);
	
	while ((*(str + index) =='*') || (*(str + index) == '/'))     
	{
		if (*(str + index) =='*')
			valeur *=nombre(str, ++index);

			if (*(str + index) =='/')
				valeur /=nombre(str, ++index);
	}
	return valeur;
}

//du char en nombre puis la virgule
double nombre (char *str,int &index)
{
	double valeur =0.0;

	/*if(*(str+index) == '(')
	{
		char* psubstr =0;
		psubstr = extract(str,++index);
		valeur=expr(psubstr)
			delete[]psubstr;
		return valeur;
	}*/

	while (isdigit(*(str + index)))
		valeur = 10*valeur + (*(str + index++) - 48);

	if (*(str + index )!='.')
		return valeur ;
	
	double factor = 1.0;
	while (isdigit(*(str + (++index))))
	{
		factor *=0.1;
		valeur = valeur + (*(str + index)-48)*factor;
	}
	
		return valeur;
}


 Conclusion

La prochaine fois je jererai les parenthéses car c ce kilya de + dur a realiser ds une calculette .Voila bonne prog !!


 Sources du même auteur

TUTORIAL BTS 2EME ANN&#201;E
CRYPTAGE D'UN TEXTE
Source avec Zip REPERTOIRE V2
MOYENNE
HEURE ET LA DATE

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

Commentaire de NettoyeurFantome le 05/08/2002 03:07:55

tu rigoles ou quoi ?!?

Je fais moi aussi une calcu et le plus dur c pas ça : le plus dur c de faire la descente récursive (ce que tu as réussi) et après, tu rajoutes une autre fonction para appellée dans nombre et ça roule ma poule !

Avec ça tu peux même faire des parenthèses imbriquées !

Commentaire de THEREALKILLER le 05/08/2002 22:33:18

C koi la descente recursive ????
Tu sais ca ne fait ke kelke mois (3) ke je me suis au c++ !!

Commentaire de NettoyeurFantome le 09/08/2002 16:35:59

bein c ce que t'as fait : une fonction qui en appelle une, qui en appelle une, etc. Une technique de prog ! Je suis en train de coder une calcu, si tu veux participer : ibarz.julien@free.fr.

Et franchement, avec les parenthèses, la technique est simple : dans la fonction nombre, t'appelle la fonction qui traite les parenthèses, si elle trouve, elle appelle la fonction expr ! Aussi simple que ça !

Tchao

Commentaire de THEREALKILLER le 10/08/2002 21:14:27

Voila mon mail supersaien4@hotmail.com g msn
cioa

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,916 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales