discase
discase@mail.dotcom.fr http://www.citeweb.net/discase/ |
>Les tableaux |
>Qu'est-ce qu'un tableau |
VAR tableau: array[limInf..limSup] of Type; | l |
l | Evidemment, limInf doit être inférieure (ou égale) à limSup |
>Accéder à un élement d'un tableau |
tableau[indice] | l |
VAR t:array[0..12] of byte; a:byte; BEGIN t[1] := 3; a := t[1] + 2; writeln(a); END. | l |
CONST NbJourDansMois:array[1..12] of byte = (31,28,31,30,31,30,31,31,30,31,30,31); | l |
>Qu'est-ce qu'une chaine de caractères? |
VAR msg: STRING; CONST salut: STRING = 'salut'; BEGIN msg = 'moi'; writeln(salut,' ',msg); END. | l |
l | En fait, la vrai syntaxe de déclaration est msg: STRING[len] où len représente la longueur de la chaîne. Si on omet les crochets, Turbo Pascal considère que votre chaîne fait 256 caractères (c'est le maximum !!) |
>Structure d'une chaîne |
VAR s:string; BEGIN s := 'DIsCASE'; s[3] := 'S'; writeln(s); END. | l |
CONST s:string = 'DISCASE'; BEGIN writeln(s[0]); END. | l |
l | J'ai découvert cela il n'y a pas longtemps: certains compilateurs pascal (comme celui de Linux par défaut) ne disposent pas de cette fonction (et de biens d'autres !), c'est pourquoi il faudra la remplacer par un chaine[0]. J'espère pouvoir vous en dire plus sur les différentes "normes" du pascal un de ces quatres ... |
VAR s:string; i:byte; BEGIN write('Entrez votre nom: '); readln(s); for i:=1 to length(s) do begin write(s[i],'.'); end; END. | l |
Je veux un programme qui demande à l'utilisateur d'entrer son nom. A chaque fois que le nom contient un 'm', le programme affiche 'ok' Sinon, il affiche 'pffff!!!' | l |
VAR s:string; i:byte; BEGIN write('Entrer votre nom: '); readln(s); for i:=1 to length(s) do begin if s[i] = 'm' then write('ok') else write('pffff!!!'); end; END. | l |
VAR s:string; mTrouve:byte; i:byte; BEGIN mTrouve:=0; write('Entrez votre nom: '); readln(s); for i:=1 to length(s) do begin if s[i] = 'm' then mTrouve:=1; end; if mTrouve = 1 then write('ok') else write('pfff!!!'); END. | l |
l | Pour les connaisseurs, il y a moyen d'optimiser le programme en mettant BREAK si le 'm' est trouvé. |
VAR s:string; BEGIN write('entrez votre nom: '); readln(s); if pos('m',s)<>0 then write('ok') else write('pfff!!!'); END. | l |
l | Encore une fois, si votre compilateur ne supporte pas cette fonction, vous devrez l'écrire vous même. En fait, tout ce qui peut se faire à l'aide des élements de base (IF, FOR, accès à un tableau, etc ...) n'est pas en standart |
>Couper, coller, copier des chaines |
>Coller deux chaines |
VAR a,b,c:string; BEGIN a:='salut ....'; b:='Nounou !!'; c:=a+b; writeln(c); END. | l |
>Copier une partie de chaine |
VAR Copie, A : STRING BEGIN A := 'Salut toi'; Copie := copy(A,7,3); Writeln(Copie); END. | l |
l | Il n'est pas rare de vouloir copier une partie de la chaine à partir du caractère n jusqu'à la fin de la chaine. On devrait donc utiliser copy(chaine,n,strlen(chaine)-n+1). On peut réduire cet appel avec copy(chaine,n,255). Ceci vient du fait que COPY s'arrête à la fin de la chaine si la longueur est trop grande. Et comme la longueur max est 255, dans tous les cas, on copie le reste de la chaine |