Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

megagreg Achat - Vente Informatique : Walk_Man, Bok Au coin de la ruelle : sthv Achat - Vente Divers : super-warrior, 1 utilisateur anonyme et 37 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

projet en c++

 
n°17844
astrofan
Profil : Jeune recrue
Posté le 10-11-2006 à 13:59:21  profilanswer
 

Bonjour tout le monde !!!
 
Je me suis mis au C++ il y a très peu de temps! J'ai un projet:créer un logiciel en mode invite de commandes qui trouverait la bonne formule et calculerait automatiquement ce que l'on cherche!
 
C'est des formules d'électrotechnique! Jusqu'à maintenant j'ai crée tous les programmes "esclave" qui doivent être appelés par le programme maître que je suis en train de créer.
 
Dans l'un de vos sujets, j'ai vu que pour appeler un programme, il faut faire la commande run().
 
Mais malgré cela je ne comprend pas beaucoup!
 
Pour l'instant j'en suis là:
 

Citation :

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
using namespace std;
 
int main (int nNumberofArguments, char* pszArgs[])
{
string choix;
debut:
      cout <<"Bienvenue dans FormulFounder! \n \n   Ce logiciel aura la particularite de vous faciliter la vie!\nIl vous suffit de rentrer le mot cle qui est le fichier README \npour acceder a la bonne formule!\nVersion Beta: peu de formules mais le logiciel qui marche!\n";
cout <<"Rentrez le mot-cle avec les memes symboles:";
if (choix=tension) {
   run(c:\tension.exe);
}
 
else {
  cout<<"Desole mais ce mot cle est invalide!";
  goto debut;
}
system("PAUSE" );
return 0;
}


 
 
Et en fait j'ai commencé par le batch et j'aimerais que cela fasse comme cela (en batch):
 

Citation :

@echo off
set /p choix=A quelle formule voulez-vous aller?
If "%choix%"=="tension" start C:\tension.exe
PAUSE


 
Enfin le même système!!
 
Merci de me répondre!!


Message édité par astrofan le 10-11-2006 à 14:14:13
n°17847
cmoila
Profil : Membre
Posté le 10-11-2006 à 16:49:34  profilanswer
 

Va voir dans "process.h"
 
 
/* execl() example */
#include <stdio.h>
#include <process.h>
 
int main(int argc, char *argv[])
{
  int loop;
 
  printf("%s running...\n\n", argv[0]);
 
  if (argc == 1) {    /* check for only one command-line parameter */
    printf("%s calling itself again...\n", argv[0]);
    execl(argv[0], argv[0], "ONE", "TWO", "THREE", NULL);
    perror("EXEC:" );
    exit(1);
  }
 
  printf("%s called with arguments:\n", argv[0]);
 
  for (loop = 1; loop <= argc; loop++)
 
    puts(argv[loop]);       /* Display all command-line parameters */
  return 0;
}

n°17851
astrofan
Profil : Jeune recrue
Posté le 11-11-2006 à 10:58:32  profilanswer
 

cmoila a écrit :

Va voir dans "process.h"
 
 
/* execl() example */
#include <stdio.h>
#include <process.h>
 
int main(int argc, char *argv[])
{
  int loop;
 
  printf("%s running...\n\n", argv[0]);
 
  if (argc == 1) {    /* check for only one command-line parameter */
    printf("%s calling itself again...\n", argv[0]);
    execl(argv[0], argv[0], "ONE", "TWO", "THREE", NULL);
    perror("EXEC:" );
    exit(1);
  }
 
  printf("%s called with arguments:\n", argv[0]);
 
  for (loop = 1; loop <= argc; loop++)
 
    puts(argv[loop]);       /* Display all command-line parameters */
  return 0;
}


 
OK merci mais...je ne sais pas tout ce que cela veut dire!! Pourriez vous m'expliquer s'il vous plait??
 
C'est bien string pour déclarer une variable avec du texte??
 
Et cela veut dire quoi :

Citation :

printf("%s calling itself again...\n", argv[0]);
    execl(argv[0], argv[0], "ONE", "TWO", "THREE", NULL);
    perror("EXEC:" );


 
Parce que là je pige rien du tout!!
 
En tous cas, je vous remercie de m'avoir aidé sur ce point ! Merci!

n°17853
cmoila
Profil : Membre
Posté le 11-11-2006 à 18:46:30  profilanswer
 

Tu n'as pas acces a une aide sur les librairies standards C et C++ ?
 
Dans ton code tu mets un fonction "run()" or a ma connaissance ce n'est pas du C , mais du basic. Comme dit plus haut, les fonctions qui gerent les processus en C sont dans "process.h". J'ai rien trouvé dans le C++ standard.
Faut voir que l'on utilise pas ces fonctions quand on travaille avec une interface graphique type windows. on utilise les fonctions de l'api.  
 
printf() est la fonction de formatage classique du C.  
perror() est la fonction standard de sortie d'erreur sur stderr. (pas tres utile)
 
et execl() est la fonction qui lance un processus en C version console.
il y a tout une famille de fonctions :
 
 
Header File
 
process.h  
 
Category
 
Process Control Routines
 
Prototype
 
int execl(char *path, char *arg0 *arg1, ..., *argn, NULL);
 
int _wexecl(wchar_t *path, wchar_t *arg0 *arg1, ..., *argn, NULL);
 
int execle(char *path, char *arg0, *arg1, ..., *argn, NULL, char **env);
int _wexecle(wchar_t *path, wchar_t *arg0, *arg1, ..., *argn, NULL, wchar_t **env);
 
int execlp(char *path, char *arg0,*arg1, ..., *argn, NULL);
int _wexeclp(wchar_t *path, wchar_t *arg0,*arg1, ..., *argn, NULL);
 
int execlpe(char *path, char *arg0, *arg1, ..., *argn, NULL, char **env);
int _wexeclpe(wchar_t *path, wchar_t *arg0, *arg1, ..., *argn, NULL, wchar_t **env);
 
int execv(char *path, char *argv[]);
int _wexecv(wchar_t *path, wchar_t *argv[]);
 
int execve(char *path, char *argv[], char **env);
int _wexecve(wchar_t *path, wchar_t *argv[], wchar_t **env);
 
int execvp(char *path, char *argv[]);
int _wexecvp(wchar_t *path, wchar_t *argv[]);
 
int execvpe(char *path, char *argv[], char **env);
 
int _wexecvpe(wchar_t *path, wchar_t *argv[], wchar_t **env);
 
Description
 
Loads and runs other programs.
 
The functions in the exec... family load and run (execute) other programs, known as child processes. When an exec... call succeeds, the child process overlays the parent process. There must be sufficient memory available for loading and executing the child process.
 
path is the file name of the called child process. The exec... functions search for path using the standard search algorithm:
 
If no explicit extension is given, the functions search for the file as given. If the file is not found, they add .EXE and search again. If not found, they add .COM and search again. If found, the command processor, COMSPEC (Windows) or COMMAND.COM (DOS), is used to run the batch file.
 If an explicit extension or a period is given, the functions search for the file exactly as given.
 
The suffixes l, v, p, and e added to the exec... "family name" specify that the named function operates with certain capabilities.
 
l specifies that the argument pointers (arg0, arg1, ..., argn) are passed as separate arguments. Typically, the l suffix is used when you know in advance the number of arguments to be passed.
v specifies that the argument pointers (argv[0] ..., arg[n]) are passed as an array of pointers. Typically, the v suffix is used when a variable number of arguments is to be passed.
p specifies that the function searches for the file in those directories specified by the PATH environment variable (without the p suffix, the function searches only the current working directory). If the path parameter does not contain an explicit directory, the function searches first the current directory, then the directories set with the PATH environment variable.
 
e specifies that the argument env can be passed to the child process, letting you alter the environment for the child process. Without the e suffix, child processes inherit the environment of the parent process.
 
Each function in the exec... family must have one of the two argument-specifying suffixes (either l or v). The path search and environment inheritance suffixes (p and e) are optional; for example:
 
execl is an exec... function that takes separate arguments, searches only the root or current directory for the child, and passes on the parent's environment to the child.
 execvpe is an exec... function that takes an array of argument pointers, incorporates PATH in its search for the child process, and accepts the env argument for altering the child's environment.
 
The exec... functions must pass at least one argument to the child process (arg0 or argv[0]); this argument is, by convention, a copy of path. (Using a different value for this 0th argument won't produce an error.)
 
path is available for the child process.
 
When the l suffix is used, arg0 usually points to path, and arg1, ..., argn point to character strings that form the new list of arguments. A mandatory null following argn marks the end of the list.
 
When the e suffix is used, you pass a list of new environment settings through the argument env. This environment argument is an array of character pointers. Each element points to a null-terminated character string of the form
 
   envvar = value
 
where envvar is the name of an environment variable, and value is the string value to which envvar is set. The last element in env is null. When env is null, the child inherits the parents' environment settings.
 
The combined length of arg0 + arg1 + ... + argn (or of argv[0] + argv[1] + ... + argn[n]), including space characters that separate the arguments, must be less than 260 bytes. Null terminators are not counted.
 
When an exec... function call is made, any open files remain open in the child process.
 
Return Value
 
If successful, the exec... functions do not return. On error, the exec... functions return -1, and the global variable errno is set to one of the following values:
 
EACCES Permission denied
EMFILE Too many open files
ENOENT Path or file name not found
ENOEXEC Exec format error
ENOMEM Not enough memory
 
 

n°17854
astrofan
Profil : Jeune recrue
Posté le 11-11-2006 à 19:04:48  profilanswer
 

okkkkkk  merci beaucoup!!
 
J'ai un peu mieux compris maintenant!! Je vais pouvoir m'atteler à mon projet!!

n°17876
jxano
Le 'x' ? C'est pour décorer.
Profil : Membre
Posté le 16-11-2006 à 13:04:03  profilanswer
 

Je ferais plutôt comme ça :
 
#include <stdio.h>
#include <string.h>
 
int main ()
{
char Choix [50];
char Sortir;
 
fprintf ("Bienvenue ! ...\n" );
Sortir= 'N';
while (Sortir == 'N')
  {
  fprintf ("Mot-clé : " ); gets (Choix);
  if (strcmp (Choix, "tension" ) == 0)  
    {
    system ("tension" );
    Sortir= 'O';
    }
  else printf ("Mot-Clé incorrect !\n" );
  }
}
 
Je n'y comprends rien à ces histoires de processus... C'est du C tout pourri, mais ça suffit pour ce qu'il y a à faire.


Message édité par jxano le 16-11-2006 à 13:11:55

---------------
Miximus in lecto, fateor peccavimus hospes. Si dices quare nulla matella fuit !
n°17880
cmoila
Profil : Membre
Posté le 17-11-2006 à 23:38:17  profilanswer
 

Hum, hum ....
 
system() ne permet absolument pas de gérer un processus externe à partir d'un prog, mais de lancer un commande systeme sans avoir la moindre idée de ce qui va vraiment etre exécuté. Ca n'a rien à voir !
 
de plus system(), dépend du .... système, évidemment !
 
 
 

n°17885
astrofan
Profil : Jeune recrue
Posté le 18-11-2006 à 23:31:47  profilanswer
 

alors j'ai vu quelques potes... et ils m'ont dit de faire comme ça:
 

Code :
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6. int main;
  7. {
  8. char choix;
  9. sommaire:
  10. cout<<"Quel est le mot-clé?";
  11. cin>>choix
  12. if(choix='tension');
  13. then {
  14. system("start %s", tension.exe);
  15. goto tension;}
  16. else { cout<<"le mot clé est invalide!";
  17. goto sommaire;}
  18. tension:
  19. if("start %s", tension.exe);
  20. then {
  21. cout<<"Veuillez patienter svp...";}
  22. else { cout<<"Erreur au lancement du programme!!";}
  23. system("PAUSE" );
  24. return 0;


 
Et quand je le compile avec Dev C++, ya des erreurs de partout!! où sont-elles??
 

n°17892
jxano
Le 'x' ? C'est pour décorer.
Profil : Membre
Posté le 19-11-2006 à 23:39:29  profilanswer
 

Difficile à dire... Il y en a tellement ! Tes copains sont très serviables, mais leur proposition ne ressemble que vaguement à du C. Déjà, l'utilisation des étiquettes et des "goto" est très criticable...
 
A mon avis, tu devrais laisser tomber ce code et revenir au tien... Apparamment, puisque tu veux que le programme appelant reprenne le contrôle après l'exécution de l'appelé, utilise une fonction de la famille "spawn..." (celles de "exec..." font juste un transfert d'un processus à l'autre, sans possibilité de revenir). Et pour la boucle, pas de "goto", mais un "while ()" !


---------------
Miximus in lecto, fateor peccavimus hospes. Si dices quare nulla matella fuit !
n°17905
cmoila
Profil : Membre
Posté le 21-11-2006 à 23:05:47  profilanswer
 

astrofan a écrit :

alors j'ai vu quelques potes... et ils m'ont dit de faire comme ça:
 

Code :
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6. int main;
  7. {
  8. char choix;
  9. sommaire:
  10. cout<<"Quel est le mot-clé?";
  11. cin>>choix
  12. if(choix='tension');
  13. then {
  14. system("start %s", tension.exe);
  15. goto tension;}
  16. else { cout<<"le mot clé est invalide!";
  17. goto sommaire;}
  18. tension:
  19. if("start %s", tension.exe);
  20. then {
  21. cout<<"Veuillez patienter svp...";}
  22. else { cout<<"Erreur au lancement du programme!!";}
  23. system("PAUSE" );
  24. return 0;


 
Et quand je le compile avec Dev C++, ya des erreurs de partout!! où sont-elles??


 
 
Difficile de répondre vu que ce code a au moins une erreur par ligne.
 
 
int main;     // où sont les paranthèses et les arguments de la fct main()
{
 
char choix;  // choix est donc un caractère unique
sommaire:
cout << "Quel est le mot-clé?";
cin >> choix     // manque le ;
 
if(choix='tension');   // 'tension' n'a aucun sens en C 'X' permet de rentrer une constante caractère
then {            /// "then" c'est pas du C
system("start %s", tension.exe);    // verifier les arguments de la fonction system, <tension.exe> n'a pas de sens en C
goto tension;}     /// c'est gentil les "goto", mais faut une bonne raison pour les utiliser
else { cout << "le mot clé est invalide!";
goto sommaire;}
 
tension:
 
if("start %s", tension.exe); // syntaxe inconnue en C
then {       // le C n'est pas du basic
cout << "Veuillez patienter svp...";}
else { cout << "Erreur au lancement du programme!!";}
 
system("PAUSE" );
return 0;   // manque le "}" de fin de routine

n°17914
astrofan
Profil : Jeune recrue
Posté le 24-11-2006 à 13:01:55  profilanswer
 

merci des indications!!
 
j'ai assez mal compris comment utiliser while et le systeme d'étiquettes...
 
j'ai peut être trouvé une solution... pax exemple pour calculer la loi d'ohm et la puissance...
 

Code :
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <iostream>
  4. #include <cmath>
  5. using namespace std;
  6. int main (int nNumberofArguments, char* pszArgs[])
  7. {
  8. char choix;
  9. sommaire:
  10. cout<<"Entrez le mot-cle:";
  11. cin>>choix;
  12. if(choix==ohm)
  13.   {goto ohm;}
  14. else {if(choix==pu)
  15.           {goto pu;}
  16.        else {cout<<"Le mot-cle est invalide!";
  17. goto sommaire;}
  18. }
  19. ohm:
  20. double r;
  21. cout<<"entrez la valeur de r:";
  22. cin>>r;
  23. double i;
  24. cout<<"entrez la valeur de i:";
  25. cin>>i;
  26. double u;
  27. u=r*i;
  28. cout<<"la valeur de u est:"<<i;
  29. goto sommaire;
  30. pu...


 
ect!!
 
svp..indiquez moi mes fautes!!  
 
merci d'avance!!

n°17940
jxano
Le 'x' ? C'est pour décorer.
Profil : Membre
Posté le 29-11-2006 à 12:28:57  profilanswer
 

Bonjour,
 
Pour commencer, mettons les points sur les i :  
 
1/ "goto" ne fait pas partie du C (et à fortiori du C++) ; il n'est pas dans la liste des mots prédéfinis du langage, donc il faut l'oublier. C'est "while" qu'il faut utiliser pour faire la boucle du menu ; pour le transfert d'exécution aux formules, les fonctions et les procédures sont le meilleur choix d'implantation.
 
2/ Une variable de type "char" ne permet de stocker qu'un seul caractère. Pour toute une chaîne, on se sert d'un tableau de caractères. Si ce type de donnée t'intimides, tu peux utiliser les initiales des formules, ou des numéros.
 
Je ne fais que redire ce que cmoila t'a déjà dit. Tu devrais te procurer un petit livre d'initiation à la programmation en C/C++, ce serait une bonne base pour commencer.
 
Je vois que tu as abandonné l'idée de lancer des programmes séparés ; c'est préférable vu le peu d'intérêt de la méthode comparé à la simplicité des formules à mettre en oeuvre (et à ton niveau en C/C++).
 
Bien qu'ayant déjà donné question exemples, en voici un autre que j'espère accessible :
 
-------------
#include <iostream.h> // Le strict nécessaire
#include <math.h> // Utile pour calculer les puissances, les racines carrées...
 
void Ohm () // Il suffira d'appeler cette procédure par son nom pour la faire marcher.
  {
  double r, i, u;
  cout >> "Calcul de la loi d'Ohm.\n";
  cout >> "Valeur de r : "; cin << r;
  cout >> "Valeur de i : "; cin << i;
  u= r*i;
  cout >> "Résultat : " >> r >> "\n";
  }
 
void Puissance ()
  {
  // Tu mets le code pour le calcul de la puissance ici.
  }
 
int main () // Les variables ne sont utiles que si tu te sers de la ligne de  
               // commande pour entrer des trucs directement.
  {
  char choix= 'x';
  cout >> "Formules de physique\n";
  while (choix != 'f') // Tant que "choix" est différent de 'f' comme "fin",
                            // on reste dans la boucle.
    {
    cout >> "(o)hm, (p)uissance, (f)in.\nEntrez l'initiale de l'option choisie : ";
    cin << choix;
    if (choix == 'o') Ohm (); // le signe '==' sert à tester l'égalité
    else if (choix == 'p') Puissance (); // Pas besoin de "then"
    else if (choix != 'f') cout >> "Option inconnue.\n"; // '!=' signifie "différent de"
    }
  cout >> "Fin du programme.\n"; // On sort quand choix=='f'  
  return 0;
  }
-------------
 
Tâche de comprendre que le C++ n'est ni du Basic, ni du Pascal. A part ça, bon courage !


Message édité par jxano le 29-11-2006 à 12:32:17

---------------
Miximus in lecto, fateor peccavimus hospes. Si dices quare nulla matella fuit !
n°17944
cmoila
Profil : Membre
Posté le 29-11-2006 à 20:27:19  profilanswer
 


Lis ca pour commencer direct avec du C++
 
http://c.developpez.com/tutcpp/book1.php
 
 
sinon tu peux lire du C avant :
 
ftp://ftp2.developpez.be/developps/c/PolyC.pdf
 
 
ensuite t'as plein d'autre cours ici : http://c.developpez.com/cours/

n°18024
astrofan
Profil : Jeune recrue
Posté le 12-12-2006 à 11:48:31  profilanswer
 

ok merci je comprends un pneu mieux!!
 
mais j'ai résolu le prob...
 
les formules, je reste dans les programmes extérieurs
 
et le programme maitre... en batch compilé .com
 
voilou!!
 
dès que ce sera fini, je mettrai le lien ici même!!
 
à coucou chao!!


Aller à :
Ajouter une réponse