Téléchargement
illégal
Posez votre question Signaler

Exo algo inversement de chaine

bansan 116Messages postés 27 février 2008Date d'inscription 7 mai 2011Dernière intervention - Dernière réponse le 9 mars 2008 à 22:59
Bonjour,Voici un exercice que je ne parviens pas a resoudre avec les fonctions que l'on m'a donnée a savoir: sschine,longueur, RANG et autres structures iteratives et conditionelles...
Si qqun pouvait me donner une indication..
Merci
Exercice 5 - Chane inverse (affichage)
Ecrire un algorithme dont le rOle est de permettre a l'utilisateur de saisir une chaine de caracteres et d'afficher la chaine "en sens inverse" (le dernier caractere est affiche en premier. l'avant-dernier caractere est affiche en deuxierne et ainsi de suite...).
Voila comment j'ai commencé..mais je ne vois pas le bout..&&&
5) Chaine inversée
*Variables :
mot : Chaine,
i, a :entiers
Afficher(« Saisir un mot »)
Saisir(mot)
i<-- LONGUEUR(mot)
a<-- sschaine(mot , i, 1)
Pour sschaine(mot , i, 1) de a à 0
Afficher(
Lire la suite 

Exo algo inversement de chaine »

17 réponses
Réponse
+2
moins plus
Il suffit de parcourir du début à la fin (index i) et d'extraire la sous chaîne de longueur 1 à la position i, puis de l'afficher.

Concrètement il faut donc faire un boucle for (pour) qui fait évoluer cet index i (ce qui correspond à une itération). A chaque itération tu appelles sschaine(mot,i,1) pour extraire le caractère à afficher, et tu l'écris.

En C++ (s[i] correspond au ième caractère d'une chaîne s, le premier caractère de la chaîne correspondant à s[0])
#include <iostream>
#include <string>

int main(){
  std::string mot = "tapir";
  unsigned n = mot.size();
  for(unsigned int i = 0; i < n ; ++i){
    // afficher le caractère à la position n - i - 1 où n désigne la longueur du mot
    std::cout << mot[ n - i -1 ]; 
  }
  std::cout << std::endl; // passer à la ligne
  return 0; // fin du programme
}

Bonne chance
bansan- 7 mars 2008 à 14:16
Assez rude a pouvoir le mettre en pseudo language...
Comment faire l'index??

Comment afficher chaque caractere e n fin de programme quand je dis afficher(...???


5) Chaine inversée
*Variables :
mot : Chaine,
i, a :entiers

Afficher(« Saisir un mot »)
Saisir(mot)
i<-- LONGUEUR(mot)
a<-- sschaine(mot , i, 1)
Pour sschaine(mot , i, 1) de a à 0
Afficher(
Ajouter un commentaire
Réponse
+1
moins plus
Ben justement tu écris bien les caractères un par un ! Rien ne t'oblige à écrire la chaîne d'un coup.
Exemple pour tapir :
itération 1 : tu écris r (sous chaîne de longueur 1 à partir de x = 5)
itération 2 : tu écris i (sous chaîne de longueur 1 à partir de x = 4)
itération 3 : tu écris p (sous chaîne de longueur 1 à partir de x = 3)
itération 4 : tu écris a (sous chaîne de longueur 1 à partir de x = 2)
itération 5 : tu écris t (sous chaîne de longueur 1 à partir de x = 1)
puis tu passes à la ligne, comme dans le code que je t'ai donné dans <1>

Bonne chance
bansan- 8 mars 2008 à 18:22
Bonsoir
Non..désolé, je vois vraiment pas
Je vais pas me casser la tête 4 heures dessus.... j'ai un cours trés trés mal expliqué et j'ai besoin d'un prof de quelque chose d'humain een face de moi pour repondre a mes interrogations.., je peux pas sinon


5) Chaine inversée
*Variables :
mot : Chaine,
l, i, a :entiers

Afficher(« Saisir un mot »)
Saisir(mot)
l<-- LONGUEUR(mot)
a<-- sschaine(mot , l, 1)
Pour i de l à 0
Afficher(a)

Ajouter un commentaire
Réponse
+1
moins plus
Bonjour,

Quelque chose ne colle pas dans ton algo

Tu déclares a comme entier et il me semble qu'à la fin tu affiches a comme un mot ou un tableau de caractères
C'est pas bon. Il faut declarer a comme caractère et l'afficher au fur et à mesure que tu le tires de mot
ou encore tu peux t'en servir pour reconstituer un mot_inverse et afficher mot_inverse en une seule fois à la fin.

A+
bansan- 8 mars 2008 à 21:06
Désolé..
Je ne vois vraiment pas là...



5) Chaine inversée
*Variables :
mot, mot-inverse : Chaine,
l, i, :entiers
a: caractere

Afficher(« Saisir un mot »)
Saisir(mot)
l<-- LONGUEUR(mot)
a<-- sschaine(mot , l, 1)
Pour i de l à 0
a<- -sschaine(mot,l,1)
Afficher (a)
a<- -sschaine(mot,l-1,1)
....
FinPour
Afficher (a)
Fin
Ajouter un commentaire
Réponse
+1
moins plus
Bon, Voila ce que je ferais:

*Variables :
mot, mot-inverse : Chaine,
l, i, :entiers
a: caractere

Afficher(« Saisir un mot »)
Saisir(mot)
l<-- LONGUEUR(mot)
Pour i de (l-1) à 0 <----pour une chaine de longueur=5 les caractères sont numérotés de 0 à 4.
a<-- mot[i] <-------- a prend la valeur du ième caractère de mot; i est l'indice du caractère (numéro d'ordre).
Afficher (a)
FinPour
Fin

Tu veux voir comment on reconstitue une chaine à inverse ou tu veux essayer tout seul?
bansan- 8 mars 2008 à 21:58
Je veux voir bien sur...
J'ai pas trop compris" le mot[i]" pour le ieme...
Mais sinon..en temre de logique sequentielle , je vois...
Mais est ce qu'a la fin j'ai une chaine de caractere??? qui ecrit le mot a l'envers??

Merci
Ajouter un commentaire
Réponse
+1
moins plus
Je vais essayer de t'expliquer:

Soit le mot 'BONJOUR'
c'est comme si c'était un tableau de caractères mot={B,O,N,J,O,U,R}
Dans son ensemble le tableau est une chaine (ou un mot). Tu peut aussi épeler le mot, première lettre B, deuxième lettre O, quatrième lettre J.... Bien souvent les elements d'un tableau sont numérotés à partir de 0.
0 -> B
1 -> O
2 -> N
3 -> J
4 -> O
5 -> U
6 -> R

c'est ce que fait la boucle Pour i de (l-1) à 0
dans ce cas l=7 alors
Pour i de (l-1) à 0 --------> l-1=6 ; i commence a 6 et termine à 0 ; à chaque tour on enleve 1 à i (i=i-1)
a<-- mot[i] --------> par exemple quand i = 3 ; mot[3]='J' ; a prend la valeur 'J'
Afficher (a)
FinPour

Pour faire une chaine inversée, on va l'appeler Mot-Inverse, plutot que d'afficher a on va le stocker dans mot-inverse
Pour i de (l-1) à 0 ;--------> l-1=6 ; i commence a 6 et termine à 0 ; à chaque tour on enleve 1 à i (i=i-1)
a<-- mot[i] ;--------> par exemple quand i = 4 ; mot[4]='O' ; a prend la valeur 'O'
mot-inverse[l - i - 1]<-a ;----> 7-4-1=2 donc Mot-Inverse[2]='O'
FinPour

0 -> R
1 -> U
2 -> O
3 -> J
4 -> N
5 -> O
6 -> B

A la fin Mot_Inverse={R,U,O,J,NO,B} et on l'affiche.

*Variables :
mot, mot-inverse : Chaine,
l, i, :entiers
a: caractere

Afficher(« Saisir un mot »)
Saisir(mot)
l<-- LONGUEUR(mot)
Pour i de (l-1) à 0
a<-- mot[i]
mot-inverse[l - i - 1]<-a
FinPour
Afficher(Mot-Inverse)
Fin

Voila, j'espère avoir été assez clair. Salut.
bansan- 8 mars 2008 à 23:19
Ca semble si evident mais pourtant.., si dur a interpreter sur papier
Mais en tout cas ct clair...
Merci
J'esperes cependant pouvoir interpreter plus facilement que ca les prochaines fois
Ajouter un commentaire
Réponse
+1
moins plus
En fait l'idéal ce serait que tu écrives le programme dans un langage que tu ferais tourner sur un ordinateur pour mieux sentir les choses, pour pouvoir tester etc.
Afficher "saisir mot ?";
Lire mot;
n <- longueur(mot);
Pour i = 0; i < n ; i = i +1
  it <- i + 1;
  Ecrire "iteration" it " : " sschaine( mot( n - i -1, 1) );
  Ecrire le caractère de retour à la ligne (std::endl en C++, \n dans la plupart des langages)
Fin pour
Ecrire "fin"

Ceci va donner pour "tapir" (avec t=caractère à l'index 0,a= caractère à l'index 1, ..., r = caractère à l'index 4) cette exécution en pas à pas. Je mets en gras ce qui apparaît à l'écran :
saisir mot ? tapir
// le mot est de longueur 5 (n=5)
// je rentre dans la boucle pour (i=0), cette valeur est <5 donc je rentre dans la boucle pour
// je mets i+1=1 dans it (it=1)
// j'écris le message sachant que n - i - 1 = 4, => 'r'
iteration 1 : r
// je mets i+1=2 dans i, qui est inférieur à n=5
// je rentre dans la boucle pour (i=1), cette valeur est <5 donc je rentre dans la boucle pour
// je mets i+1=2 dans it (it=1)
// j'écris le message sachant que n - i - 1 = 3, => 'i'
iteration 2 : i
// même raisonnement
iteration 3 : p
// même raisonnement
iteration 4 : a
// même raisonnement
iteration 5 : t
// cette fois-ci i=5 et donc on n'a plus i<n, donc je saute la boucle pour
// J'écris Fin
Fin

Ok maintenant si on utilise le programme :
Afficher "saisir mot ?";
Lire mot;
n <- longueur(mot);
Pour i = 0; i < n ; i = i +1
  Ecrire sschaine( mot( n - i -1, 1) );
Fin pour
Ecrire le caractère de retour à la ligne

Je vais bien écrire "ripat" à l'écran.
Est ce que c'est plus clair comme ça ?

Bonne chance
bansan- 9 mars 2008 à 18:20
merci..
A vrai dire tout les chemin peuvent amener au meme endroit...ce sera plus compliqué pour certains qui font 20 lignes que d'autres qUI N4ONT FONT QUE 7
...

Merci bcp
Ajouter un commentaire
Réponse
+0
moins plus
Pas de reponses autre??
Je ne sais pas comment faire cet exo en "pseudo langage...&
Ajouter un commentaire
Réponse
+0
moins plus
Justement j'ai fait exprès de ne pas te le donner en pseudo code pour qu'il te reste quelque chose à faire. Si tu as compris la démarche c'est facile.

Qu'est ce qui te bloque ?
bansan- 7 mars 2008 à 17:36
Ah...ok..;
A vrai dire..ce qui me bloque c'est "Il suffit de parcourir du début à la fin (index i) et d'extraire...."
Et surtout que...
en toute logique, voila ce que je fais:
En francais:
Je demande a l'utilisateur de saisir le mot qu'il veut
Il saisit son mot
Je passe la commande pour qu'il soit calculer la longueur du mot
Une foois la longueur du mot connu
Je dis que Pour x(longueur du mot) de x à a 0
je vais afficher la souschaine(mot, position i, 1)
Mais comment dir que je vais l'afficher en une chaine et non en un caractere a chaque fois???

Voila voila quoi...
Ajouter un commentaire
Réponse
+0
moins plus
Aprés un peu plus de plus de reflexion, voila ce que j'ai pu conclure...



5) Chaine inversée
*Variables :
mot : Chaine,
l, i, a :entiers

Afficher(« Saisir un mot »)
Saisir(mot)
l<-- LONGUEUR(mot)
a<-- sschaine(mot , l, 1)
Pour i de l à 0
a<- -a+sschaine(mot,l-1,1)
FinPour
Afficher (a)
Fin
Ajouter un commentaire
Réponse
+0
moins plus
En fait la vraie question n'est pas est ce que le programme doit faire 7 lignes ou 20, mais plutôt si tu as compris comment fonctionnait la solution que nous t'avons proposé. Est ce que tu as obtenue une réponse satisfaisante à ton problème ou est-ce que tu as encore besoin d'éclaircissements ou de précisions ?

Bonne chance
Ajouter un commentaire
Ce document intitulé « exo algo inversement de chaine » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?