Rechercher : dans
Par :

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

Dernière réponse le 14 oct 2008 à 10:26:40 grad, le 3 jan 2008 à 21:02:01 
 Signaler ce message aux modérateurs

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 ?

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « [pascal] inverser une chaîne de caractères » dans :
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Javascript - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractère Une chaîne de caractère est, comme son nom l'indique, une suite de caractères. On la représente par la suite de caractères encadrée par des guillemets simples (') ou doubles ("), sachant que les deux types de...

1

grad, le 3 jan 2008 à 22:48:04

Répondez moi

Répondre à grad

5

bsaid16, le 8 jun 2008 à 20:29:58

Longeur d une chaine
longuerchaine=ord(chaine[0])

Répondre à bsaid16

2

salhi, le 4 jan 2008 à 00:24:09

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.

Répondre à salhi

3

grad, le 4 jan 2008 à 17:49:34

OK

Répondre à grad

4

halla08, le 24 avr 2008 à 19:34:14

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

Répondre à halla08

8

KX, le 10 jun 2008 à 00:10:43

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.
La confiance n'exclut pas le contrôle

Répondre à KX

9

KX, le 10 jun 2008 à 00:45:21

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;
La confiance n'exclut pas le contrôle

Répondre à KX

11

 KX, le 14 oct 2008 à 10:26:40

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.
La confiance n'exclut pas le contrôle 

Répondre à KX
Collection CommentÇaMarche.net