chaînes de caractères • enregistrement de cours/rev... · • exemple 1: ¾Écrire un programme...
TRANSCRIPT
• 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
}