Vous êtes sur la page 1sur 10

U. A. G. - UFR S.E.

2006-2007

Proposition de Correction TP1


Tableaux une dimension Chanes de caractres PEROUMALNAK M. mail: mperouma@univ-ag.fr web : http://grimaag.univ-ag.fr/~mperouma/

I] Exercice 1 :
1] Enonc
crire un programme permettant d'afficher l'cran (sortie standard) la chane de caractres dclare de la manire suivante : char chaine[6] = {'S','a','l','u','t','\0'}; Vous procderez de deux manires diffrentes : a Une boucle for affichant chaque case du tableau. b L'utilisation du tableau chaine en tant que chane de caractres (%s).

2] Proposition de correction
Pour ce premier exercice, nous allons dcomposer notre en analyse en plusieurs tapes :

Etude de l'nonc (Actions lmentaires) Algorithme Code

a) Etude de l'nonc Il s'agit de dgager de l'noncer les lments qui nous permettrons de construire la solution et tre sr de ne pas s'carter de l'exercice demand. crire un programme permettant d'afficher l'cran (sortie standard) la chane de caractres dclare de la manire suivante :

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N char chaine[6] = {'S','a','l','u','t','\0'}; Vous procderez de deux manires diffrentes :

2006-2007

a Une boucle for affichant chaque case du tableau. b L'utilisation du tableau chaine en tant que chane de caractres (%s). Nous pouvons donc dduire la suite d'actions que nous devrons retrouver dans le programme :

Dclarer un tableau de caractres chaine suivant un formalisme particulier ( chane de caractres dclare de la manire suivante ) Afficher ce tableau de deux manires ( afficher l'cran , deux manires diffrentes ):

1) En utilisant une boucle de type for pour parcourir le tableau caractre par caractre ( boucle for , chaque case ) 2) En considrant le tableau comme une chaine de caractre

b) Algorithme Nous savons dsormais ce qu'il y a faire; reste maintenant le mettre en forme et le faire !!! ALGORITHME:AfficherTableauSequentiel VARIABLES: chaine:tableau[1,6]decaractres< {'S','a','l','u','t','\0') i:entier DEBUT Pouriallantde16Faire afficher(chaine[i]) FinPour FIN Prenez l'habitude de raliser cette tape au brouillon, mme si le formalisme de l'algo n'est pas parfait, le but est de clarifier et de dcrire suffisament la dmarche pour que le travail faire soit codable dans n'importe Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N quel langage. c) Code

2006-2007

Nous allons maintenant traduire en Langage C. Le b) dans cet exercice est juste l pour vous montrer que l'on peut aussi considrer un tableau de caractre comme un ensemble. (%s pour string = chane de caractres)
Ligne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 //Afficherletableauenleconsidrantcommeunechanedecarac. printf(%s\n,chaine); } //Afficherletableauavecunebouclefor for(i=0;i<6;i++) { printf(%c,chaine[i]); } printf(\n);//Pourrevenirlalignelafin //MAIN main() { charchaine[6]={'S','a','l','u','t','\0'};//Chanetraiter inti;//Compteurquinouspermettradeparcourirletableau Code /*Exercice1aet1b:Propositiondecorrection *PEROUMALNAKMmail:mperouma@univag.fr */ #include<stdio.h>

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N

2006-2007

II] Exercice 2
1] Enonc
Ecrire un programme permettant de demander l'utilisateur de saisir une chane de caractres. Il devra dfinir la taille de celle-ci auparavant. La rcupration de la chane de caractres devra galement se faire de deux manires diffrentes : a Une boucle for remplissant chaque case du tableau chaine. b Remplissage de la variable chaine en tant que chane de caractres Vous afficherez la chane saisie dans les deux cas.

2] Proposition de correction
a) Algorithme Dans cet exercice, nous devons saisir et afficher une chane de caractres de taille dfinie par l'utilisateur de deux manires diffrentes :

1) Caractre par caractre en utilisant une boucle Pour 2) En une fois en considrant le tableau de caractres comme une chaine

Nous devons donc :

1) Dclarer une chaine de caractre de taille N, N tant un entier naturel suffisament grand 2) Demander l'utilisateur de choisir une taille pour sa chaine, taille tant infrieure N 2-bis) Vrifier aprs saisie que la taille entre par l'utilisateur est infrieure N 3) Proposer de saisir la chaine caractre par caractre 4) Afficher la premire chaine saisie

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N

2006-2007

5) Proposer de saisir la chaine en un bloc 6) Afficher la seconde chaine saisie

Nous en dduisons donc l'algorithme suivant (ici, on choisit N = 100) ALGORITHME:SaisirTableau VARIABLES: chaine:tableau[1,100]decaractres taille_tab:entier i:entier DEBUT afficher(Saisiesquentielle) taille_tab<101 Tantquetaille_tab>=100Faire afficher(Saisirlatailledevotrechaine) afficher((entierinfrieur100)) lire(taille_tab) FinTantQue Pouriallantde1taille_tabFaire afficher(Saisirlecarac,i,delachaine) lire(chaine[i]) FinPour afficher(Lachainesaisieest:,chaine) afficher(Saisieenbloc) afficher(Saisirvotrechaine) lire(chaine) afficher(Lachainesaisieest:,chaine) FIN

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N b) Code

2006-2007

Nous allons prsent traduire cet algorithme en langage C : il y a un choix faire concernant la fonction utiliser dans chaque cas pour saisir les chaines de caractre. Nous avons notre disposition deux fonctions (qui vous ont t prsentes en Cours et en TD, en fait il y en a beaucoup plus): 1. getchar qui lit un caractre depuis le flux d'entre standard stdin (le clavier) 2. scanf (utilise avec le format %c) qui lit un caractre depuis stdin et attend un caractre '\n' ( retour chariot , appui sur la touche <Entre>) pour terminer la saisie. Certain d'entre vous ont pu constater que la fonction scanf introduit un biais dans la saisie caractre par caractre : le caractre '\n'qui signifie fin de saisie est rcupr par l'excution suivante de scanf dans la boucle de saisie. De ce fait, afin d'viter cet artfact, nous utiliserons getchar pour la saisie caractre par caractre et scanf pour la saisie en tant que chaine. Remarque : Lors de l'utilisation de scanf pour la saisie d'une chaine quelconque (format %s) , vous remarquerez que cette fonction ne gre pas les espaces dans la chaine saisie : ex : la chane mamamanestbelle devient ma si saisie avec scanf en utilisant le format %s

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N
Ligne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Code /*Exercice2a:Propositiondecorrection *PEROUMALNAKMmail:mperouma@univag.fr */ #include<stdio.h>

2006-2007

#defineN100//MacropermettantderemplacerNpar100lacompilation //MAIN main() { charchaine[N];//Tableaudesaisie inti;//Compteurquinouspermettradeparcourirletableau inttaille_max;//Taillemaximaleentreparl'utilisateur //Entrerlatailledelachainesaisie taille_max=N+1; while(taille_max>=N) {//Tantquelachainesaisieest>N1 printf(Saisirlatailledelachaine(entier<%d),N); scanf(%d,&taille_max); } //Saisirletableaucaractreparcaractre. for(i=0;i<taille_max;i++) { printf(Saisircaractre%d:\n,i); chaine[i]=getchar(); } //Mettrelecaractredefindechane chaine[taille_max]='\0'; //Afficherlachaine printf(Lachainesaisieest:%s\n,chaine); } //Pourlasaisiedelachaineenunbloc,voircodecomplet

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N

2006-2007

III] Exercice 3
1] Enonc
Soit le tableau de caractres : chartableau[100]; Ecrire un programme qui permette l'utilisateur de saisir une chane de caractres et qui affiche ensuite la taille de la chane entre. On pourra galement afficher de nouveau la chane saisie.

2] Proposition de correction
a) Algorithme Dans cet exercice, nous n'avons pas priori la taille de la chane saisie par l'utilisateur. Il s'agit donc de reprendre la faon de saisir utilise dans l'exo 2 et de poser comme condition d'arrt que le caractre saisi soit '\n'. On a donc l'algo suivant : ALGORITHME:TailleTableauSaisi VARIABLES: chaine:tableau[1,100]decaractres taille_tab:entier i:entier DEBUT afficher(Saisirunechainedecaractres) lire(chaine[1]) i<1; Tantquechaine[i]!='\n'Faire lire(chaine[i]) i<i+1 FinTantQue afficher(Lachainesaisieest:,chaine) afficher(detaille,i) FIN Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N

2006-2007

b) Code

Mars 2007 LS1 UE012 PEROUMALNAK M.

U. A. G. - UFR S.E.N
Ligne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 printf(Saisissezunechainedecaractres\n); chaine[0]=getchar() i=1; while(chaine[i]!='\n'&&i<N) { chaine[i]=getchar(); i++; } //Mettrelecaractredefindechane chaine[i]='\0'; //Afficherlachaine printf(Lachainesaisieest:%s\n,chaine); printf(Satailleest:%d\n,i); } Code /*Exercice3:Propositiondecorrection *PEROUMALNAKMmail:mperouma@univag.fr */ #include<stdio.h>

2006-2007

#defineN100//MacropermettantderemplacerNpar100lacompilation //MAIN main() { charchaine[N];//Tableaudesaisie inti;//Compteurquinouspermettradeparcourirletableau

Mars 2007 LS1 UE012 PEROUMALNAK M.

Vous aimerez peut-être aussi