Vous n'êtes pas identifié.
voilà je viens de commencer mais je connais pas le C++ sur calto
/* **Ceci recherche un mot dans une liste et retourne le mot anglais correspondant **Si le mot n'est pas trouvé, alors l'application recommence. **L'utilisateur quitte le programme en pressant On/Acc */ #include <stdio.h> #include <conio.h> #include <prgnuls.h> #include <mkeys.h> #include <string.h> #define NBR_MOTS 2 const char* wordsfr[NBR_MOTS] = { "MERE","PERE" }; const char* wordseng[NBR_MOTS] = { "MOTHER","FATHER" }; //écran du début void splashscreen(){ clrscr(); gotoxy(2,3); printf("Traduction Fr/Eng"); gotoxy(1,7); printf("by PH Corporation"); gotoxy(1,8); printf("http://phcorp.new.fr"); getch(); } //l'utilisateur rentre un mot void entreemot(char motLu[]){ clrscr(); gotoxy(2,1); printf("Traduction Fr/Eng"); gotoxy(1,4); printf("Mot en français : ?"); gotoxy(1,5); scanf(" %s", motLu); } //on cherche le mot dans la 'bdd' de mots fr int chercher(const char* mot) { int i; for(i=0; i<NBR_MOTS; i++) if(strcmp(mot,wordsfr[i])==0) return i; return -1; // -1 si pas trouvé } //on retourne le mot correspondant en eng const char* traduire(int i){ return wordseng[i]; } //on affiche le mot traduit à l'écran void ecriremot(const char* mot){ clrscr(); gotoxy(1,2); printf("Traduction : "); gotoxy(1,3); printf(mot); } //si le mot n'est pas présent dans la 'bdd' void pasdetraduction(){ clrscr(); gotoxy(2,3); printf("Echec"); } //fonction principale int main (void){ while(getkb()!= 69) { //tant qu'on n'appuie pas sur On/Acc char mot[100]; int i; splashcreen(); entreemot(mot); i = chercher(mot); if(i!=-1){ const char* traduction = traduire(i); ecriremot(traduction); }else{ pasdetraduction(); } } return(0); }
merci, je compte plus tard faire une recherche dans un fichier basique en plus qui contiendrait une liste de mots et leur traduction sous la forme :
MERE=MOTHER
PERE=FATHER
etc...
puis je m'occuperais du menu, des options etc...
enfin, c'est qu'un projet
Hors ligne
Oulala... :?
En premier lieu j'aurais bien dit que les erreurs renvoyées par le compilo auraient été utiles pour nous aussi (on ne les repère pas forcément du premier coup d'oeil), mais à voir le code je me doute que la liste doit être longue...
Je vais essayer de déblayer un peu le terrain:
A.
const char wordsfr[lignes][colonnes] = { {'MERE','PERE'} } const char wordseng[lignes][colonnes] = { {'MOTHER','FATHER'} }
1) "lignes" et "colonnes", d'où ça sort ça? Connais pas. Le compilo non plus.
2) Utilise plutot une liste de pointeurs vers tes mots plutot qu'une matrice pour stocker toutes les lettres, tu économiseras de la mémoire
3) Un mot doit être entouré de guillemets ( "..." ), pas d'apostrophes ( '...' ); les apostrophes c'est pour les caracteres simples.
4) Un petit point virgule après une déclaration de tableau, ça ne fait jamais de tort...
=> Code conseillé:
#define NBR_MOTS 2 const char* wordsfr[NBR_MOTS] = { "MERE","PERE" }; const char* wordseng[NBR_MOTS] = { "MOTHER","FATHER" };
B.
char entreemot(){ clrscr(); gotoxy(2,1); printf("Traduction Fr/Eng"); gotoxy(1,4); printf("Mot en français : ?"); gotoxy(1,5); scanf(" %s", mot); return mot; }
1) Pas de scanf() sur G100... Tu pourras taper un mot mais tu n'arriveras jamais à appuyer sur Entrée pour valider (la touche EXE n'est pas utilisable pour ça)...
2) tu ne peux pas renvoyer un "mot" comme ça dans une fonction (vu que ce n'est pas un char).
Il faut que ta fonction reçoive un tableau de char qui pourra accueillir le mot entré par l'utilisateur:
void entreemot(char motLu[]){ clrscr(); gotoxy(2,1); printf("Traduction Fr/Eng"); gotoxy(1,4); printf("Mot en français : ?"); gotoxy(1,5); scanf(" %s", motLu); } // "motLu" contient le mot apres avoir appelé la fonction
C.
int cherchera(mot) { int i, j; for (i=0; i<colonnes; i++) { for (j=0; j<lignes; j++) { if (wordsfr[i][j] = mot) { return i; } } int chercherb(mot) { int i, j; for (i=0; i<colonnes; i++) { for (j=0; j<lignes; j++) { if (wordsfr[i][j] = mot) { return j; } }
1) On ne peut pas comparer comme ça 2 mots, il faut obligatoirement les comparer lettre par lettre. (D'aileurs c'est pas '=' pour comparer, c'est '=='). Tu peux utiliser la foncton strcmp de <string.h>, ça renvoie 0 si les deux mots sont identiques.
2) Ecrire deux fois presque la meme chose pour récupérer 2 valeurs, c'est pas très efficace... Utilise plutot le passage par référence ou par pointeur pour récupérer i et j en même temps. Bien que dans ton cas, l'utilisation d'une liste facilite les choses vu qu'il n'y a qu'un nombre à renvoyer:
int chercher(const char* mot) { int i; for(i=0; i<NBR_MOTS; i++) if(strcmp(mot,wordsfr[i])==0) return i; return -1; // -1 si pas trouvé }
E.
void ecriremot(char mot)
de nouveau, un "mot" n'est pas un "char":
void ecriremot(const char* mot)
F.
char traduire(i, j) { for (i=0; i<colonnes; i++) { for (j=0; j<lignes; j++) { char traduction; traduction = wordseng[i][j]; return traduction; } }
Tu sais que tu veux le "mot" désigné par i,j ... donc il est en wordseng[i][j].
Boucler sur le tableau n'a aucun sens: tu reçois i et j en parametre pour les remettre à zero aussitôt apres. Ta fonction renverrait simplement wordseng[0][0].
Faire une fonction pour ça n'est pas vraiment utile, mais bon:
const char* traduire(int i) { return wordseng[i]; }
G. reste à adapter le main():
int main (void){ while(getkb()!= 69) { char mot[100]; splashcreen(); entreemot(mot); i = chercher(mot); if(i!=-1){ const char* traduction = traduire(i); ecriremot(traduction); }else{ pasdetraduction(); } } return(0); }
Voilà... J'espère que ça éclaire un peu les problèmes dont le compilateur se plaint
Hors ligne
:!: Attention, âmes sensibles évitez de lire ce post :!:
Tes erreurs générales:
> un code mal foutu, illisible, sans commentaire et sans indentation.
> C'est du C que t'as pondu, pas du C++.
> Faut lire les messages d'erreurs en sorties du compilo. Y'aura pas toujours quelqu'un pour le compiler dans sa tête pour savoir ce qui déconne.
Tes erreurs de syntaxes et autres:
> "const char wordsfr[lignes][colonnes]" Symboles 'lignes' et 'colonnes' non définis
> "const char wordseng[lignes][colonnes]" Idem
> "scanf(" %s", mot);" Symbole 'mot' non défini.
> "return mot; " Symbole 'mot' non défini.
> "int cherchera(mot) { " Le type 'mot' n'est pas défini.
> "int cherchera(mot) { " Il manque l'identifieur du 1er parametre.
> "for (i=0; i<colonnes; i++) {" Symbole 'colonnes' non défini.
> "for (j=0; j<lignes; j++) { " Symbole 'lignes' non défini.
> "if (wordsfr[i][j] = mot) { " Symbole 'mot' non défini.
> Fonction "int chercherb(mot)": Meme erreurs qu'au dessus.
> "printf(mot);": "char*" demandé, "char" fourni.
> "i = cherchera(mot);": fonction 'int cherchera(char)' non définie.
> "j = chercherb(mot);": fonction 'int chercherb(char)' non définie.
Et c'est celle que j'vois à l'oeil nu hein...
Les trucs qui fonctionnent pas sur la Graph100:
> 'scanf' ne fonctionne pas correctement, à éviter.
Tes erreurs de compréhension:
> '==' effectue une comparaison, '=' effectue une affectation.
> Un caractere (une lettre par exemple) est codée sur un 'char'. Une chaine de caractere est codée sur un pointeur sur caractere, donc un 'char*'.
> On ne peut comparer 2 chaines de caracteres en C directement avec '=='.
char traduire(i, j) { for (i=0; i<colonnes; i++) { for (j=0; j<lignes; j++) { char traduction; traduction = wordseng[i][j]; return traduction; } }
> La réécriture d'un parametre par dessus les rend totalement inutile.
> Un retour de fonction non-conditionnée dans une boucle rend celle ci totalement inutile.
Bref, fous moi ce code à la poubelle.
C'est totalement pourri, vaut mieux reprendre depuis le tout début.
Déjà apprends à utiliser "printf" sur ton PC, à savoir comment il fonctionne, écrire des bétises, des chiffres, etc... Ensuite apprends à manier les pointeurs en général, l'allocation mémoire, puis les pointeurs sur caractere, ce qui te permettra de construire et manipuler des chaines de caracteres correctement.
Un traducteur, meme mot à mot, c'est déjà un gros projet, donc trop gros pour un débutant total...
Commence déjà par des choses bien plus simple!! Par exemple un "Devines le nombre en un nombre de coup limité"... et commences d'abbord sur le PC, pour apprendre...
Edit: Julien m'a fait signalé qu'effectivement, j'avais engueulé pour un code de débutant, donc faut pas se décourager trop vite... Ceci dit, pour moi, meme si les bonnes idées sont ici, il faut améliorer grandement la technique...
PS: A déplacer dans Techniques de Programmations
PS2: phcorp, va regarder tes messages privés!
Hors ligne
:!: Attention, âmes sensibles évitez de lire ce post :!:
Effectivement, t'es pas tout doux avec notre débutant le pauvre !!!
Quand moi j'étais un noob (et je dois encore l'être aujourd'hui xD), je n'ai jamais eu à lire ce genre de post LOL
Enfin bon courage à notre débutant quand même :P
PS: Azor, j'aime quand tu es cruel xD
Hors ligne
alala désolé g un peu ( beaucoup ) baclé mon code.
je vous remercie d'avoir pris le temps de m'aider.
en fait, je dois avouer que mes notions de C++ de PC ne me servent à rien sur g100
surtout si je ne peux pas utiliser les cout, cin et autre...
je vais corriger mes erreurs et essayer de m'améliorer en prog
Hors ligne
La base de ton prog est plutôt bonne (on a vu nettement pire que ça)... Ce qui pêche, c'est la technique Et comme tu dis, connaitre cin et cout en C++ ne t'avance pas beaucoup (d'ailleurs on ne peut certainement pas prétendre savoir faire du C++ juste parce qu'on arrive à bidouiller avec cin et cout :?)
Il faut que tu t'attardes un peu sur l'utilisation exacte des chaines de caractères et des pointeurs, et puis ça ira déjà mieux C'est principalement une question d'expérience. Tu verras dans quelques mois tu risques d'ouvrir de grands yeux si tu ressors ce code
Hors ligne
bon j'ai encore quelques erreurs à la compilation :
defs
prgnuls.h -> unable to open include file
main
function 'getkb' should have a prototype
function 'splashscreen' should have a prototype
Hors ligne
Renvoie peut-etre ton code
Hors ligne