× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 effacer écran ?? c++ ou c **résolu**
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
BxG
  Posté le 12/11/2006 @ 10:27 
Aller en bas de la page 
Astucien

bonjour, j'utilise lafonction clrcsr (); mais lorsque je compile avec dev++ on m'affiche une erreur a cette ligne.

et je voudrais savoir si je suis obligé d'utiliser la fonction system("PAUSE"); apré chaques lignes.

Merci d'avance




Modifié par BxG le 13/11/2006 00:15
Publicité
koala01
 Posté le 12/11/2006 à 14:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut,

D'abord, il faut savoir que

  1. devC++ n'est plus développé... tu aurais intéret à passer à code::blocks
  2. clrscr() est disponible avec l'entete qui n'est normalement accessible avec devc++ que si tu installe le paquet "conio2"
  3. clrscr() n'est pas portable (impossible à utiliser sous linux, par exemple)
  4. clrscr() est une commande C, et qu'il est préférable d'éviter de mélanger les deux dans un meme programme.

Ensuite, il faut savoir que la commande

system("PAUSE")

  1. N'est pas portable
  2. Demande appelle une fonction du système d'exploitation (ici "PAUSE", qui met le programme en pause ) et qui demande plus de ressource que les appels à des fonctions équivalentes en C

Alors, pour répondre à ta question: non, tu n'est absolument pas obligé d'utiliser system("PAUSE") apres chaque instruction...

Tu peux même ne jamais l'utliser, mais, il faut savoir que, si tu lance ton programme en double cliquant dessus, et que tu ne prévois pas un "point d'arret" avant le return 0 de la fonction main(), tu risque de voir ta "ligne de commandes" s'ouvrir, le programme s'exécuter tres rapidement, être quitté, parce qu'il a fini de travailler, et la ligne de commande se fermer tout aussi vite...

Bien plus portable que le system("PAUSE") (en fait, c'est la commande PAUSE qui n'existe que sous windows... d'où l'incompatiblité , si tu veux provoquer une pause, l'idéal, en C, c'est, en ayant déclaré un tableau de caractère, d'utiliser le code suivant

//déclaration en debut de main d'un tableau de caractere de bufferisation
char buff[255];
(...)
//les trois dernieres lignes de main()
printf("appuyez sur pour quitter");
//bien qu'il ne soit généralement pas conseillé d'utiliser scanf, ici, le risque est faible avec cette fonction
scanf(fuff);
exit 0

ou, en C++

(...)
//les dernière lignes de main
char c;
std::cout<<"appuyez sur pour quitter";
std::cin>>c;
return 0;

printf("du texte",...); et std::cout<<"du texte"<<...; sont des commandes d'affichage "sur la sortie standard" (typiquement sur l'écran) là où, scanf(...) et std::cin>>... sont des commandes de "lecture de l'entrée standard" (typiquement le clavier)...

Le texte à afficher est tout à fait libre et peut etre formaté dans les deux cas... selon l'usage que tu a de la fonction d'affichage



Modifié par koala01 le 12/11/2006 15:08
BxG
 Posté le 12/11/2006 à 14:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

merci pour tes explications, malgrés cela certains problémes persistent, je tourne donc a codeblocs maintenant, et donc je souhaitai creer une interface plaisant et donc j'ai créér un projet SDL mais aprés avoir intégré une image a mon fond, je n'arrive pas a créer un texte par dessus.

Donc je voudrais savoir si en restant sous la console windows il est possible de créer une interface en couleur, et avec images si possible... j'en demande peut-étre un peu trop, on véra...

Et pendant que tu es la, dans mon prgramme ( sous la console windows ) je voudrais créer un lien vers un fichier texte, mais je ne trouve aps comment faire.

Et encore une dérniére chose, une fois mon programme cré en c++ sous la console windows, est-il possible de créer interfaces, avec bouton, etc... jpense que c'est la question de base en faite.

Merci d'avance

koala01
 Posté le 12/11/2006 à 15:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Alors, la réponse à la question la plus simple: oui, il y a moyen de créer une interface graphique... mais rien n'existe "d'origine"...

il faut se tourner vers des bibliotheques "externes" comme QT, SDL, GTKMM, voire, selon ce que tu veux faire précisément, des bibliotheques "3D"(openGl, glut, Nehe ou directX, par exemple)...

Certains EDI (Environnement de Développment Intégrés) professionnels fournissent d'ailleurs leur propre bibliotheque graphique (je pense notamment à la version professionnelle de VC++ (de microsoft) ou à la version entreprise de Borland C++ Builder), mais ce sont des outils, géniaux, certes, car il fournissent meme une interface facile pour le développement de l'interface graphique, mais d'un prix exhorbitant... et qui, en plus, rendent les programmes peu portable (personnellement, j'adore la VCL de borland [clindoeil])

Je ne connais pas particulièrement la SDL, donc, oui, je sais qu'il y a moyen de faire apparaitre un texte, mais je ne sais pas comment y arriver... peut etre quelqu'un d'autre passera-t-il par ici et te donnera la solution [clindoeil]

Ceci dit, comme tu as l'air de commencer à peine dans le développement, j'aurais tendance à te conseiller d'apprendre à marcher avant de vouloir courrir...

La programmation en elle-même est un sujet complexe... De par la multiplicité des langages potentiels déjà, mais, surtout, parce que ca fait appel à un tas de concepts pour ainsi dire "purement abstraits" qu'il est indispensable de connaitre pour arriver à quelque chose de qualité [clindoeil]

Le C++ est d'autant plus complexe qu'il s'agit d'un langage "oritenté objet" (ou, en tout cas, capable d'etre orienté objet, car tu peux l'utiliser en programmation séquentielle classique), ce qui rajoute encore quelques concepts propres à l'orienté objet par rapport aux langages séquentiels, "de bas niveau" (qui nécessite la gestion manuelle des ressources)...

La programmation n'est donc pas quelque chose que l'on envisage "entre la poire et le fromage", sur un coin de table...(meme si de nombreuses idées peuvent venir à ce moment là [clindoeil])

La première habitude qu'il faut prendre, c'est de réfléchir...

  • Réfléchir d'abord à ce qu'on veut faire (ce qu'il nous faut)
  • Réfléchir ensuite aux moyens et à la logique à suivre pour y arriver (conception)

avant d'enfin passer à l'étape de codage de la logique...

Si je t'écris d'apprendre à marcher avant de vouloir courrir, c'est parce que tu n'arrivera jamais à fournir quelque chose de qualité si, à peine une idée a-t-elle germé dans ton esprit, tu commence à coder avant d'avoir réfléchi "sereinement" à ce que tu veux faire...

Ou, si tu y arrive, ce sera au prix de nombreuses heures passées à te demander "mais pourquoi ca foire [question]"

L'idéal, c'est de commencer par apprendre des "méthodes d'algorithmies" qui te permettront de visualiser correctement l'ensemble du raisonnement qui faut suivre pour mener, sans risque d'erreur, ton application d'un point A à un point B... tu trouveras sur mon site une section entière concacrée à ces concepts généraux...

Ensuite, comme le C++ est orienté objet, il est intéressant de te familiariser avec les concepts que ces deux mots induisent, tel que "constructeur", "destructeur", "classe", "visibilité des membres et des méthodes", "héritage" et bien d'autres encore...

Enfin, avant même de penser à faire "l'interface graphique de la mort qui tue", il est utile de s'habituer au langage en lui meme, en commencant, par exemple, par des programmes simples qui fonctionnent en "ligne de commande", histoire d'acquérir les bons réflexe, et de maitriser un minimum le langage "sans trop se casser la tete"...

Ce n'est qu'apres avoir suivi ces différentes étapes que tu pourras envisager serainement la création d'une application plus complexe, et plus "user friendly", et, vraissemblablement, plus "portable"(qui ne soit pas uniquement utilisable sous windows [clindoeil])...

Bien sur, tu peux tres bien faire fi de ces conseils, mais l'expérience des forums m'a montré à plus d'une reprise que ceux qui en font fi n'arrivent que rarement à leurs fins et se décourragent souvent bien avant d'avoir réussi à atteindre leur but...

Maintenant, c'est à toi de juger et de jouer [clindoeil]

BxG
 Posté le 12/11/2006 à 15:58 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

merci pour ton lien, mais j'ai programmer plusieurs programmes sans problémes, en utilisant sois le dos de windows sois l'aplication windows, mais j'ai toujours ce probléme d'interface graphique qui persiste ...

j'ai un programme sans interfaces , je le met au cas ou il y est des erreurs ou des choses a supprimer ;)

/*************************************************
* NOM : Conv.cpp
* TYPE : Application

* SUJET : Convertisseur

* AUTEUR : x x

* VERSION : 4.00


* DATE CREATION : 27/10/2005
* DERNIERE MODIF : 27/10/2005
* ACCES SOURCES : E:\TURBO\Programme\converti.cpp
*************************************************/
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
main ()
{
int a;
float b=6.55957;
int c;
float d=0.82350;
float e=1.60216;
float f=0.68034;
printf ("Bienvenue sur le programme de conversion de devises.\n\n");
debut:
printf ("Faite votre choix :\n");
printf ("- Convertisseur Euros vers USD taper '1'\n");
printf ("- Convertisseur USD vers Euros taper '2'\n");
printf ("- Convertisseur Euros vers AUD taper '3'\n");
printf ("- Convertisseur AUD vers Euros taper '4'\n");
printf ("- Convertisseur Euros vers GBP taper '5'\n");
printf ("- Convertisseur GBP vers Euros taper '6'\n");
scanf ("%d",&a);
if (a == 1)
goto USD;
if (a == 2)
goto USD1;
if (a == 3)
goto AUD;
if (a == 4)
goto AUD1;
if (a == 5)
goto GBP;
if (a == 6)
goto GBP1;
if (a>6)
printf ("Valeur érronées. \n\n");
getch ();
goto debut;

USD:
printf ("Conversion EUROS vers DOLLARS AMERICAINS\n\n");
printf ("Entrez votre somme en Euros: \n");
scanf ("%d",&c);
printf ("Voici la somme en Dollars :%f$ \n\n",c/d);
getch ();

goto debut;
USD1:

printf ("Conversion DOLLARS AMERICAINS vers EUROS\n\n");
printf ("Entrez votre somme en Dollars : \n");
scanf ("%d",&c);
printf ("Voici la somme en Euros :%f \n\n",c*d);
getch ();
goto debut;

AUD:

printf ("Conversion EUROS ver DOLLARS AUSTRALIENS\n\n");
printf ("Entrez votre somme en Euros : \n");
scanf ("%d",&c);
printf ("Voici la somme en Dollars Australien :%fAUD \n\n",c*e);
getch ();

goto debut;
AUD1:

printf ("Conversion DOLLARS AUSTRALIENS vers EUROS\n\n");
printf ("Entrez votre somme en Dollars Australien (AUD) : \n");
scanf ("%d",&c);
printf ("Voici la somme en Euros :%f \n\n",c/e);
getch ();

goto debut;

GBP:

printf ("Conversion EUROS vers LIVRES STERLING\n\n");
printf ("Entrez votre somme en Euros : \n");
scanf ("%d",&c);
printf ("Voici la somme en GBP :%f£ \n\n",c*f);
getch ();

goto debut;
GBP1:

printf ("Conversion LIVRES STERLING vers EUROS\n\n");
printf ("Entrez votre somme en GBP : \n");
scanf ("%d",&c);
printf ("Voici la somme en Euros :%f \n\n",c/f);

getch ();

goto debut;



return 0;
}

voila la béte, si qulqu'un aurait la bonne idée de m'expliquer comment cré au moin une petite interface je suis toujours preneur. Merci


koala01
 Posté le 12/11/2006 à 17:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Arrggghhh....

tu as peut etre déjà programmé... mais, laisse moi te dire (sans vouloir t'offencer) que tu le fais avec les pieds...

Ceci dit, c'est peut etre, simplement, si tu a créé un algorithme, parce que tu as utilisé une méthode inappropriée...

Un simple exemple: l'usage des goto, si je ne vais pas rejoindre les rangs de ceux qui les banissent à jamais (quoi que je serais, à titre personnel de ce genre) doit etre limité au stricte minimum:

Les langages de programmation de troisième génération disposent tous de boucles qui permettent de rendre le code bien plus lisible et plus facilement maintenable (boucle incrémentale de type "pour i=0 à 10 par pas de ...", de type "jusque" ou "tant que" (avec le test qui s'effectue, selon que tu utilises une boucle "jusque" ou "tant que", avant ou apres l'exécution du bloc d'instruction)

De la meme manière, l'énorme majorité des langages proposent des structures de tests "à choix multiple"... ce qui évite une succession indigeste de if(quelque chose) else if(autrechose)...

Enfin, l'énorme majorité des langages autorisent l'appel à des "routines" (fonctions si ca renvoie quelque chose, procédure si ca ne renvoie rien)...

Je suis presque sur que le code que tu présente a été créé sur base d'un flowchart, si tu a créé un algorithme pour prévoir la logique à suivre...

Il faut savoir que, si cette méthode est très efficace quand il s'agit de prévoir du codage en assembleur ou en langage machine, elle perd toute son efficacité dés qu'il s'agit de coder en langage de troisième génération( qui fournissent les boucles, les tests à choix multiple et les routines...)

Je ne vais cependant pas trop te jeter la pierre, tant il est vrai que le flowchart est l'une des méthodes, encore actuellement, les plus connues...

Par contre, je te conseillerais de t'initier à une méhtode bien plus cohérente, qui permet de bien mieux représenter les trois concepts dont je parle depuis le début de ce post: les boucle, les routines et les tests à choix multiples...

J'ai nommé: le nassichneiderman, que, bien que je ne l'aie pas inventé, je suis visiblement le seul à présenter sur internet (petite fièreté personnelle [clindoeil][bigsmile])...

Je te conseillerais donc de lire cette page, et les suivantes de mon site...

Je vais prendre quelques minutes pour te dessiner le nassichneiderman du programme que tu propose, et je te montrerai le résultat dés que ce sera fait [clindoeil]

BxG
 Posté le 12/11/2006 à 17:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ok merci, dsl de mon imcompétence, mais je croi qu'on y est tous passé : D

Je vais sur ton lien, merci, et tu as pas une idée pour creer un lien extérieur ??

Encore merci de tes réponses


BxG
 Posté le 12/11/2006 à 18:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

excuse moi kola mais je n'ai pas compris grand whoses aux boucles, enfin si mais il faudrait que tu mettes des éxemples concrets dans ton site, car bien que j'ai compris le systéme je ne sais toujours pas faire de boucles.

Une petite explication serait la bienvenue.


koala01
 Posté le 12/11/2006 à 19:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ah, mais tu n'as pas à t'excuser...

Bien au contraire, je te présente mes excuses si mes écrits ont pu parraitre ascerbes...

En attendant, j'ai créé une image du nassichneiderman que je t'ai promis...(excusez les dimentions et le poids de cette image )

nassichneiderman du programme de convertion

Comme tu peux le remarquer, je fais appel à 6 sous-routines... Comme je manquais un peu de place pour utiliser des noms "auto commentés", j'ai utilisé des abréviation, mais j'ai à chaque fois mis le type de convertion effectué...

Il ne nous manque plus que les six constantes EuroToDollUS, DollUSToEuro, EuroToDollA, DollAToEuro, EuroToLivre et LivreToEuro, qui seront, tu t'en doute, le taux de convertion pour chacun des cas

Voici le code en C qui serait créé au départ de l'algorithme ;)

#include <stdio.h>
#include <conio.h> /* attention, c'est pas portable... ca ne foncitonnera que sous windows a cause de
* cette entete */
/*
*définition des constantes de taux de convertion
*Complete les valeurs
*/
#define EuroToDollUS 0.
#define DollUSToEuro 0.
#define EuroToDollA 6.
#define DollAToEuro 0.
#define EuroToLivre 1.
#define LivreToEuro 0.
/*****************************************************************
** Les prototypes desfonctions **
******************************************************************\
void E2D();/* conversion € vers $US */
void D2E();/* conversion $US vers € */
void E2A();/* conversion € vers $Aust */
void A2E();/* conversion $Aust vers € */
void E2G();/* conversion € vers £ */
void G2E();/* conversion £ vers €*/
int main()
{
/* déclaration de la variable */
char Choix;
/*Tout se fait dans une boucle qu'on quitte quand l'utilisateur veut quitter le programme
Comme la boucle doit au minimum etre effectuée une fois, autant utiliser une boucle "jusque*/
do
{
clrscr()/* Efface l'écran... !!! non portable !!! */
printf("bienvenue sur le programme de convertion de devises\n\n") ;
printf("Faites votre choix:\n");
printf(". Convertisseur Euro vers USD, tapez '1'\n");
printf(". Convertisseur USD vers Euro, tapez '2'\n");
printf(". Convertisseur Euro vers AUD, tapez '3'\n");
printf(". Convertisseur AUD vers Euro, tapez '4'\n");
printf(". Convertisseur Euro vers Livre Sterling, tapez '5'\n");
printf(". convertisseur Livre Sterling vers Euro, tapez '6'\n");
printf(". Quitter le programme et retourner à une occupation normale, tapez '0'\n");
Choix= getche();//!!! getche() n'est pas protable, il se trouve dans conio.h ;-)
switch (Choix)
{
case '0':
/* ne fait rien, mais permet d'avoir la valeur par défaut, qui n'apparait pas dans l'algorithme */
break;
case '1':
E2D();
break;
case '2':
D2E();
break;
case '3':
E2A();
break;
case '4':
A2E();
break;
case '5':
E2G();
break;
case '6':
G2E();
break;
default:/* n'est pas dans l'algorithme... mais sera exécuté si l'utilisateur n'a pas introduit
une valeur entre 0 et 6;-) */
printf("veuillez choisir une valeur comprise entre 0 et 6\n");
getch();
}
}while(choix !='0');
return 0; /*sortie sans erreur */
}

/* les autres fonction seront toutes identiques... seul le nom du taux de conversion change... je n'en mets donc
* qu'une */
void E2D()
{
/* la valeur à convertir (en float pour les 2.66 ;) ) */
float Valeur;
printf("Conversion d'euro en dollars americains\n\n");
printf("introduisez le nombre d'euro\n");
/* il n'est normalement pas conseillé d'utiliser scanf... mais bon, allons au plus simple ;) */
scanf(&valeur);
printf("Ca fait %f Dollars",Valeur * EuroToDollUS);
/* getch() n'est pas plus portable que getche()... il se trouve lui aussi dans conio.h
getch();
}

Le code en C++ vient dans un autre post, car celui ci devient vraiment long ;)



Modifié par koala01 le 12/11/2006 19:15
Publicité
koala01
 Posté le 12/11/2006 à 19:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Décidement, depuis que l'interface du forum a été modifiée, il n'y a plus moyen de formater correctement son code

Bon... le code en C++ arrive [clindoeil]

BxG
 Posté le 12/11/2006 à 19:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
ok merci koala, mais en vrai en utilisant des boucles le code sera de méme taille non ??
koala01
 Posté le 12/11/2006 à 19:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

le code sera sensiblement identique, mis à part l'utilisation des classes de flux qui sont propres au C++

#include <iostream> //les flux d'entrée/sortie standards...
//////////////////////////////////////////////////////////////////////
// definition des taux de change //
// n'oublie pas de les compléter //
//////////////////////////////////////////////////////////////////////
#define EuroToDollUs 0.
#define DollUSToEuro 1.
#define EuroToDollA 6.
#define DollAToEuro 0.
#define EuroToLivre 1.
#define LivreToEuro 0.
/////////////////////////////////////////////////////////////////////
// les prototypes des foncitons //
/////////////////////////////////////////////////////////////////////
void E2D();
void D2E();
void E2A();
void A2E();
void E2G();
void G2E();
/////////////////////////////////////////////////////////////////////
// la fonction principale //
////////////////////////////////////////////////////////////////////
int main()
{
//un caractère pour le choix
char Choix;
//ici aussi, c'est une boucle "jusque"
do
{
//le flux de sortie standard est cout, disponible dans l'espace de nommage std
std::cout<<"Bienvenue sur le programme de convertion de devises\n"
// on peut continuer à écrire dans le flux jusqu'au ; meme si c'est sur plusieurs lignes
<<"Faites votre choix:\n"
<<"Euro vers Dollars Americain, tapez '1'\n"
<<"Dollars Américain vers Euro, tapez '2'\n"
<<"Euro vers Dollars australien, tapez '3'\n"
<<"Dollars australiens vers Euros, tapez '4'\n"
<<"Euros vers Livres Sterling, tapez '5'\n"
<<"Livres Sterling vers Euros, tapez '6'\n"
<<"Quitter le programme, et retourner à une occupation normale, tapez '0'"<<std::endl;
// le flux est "bufferisé", ce qui fait qu'il est mis en attente jusqu'à ce qu'on dise explicitement de l'envoyer...
// Avec, par exemple, std::endl; (qui provoque un retour à la ligne)
// le flux d'entrée standard est std::cin
std::cin>>Choix;
switch (Choix)
{
case '0'://ne fait toujours rien, mais permet toujours l'utilisation de la valeur default
break
case '1':
E2D();
break;
case '2':
D2E();
break;
case '3':
E2A();
break;
case '4':
A2E();
break;
case '5':
E2G();
break;
case '6':
G2E();
break;
default:
//on peut déclarer les varaibles quand on veut...
//mais elles ne sont disponibles que dans la portée de leur déclaration...
//on va déclarer une variable "super locale" pour attendre que l'utilisateur enfonce la touche <enter>
std::cout<<"veuillez choisir une valeur exclusivement comprise entre 0 et 6"<<std::endl;
char c;
std::cin>>c;
}
}while(Choix!=0);
//quitte l'application sans erreur
return 0;
}
//encore une fois, je n'écrirai que la premiere fonction de conversion... les autres sont de la meme veine
void E2D() //conversion €->$US
{
float Valeur;
std::cout<<"Conversion Euro vers Dollar americains\n'
<<"introduisez la valeur:"<<std::endl;
std::cin>>Valeur;
std::cout<<"Ca fait "<<Valeur * EuroToDollUS<<" dollars americains"<<std::cin
//attend la touche enter avant de quitter la fonction
char car;
std::cin>>car;
}

As tu remarqué le plus beau de l'histoire[question]

C'est que, pour peu que tu utilises des termes suffisemment indépendants du langage de programmation dans ton algorithme, tu pourra le traduire dans n'importe quel langage (ici, ca a été fait en C et en C++, mais tu pourrais le traduire en java, en PHP, en ASP, ou en Python sans le moindre problème [clindoeil])

BxG
 Posté le 12/11/2006 à 20:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ouai mais il faut connaitre le language du c , c++, java, etc... ce qui n'est pas mon cas

Il me reste encore quelques questions ( a vrai dire il m'en reste des miliers mais c'est pour ne pas te faire peur )

1/ Dans le code en c , tu utilises char pour définir le choix de l'utilisateur , pourquoi tu n'utilise pas int ??

2/ Ensuite switch (choix) sert a remplacer scanf qui atribura la valeur a choix ???

3/Il me semble avoir compris le fonctionnement d'une boucle, mais je ne voi pas encore l'interet a vrai dire

4/ Un moment tu utilises default; , il sert a remplacer le else si on avait utiliser if else ?

5/ Et enfin, pour une simple confirmation, le case'2': ,il est la pour remplacer goto ??

Voila je m'arréte la pour le moment, mais ne te réjouit pas trop vite, a mon avis les questions risquent d'afluer rapidement par la suite XD



Modifié par BxG le 12/11/2006 20:11
koala01
 Posté le 12/11/2006 à 20:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Là, les boucles sont faites...

A vrai dire, la seule boucle utilisée ici provoque l'affichage du menu et l'attente de l'introduction du choix de l'utilisateur...

ce n'est pas tant un problème de taille du code qu'un problème de (re)lecture de celui-ci...

Tu dois pouvoir lire le code à peu pres de la meme manière que tu lirait un livre: de haut en bas, et de droite à gauche... Le tout, sans jouer à ce "livre dont vous etes le héros" du genre "si vous choisissez d'aller a droite, rendez vous au numéro (ou à l'étiquette) machin"...

Tu arriveras, en utilisant des boucles et des tests adaptés, à structurer ton code bien mieux qu'en mettant des goto presque toutes les deux lignes...

Tu auras donc beaucoup plus facile à t'y retrouver dans trois mois quand tu voudra le modifier (par exemple, si tu veux donner l'occasion de convertir en yen ou en chameaux [clindoeil])

Ici, tout tiens dans une fichier... et on est resté à la programmation séquentielle...

Mais imagine n'importe quel projet d'envergure en orienté objet avec une foule de classe qui ont une foule de méthodes... Le tout dans une multitude de fichiers différents...

Si tu travailles à coup de goto et d'étiquettes, tu ne t'en sortira plus...

Pour ce qui est d'un exemple concret de boucle...

Mettons que tu veuille simplement faire un tableau qui reprenne les tables de multiplications des chiffres compris entre 1 et 9 inclus...

tu peux t'amuser (ici, en C++) à écrire un code du genre de

std::cout<<"1 2 3 4 5 6 7 8 9 10 \n"
<<"2 4 6 8 10 12 14 16 18 20\n"
(... les sept autres lignes manquantes)
<<10 20 30 40 50 60 70 80 90 100"<<std::endl;


Mais tu avouera que ce n'est pas vraiment l'idéal [clindoeil]

C'est long et fastudieux, alors que tu pourrais t'en sortir en quatre lignes avec des boucles...

Dans cet exemple précis, l'idéal, c'est une boucle incrémentale... dans laquelle une variable prend une valeur de départ et est incrémentée à chaque passage dans la boucle...

L'avantage, c'est que tu pourras utiliser la valeur de cette variable pour effectuer le calcul...

Dans l'exemple que je prend, il s'agira meme de deux boucles imbriquées... qui prendront la forme de

for(int i=1;i<11;i++) //premiere boucle, qui ira de 1 à 10 avec la valeur disponible au travers de la
//variable "i"
{
for(int j=1;j<11;j++) //deuxieme boucle, identique, mais qui utilise la variable j
{
//affichage de i*j suivi d'un espace
std::cout<<i*j<<" ";
}
//quand la boucle en j est finie, il faut aller à la ligne
std::cout<<std:endl;
}

Pour les deux autres types de boucles, il faut savoir que les boucles peuvent etre interchangeables... mais qu'il s'agit de réfléchir un peu si l'on préfère avoir le test avant d'effectuer la premiere fois le bloc d'instruciton ou apres...

D'ailleurs, quand on y pense bien une boucle de type "pour" (incrémentale) n'est jamais qu'une amélioration d'une boucle "tant" [clindoeil]

koala01
 Posté le 12/11/2006 à 20:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

J'utilise un caractère, simplement par "l'inspiration du moment"...

1- A vrai dire, il ne faut qu'un seul caractère qui devra de toutes façon etre compris entre 0 et 6 pour etre accepté...

Comme il y a, en ASCII, 256 caractères potentiels, on a largement de quoi travailler avec...

il ne sert à rien d'utiliser quelque chose qui puisse prendre des valeurs de plusieurs millions [clindoeil]

2-Le scanf est remplacé par getche() dans le code en C...

Ce n'est pas portable, mais c'est une instruction qui n'attend qu'un seul caractère de manière non bufferisée (il ne faut pas enfoncer la touche <enter> pour que l'introduction soit prise en compte [clindoeil]) et qui affiche le caractère à l'emplacement du curseur...

Le switch (Choix) remplace, non pas l'introduction du choix (vu que c'est pris en charge par le Choix=getche() [clindoeil]) mais bel et bien cette succession relativement indigeste de if (Choix==...)

3- ben je post croisé devrait te convaincre de leur utilité [clindoeil]

4- default serait fort semblable à un dernier else si on avait utilisé une succession de if... else...

Sa signification est tout simplement "si ce n'est aucun des choix, on se rabat sur cette solution-ci"...

Ce n'est pas obligatoire (raison pour laquelle je ne l'ai pas fait apparaitre dans l'algorithme) mais il faut avouer que, dans l'exemple d'une demande de choix, il est toujours bon de se rappeler que l'utilisateur est un imbécile distrait [clindoeil]

5- non... il est là pour remplacer un if [clindoeil]

Les goto sont ici plutot remplacés (pour une grosse partie) par les appels aux différentes fonctions (E2D(),D2E()...) et par... la boucle do... while()

Pour etre précis: tes goto USD, USD1, AUD, AUD1, GBP et GBP1 sont remplacés par l'appel des fonctions correspondantes, et tes goto debut sont remplacés par la boucle do...while() du fait que l'exécution de la fonction proncipale est reprise là ou elle avait été laissée en suspend une fois qu'on sort des fonctions...


BxG
 Posté le 12/11/2006 à 21:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ok d'accord j'ai a peu prés tout compris, mais il y a toujours :

Choix= getche();

switch (Choix)

qui m'embéte un peu...je vien de modifier le programe et il ne veut pas compiler en mdisant qu'il y a une erreur a la ligne choix getche(); . tu serait pas d'ou sa viendrais ??



koala01
 Posté le 12/11/2006 à 21:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

il y a des chances que ce soit du aux inclusions...

pour les include stdio.h et include conio.h, il faut entourer stdio.h et conio.h par des crochets < et

> (désolé, mais si on le met correctement, ca fout le camps du post...)

Publicité
BxG
 Posté le 12/11/2006 à 21:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

en fouillant un peu les erreurs ( pck oui il faut fouiller pour trouver la bonne XD ) elle est ici :

while(choix !='0'); <-- on me dit que la valeur choix n'est pas déclarer, alors qu'au debut il y a bien char choix; ,

et qu'il y a bien les lignes pour le définir ensuite:

Choix= getche();
switch (Choix)

Oui je sais j'ai encore beaucoup a aprendre...

BxG
 Posté le 12/11/2006 à 21:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

c'est bon j'ai compris !!!!!! il manquer ceci entre choix : '

a la la on se fait mal a la téte pour pas grand chose

Par contre tu ma dit que clrcsr (); ne fonctionner que sur windows mais je peux utiliser une autre fonction pour que le programme fonctionne sur tous les os ??

Et aussi, la fonction \n ne fonctionne pas toujours, lorsque je tape une valeur, tout est a la suite, et c'est moche...

Je poste mon code si quelqu'un se sent de soulever ce petit probléme:

#include <stdio.h>;
#include <conio.h>;

#define b 6.55957

void f2e();
void e2f();


int main()
{

char Choix;

do
{
printf("bienvenue sur le programme de convertion de devises\n\n") ;
printf("Faites votre choix:\n");
printf(". Convertisseur Franc vers Euro, tapez '1'\n");
printf(". Convertisseur Euro vers Franc, tapez '2'\n");
printf(". Quitter le programme et retourner à une occupation normale, tapez '0'\n\n");
printf (" taper le nombre choisi corespondant\n");
Choix= getche();
switch (Choix)
{
case '0':
break;
case '1':
f2e();
break;
case '2':
e2f();
break;

default:
printf("veuillez choisir une valeur comprise entre 0 et 6\n");
getch();
}

}

while('choix' !='0');


return 0;
}

void e2f()

{
float valeur;
printf("Conversion d'euro en francs\n\n");
printf("introduisez le nombre d'euro\n\n\n");
scanf("%f",&valeur);
printf("Le résultat donne: %f Francs",valeur * b);
getch();
}
void f2e()

{
float valeur;
printf("Conversion de francs en euro\n\n");
printf("introduisez le nombre en franc\n\n\n");
scanf("%f",&valeur);
printf("Le résultat donne: %f Euros",valeur / b);
getch();
}




Modifié par BxG le 12/11/2006 21:55
BxG
 Posté le 12/11/2006 à 22:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

C'est bonb tout fonctionne a merveille, merci pour tes cours koala

Bonne nuit a tous


koala01
 Posté le 12/11/2006 à 22:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Autant pour moi...

il faut savoir que le C et le C++ sont "sensibles à la casse" (pour eux, variable et Variable sont... deux variables différentes...)

Comme je codais simplement en regardant l'algorithme, la distraction a fait que... ben voilà, quelques erreurs d'attentions sont passées...

je viens de faire le code en entier (en C)... tu peux le télécharger ==>ici<== (n'oublie pas de bien donner les valeurs des taux de change [clindoeil]

Si tu veux le compiler avec code::blocks, il faut veiller à ce que le paquet devc++ "conio2" soit installé (menu "plugins"->dev c++ pack update/installer... cherche CONIO)

Si tu as une erreur du genre de "file conio2.h not found", il faut veiller à ce que le chemin qui permette d'accéder à ce fichier soit bien mis dans l'onglet directories du formulaire accessible depuis le menu "project->build options"

Si tu as une erreur "undefined refernce to (clrscr, par exemple), il faut veiller à ce que libconio.a apparaisse dans l'onglet "linker" du formulaire accessible depuis le menu "project->build options"

Pour intégrer le fichier dans un nouveau projet:

crée un projet de manière classique (en choissant un projet console en C)

place le fichier dans le dossier de ton projet

Dans le menu project, sélectionne "add file" et pars à la recherche du fichier (convertion.c)

supprime le fichier main du projet car, sinon, il y aura deux fonctions main() et le compilateur n'aime pas ca du tout [clindoeil]

BxG
 Posté le 12/11/2006 à 22:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

merci bcp, tu vien par ailleur d'illuminé un probléme la, libconio.a, voila pourquoi clrscr ne fonctionne pas, mais peut tu me dire ou le trouver ? car il n'est pas dans le dossier lib...

Merci d'avance.

Je vien de le trouver dans plugin, mais il ne fonctionne toujours pas

Correction, tout fonctionne a merveille, merci koala




Modifié par BxG le 12/11/2006 23:07
BxG
 Posté le 12/11/2006 à 23:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
dérniére question avant la fin du topic, case '0': peut étre supprimer, mais je ne vois pas l'interer de le mettre en féte.
koala01
 Posté le 12/11/2006 à 23:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Tout le problème vient de ce que default prend tous les cas qui n'ont pas été clairement définis...

Cela signifie que l'utilisateur doit indiquer 0 s'il veut quitter, mais, que s'il le fait et que tu ne défini pas "le cas qui ne fait rien" mais qui correspond à l'action de quitter (donc, 0)... quand il introduira le fameux 0, il passera dans... default...

Et il aura donc un joli message "veuillez choisir entre 0 et 6"... ce qui n'est pas logique, vu qu'il a effectivement choisi une valeur correcte [clindoeil]

Si cela t'ennuies vraiment d'avoir un cas "qui ne fait rien", tu peux tout aussi bien te contenter de l'affichage d'un message du genre "nous allons donc quitter" sous la forme de

case 0: printf("l'application va quitter, bonne journee\0");
getch();
break;



BxG
 Posté le 13/11/2006 à 00:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ok c'est assimiler, merci

Publicité
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
GratuitJeu PC Superbrothers: Sword & Sworcery EP gratuit
Valable jusqu'au 06 Août

Epic Game Store offre actuellement le jeu PC  Superbrothers: Sword & Sworcery EP. Aidez une moniale itinérante guerrière à terminer sa quête tragique dans Superbrothers: Sword & Sworcery EP, un jeu d'action-aventure essentiel créé par Superbrothers et les magiciens du jeu vidéo de chez CAPY, avec une bande-son primée signée Jim Guthrie.


> Voir l'offre
249,35 €Mini PC T-BAO TBOOK MN25 (Ryzen 5 2500U, 8 Go RAM, 256 Go SSD NVME) à 249,35 € avec le code BGFRTBK
Valable jusqu'au 07 Août

Banggood propose actuellement le mini PC T-BAO TBOOK MN25 à 249,35 € avec le code promo BGFRTBK. Ce mini PC au format NUC d'Intel possède un processeur Ryzen 5 2500U avec chip graphique Vega 8, 8 Go de RAM DDR4 et un SSD NVME de 256 Go. Il dispose d'une connectique complète : un emplacement 2,5 pouces libre (pour ajouter un disque dur ou un SSD supplémentaire, le WiFi5, le bluetooth 4.1, 4 ports USB 3.0, 2 ports USB 2.0, un port HDMI 2.0, un DisplayPort, un port Ethernet Gigabit et tourne sous Windows 10 que vous pourrez mettre en français. Ce mini PC fait 12,8 x 12,8 x 5 cm et pèse 1,2 kg. Il est livré avec une alimentation européenne. Branchez ce mini PC sur une TV ou un écran et vous avez un ordinateur discret et performant.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une vingtaine de jours. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre
89,99 €Assistant vocal Amazon Echo Show 8 avec Alexa à 89,99 €
Valable jusqu'au 06 Août

Amazon fait une promotion sur l'assistant vocal Amazon Echo Show 8 qui passe à 89,99 € (au lieu de 129,99 €). L'appareil piloté par la voix et vos doigts fonctionne avec Alexa, l’intelligence artificielle développée par Amazon. Vous pourez avec elle écouter de la musique, interagir avec vos appareils domotiques, écouter les infos, des livres audio la radio, connaître la météo et d’accéder à des milliers d’autres possibilités grâce aux Skills : recettes de cuisine, petits jeux, etc. Grâce à son écran HD de 8 pouces, vous pourrez également regarder des séries, des films, des photos, afficher des recettes de cuisine, appeler vos amis en visio, contrôler vos caméras de sécurité, etc...


> Voir l'offre

Sujets relatifs
resolution ecran pour prog en VB
résolution d'écran
recuperation de résolution d'écran en C sous linux
commande créer la fonction effacer image en VB10
Même résolution différents PC différents affichage
Récupérer les coordonnées d'un pixel sur l'écran
plein d'ecran de mon compilateur c++
effacer console java
VBA : Userform+son et vidéo pleine écran
ecran noir avec langage C++
Plus de sujets relatifs à effacer écran ?? c++ ou c **résolu**
 > Tous les forums > Forum Autres langages