samedi 26 janvier 2002

Enregistrement

ENREGISTREMENT
Les enregistrements sont un regroupement de données qui ont un lien entre elles. Un enregistrement équivaut à une structure en langage c. On regroupe donc plusieurs variables sous une seule. Une telle approche évite à devoir créé plusieurs variables. On travaille avec une variable au lieu de plusieurs, le risque d'erreur est diminué.

TInfoClient = record
Prenom:string[20];  
Nom:string[20];   
Adresse:string[30];   
Ville:string[20];   
CodePostal:string[6];
end;

Champs

Les éléments de l'enregistrement: Prenom, Nom... sont appelés des champs. Après avoir défini le type, on peut créer des instances, variables de ce type. On accède au champ de l'enregistrement en apposant un point devant le nom de l'enregistrement.
var
InfoClient:TInfoClient;
begin
  InfoClient.Prenom:='Paul';  
  InfoClient.Nom:='Smith';  
  InfoClient.Adresse:='3455 Cartier'; 
  InfoClient.Ville:='Montreal';  
  InfoClient.CodePostal:='J4S1R4';
end;

With

Lorsqu'on a plusieurs variables à écrire ça devient vite fastidieux. On peut alléger le code en utilisant «with».
var
InfoClient:TInfoClient;
begin
  with InfoClient do 
  begin      
    Prenom:='Paul';
    Nom:='Smith';
    Adresse:='3455 Cartier';
    Ville:='Montreal';
    CodePostal:='J4S1R4';
  end;
end;

Tableau d'enregistrement

Les tableaux peuvent aussi être incorporés dans les enregistrements. C'est lorsqu'on définit l'instance qu'on a créé le tableau.
var
   Etudiant:array [1..5] of TEtudiant;
begin
   Etudiant[1].Prenom:='Roger';
   Etudiant[1].Nom:='Demers';
   Etudiant[1].Matiere:='Informatique';
   Etudiant[2].Prenom:='Jean';
   Etudiant[2].Nom:='Ducharme';
   Etudiant[2].Matiere:='Chimie';
end;
Code source disponible ici.

vendredi 25 janvier 2002

Tableau


TABLEAU

Un tableau est un ensemble de valeur. On peut mettre n'importe type standard dans un tableau. Ils permettent de relier des données ensemble au lieu de créer plusieurs variables. Disons que vous devez créer un programme qui calculer la moyenne des notes des étudiants d'une classe. Vous pourriez créer autant de variables qu'il y a d'étudiant, mais ça serait difficile et fastidieux à gérer.

Une solution consisterait à utiliser un tableau

var tabNote:array [0..24]of real;

Ce qui fera    150 octets (25 éléments * 6 octets pour un real) On peut représenter    en mémoire un tableau comme voici. 

tabNote[0]
tabNote[1]
tabNote[2]
La mémoire est utilisée de façon linéaire, chaque fois qu'on avance d'un élément, on avance de 6 octets dans la mémoire. On doit spécifier l'index d'un tableau lorsqu'on l'initialise. L'index c'est le chiffre qu'on spécifie entre les crochets «[]».

tabNote[0]:=23;
tabNote[21]:=144;

Les opérations

Les opérations entre tableaux sont aussi possibles
notePaul:=tabNote[3] + tabNote[12] - tabNote[5];

Les tableaux multidimensionnels

Les tableaux multidimensionnels peuvent aussi être créés. On ne doit qu'ajouter un deuxième indice à la syntaxe déjà apprise. var tabNote:array [0..2 ,0..1] of integer; Les deux syntaxes sont équivalentes. Les opérations entre tableaux peuvent aussi être faites. La représentation en mémoire est la même, de la gauche vers la droite et on change de ligne

tabNote[0][0]
tabNote[0][1]
tabNote[0][2]
tabNote[1][0]
tabNote[1][1]
tabNote[1][2]

Les tableaux sont souvent la cause de beaucoup d'erreurs chez les  programmeurs.
Il est très aisé de faire une erreur de débordement.

var
  tabNote:array [0..2] of integer;
begin
  tabNote[8]:=45;
end;

Ce code engendra une erreur à la compilation. Afin d'empêcher
que de telle erreur se produise, on peut utiliser les fonctions  low et high.
Ces fonctions renvoient les limites inférieures et supérieures
d'un tableau.

var
  bas,haut:integer
  tabNote:array [10..34] of integer;
begin
  bas:=low(tabNote);//ce qui équivaut à 10
  haut:=high(tabNote);//ce qui équivaut à 34
end;

On peut comparativement à d'autres langages créer un tableau
ne débutant pas à zéro. Cette possibilité peut
s'avérer intéressante afin de résoudre certains problèmes.

var
tabNote[10..22] of integer;

Les tableaux dynamiques

Jusqu'à maintenant, on n'a créé que des tableaux statiques. Ce type de tableau a le désavantage de ne pouvoir se modifier durant l'exécution du programme. Une fois le tableau défini, on ne peut l'agrandir, le rétrécir.

Si vous avez déjà programmé des tableaux dynamiques en langage c, c++ vous savez comment il peut être compliqué de le faire pour un novice. Vous serez sûrement heureux d'apprendre que, depuis la version 4 de delphi, il est aisé de manipuler de tel tableau. On n'a qu'à ne pas spécifier de taille lorsqu'on déclare le tableau

var
  tabNote:array of integer;
  Grandeur:integer;
begin
  Grandeur:=SpecifierGrandeur;
  SetLength(tabNote,Grandeur);
end;
Maintenant, on a un tableau de la grandeur que l'on veut. L'indice inférieur d'un tableau dynamique débute toujours à l'indice zéro.

var
  tabNote:array of integer;
  Grandeur:integer;
begin
  Grandeur:=100;
  SetLength(tabNote,Grandeur);
  //Traitement on retrecit le tableau
  SetLength(tabNote,5);
  //on agrandit le tableau
  SetLength(tabNote,10);
end;

Les tableaux multidimensionnels peuvent aussi être crées dynamiquement
var
  lpPoint:TPoint;
begin
  Grandeur:=0;
  while (ok=false) do
  begin
    GetCursorPos(lpPoint);
    Grandeur:=Grandeur+1;
    //augmente la première dimension du tableau
    setlength(tabPoint,Grandeur,2);
    tabPoint[Grandeur-1,0]:=lpPoint.x;
    tabPoint[Grandeur-1,1]:=lpPoint.y;
  end;
end;

L'utilité des tableaux est innombrable, mais gare au débordement. :)

mardi 22 janvier 2002

Commentaire


COMMENTAIRE

Les commentaires sont utilisés dans les programmes afin de rendre le programme plus aisément compréhensible. Il y a trois façons d'inclure un commentaire dans un programme
  • {Programme conçut Marc Collin}
  • (* Fonction permettant de permuter 2 tableaux*)
  • //Écrit en delphi 5
Lorsqu?on écrit un commentaire sur plusieurs lignes, il est plus simple d'utiliser les accolades que d'avoir à retaper pour chacun ligne le slash.

{Creer par: Marc Collin Date: 
 2 octobre 2000 
But: Programme calculant l'accélération} 

vendredi 18 janvier 2002

Opérateur


OPÉRATEUR

Opérateur d'affection


Opérateur Description Exemple
:= Affection x := 10;

Opérateur mathématique


Opérateur Description Exemple
+ Addition x := y + 56
- Soustraction x := y - 3
* Multiplication x := y * 6
/ Division réel x := y / 5.6
div Division entière x := y div 5

Opérateur d'égalité


Opérateur Description Exemple
= Égale if ( x = 5) then...
<> Différent de if ( x <>15) then...
< Inférieur à if ( x < 67) then...
> Supérieur if ( x > 99) then...
<= Inférieur ou égale à if ( x <= 12) then...
>= Supérieur ou égale à if ( x >= 24) then...

Opérateur logique


Opérateur Description Exemple
and Et logique if (x=4) and (y=5) then..
or Ou logique if (x=45) or (y=23) then..

Opérateur unaire


Opérateur Description Exemple
^ Pointeur pNom:= ^Nom;
@ Adresse ptrtab := @tabNom;
and Et bit-à-bit x := x and $03;
or Ou bit-à-bit x:= x or $AA;
not Non bit-à-bit x:= x and not $AA
not Non logique if not Valide then...

Opérateur diver


Opérateur Description Exemple
$ Valeur hexadécimale x := $ff;
[] Indice de tableau x := tabNom[4];
. Qualification x:=y.create;

mercredi 16 janvier 2002

Types scalaires


TYPES SCALAIRES

Delphi possède de nombreux types de donnée. Le type de donnée détermine la valeur qui peut être attribuée aux variables.

Les types entiers

Type Intervalle Format/taille
Byte 0..255 non signé, 1 octet
Shortint -128..127 signé, 1 octet
Char 0..255 non signé, 1 octet
Widechar 0..65 535 non signé, 2 octets
Smallint -32 768..32 767 signé, 2 octets
Word 0..65 535 non signé, octets
Longint -2147483648.. 2147483647 signé, 4 octets
Integer -2147483648.. 2147483647 signé, 4 octets
Cardinal 0..4 294 967 295 non signé, 4 octecs
Int64 -9 223 372 036 854 775 808..9 223 372 036 854 775 807 signé, 8 octect

Les types réels

Type Intervalle Taille en octets
Real 2.9 10-39..1.7 1038 6
Double 5.0 10-324..1.7 10308 8
Real 2.9 10-39..1.7 1038 6
Extended 1.9 10-4951..1.1 104932 10
Comp -263+1..263-1 8
Currency -922337203685477.5808..
922337203685477.5807
8

Autres types

Type Valeur Taille en octets
Boolean True ou false 1
Variant varialbe 16

Le type de variant est à déconseiller lorsqu'on désire de la performance, car il s'adapte au type de donnée. Il utilisera toujours 16 octets même si sa valeur est égale à 1. Il est extrêmement lent.

jeudi 10 janvier 2002

Constante et variable


CONSTANTE ET VARIABLE

Base

Delphi fait une distinction entre constantes et variables. Une constante garde sa valeur initiale tout au long du programme, elle ne peut être modifiée. Une variable pourra durant la durée du programme changer sa valeur initiale. Les constantes et les variables doivent être déclarées avant leur utilisation. Voici un exemple de déclaration de constantes et de variables :
procedure premier;
const nul   = 0;
      code  = 'secret';
var age     : integer;
    salaire : real;
    sexe    : char;
...
Dans le cas des constantes, l'identificateur est suivi du signe "=" et de la valeur que l'on associe à la constante. Pour les variables, l'identificateur est suivi du signe ":" et du type de la variable.
Chaque déclaration de constante ou de variable se termine par un point virgule. Si plusieurs variables sont du même type, il est possible de les déclarer sous forme de liste d'identificateurs (séparés par une virgule) suivie du signe ":" et du type des variables :
var 
   age, enfants, voitures : integer;
   salaire, taille : real;

Delphi ne fait pas de distinction entre les majuscules et les minuscules pour les variables et les constantes donc si notre variable est nommée : tmpCalcul, TMPCalcul désignerait la même variable. Une telle approche peut avoir des avantages et des inconvénients. On peut faire se tromper dans le nom des variables ou constantes et ça compilera pareil. Il y aura problème si l'on souhaite utiliser notre programme, composent, dll dans un autre os et dans un autre langage de programmation.

Bloc d'instruction

Lorsque plusieurs instructions possèdent un lien entre elles, il est préfèrable de les regrouper afin de constituer un bloc d'instruction. Un bloc début par le mot «begin» et se termine par le mot «end». On doit ajouter un «;» à la fin du end; Voici un exemple

begin
   No_auto := 55;
   Age := 12;
end;

jeudi 3 janvier 2002

Premier programme


PREMIER PROGRAMME

On va créer un premier programme enfin de s'initier le plus rapidement à l'environnement de delphi.
Plaçons 4 étiquettes (labels) sur la fiche, ainsi que 2 boîtes d'édition (edit box) et 1 bouton.
Voici à quoi l'espace de travail devrait ressembler.

Comme vous pouvez le constater, les noms des composants ne sont pas très significatifs.
Sélectionnez le label1, l'inspecteur d'objet affiche automatiquement les propriétés et événements que le composant possède.

Pour changer le texte qui sera affiché par l'étiquette label1, il faut modifier sa propriété caption. Inscrivez «Nom» dans cette propriété.

Modifiez caption n'est pas tout, pour faciliter la compréhension du code, il est bien de rajouter un préfixe devant le nom du composant. Le préfixe identifiera le type de composant utilisé.

Modifiez la propriété nom (name) du label1 pour lblNom.
Inscrivez Prénom pour le label 2 (lblPrenom pour le nom du composant)

Exécution pour le bouton (cmdExecution pour le nom du composant)
Mettez le label 3 et 4 à vide (propriété caption).

Ajouter un préfixe devant le nom des composants n'est pas obligatoire, mais facilite la compréhension du code pour une utilisation ultérieure.

Je vous recommande fortement de suivre les standards que voici :
  • cmd = Bouton
  • lbl = Label
  • lst = liste
  • frm = frame
  • chk = case à cocher
  • opt = bouton radio
On commence par inscrire le standard suivi d'un nom le plus descriptif que possible. Ces standards peuvent varier en fonction de l'entreprise ou de l'institut scolaire où que l'on soit.
Voici à quoi ressemble l'espace de travail après les changements effectués



Maintenant que la conception graphique du programme est terminée, nous allons réagir à l'événement du bouton.

Lorsqu'on appuiera dessus, l'edit box du nom et du prénom s'ils ne sont pas vides iront se mettre dans les deux étiquettes du bas, leurs propriétés couleurs seront modifiées. Ne vous inquiétez pas si vous ne comprenez pas le code tout de suite, tout vous sera expliqué dans les prochains chapitres. Le but étant de vous familiariser avec edi.

Double cliqué sur le bouton afin de rentrer dans le code directement dans l'événement du bouton.

Entrez le code que voici,


ceci implique que vous avez fait les modifications des noms.
Par la suite appuyer sur la flèche verte dans la barre d'outils, le programme s'exécutera.


Entrez un nom, prénom, ensuite cliquez sur le bouton.
Admirez le résultat :)

Je vous conseille de modifier les propriétés des objets et de voir le résultat.
Vous pouvez soit le faire en mode création ou dans le code.

Dans le code, lorsque vous voulez modifier la propriété d'un objet, vous n'avez qu'à saisir le nom du composant, cliquez sur le «.» ensuite delphi vous montre les propriétés disponibles pour cet objet.

Vous choisissez celles que vous voulez, vous tapez «:=» et il vous reste plus qu'à inscrire la valeur voulue.

Exemple: lbl.color:=clwhite ceci changera la couleur de fond.

Modifier les propriétés et événements des objets, vous deviendriez meilleur plus rapidement Un bon programmeur ne doit pas craindre de faire des erreurs, vaut mieux essayer que de rester dans l'ignorance.
Code source disponible ici.