Fonction et procedure - C++ - Programmation
Marsh Posté le 04-11-2015 à 15:52:47
Déjà: mise en page du code à revoir...
sylargh a écrit :
|
Ca serait bien de nous dire quelles erreurs...
Bon, MinGW me dit
Citation :
|
D'après internet faut rajouter
Code :
|
dans fonctions.cpp, ce qui résout le problème. Entre parenthèses, le system() c'est probablement pas très élégant, il n'y a pas mieux en C++? (Je connais juste le C.)
Après il y a une faute de frappe #include "fonction.h" il manque un 's' et une autre erreur facile à corriger:
Citation : main.cpp|5|error: '::main' must return 'int'| |
et puis
Citation : main.o:main.cpp: (.text.startup+0x1b8)||undefined reference to `SuppresionCaractere(char*)'| |
problème de nom dans fonctions.cpp: SuppresionCharactere vs SuppresionCaractere
Restent les warnings (si il y en a pas faut indiquer -Wall au GCC/MinGW!):
Citation : fonctions.cpp|21|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]| |
à de nombreuses reprises, "unsigned" résout le problème.
et puis
Citation : main.cpp|13|warning: array subscript is above array bounds [-Warray-bounds]| |
à plusieurs reprises. Ca c'est plus grave et effectivement le programme plante rapidement. Je te laisse vérifier ton code/algo.
edit: D'ailleurs, si c'est du C++, il y a plus élégant/pratique que des array of char il me semble, mais bon, je ne sais pas ce que veut le prof...
Marsh Posté le 04-11-2015 à 16:25:43
Quelque remarques en vrac...
Dans convertion() (qui d'ailleurs s'écrit conversion en français...):
Code :
|
Code :
|
idem dans ChangementCaractere() et SuppresionCaractere()...
RechercheCaractere():
Code :
|
Danger: Si le caractère cherché n'est pas dans la chaîne au dernier tour de la boucle on dépasse les bornes de la chaîne de caractère (out of bound). Il faut d'abord vérifier si la chaîne n'est pas terminée et ensuite faire la comparaison pour voir si on a trouvé le caractère demandé.
main():
Code :
|
n'affiche pas une adresse comme demandé. Je ne parle pas C++, je ne sais donc pas comment faire avec cout.
Pour le warning dont je parlais, ta boucle for() (toujours dans main) est fausse et inutile, si a chaque exécution du programme on ne peut choisir qu'une seule opération il est inutile de sauvegarder / faire des copies de la chaîne initiale (ce qui en plus peut se faire de manière plus élégante qu'une boucle).
Ah oui, je pense que par "déterminer la longueur d'une chaine" le prof entends autre chose qu'un appel de strlen() non?
Et perso je virerais les system("cls" ) et les _getch().
Marsh Posté le 04-11-2015 à 22:35:41
Le problème de ton exercice, c'est que soit tu fais du C, ou les chaines sont des suites de caractères accédées par pointeur char *, soit tu fais du C++ moderne, ou tu utilises le type standard string et tu as la librairie standard.
Mais il faut surtout pas mélanger les deux.
Typiquement, en C++ (11), on ferait un truc du genre
Code :
|
l'intérêt de la chose, c'est que par construction, c'est bien plus blindé contre les erreurs que la même chose écrite en C.
Bon, évidemment, si tu as un prof qui a pas compris que le C++ c'est pas du C, et qui attends que tu réécrives a la main un parcours de chaine de caractère un a un pour comparer avec un caractère recherché, ça sera instructif pour apprendre le C (quoique tu aies strchr en standard), mais pas vraiment pour apprendre le C++.
A+,
Marsh Posté le 07-11-2015 à 11:32:10
Bonjour merci de vos réponses, le programme marche apres avoir enlever la faute "H" a Caractere, merci
Oui mon prof date un peu, ( dans les 60 ans ), avec mes camarades
nous connaissons deja String mais ils refusent de nous le faire utiliser pour le moment... & pour les pointeurs et reference je suis encore en train d'apprendre, je me suis pas beaucoup exercé ^^, par exemple mon probleme de renvoie d'adresse qui ne fonctionne pas, je ne sais pas trop comment faire pour le moment.
Merci de l'aide apporter rapidement sur ce Forum
Marsh Posté le 08-11-2015 à 13:14:45
> nous connaissons deja String mais ils refusent de nous le faire utiliser pour le moment
Ce qui le disqualifie d'emblée pour enseigner le C++ (les char * ça doit être vu après les strings, pas avant, en C++).
A+,
Marsh Posté le 11-11-2015 à 22:20:33
sylargh a écrit : Bonjour merci de vos réponses, le programme marche apres avoir enlever la faute "H" a Caractere, merci |
J'espère que tu as aussi pris en compte les autres remarques/warnings.
Citation : Bon, évidemment, si tu as un prof qui a pas compris que le C++ c'est pas du C, et qui attends que tu réécrives a la main un parcours de chaine de caractère un a un pour comparer avec un caractère recherché, ça sera instructif pour apprendre le C (quoique tu aies strchr en standard), mais pas vraiment pour apprendre le C++. |
J'ai l'impression qu'il y a pas mal de profs qui pensent qu'il suffit de faire s/printf/cout/g (idem cin) pour transformer du C en C++, parce que "C++" ça doit faire mieux que "C" sur les présentations de la formation et le CV des étudiants.
Marsh Posté le 04-11-2015 à 15:13:16
Bonjour,
J'ai un problème sur un exercice, voici les consignes :
Les procédures et fonctions qui seront écrites dans cet exercice devront être compilées séparément.
Votre projet devra donc comporter un fichier "main. cpp il dans lequel on trouvera la fonction
main, un fichier "fonctions.h" dans lequel se trouveront les déclarations de toutes les fonctions que
l'on vous demande d'écrire, et un fichier "fonctions.cpp" dans lequel se trouvera le corps de ces
fonctions
o Ecrire une procédure permettant la saisie d’une chaine.
o Ecrire une fonction permettant de déterminer la longueur d'une chaine.
Elle calculera et retournera la longueur de la chaîne de caractères.
o Ecrire une procédure permettant de convertir tous les caractères Majuscule d’une chaine en
minuscule.
o Ecrire une fonction permettant de rechercher un caractère dans une chaine
Si le caractère donné est trouvé, la fonction retournera son adresse dans la chaine ; sinon elle
retournera le pointeur NULL.
Ecrire une procédure qui permette de remplacer tous les caractères égaux à un caractère donné,
par un autre caractère donné. Par exemple le remplacement des ‘e’ par ‘o’ dans la chaine
« telephone » donnera la chaine « tolophono
o Ecrire une procédure qui permette d’éliminer tous les caractères égaux à un caractère donné, par
un autre caractère donné. Par exemple l’élimination des ‘e’ dans la chaine « telephone » donnera
la chaine « tlphon ».
o Ecrire un programme permettant de tester chacune de ces procédures et fonctions
Voici mon header :
mon cpp avec les fonctions et procédure :
et enfin mon cpp main :
Sa mafiche deux erreurs que je ne comprend pas, Quelqu'un voit le probleme svp?
Cordialement