IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

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


Sujet :

Pascal

  1. #1
    Nouveau Candidat au Club
    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é

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Nouveau Candidat au Club
    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, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    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
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    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]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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).
    Si les cons volaient, il ferait nuit à midi.

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

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 58
    Points : 233
    Points
    233
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Nouveau Candidat au Club
    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, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    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
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    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]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  10. #10
    Membre éprouvé
    Avatar de EpiTouille
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 372
    Points : 917
    Points
    917
    Par défaut
    voici un exemple de la fonction qui trouve la taille de la chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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.
    Si les cons volaient, il ferait nuit à midi.

  13. #13
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 918
    Points
    3 918
    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
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 234
    Points : 2 338
    Points
    2 338
    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 !

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/03/2010, 00h02
  2. [NASM / Linux 64] Utiliser les fonctions standard du C
    Par j0o0 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 27/01/2009, 21h07
  3. Utiliser les fonctions dans le langage c
    Par dev0712 dans le forum Débuter
    Réponses: 3
    Dernier message: 14/12/2008, 20h41
  4. Réponses: 4
    Dernier message: 28/05/2008, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo