Chaîne de caractères Structure Structure Structure Tableau de

Transcription

Chaîne de caractères Structure Structure Structure Tableau de
Chaîne de caractères
♦ Trucs pour le traitement des chaînes de caractères
– Si vous connaissez l’algorithme pour des entiers, vous
pouvez l’appliquer à des chaînes de caractères en effectuant
les changements suivants :
– a=b;
strcpy(ch1,ch2);
– if(a == b)
if(strcmp(ch1,ch2) == 0)
– if(a <= b)
if(strcmp(ch1,ch2) <= 0)
– …
Structure
♦ Accès à un champ d’une structure
– Si personne est une variable de type structure
• personne.taille
– Si pers est un pointeur sur une variable de type
structure
• pers->taille accède
pointée par pers
Structure
♦ Affectation entre deux variables de type structure :
– Avec Personne pers1, pers2 ; on peut affecter l'une à l'autre :
– pers1 = pers2; /* pers1 contiendra toutes les
informations de pers2.
*/
♦ Comparaison entre deux variables de type structure :
– La comparaison directe de deux informations de type
structure n'est pas permise.
accède au champ taille de cette
variable
au champ taille de la variable
Structure
♦ Comparaison entre deux variables de type structure :
– le C permet de comparer octet par octet
#include <mem.h> /*memcmp : memory comparison*/
if ( memcmp(&pers1, &pers2, sizeof(Personne)) == 0)
printf("Elles sont identiques\n");
else
printf("Elles sont différentes\n");
if(pers1 == pers2) printf("C'est pareil");
• Pas permis
Tableau de structures
♦ Justification
– Supposons que nous avons beaucoup d’informations se
rapportant à un même objet et que nous devons traiter
plusieurs de ces objets.
–
–
–
–
–
–
int marque[MAX];
int modele[MAX];
int cassette[MAX];
int cd[MAX];
int mp3[MAX];
float prix[MAX];
Tableau de structures
– L’utilisation de tableaux à 2 dimensions peut diminuer un
peu le nombre de tableaux à gérer
–
–
–
–
int marque[MAX];
int modele[MAX];
int options[MAX][3];
float prix[MAX];
– On obtient ainsi 4 tableaux
♦ Il serait intéressant de pouvoir contenir toute
l’information dans un seul tableau
– En utilisant un tableau pour chaque information, on obtient 6
tableaux
1
Tableau de structures
♦ Déclaration de la structure
– typedef struct{
int marque;
int modele;
int cassette;
int cd;
int mp3;
float prix;
} radio;
Tableau de structures
♦ Déclaration d’un tableau de structures
radio tabRadio[MAX];
– Cette déclaration réserve de l’espace pour MAX variables
de type radio.
♦ Avantages
– Un seul tableau à passer en paramètre à des fonctions
– Ce prête bien à l’utilisation de fichiers binaires.
Tableau de structures
♦ Désavantage
Fichiers binaires
♦ Pour stocker l’information telle qu’elle est codée en
– On ne peut plus passer un tableau contenant une seule
information
– Les fonctions qui doivent faire un traitement sur une
information en particulier de la structure doivent gérer
l’accès à celle-ci. En particulier si le traitement est le
même mais pour 2 champs différents de même types.
• Ex: une fonction qui compte et retourne le nombre de radios
ayant une option donnée.
mémoire.
– Ex: dans un fichier texte, 123 est codé comme ‘1’ ‘2’ ‘3’
donc 3 fois 1 octet, alors qu’en mémoire, il est codé sur 4
octets.
– Donc, l’espace occupée par des valeurs entières dans un
fichier texte est variable
– Dans un fichier binaires c’est toujours sizeof(int)
Fichiers binaires
♦ Déclaration
– Comme fichier texte sauf que l’on ajoute b dans la chaîne
de caractères pour le mode d’accès
FILE * aLire, *aCreer;
aLire = fopen("nom du fichier", "rb" );
aCreer = fopen("nom du fichier", "wb" );
♦ Lecture dans un fichier binaire
fread(adresse en mémoire où placer les octets lus,
nb d’Octets à lire,
nb d’enrégistrement à lire,
pointeur sur le fichier) ;
Fichiers binaires
♦ Exemple, lecture d’un fichier de structures radio
radio unRadio[MAX];
while(fread(&unRadio[i],sizeof(radio),1,aLire),
!feof(aLire) )
i++;
– Lit toutes les informations d’un élément radio à la fois
♦ Écriture :
• for(i=0;i<nb;i++)
•
fwrite(&unRadio[i],sizeof(radio),1,aCreer);
– Écrit toutes les informations d’un élément radio à la fois
2