[pascal] inverser une chaîne de caractères [Fermé]

- - Dernière réponse :  HanOu - 28 janv. 2012 à 16:27
Bonjour,
Comment faire pour inverser une chaîne de caractères dansL'algorithme et En pascal
c'est à dire si chaîne=ABC123 alors chaîne <= 321CBA
sans la méthode tranditionnelle:

for i:=1 to longueur_de_chaîne Do
fot j:=longueur_de_chaîne DownTO 1 Do
chaîne[i]:=chaîne[j];

c'est à dire une fonction directe comme inverse(chaîne) ou quelque chose comme ça

*Autre chose : comment faire pour déterminer la longueur d'une chaîne de carcactères ?
Afficher la suite 

6 réponses

Meilleure réponse
6
Merci
salut grad,
c'est tjrs salhi qui vous répond!
pour la longueur d'une chaîne c'est : n <-- Long(ch) en algo et n:=Length(ch) en pascal
pour l'inverse il n'ya pas de fonction prédéfinit mais tu peux écrire une fonction récursive:

function inverse(ch:string; i:integer):string;
begin
if(i<=length(ch))then
inverse:=inverse(ch,i+1)+ch[i];
end;


et dans le programme principal il faut faire l'appel: chaine_inverse:=inverse(ch,1);


Bonne chance.

Dire « Merci » 6

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70661 internautes nous ont dit merci ce mois-ci

la condition ne peut jamais être une affectation
ce n'est pas une affectation, c'est inferieur ou égale à ^^
1
Merci
bonjour
écrire un programme pascal qui donne la position et la longueur de la plus longue sous chaine formée d'un seul caractère dans une chaine donnée
exemple:aabbbbcaccc la réponse sera 3,4
3 est la position de la plus longue chaine
4 est la longueur de ce caractère
KX
Messages postés
16075
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 novembre 2019
2453 -
program halla08;

const Nul='#'; // un caractère qui ne peut pas être au début de la chaine

type solution=record
     p,l:integer; // p pour la position, l pour la longueur
     end;

function Etude(s:string):solution;
var i,p,l:integer; c:char;
begin
result.p:=0;
result.l:=0;
c:=Nul;
for i:=1 to length(s) do
    if s[i]=c then begin // forcément faux pour i=1 car c=Nul
                   inc(l);
                   if l>result.l then begin
                                      result.p:=p;
                                      result.l:=l;
                                      end
                   end
              else begin
                   p:=i; // initialisation à 1
                   l:=1; // initialisation à 1
                   c:=s[i];
                   end;
end;

var s:solution;
begin
s:=Etude('aabbbbcaccc');
writeln(s.p,' ',s.l);
readln;
end.
Messages postés
16075
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 novembre 2019
2453
0
Merci
function Inverser(s:string):string;
var n:integer;
begin
n:=length(s);
if n=1 then result:=s
       else result:=Inverser(copy(s,2,n-1))+s[1]
end;
Messages postés
16075
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 novembre 2019
2453
0
Merci
Bonjour,
Tes principales erreurs étaient d'avoir déclarer ton type personne avec "dn:date", d'utiliser abusivement des "with" et enfin de promener des variables "d:date" inutiles.
Pour clarifier ton code j'ai rajouté une fonction intermédiaire qui determine si une date est supérieur à une autre, et j'ai fait une saisie d'identité avec une personne à chaque fois.
program SansNom;

type date=record 
          j:1..31;
          m:1..12;
          a:integer;
          end;

 personne=record
          nom:string;
          prenom:string;
          d:date;
          moyenne:real;
          end;

procedure saisir(var p:personne);
begin
with p do
     begin
     writeln;
     write('Nom    : '); readln(nom);
     write('Prenom : '); readln(prenom);
     with d do
          begin
          writeln;
          writeln('Date de naissance : ');
          writeln;
          write('Jour  : '); readln(j);
          write('Mois  : '); readln(m);
          write('Annee : '); readln(a);
          writeln;
          end;
     end;
end;

function superieur(d1,d2:date):boolean; // le résultat est TRUE ssi d1>d2
begin
if d1.a<>d2.a then result:=d1.a>d2.a
              else if d1.m<>d2.m then result:=d1.m>d2.m
                                 else result:=d1.j>d2.j;
end;

procedure afficher(p1,p2:personne);
begin 
write('La personne la plus jeune est : ');
if superieur(p1.d,p2.d) then writeln(p1.nom,' ',p1.prenom)
                        else writeln(p2.nom,' ',p2.prenom);
end;

var p1,p2:personne;
begin 
writeln('Personne 1 '); saisir(p1);
writeln('Personne 2 '); saisir(p2);
afficher(p1,p2);
writeln; write('Fin du programme. Appuyer sur Entree'); readln;
end.
program app;
uses wincrt;
var
n,i:integer;ch,ch1:string;x:boolean;
begin
readln(ch);
for i:=length(ch) downto 1 do
write(ch[i]);
end.
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
-1
Merci
répondez moi
longeur d une chaine
longuerchaine=ord(chaine[0])
fonction m( ch:string):string;
var i :integer;
begin
for i:= (length (ch-1) downto 0 do
writeln (ch[i]);
end;