discase
discase@mail.dotcom.fr |
>Correction du dernier exercice ... |
VAR chaine, nom, prenom: STRING; P,i : integer; BEGIN Write('Entrez votre nom, puis votre prénom séparés par une virgule: '); Readln(Chaine); { recherche de la virgule ... } P := 0; FOR i:=1 TO length(chaine) DO BEGIN IF chaine[i] = ',' THEN BEGIN P := i; break; END; END; IF P <> 0 THEN BEGIN Writeln('Nom: ',Copy(Chaine,1,P-1)); Writeln('Prénom: ',Copy(Chaine,P+1,255)); END ELSE BEGIN Writeln('Erreur: vous avez oublié la virgule !!'); END; END. | l |
VAR chaine, nom, prenom: STRING; P,i : integer; BEGIN Write('Entrez votre nom, puis votre prénom séparés par une virgule: '); Readln(Chaine); { recherche de la virgule ... } P := Pos(',', Chaine); IF P <> 0 THEN BEGIN Writeln('Nom: ',Copy(Chaine,1,P-1)); Writeln('Prénom: ',Copy(Chaine,P+1,255)); END ELSE BEGIN Writeln('Erreur: vous avez oublié la virgule !!'); END; END. | l |
>Définitions |
>Des nouveaux types de données |
TYPE TPrenom = String[40]; TAdresse = String[200]; TCodePostal = String[5]; | l |
l | Les nouveaux types sont définis ainsi: Type = description; |
CONST NB_FICHES = 20; VAR Prenoms: array[1..NB_FICHES] of TPrenom; Adresses: array[1..NB_FICHES] of TAdresse; CodePostaux:array[1..NB_FICHES] of TCodePostal; | l |
>Les intervalles |
TYPE TAge = 0..150; | l |
l | Notez ici qu'on ne dit pas à Pascal explicitement à quel type de donnée de base il doit se référer. Une variable déclarée de type TAge pourra prendre una valeur de 0 à 150. Mais le Pascal n'est qu'un langage, une interface au langage machine. Or tout le monde sait qu'en langage machine, on ne peut stocker qu'un nombre pair d'octet en mémoire. On ne peut donc pas stocker 1 octet et demi par exemple. Ici, TAge a une valeur entre 0 et 150. Un octet peut prendre des valeurs entre 0 et 255. C'est à dire qu'une variable de type TAge sera stockée sur MOINS d'un octet en mémoire. C'est impossible !! Donc les compilateurs pascal stockent cette information sur 1 octet, quelques bits seront peut être perdus, mais c'est la seule solution. |
TYPE TNouveauType = -1..25; VAR A: TNouveauType; BEGIN A := 26; writeln(A); END. | l |
VAR A: Integer; BEGIN A := 26; writeln(A); END. | l |
TYPE TMajuscule = 'A'..'Z'; | l |
>Les structures de données |
TYPE TNom = string[60]; TPrenom = string[40]; TAdresse = string[100]; TAge = 0..150; TTel = string[10]; | l |
CONST NB_FICHES = 100; VAR Noms: array[1..NB_FICHES] of TNom; Prenoms: array[1..NB_FICHES] of TPrenom; Adresses: array[1..NB_FICHES] of TAdresse; Ages: array[1..NB_FICHES] of TAge; Tels: array[1..NB_FICHES] of TTel; | l |
CONST NB_FICHES = 100; TYPE TNom = string[60]; TPrenom = string[40]; TAdresse = string[100]; TAge = 0..150; TTel = string[10]; TFiche = RECORD Nom: TPrenom; Prenom: TPrenom; Adresse: TAdresse; Age: TAge; Tel: TTel; END; VAR Fiches: array[1..NB_FICHES] of TFiche; | l |
TYPE TNom = string[60]; TPrenom = string[40]; TCodePostal = string[5]; TAdresse = RECORD Rue: string; CP : TCodePostal; END; TAge = 0..150; TTel = string[10]; TFiche = RECORD Nom: TPrenom; Prenom: TPrenom; Adresse: TAdresse; Age: TAge; Tel: TTel; END; VAR Fiches: array[1..NB_FICHES] of TFiche; | l |