Programme chaine de caracteres?

romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010 - 31 janv. 2005 à 19:19
romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010 - 1 févr. 2005 à 23:08
J'etudie le C++. je dois faire un exercice mais je ne comprend pas mon resultat
le sujet: Un utilisateur doit saisir une phrase que je dois mettre sous forme de
tableau "tabsaisie".Ensuite je dois comparer ce tableau de caracteres avec un tableau "tablettre" et si il y a égalité je dois afficher le code morse correspondant qui est dans un autre tableau."tabmorse".Si le caractere ne correspond je dois afficher "?".
Est ce quelqu'un pourrait m'aider, j'y ai déjà passer beaucoup de temps.Merci
Le programme :
#include
#include <conio.h>
#include <stdio.h>
#include <string.h>
/*declaration des tableaux*/


char tabsaisie[50];
char tablettre[]="ABCDEFGHIJKLMNOPKRSTUVWXYZ.0123456789";
char tabmorse[37][7]={".-","-...","-.-.","-..",".","..-.","--.",
"....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.",
"...","-","..-","...-",".--","-..-","-.--","--..",
//le point et les chiffres
".-.-.-","-----",".----","..---","...--","....-",".....",
"-....","--...","---..","----."};



/*saisie*/
void main()
{

//ou printf("Saisissez le message a coder (50 caracteres au max): \n");
cout<<"Saisir la phrase de 50 caracteres au maximum:";
cout<<endl;
gets(tabsaisie);
cout<<endl;


/*comparaison et affichage*/
int i=0;
int j=0;

do
{
do
{
if(tabsaisie[i]==tablettre[j])//comparaison
{
//affichage
cout<<tabmorse[j][0]<<tabmorse[j][1]<<tabmorse[j][2]<<
tabmorse[j][3]<<tabmorse[j][4]<<
tabmorse[j][5]<<tabmorse[j][6]<<endl;
j++;
}
else
{
j++;
}

}while(tablettre[j-1]!='\0');
cout<<"?";
i++;

}while(tabsaisie[i-1]!='\0');
}

4 réponses

cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
31 janv. 2005 à 21:30
Bonsoir,



Code rectifié pour que ca marche mais pas forcement optimisé :



#include


using namespace std;



char tabsaisie[50];

char tablettre[]="ABCDEFGHIJKLMNOPKRSTUVWXYZ.0123456789";

char tabmorse[][7]={".-","-...","-.-.","-..",".","..-.","--.",

"....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.",

"...","-","..-","...-",".--","-..-","-.--","--..",
".-.-.-","-----",".----","..---","...--","....-",".....",

"-....","--...","---..","----."};




int main()

{

cout<<"Saisir la phrase de 50 caracteres au maximum:";

cout<<endl;

cin >> tabsaisie;

cout<<endl;


/*comparaison et affichage*/

int i=0, j=0, trouve=0;



while(tabsaisie[i]!='\0')

{

j=0; // On commence par le debut de la chaine de comparaison

trouve=0; // Initialisation de temoin pour voir si on a trouve le caractere

while(tablettre[j]!='\0')

{

if(toupper(tabsaisie[i])==tablettre[j])
//comparaison majuscule ou minuscule

{

//affichage



cout<<tabmorse[j]<<endl; // On met le code
morse correspondant


trouve = 1; //
On signal que l'on a trouve le caractere


break; // On sort

}

j++;

}

if(!trouve) // On a pas trouve

cout<<"?";

i++;

}
return 0;

}



Bonne soirée,



Matt
0
romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010
31 janv. 2005 à 22:09
Je te remercie beaucoup Matt, je crois que j'ai oublié de rajouter une variable et de reinitialiser j à 0...entre autre.
Mais je n'ai pas encore appris la fonction "using namespace std" et je ne comprend pas la valeur "toupper" que tu as rajoutée?
Est-il est possible de pas prendre en compte les minuscules, c'est a dire si on tape
en minuscule on affichera quand même un "?".
Est-il possible de faire ce programme sans rajouter d'autres fonctions?
Merci.
romca
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
1 févr. 2005 à 20:20
Bonsoir,



Pas de probleme, si tu veux tu enleves le "toupper" comme ça les minuscules seront remplacées pas "?".



Tu utilisais #include qui, je crois, est obsolete et qu'il faut utiliser

#include et tu utilises le workspace standard (cout,
cin, endl ...) ou alors si tu ne mets pas cette ligne alors devant
chaque fonction (cout, cin...) il faut que tu rajoutes std::
(std::cout, std::cin, ...)



Matt...
0
romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010
1 févr. 2005 à 23:08
Super!!!
Merci pour tes explications tres claires Matt!
0
Rejoignez-nous