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

Langage Pascal Discussion :

String : type scalaire ?


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut String : type scalaire ?
    Bonsoir,
    Je viens de me rendre compte qu'en Pascal on peut comparer deux chaînes selon l'ordre alphabétique rien qu'en utilisant l'opérateur ">" ou "<". C'est à dire qu'on n'a pas besoin de l'aider pour que le compilateur se rende compte que "arrêter" doit se trouver derrière "arrestation" dans un dictionnaire. Je suis étonné parce que je pensais que les opérateurs "<", ">", ">=" et "<=" ne pouvaient s'utiliser que sur des variables de type scalaire ou sur des réels. En tous les cas, j'aimerais savoir si c'est seulement le cas pour le langage Pascal ou alors pour tous les autres.

  2. #2
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    Bonjour, pour répondre à la question du titre: non string n'est pas un type scalaire (ou ordinal).

    Pour la 2e question c'est non également, ne serait-ce que parce qu'il existe des langages ou le type string n'existe pas (Le langage C par exemple).

    Maintenant pourquoi est-ce que ça marche de comparer des string avec les opérateurs relationnels?
    Parce que le compilateur compare les valeurs ascii de chaque caractère. Et les lettres de l'alphabet sont classées par ordre alphabetique dans la table ascii ( a est avant b, donc la valeur ascii de a est plus petite que celle de b, donc a < b est vrai. (c'est pour ça aussi que le type char est scalaire)

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    J'accepte sans problème le fait que char soit un type scalaire mais pour les chaînes, je ne pensais pas que c'était si automatique. Pour trouver le "minimum" dans un tableau de chaînes, je pensais qu'il fallait comparer lettre par lettre comme je le fais manuellement c'est à dire. En voici l'algorithme :
    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
    function posmin(t:tab; a,b:integer):integer; {pour les string}
    var ok:boolean; min,j,i:integer;
    begin
    min := a;
    for i:=(a+1) to b do
    	begin
    	ok:=false;
    	j:=0;
    	repeat
    		j:=j+1;
    		if (t[i][j]=t[min][j]) then 
    			begin
    			if (j=length(t[min])) then
    				begin
    				ok:=true;
    				if length(t[min])>length(t[i]) then min:=i;
    				end;
                                    end
    		else
    			begin
    			ok:=true;
    			if t[i][j]<t[min][j] then min:=i;
    			end;
    	until (j=length(t[min])) or (ok=true);
    	end;
     
    posmin:=min;
    end;
    J'ai envie de vous poser une question débile, comment on remplit un tableau avec des chaînes de caractères ? Quand j'exécute, ça me sort une erreur et je ne comprends pas pourquoi !
    Merci d'avoir répondu.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 040
    Billets dans le blog
    2
    Par défaut
    Bonjour,
    Citation Envoyé par katrena99
    comment on remplit un tableau avec des chaînes de caractères ? Quand j'exécute, ça me sort une erreur et je ne comprends pas pourquoi !
    Merci d'avoir répondu.
    Il est possible que la taille totale de ton tableau soit trop grande. Peux-tu en poster la déclaration, SVP ?
    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
    Membre chevronné Avatar de Haywire
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2006
    Messages : 462
    Par défaut
    je pensais qu'il fallait comparer lettre par lettre comme je le fais manuellement
    C'est ce que le programme fait quand tu utilises les opérateurs relationnels.
    C'est ce qu'on appelle la surcharge des opérateurs, les créateurs de delphi ont prévu que quand tu utilises ces opérateurs avec des chaines ça fait tout ça.
    Tu peux voir les "<" comme une sorte de procédure.

    C'est la même chose quand tu utilises "+" pour concatener 2 chaines au lieu d'utiliser concat.

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    voici la déclaration
    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
     
    type tab=array [1..50] of string;
     
     
    procedure remptab(var table:tab;n:integer);
    var i:integer;
    begin
    for i:=1 to n do
    	begin
    		write('case numéro ', i,' du tableau : ');
    		read(table[i]);
    	end;
    for i:=1 to n do write(table[i]:4);
    writeln;
    for i:=1 to n do write(i:4)
    end;

  7. #7
    Membre expérimenté Avatar de Ultima
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 223
    Par défaut
    Bonjour,
    sa compile sans problème sur Free Pascal . . .
    Mais ça fait pas ce que tu veux, mais pour l’instant, la n’est pas le problème.
    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
    type tab=array [1..50] of string;
     
     
    procedure remptab(var table:tab;n:integer);
    var i:integer;
    begin
    for i:=1 to n do
        begin
            write('case numéro ', i,' du tableau : ');
            read(table[i]);
        end;//for
    for i:=1 to n do write(table[i]:4);
    writeln;
    for i:=1 to n do write(i:4)
    end;//proc
     
    var t:tab;
     
    begin
     remptab(t,3);
    end.

  8. #8
    Invité de passage
    Inscrit en
    Février 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 1
    Par défaut Aide Delphi
    Bonjour,
    Je suis un programmeur en Delphi, et surtout DELPHI5,
    donc, je propose mon aide à tous les chateurs qui veullent savoir en plus sur DElPHI, ou à qui ont des problèmes dans la programmation en delphi.


    Bonne chance avec DELPHI.

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hi,
    Citation Envoyé par k810510
    Bonjour,
    Je suis un programmeur en Delphi, et surtout DELPHI5,
    donc, je propose mon aide à tous les chateurs qui veullent savoir en plus sur DElPHI, ou à qui ont des problèmes dans la programmation en delphi.
    On n'est jamais trop de fous !

    Ici, c'est plutôt du "pur" Pascal, même si certains utilisent Delphi.

    Si tu utilises Delphi avec la VCL, il y a un forum dédié à Delphi, qui sera mieux pour toi.

    Je ne suis pas modérateur, de très loin, mais il serait bon de ne pas mettre tes adresses mail en clair. Gare aux robots qui scannent en permanence le web pour trouver ces adresses => du spam à ne plus savoir quoi en faire (si, c'est facile : on laisse tomber l'adresse, et on en crée une nouvelle [mieux, on l'annule chez le fournisseur, pas toujours possible]).
    C'est une habitude sur tous les forums que je connais : pas d'adresse mail en clair dans les posts.

    ps: nous ne sommes pas sur un chat, nous ne sommes donc pas des chateurs mais des "forumeurs", beau néologisme.
    (J'aime m'envoyer des compliments, ça ne coûte pas cher, et au moins j'en reçois de temps en temps )

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    droggo, puisque tu es connecté peux-tu me parler de tous les cas que je dois prendre en considération pour comparer des strings ? (les é par exemple)
    Si tu as une fonction déjà prête, je suis preneur ! hehe
    merci!

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hello,
    Citation Envoyé par katrena99
    droggo, puisque tu es connecté peux-tu me parler de tous les cas que je dois prendre en considération pour comparer des strings ? (les é par exemple)
    Si tu as une fonction déjà prête, je suis preneur ! hehe
    merci!
    Je l'ai déjà dit dans mes messages précédents:

    - remplacer tous les caractères accentués par leur équivalent sans accent, sans oublier les caractères peu utilisés
    - tout passer en majuscules ou minuscules, au choix.

    Que puis-je ajouter.

    Pour les fonctions nécessaires, je dois avoir ça quelque part, je vais plonger dans mes archives (il y a bien 11 ou 12 que je n'ai pas fait de Pascal).

    ? Veux-tu :
    - une version "pur Pascal" (chaines longueur max = 255, longueur stockée dans l'indice 0),
    - une version capable de travailler également avec les ansiString de Delphi

    Est-ce pour travailler dans une fenêtre Windows, une console, MS-DOS ?

  12. #12
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    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
    function ecs(ch : string):string;
    var i: integer;
    begin
    for i:=1 to length(ch) do
    	case ch[i] of
    	'é','è','ê','Ë','Ê','ë' : ch[i]:='e';
    	'à','â','ä','Â','Ä' : ch[i]:='a';
    	'Ï','Ï','î','ï' : ch[i]:='i';
    	'ù','Ü','Û','ü','û': ch[i]:='u';
    	'Ô','Ö','ô','ö': ch[i]:='o';
    	'ÿ': ch[i]:='y';
    	end;
    ecs:=ch;
    end;
    pour le moment j'ai ça mais il doit y en avoir que j'oublie, je me suis dit que tu dois les connaître tous. Je fais tout cela pour pouvoir trier un tableau de chaînes de caractères, en pascal "pur" de préférence mais bof, l'essentiel pour moi est de connaître l'algorithme avec tous les cas particuliers. Quand c'est en Pascal, ça me permet de l'essayer.

    ++

Discussions similaires

  1. Typage : types scalaires et structures de données
    Par spalovac-mrtvol dans le forum Langage R++
    Réponses: 0
    Dernier message: 18/09/2013, 14h04
  2. Convertir STRING --> Type PROCEDURE
    Par l'elu dans le forum Langage
    Réponses: 37
    Dernier message: 09/07/2007, 17h17
  3. Conversion string -> type procedure
    Par ludovic tambour dans le forum Langage
    Réponses: 5
    Dernier message: 11/05/2005, 19h53
  4. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 16h59
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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