Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 12 Sep 2006 00:44:31

phcorp
Membre
Lieu: Yvelines(78), France
Date d'inscription: 25 Nov 2004
Messages: 69
Site web

Projet traducteur FR/Eng

voilà je viens de commencer mais je connais pas le C++ sur calto

Code:

/*
**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 smile


http://www.imagup.info/images/04/1188234404_user.php.gif http://www.imagup.info/images/04/1188234372_user.mysql.gif http://www.imagup.info/images/04/1188234383_user.pando.gif http://www.imagup.info/images/04/1188234294_user.casio.gif

Hors ligne

 

#2 12 Sep 2006 05:44:50

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet traducteur FR/Eng

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...  lol

Je vais essayer de déblayer un peu le terrain:

A.

Code:

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é:

Code:

#define NBR_MOTS  2
const char* wordsfr[NBR_MOTS] = { 
"MERE","PERE"
};
const char* wordseng[NBR_MOTS] = { 
"MOTHER","FATHER"
}; 

B.

Code:

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:

Code:

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.

Code:

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:

Code:

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.

Code:

void ecriremot(char mot)

de nouveau, un "mot" n'est pas un "char":

Code:

void ecriremot(const char* mot)

F.

Code:

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:

Code:

const char* traduire(int i)
{
return wordseng[i];
}

G. reste à adapter le main():

Code:

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 wink


Pensez à surveiller mes releases wink

Hors ligne

 

#3 12 Sep 2006 06:08:42

Azor
Le Coté Obscur De La G100
Lieu: glop glop!
Date d'inscription: 04 May 2002
Messages: 5479
Site web

Re: Projet traducteur FR/Eng

:!: 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 '=='.

Code:

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!


Anciennement X-thunder28
Cats shall rule teh world!

Hors ligne

 

#4 12 Sep 2006 07:22:40

Tekkeitserktok
Membre Communauté Graph100
Lieu: Nancy(54)
Date d'inscription: 12 Jan 2004
Messages: 416

Re: Projet traducteur FR/Eng

:!: 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


Démo disponible:
-->The legend of Zelda:The revenge of Ganon
-->v0.1b
-->http://linkoncasio.free.fr

http://tekkeitserktok.free.fr/Cat.gif

Hors ligne

 

#5 12 Sep 2006 10:15:07

phcorp
Membre
Lieu: Yvelines(78), France
Date d'inscription: 25 Nov 2004
Messages: 69
Site web

Re: Projet traducteur FR/Eng

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 smile


http://www.imagup.info/images/04/1188234404_user.php.gif http://www.imagup.info/images/04/1188234372_user.mysql.gif http://www.imagup.info/images/04/1188234383_user.pando.gif http://www.imagup.info/images/04/1188234294_user.casio.gif

Hors ligne

 

#6 12 Sep 2006 10:34:36

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: Projet traducteur FR/Eng

La base de ton prog est plutôt bonne (on a vu nettement pire que ça)... Ce qui pêche, c'est la technique wink 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  smile 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  lol


Pensez à surveiller mes releases wink

Hors ligne

 

#7 12 Sep 2006 11:35:55

phcorp
Membre
Lieu: Yvelines(78), France
Date d'inscription: 25 Nov 2004
Messages: 69
Site web

Re: Projet traducteur FR/Eng

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


http://www.imagup.info/images/04/1188234404_user.php.gif http://www.imagup.info/images/04/1188234372_user.mysql.gif http://www.imagup.info/images/04/1188234383_user.pando.gif http://www.imagup.info/images/04/1188234294_user.casio.gif

Hors ligne

 

#8 12 Sep 2006 15:41:48

deather
Membre Communauté Graph100
Lieu: Banlieue parisienne (Fresnes)
Date d'inscription: 05 May 2002
Messages: 909

Re: Projet traducteur FR/Eng

Renvoie peut-etre ton code big_smile


..:: Deather ::..
deather.dede@gmail.com.NO.SPAM

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr