Chaînes de caractères • Enregistrement de cours/Rev... · • Exemple 1: ¾Écrire un programme...

Post on 12-Sep-2018

217 views 0 download

Transcript of Chaînes de caractères • Enregistrement de cours/Rev... · • Exemple 1: ¾Écrire un programme...

• Chaînes de caractères

• Enregistrement

TCH010-Informatique

• Exemple 1:

Écrire un programme de conjugaison des verbes en "er". Leprogramme lit un verbe régulier en "er" au clavier et en affiche la

j i é t d l'i di tif V d i lé tconjugaison au présent de l'indicatif. Vous devez implémenterau minimum 3 fonctions :

• Une fonction qui vérifie qu’il s’agit bien d’un verbe en "er" • Une fonction qui vérifie qu il s agit bien d un verbe en "er"

• Une fonction qui remplit un tableau avec les différentes conjugaisonsconjugaisons

• Une fonction qui affiche le contenu du tableau

TCH010-Informatique

Structure de données:

0 Programme1 Programmes#define JE 0

#define TU 12 Programme3 Programmons

#define TU 1#define IL 2#define NOUS 3#define VOUS 4 4 Programmez

5 Programment

#define VOUS 4#define ILS 5

#define MAXCAR 100 #define MAXCAR 100 #define MAXLIGNE 6

// tableau de chaine de caractere//

typedef char t_mot[MAXCAR];typedef t_mot t_tab_conjugaison[MAXLIGNE];

TCH010-Informatique

yp j g [ ]

#define TRUE 1#define TRUE 1#define FALSE 0

// fonction qui verifie si un mot se termine bien par erq p// renvoie TRUE si c’est le cas, FALSE sinon.

int verbe_en_er(char * verbe){

int valide=FALSE;

// verifier les 2 derniers caracteresif ((verbe[strlen(verbe)-1]=='r')&&(verbe[strlen(verbe)-2]=='e'))

valide=TRUE;

return valide;return valide;}

P R O G R A M M E R \0

TCH010-Informatique

\

0 1 2 3 4 5 6 7 8 9 10

void conjuguer(t_tab_conjugaison tablo, char * verbe){h i [MAXCAR] 0 Programmchar racine[MAXCAR];

int personne=0;

//determiner la racine

0 Programm1 Programm2 Programm//determiner la racine

strcpy(racine, verbe);racine[strlen(racine)-2]='\0'; // enlever er

// i l i h

g3 Programm4 Programm

// copier la racine pour chaque personnefor(personne=JE;personne<=ILS;personne++){

strcpy(tablo[personne],racine);}

5 Programm

0 P}// ajouter la terminaisonstrcat(tablo[JE],"e");strcat(tablo[TU],"es");t t(t bl [IL] " ")

0 Programme1 Programmes2 Programmestrcat(tablo[IL],"e");

strcat(tablo[NOUS],"ons");strcat(tablo[VOUS],"ez");strcat(tablo[ILS],"ent");

2 Programme3 Programmons4 Programmez

TCH010-Informatique

( [ ], );} 5 Programment

void afficher_conjugaison(t_tab_conjugaison tablo,int nb_ligne){int ligne=0;

for(ligne=0;ligne<nb_ligne;ligne++){( g g g g )printf("%s\n",tablo[ligne]);

}}}

ProgrammeProgrammesProgrammeProgrammons

TCH010-Informatique

ProgrammonsProgrammezProgramment

// programme principalint main(void){int main(void){

char verbe[MAXCAR]; // sert a memoriser le verbe conjuguert_tab_conjugaison conjugaison; // tableau de conjugaison

// lecture du verbe tant qu'il ne finit pas par erdo{

printf("\n entrez un verbe se terminant en er:");f("% " b )scanf("%s",verbe);

}while(!verbe_en_er(verbe));

// conjuguer// conjuguerconjuguer(conjugaison,verbe);

//affichageafficher_conjugaison(conjugaison,MAXLIGNE);

return EXIT_SUCCESS;}

TCH010-Informatique

}

• Exemple 2:

Définissez les structures nécessaires pour mettre en mémoire les informationssuivantes sur un groupe de 10 personnes :

Chaque personne doit être décrite par les informations suivantes : • Nom• Prénom• Date de naissance• Adresse• Numéro de téléphone

Chaque adresse doit être décrite par les informations suivantes :Chaque adresse doit être décrite par les informations suivantes :• Numéro civique• Nom de la rue• Ville• Code-Postal

Le numéro de téléphone doit être décrit par les informations suivantes :• Indicatif régional à 3 chiffres• Numéro à 7 chiffres

TCH010-Informatique

• Numéro à 7 chiffres

jour

nomprénom

date de naissance

moisannée

numero

personne0

adressenuméro de tél.

rueville

Indicatif rég.Téléphone

personne1Téléphone

jourmois

personne9nom

prénomdate de naissance

adresse

moisannée

jourmois

adressenuméro de tél.

année

Indicatif rég.Téléphone

TCH010-Informatique

t datepersonne0jourmois _

t_adresse

personne1 nomprénom

date de naissanceadresse

année

numerorueville

t_numtelpersonne9

numéro de tél.ville

Indicatif rég.Téléphone

typedef struct{long indicatif_regional;long telephone;

#define MAX_CAR 100

typedef char t chaine[MAX CAR];long telephone;} t_numtel;

typedef struct{

typedef char t_chaine[MAX_CAR];

typedef struct{long numero;yp {

long jour;long mois;long annee;

g ;t_chaine rue;t_chaine ville;

} t_adresse;

TCH010-Informatique

}t_date;

t datepersonne0jourmois _

t_adresse

personne1 nomprénom

date de naissanceadresse

année

numerorueville

t_numtelt_personne

personne9numéro de tél.

ville

Indicatif rég.Téléphone

typedef struct{t_chaine nom;t chaine prenom;t_chaine prenom;t_date date_de_naissande;t_adresse adresse;t numtel numero de tel;_ _ _ ;

} t_personne;

TCH010-Informatique

t datepersonne0jourmois _

t_adresse

personne1 nomprénom

date de naissanceadresse

année

numerorueville

t_numtelt_personnet_groupe

personne9numéro de tél.

ville

Indicatif rég.Téléphone

typedef struct{t_chaine nom;t chaine prenom;

#define MAX_PERS 10t_chaine prenom;t_date date_de_naissande;t_adresse adresse;t numtel numero de tel;

typedef t_personne t_groupe[MAX_PERS];

_ _ _ ;} t_personne;

TCH010-Informatique

Définissez les structures nécessaires pour conserver les informations des différentes salle d’ordinateur de l’ÉTS.

Un laboratoire contient une ou plusieurs station(s). Chaque laboratoire a un numéro de local (ex. : 1222, 1226, etc.). Une station, c’est un ordinateur et un écran. Évidemment, chacune des stations possède un numéro qui et u écran. v de e t, c acu e des stat o s possède u u é o qu permet de l’identifier. Pour chaque ordinateur, nous voulons la puissance du CPU (en MHz), la quantité de mémoire vive (en Mo), la capacité du disque (en Go) et la marque (ex. : "Compaq", "Hp", etc.). Il faut aussi pou oir conser er tous les logiciels installés sur la machine Pour chaque pouvoir conserver tous les logiciels installés sur la machine. Pour chaque écran il faut : la marque (ex. : "Samsung", "Sony", etc.), la taille (en pouces) et la résolution (comme .25 ou .27). Pour chaque logiciel, il faut : le nom du logiciel (ex. : "Word", "Excel", etc.), la compagnie distributrice g ( , , ), p g(ex. : "Microsoft", "Borland", etc.) et la version (ex. : 1.5, 2.08, etc.). Les chaînes de caractères sont au maximum de 40 caractères. Il y a au maximum 100 logiciels par ordinateur, 25 stations par laboratoire et 10 laboratoires

TCH010-Informatique

laboratoires.

marquepuissance

laboratoire

t_logicielnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

#define MAX_CAR 41 //40 caractères + ‘\0’#define MAX_LOGICIEL 100

typedef struct{double resolution;

t_ecrana que

#define MAX_STATION 25#define MAX_LABO 10

typedef char t_chaine[MAX_CAR];

double taille;t_chaine marque;

}t_ecran;yp [ ]

typedef struct{t_chaine nom;t_chaine cie;double version;

TCH010-Informatique

double version;}t_logiciel;

t_ordinateurmarque

puissancelaboratoire

t_logicielt_tab_logicielnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

//un tableau de logicielstypedef t_logiciel t_tab_logiciel[MAX_LOGICIEL];

typedef struct {t_ecran

a que

yp g g [ ]t_chaine marque;double puissance;double espace_disque;double memoire;double memoire;

t_tab_logiciel tab_logiciel; int nb_logiciel;

TCH010-Informatique

}t_ordinateur;

t_ordinateurmarque

puissancelaboratoire

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

//une stationtypedef struct { //un tableau de station

t_ecrana que

yp {

char numero;t_ordinateur ordi;t ecran ecran;

typedef t_station t_tab_station[MAX_STATION];

t_ecran ecran;

}t_station;

TCH010-Informatique

t_ordinateurmarque

puissancelaboratoire

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationt_labo

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

//un labotypedef struct { //un tableau de station

t_ecrana que

yp {char numero;

int nb_station;

typedef t_station t_tab_station[MAX_STATION];

t_tab_station tab_station;

}t_labo;

TCH010-Informatique

t_ordinateurmarque

puissancelaboratoire

t_tab_labo

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationt_labo

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

//la définition du tableau contenant les laboratoirest_ecran

a que

typedef t_labo t_tab_labo[MAX_LABO];

TCH010-Informatique

t_ordinateurmarque

puissancelaboratoire

t_tab_labo

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationt_labo

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

t_ecrana que

int main (void){int main (void){

//(rappel: pas de variable, pas d'espace réservé)t tab labo tab labo = {0};t_tab_labo tab_labo = {0};

int nb_labo = 0;

TCH010-Informatique

…}

t_ordinateurmarque

puissancelaboratoire

t_tab_labo

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationt_labo

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

t_ecrana que

Valide ou pas ?

tab_labo1.tab_station1.ordi.marque = « Nec »; tab_labo[0].tab_station[0].ordi.tab_logiciel[0].nom = « TC»;_ [ ] _ [ ] _ g [ ] ;t_ecran ecran = {1024*768,17,"Nec"};t_ordinateur ordi = {"Vtech",4,1.4,200,{0}};

TCH010-Informatique

t_ordinateurmarque

puissancelaboratoire

t_tab_labo

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationt_labo

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

t_ecrana que

Valide ou pas ?

t_station station;station.numero = 1;station.ecran = ecran;station.ordi = ordi;

TCH010-Informatique

tab_labo[0].tab_station[0] = station;

t_ordinateurmarque

puissancelaboratoire

t_tab_labo

t_logicielt_tab_logicielt_tab_stationnumero

ordinateur

puissanceespace disque

memoirelogiciels

nb logiciellogiciel nom

compagnieversionnumero

station

laboratoire

t_stationt_labo

ecran

resolutiontaille

marque

logicielversionnumero

stationsnb stations

station

t_ecrana que

//Fonction qui compare deux écrans

int ecran_pareil(t_ecran ec1, t_ecran ec2){return ec1.resolution == ec2.resolution &&return ec1.resolution ec2.resolution &&

ec1.taille == ec2.taille &&strcmp(ec1.marque,ec2.marque) == 0;

TCH010-Informatique

}