Convertisseur "beaufort, km/h, m/s", orienté objet, console dos

Soyez le premier à donner votre avis sur cette source.

Vue 12 292 fois - Téléchargée 195 fois

Description

Ce programme sert à convertir les differentes unités dans laquelle les forces des vents sont données.
C'est aussi un programme très simple qui permettra à ceux qui ne maitrisent pas la programmation objet de comprendre les bases : encapsulation, objet dynamique, "setter/getter", etc.

Source / Exemple :


/*
Yo ! Tout le monde !
Alors, c'est un programme réalisé parce que je fais un stage de catamaran
(du hobit-cat 15 pour être precis) et que j'en ai marre de voir ecris les forces
des vents en toutes les unitées possibles et inimaginables.
Grâce à ce programme ecris en C++ et tres orienté objet, plus de problemes !
On indique la valeur du vent dans l'unité que l'on veut et hop ! La machine
nous sort les autres ! Elle est pas belle la vie ?

Kenji,
progra.... euhh bidouilleur en informatique :D

  • /
#include <iostream> //pour les "cout", etc #include <stdlib.h> #include <conio.h> //pour le getch() using namespace std; //la norme, toujours la norme... class Vent //classe contenant toutes les fonctions du programme (sauf "main") :D { private : float km; float ms; float beaufort; char type; public : void kmtoms(); void mstokm(); void mstobeaufort(); void beauforttoms(); void calculer(); void afficher(); inline void settype(char i){this->type = i;}; inline void setms(float i) {this->ms = i;}; inline void setkm(float i) {this->km = i;}; inline void setbeaufort(float i) {this->beaufort = i;}; inline float gettype() { return this->type; }; }; void Vent::kmtoms() { this->ms = (this->km*1000)/3600; //on multiplie par 1000 et on divise par 3600 } void Vent::mstokm() { this->km = (this->ms*3600)/1000; // on divise par 1000 et on multiplie par 3600 } void Vent::mstobeaufort() //fonction utilisant les equivalences beaufort-> m/s { if(this->ms<0.5) // si le vent va a moins de 0.5 m/s { this->beaufort=0; // il vaut 0 sur l'echelle beaufort return; // on quitte la fonction } if(this->ms<1.5) { this->beaufort=1; return; } if(this->ms<3) { this->beaufort=2; return; } if(this->ms<4.5) { this->beaufort=3; return; } if(this->ms<7) { this->beaufort=4; return; } if(this->ms<9) { this->beaufort=5; return; } if(this->ms<11) { this->beaufort=6; return; } if(this->ms<14) { this->beaufort=7; return; } if(this->ms<17) { this->beaufort=8; return; } if(this->ms<20) { this->beaufort=9; return; } if(this->ms<25) { this->beaufort=10; return; } if(this->ms<30) { this->beaufort=11; return; } if(this->ms>=30) { this->beaufort=12; return; } system("cls"); //on efface l'ecran cout << "Erreur !!! Vos valeurs ne sont pas correctes !\n"; //on previent l'utilisateur system("PAUSE"); // on attend qu'il presse "entrée" exit(0); // on quitte le programme ! Bien fait pour lui :D } void Vent::beauforttoms() //fonction utilisant les equivalences beaufort-> m/s { if(this->beaufort==0) //si le vent vaut 0 sur l'echelle beaufort : { this->ms=0.5; //il va environ a 0.5 m/s return; // on quitte la fonction } if(this->beaufort==1) { this->ms=1.5; return; } if(this->beaufort==2) { this->ms=3; return; } if(this->beaufort==3) { this->ms=4.5; return; } if(this->beaufort==4) { this->ms=7; return; } if(this->beaufort==5) { this->ms=9; return; } if(this->beaufort==6) { this->ms=11; return; } if(this->beaufort==7) { this->ms=14; return; } if(this->beaufort==8) { this->ms=17; return; } if(this->beaufort==9) { this->ms=20; return; } if(this->beaufort==10) { this->ms=25; return; } if(this->beaufort==11) { this->ms=30; return; } if(this->beaufort==12) { this->ms=40; return; } system("cls"); //on efface l'ecran cout << "Erreur !!! Vos valeurs ne sont pas correctes !\n"; //on previent l'utilisateur system("PAUSE"); // on attend qu'il presse "entrée" exit(0); // on quitte le programme ! Bien fait pour lui :D } void Vent::calculer() //pour tout calculer { if(this->km!=0 || this->type=='k') //si on a une valeur en km/h { this->kmtoms(); //on calcule en m/s this->mstobeaufort(); // on calcule en beaufort return; // on quitte la fonction } if(this->ms!=0 || this->type=='m') // si on a une valeur en m/s { this->mstokm(); // on calcule en km/h this->mstobeaufort(); // on calcule en beaufort return; // on quitte la fonction } if(this->beaufort!=0 || this->type=='b') // si on a une valeur en beaufort { this->beauforttoms(); // on calcule en m/s this->mstokm(); // on calcule en km/h return; // on quitte la fonction } //si on a rien de tout ca : exit(0); } void Vent::afficher() { system("cls"); cout << "Resultat :\n\n"; cout << "Force du vent en m/s :" << this->ms << endl; cout << "Force du vent en km/h :" << this->km << endl; cout << "Equivalence beaufort :" << this->beaufort << endl << endl; } int main(int argc, char *argv[]) { Vent * vent = new Vent(); //creation d'un objet dynamique de type "vent" while(1) //boucle principale { system("cls"); //effacement de l'ecran cout << "___________________________" << endl; //"image" de presentation cout << "| |" << endl; cout << "| BIENVENUE !!! |" << endl; cout << "| |" << endl; cout << "|__________________________|"<< endl << endl << endl; char o; //creation d'une variable locale nécessaire au "getch()" cout << "Quelle est l'unite du vent que vous allez donner ?\n"; cout << "k --> Km/H \n"; cout << "m --> m/s \n"; cout << "b --> beaufort \n"; cout << "q --> quitter\n\n"; o = getch(); //attendre que l'utilisateur presse une touche et l'enregistrer dans "o" //cin o; //si probleme avec la librairie conio.h if(o=='q') exit(0); //si la touche pressée est un "q", on quitte le programme vent->settype(o); //on indique au programme l'unité qui va etre utilisée float u; //creation d'une variable locale nécessaire au "cin" cout << "Donnez maintenant, la valeur de ce vent :\n" ; cin >> u; //attente d'une saisie utilisateur switch(o) //si l'unité utilisée est le : { case 'k' :vent->setkm(u);break; // -km/h, on modifie la variable km de l'objet "vent" case 'm' :vent->setms(u);break; // -m/s, on modifie la variable ms de l'objet "vent" case 'b' :vent->setbeaufort(u);break;// -beaufort, on modifie... default : cout << "Erreur"; continue; //si le type n'est pas valide, on reviens a la boucle } vent->calculer(); //on calcule les autres unitées à partir de la premiere vent->afficher(); //on affiche les resultats vent->settype(0); //on remet tout à 0 vent->setkm(0); vent->setms(0); vent->setbeaufort(0); system("PAUSE"); //on attend que l'utilisateur presse la touche "entrée" } delete vent; //on detruit le pointeur "vent" et on libere la memoire return 0; //on quitte le programme }

Conclusion :


Les ameliorations que l'on pourrait trouver :

- un systeme de gestion d'erreur digne de ce nom :D
- un affichage de la taille de voile préconiséeen fonction du vent
- une colorisation
- un passage sous wxwindows
- A vous de le dire ! :D

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
82
Date d'inscription
dimanche 3 août 2003
Statut
Membre
Dernière intervention
10 août 2007

Oui bien sur, mais ca ne me donne rien ! 3ms de calcul en plus ? je les concede :D

Je suis d'accord avec toi djl, mais ce programme est pour moi un programme pratique et non pas une demonstration de mes ridicules talents de programmeur :D
Merci beaucoup de vos conseils en tout cas.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
kenjimax > tu fais une comparaison binaire sur un float, c'est forcement mauvais
soit tu test la difference avec la valeur à comparer (en te servant d'un seuil), soit tu switch sur la partie entiere ( tu multiplies par 100 si tu veux garder une precision à 2 chiffres par exemple)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
hein??
Messages postés
82
Date d'inscription
dimanche 3 août 2003
Statut
Membre
Dernière intervention
10 août 2007

Non, un switch compare un "integer" et forcement à des constantes. Ca sabre donc les possibilitées d'upgrade du programme.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
pas regardé la source en détail, mais remplacer succession de if(this->beaufort==X) par switch(beaufort)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.