Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1

    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 8
    Points : -1
    Points
    -1

    Par défaut Exercices avec chaînes de caractères sans utiliser les fonctions standard du langage

    Bonsoir,

    Je suis en train de m'attarder sur une série d'exercices qui travaillent avec des chaînes de caractères, et le plus souvent avec les caractères de cette chaîne.

    pour le moment, j'aimerais que vous m'aidiez, si possible, afin de lire les caractères, un à un, d'une chaîne de caractères, sans utiliser les fonctions présentes dans la FAQ ? Par la suite, si je me vois à d'autres difficultés, c'est pour éviter de créer d'autres topics que ce thread est nommé ainsi.

    Merci d'avance.

  2. #2
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 550
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 550
    Points : 4 061
    Points
    4 061

    Par défaut

    Xeo,

    Pourquoi ne veux-tu pas utiliser les fonctions standards de Pascal ?

    Si elles existent, c'est bien pour qu'on les utilise.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  3. #3

    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 8
    Points : -1
    Points
    -1

    Par défaut

    Car nous sommes censés travailler qu'à partir ce qui nous a été transmis en cours, et ces fonctions ne remplissent pas ce critère.

  4. #4
    Responsable Pascal

    Avatar de Alcatîz
    Homme Profil pro Jean-Luc Gofflot
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    6 074
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Luc Gofflot
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : mars 2003
    Messages : 6 074
    Points : 37 547
    Points
    37 547

    Par défaut

    Bonjour,

    Pour lire successivement tous les caractères d'une chaîne de type string, il faut d'abord récupérer sa longueur, qui est stockée dans le 1er octet (d'indice 0). Ensuite, tu crées une boucle dont le compteur va de 1 à la longueur ; à chaque itération, chaine[compteur] est le caractère à lire.

    Règles du forum
    Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
    Mes tutoriels et sources Pascal
    FAQ Assembleur

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  5. #5
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 550
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 550
    Points : 4 061
    Points
    4 061

    Par défaut

    Mio,
    Citation Envoyé par Alcatîz Voir le message
    Bonjour,

    Pour lire successivement tous les caractères d'une chaîne de type string, il faut d'abord récupérer sa longueur, qui est stockée dans le 1er octet (d'indice 0). Ensuite, tu crées une boucle dont le compteur va de 1 à la longueur ; à chaque itération, chaine[compteur] est le caractère à lire.

    Attention, ce n'est vrai que pour les String de TP, et les ShortString pour les compilateurs plus récents (Delphi, FreePascal).

    Mais je trouve cet exercice bizarre, sauf si le prof a donné des indications pour trouver la longueur, sinon, un débutant n'a aucun moyen de la trouver, sauf à passer pas mal de temps à débuger, ce qui n'est pas évident quand on débute (déjà, il faut savoir de quoi il s'agit, et comment faire).
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  6. #6
    Membre actif
    Avatar de EtherOS
    Homme Profil pro Lionel Tidjon
    Etudiant Polytechnicien
    Inscrit en
    juillet 2012
    Messages
    58
    Détails du profil
    Informations personnelles :
    Nom : Homme Lionel Tidjon
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant Polytechnicien
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2012
    Messages : 58
    Points : 186
    Points
    186

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Uses Crt;
     
    Const BUFFER = 100;
     
    Function  Mychar (Var Arraystring : string[BUFFER]; Initpos, size: Longint):string[BUFFER] ;
    Var  count : Longint;
          T : array[1..BUFFER] of String[1];
     
    Begin
                  Mychar := '';      
     
                  For count:= Initpos To Initpos+size -1 Do
     
                  Begin
                        T[count-Initpos + 1] := Arraystring[count];
     
                    End;
     
                    Mychar := T;
    End;  
     
    Var arraychar: string[BUFFER];
     
    Begin
                 Textbackground(1); 
                 clrscr;
                 Textcolor(10);
                 writeln('Entrer une chaine de caracteres :');
                 Textcolor(11);
                 readln(arraychar);
                 Textcolor(10);
                 writeln('le deuxieme caractere est :',Mychar(arraychar,2,1));
                 readln;
    End.

  7. #7
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 550
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 550
    Points : 4 061
    Points
    4 061

    Par défaut

    Joe,
    Citation Envoyé par EtherOS Voir le message
    Uses Crt;

    Const BUFFER = 100;

    Function Mychar (Var Arraystring : string[BUFFER]; Initpos, size: Longint):string[BUFFER] ;
    Var count : Longint;
    T : array[1..BUFFER] of String[1];

    Begin
    Mychar := '';

    For count:= Initpos To Initpos+size -1 Do

    Begin
    T[count-Initpos + 1] := Arraystring[count];

    End;

    Mychar := T;
    End;

    Var arraychar: string[BUFFER];

    Begin
    Textbackground(1);
    clrscr;
    Textcolor(10);
    writeln('Entrer une chaine de caracteres :');
    Textcolor(11);
    readln(arraychar);
    Textcolor(10);
    writeln('le deuxieme caractere est :',Mychar(arraychar,2,1));
    readln;
    End.
    Prends l'habitude de formater ton code, c'est fait pour faciliter la lecture (et donc la maintenance ...)

    Ceci étant dit :

    1 - Le but du forum n'est pas de fournir du code "clé en mains", mais d'aider à progresser

    2 - ton code est plus compliqué que nécessaire.

    3 - Pour afficher ton code avec la mise en surbrillance (couleur, ...), il faut l'encadrer avec les balises [*code] [*/code] [sans les *, qui ne sont là que pour les invalider, et non avec les balises [QUOTE], ce qui t'a obligé à faire manuellement cette mise en couleurs.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  8. #8

    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 8
    Points : -1
    Points
    -1

    Par défaut

    Citation Envoyé par droggo Voir le message
    Mais je trouve cet exercice bizarre, sauf si le prof a donné des indications pour trouver la longueur, [...]
    Aucun. En parlant du prof, c'est vrai que ces exercices sont bizarres. Je dis ça car je ne trouve aucune utilité d'un exercice qui demande à afficher une phrase 10000 fois sans utiliser de boucle...
    Citation Envoyé par Alcatîz Voir le message
    Bonjour,

    Pour lire successivement tous les caractères d'une chaîne de type string, il faut d'abord récupérer sa longueur, qui est stockée dans le 1er octet (d'indice 0). Ensuite, tu crées une boucle dont le compteur va de 1 à la longueur ; à chaque itération, chaine[compteur] est le caractère à lire.

    J'en profite pour te demander comment procéder pour soutirer les informations stockées dans tel ou tel octet d'un objet.

    Merci à vous.

  9. #9
    Responsable Pascal

    Avatar de Alcatîz
    Homme Profil pro Jean-Luc Gofflot
    Ressources humaines
    Inscrit en
    mars 2003
    Messages
    6 074
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Luc Gofflot
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : mars 2003
    Messages : 6 074
    Points : 37 547
    Points
    37 547

    Par défaut

    L'exemple 14 de ce cours montre comment référencer un caractère particulier dans une chaîne.
    Règles du forum
    Tutoriels, exercices, FAQ, sources, compilateurs, outils, livres Pascal
    Mes tutoriels et sources Pascal
    FAQ Assembleur

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]

  10. #10
    Membre chevronné
    Avatar de EpiTouille
    Homme Profil pro Titouan Créac'h
    Étudiant
    Inscrit en
    mai 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Nom : Homme Titouan Créac'h
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2009
    Messages : 330
    Points : 652
    Points
    652

    Par défaut

    voici un exemple de la fonction qui trouve la taille de la chaine

    Code :
    1
    2
    3
    4
    5
     
    function my_strlen(s : string) : byte;
    begin
       my_strlen := ord(s[0]);
    end;

  11. #11
    Membre Expert
    Avatar de e-ric
    Homme Profil pro Eric BARBIER
    Développeur informatique
    Inscrit en
    mars 2002
    Messages
    1 098
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric BARBIER
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 1 098
    Points : 2 044
    Points
    2 044

    Par défaut

    Citation Envoyé par Naindev Voir le message
    Aucun. En parlant du prof, c'est vrai que ces exercices sont bizarres. Je dis ça car je ne trouve aucune utilité d'un exercice qui demande à afficher une phrase 10000 fois sans utiliser de boucle...
    Salut (un peu tardivement)

    Est-ce que la solution n'était pas du type récursif ?
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure Affiche(const s: String; const NbFois: Integer);
     
      procedure RecurseAffiche(nb : integer);
      begin
        if nb < NbFois then
          WriteLn(s)
        else
          RecurseAffiche(nb+1);
       end;
    begin
      RecurseAffiche(1);
    End;
    A part prendre des risques avec la pile, effectivement cette approche n'a pas beaucoup d'intérêt. J'ai atténué la récursivité avec une procédure imbriquée.


    @+

    M E N S . A G I T A T . M O L E M

  12. #12
    Expert Confirmé Sénior
    Inscrit en
    août 2006
    Messages
    3 550
    Détails du profil
    Informations forums :
    Inscription : août 2006
    Messages : 3 550
    Points : 4 061
    Points
    4 061

    Par défaut

    Noi,

    Probablement pas de récursion demandée, s'adressant à des débutants.

    D'ailleurs, et je le répète pour la Nième fois : quand on peut facilement le faire (et c'est presque toujours le cas), il faut éviter la récursivité, consommatrice de ressources (temps et mémoire).

    Et je rappelle une de mes phobies à ce sujet : quand je vois l'implémentation d'une fonction de calcul de factorielle utilisant la récursivité, je sors de mes gonds.
    Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.

  13. #13
    Membre Expert
    Avatar de e-ric
    Homme Profil pro Eric BARBIER
    Développeur informatique
    Inscrit en
    mars 2002
    Messages
    1 098
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric BARBIER
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 1 098
    Points : 2 044
    Points
    2 044

    Par défaut

    Ouais, j'avoue que c'est abusif. Mais dans l'exercice je vois pas trop comment on peut faire autrement (... sans utiliser de boucles ...). Je sais aussi que les profs de fac adorent la récursivité...

    Celle-ci rend parfois service malgré tout. Pour la factorielle, c'est effectivement inutile. Mais dérécursifier une fonction n'est pas toujours aisé, il faut en général gérer soit même une pile.

    @+

    M E N S . A G I T A T . M O L E M

  14. #14
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : janvier 2010
    Messages : 235
    Points : 459
    Points
    459

    Par défaut

    Citation Envoyé par Naindev Voir le message
    Je dis ça car je ne trouve aucune utilité d'un exercice qui demande à afficher une phrase 10000 fois sans utiliser de boucle...
    Voilà un programme qui affiche une phrase 10000 fois sans utiliser de boucle... :
    Code :
    1
    2
    3
    4
    5
     
    program Affiche_10000;
    begin
      WriteLn('une phrase 10000 fois sans utiliser de boucle...');
    end.

  15. #15
    ALT
    ALT est déconnecté
    Membre Expert
    Avatar de ALT
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    octobre 2002
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : octobre 2002
    Messages : 1 035
    Points : 1 458
    Points
    1 458

    Par défaut

    Répéter 1000 fois sans boucle ?
    Euh...
    Avec un Goto ?



    Ah oui, c'est tout de même une boucle, bien que ça n'en porte pas le nom.
    "Un peuple qui est prêt à sacrifier un peu de liberté contre un peu de sécurité, ne mérite ni l'une, ni l'autre, et finira par perdre les deux."
    Attribué indistinctement à :
    Thomas Jefferson
    Benjamin Franklin
    Albert Einstein !

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •