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