• Aucun résultat trouvé

TD : feuille 10. Les Tableaux (corrig´e)

N/A
N/A
Protected

Academic year: 2022

Partager "TD : feuille 10. Les Tableaux (corrig´e)"

Copied!
5
0
0

Texte intégral

(1)

TD : feuille 10. Les Tableaux (corrig´e)

Universit´e Paris-Nord, Institut Galil´ee. DEUG MIAS1, 2002/03

Exercice 1.

1. ´Ecrire un programme en C permettant de saisir une suite de caract`eres dans un tableau. On consid´erera que la suite se termine lorsque l’utilisateur effectue un retour `a la ligne (caract`ere

’\n’) et que la suite a une longueur maximale d´efinie pas une constante TAILLELIGNE.

2. Compl´eter le programme pr´ec´edent afin d’afficher la suite de caract`eres saisie par l’utilisateur ainsi que le nombre de caract`eres saisis (’\n’ non compris).

Solution :

#include <stdio.h>

#define TAILLEMAX 200

#define FAUX 0

#define VRAI 1 int main() {

int longueur=0;

int finligne=FAUX;

int i; //i : indice dans phrase.

char phrase[TAILLEMAX];

/* saisie d’une phrase*/

printf("Entrez une phrase.\n");

while((longueur<TAILLEMAX) && (finligne==FAUX)) {scanf("%c",&phrase[longueur]);

if(phrase[longueur]==’\n’) finligne=VRAI;

else

longueur=longueur+1;

}

/* affichage de la phrase */

printf("Vous avez saisie les %d caracteres suivants\n",longueur);

for(i=0;i<longueur;i++) printf("%c",phrase[i]);

printf("\n");

return 0;

}

(2)

Exercice 2.

Ecrire un programme en C permettant de d´eterminer et d’afficher le nombre de fois que chaque´ lettre de l’alphabet est pr´esente dans un tableau contenant des caract`eres. Le tableau contenant des caract`eres sera saisi par l’utilisateur. Par ailleurs, on ne distinguera pas les majuscules des minuscules. Les caract`eres n’appartenant pas `a l’alphabet seront compt´es `a part.

Solution :

#include <stdio.h>

#define TAILLEMAX 200

#define NBLETTRE 27

#define FAUX 0

#define VRAI 1 int main() {

int longueur=0;

int i,j; //i : indice dans phrase, j: indice dans histo.

int finligne=FAUX;

char phrase[TAILLEMAX];

int histo[NBLETTRE];

/* saisie d’une phrase*/

printf("Entrez une phrase.\n");

while((longueur<TAILLEMAX) && (finligne==FAUX)) {scanf("%c",&phrase[longueur]);

if(phrase[longueur]==’\n’) finligne=VRAI;

else

longueur=longueur+1;

}

/* histogramme des lettres */

for(j=0;j<NBLETTRE;j++) histo[j]=0;

for(i=0;i<longueur;i++)

{if(’a’<=phrase[i] && phrase[i]<=’z’ ) j=phrase[i]-’a’;

else if (’A’<=phrase[i] && phrase[i]<=’Z’ ) j=phrase[i]-’A’;

else

j=NBLETTRE-1;

histo[j]=histo[j]+1;

}

/* affichage de l’histogramme */

for(j=0;j<NBLETTRE-1;j++)

printf("%c apparait %d fois.\n",’a’+j,histo[j]);

printf("il y a %d signes non reconnus\n",histo[NBLETTRE-1]);

(3)

return 0;

}

Exercice 3.

Ecrire un algorithme permettant d’afficher les mots contenus dans une phrase saisie par un´ utilisateur. Pour simplifier, on supposera que les mots sont uniquement s´epar´es par un ou plusieurs espaces (caract`ere ’ ’). On ne tient pas compte de la ponctuation.

Solution :

#include <stdio.h>

#define TAILLEMAX 200

#define FAUX 0

#define VRAI 1 int main() {

int longueur=0,longueurMot;

int i,k; //i : indice dans phrase, k: indice dans mot.

int finligne=FAUX;

char phrase[TAILLEMAX];

char mot[TAILLEMAX];

/* saisie d’une phrase*/

printf("Entrez une phrase.\n");

while((longueur<TAILLEMAX) && (finligne==FAUX)) {scanf("%c",&phrase[longueur]);

if(phrase[longueur]==’\n’) finligne=VRAI;

else

longueur=longueur+1;

}

/* decoupage en mots */

printf("La phrase \n");

for(i=0;i<longueur;i++) printf("%c",phrase[i]);

printf("\n");

printf("est composee des mots:\n");

for(i=0,longueurMot=0;i<=longueur;i++)

{if(phrase[i]!=’ ’ && phrase[i]!=’\n’) /*le test sur \n sert a afficher le dernier mot de la phrase */

{mot[longueurMot]=phrase[i];

longueurMot=longueurMot+1;

} else

{for(k=0;k<longueurMot;k++) printf("%c",mot[k]);

if (longueurMot!=0) printf("\n");

(4)

longueurMot=0;

} } return 0;

}

Exercice 4.

1. ´Ecrire un programme en C permettant `a un utilisateur de saisir une matrice carr´ee. Cette matrice aura une taille maximum donn´ee par une constante TAILLEMAX. L’utilisateur devra dans un premier temps dire la taille de la matrice qu’il veut saisir.

2. Compl´eter le programme pr´ec´edent afin d’afficher la matrice saisie par l’utilisateur.

3. Compl´eter le programme pr´ec´edent afin de pouvoir d´eterminer le coefficient ayant le plus grand module parmi tous les coefficients pr´esents sur une colonne choisie par l’utilisateur.

Faire en sorte que le programme affiche la valeur de ce coefficient et la ligne `a laquelle il appartient.

4. Compl´eter le programme pr´ec´edent afin de permettre `a l’utilisateur d’intervertir une ligne de son choix avec celle que vous avez d´etermin´e `a la question pr´ec´edente. Faire en sorte que le programme affiche la matrice obtenue apr`es cette interversion.

Solution :

#include <stdio.h>

#define TAILLEMAX 100 int main(){

float matrice[TAILLEMAX][TAILLEMAX];

float lignetmp[TAILLEMAX];

float max;

int taille;

int i,j;

int i1,imax; // lignes a intervertir

/* saisie d’une matrice carree */

printf("Quelle est la taille de la matrice carree?\n");

scanf("%d",&taille);

for(i=0;i<taille;i++) for(j=0;j<taille;j++) {printf("matrice(%d,%d)=",i+1,j+1);

scanf("%f",&matrice[i][j]);

}

/* affichage de la matrice */

printf("Vous avez saisie\n");

for(i=0;i<taille;i++) {for(j=0;j<taille;j++)

printf("%f \t",matrice[i][j]);

printf("\n");

}

(5)

/* determination du max */

do{

printf("Quelle est la colonne dont vous voulez le max (en module)?\n");

scanf("%d",&j);

}while(j<=0 || j>taille);

j=j-1;

max=matrice[0][j];

for(i=0;i<taille;i++) {if(max<matrice[i][j])

{max=matrice[i][j];

imax=i;

}

else if(max< -matrice[i][j]) {max=-matrice[i][j];

imax=i;

} }

printf("Le max de la colonne %d vaut %f. Il est atteint a la ligne %d\n",j+1,max,imax+1);

/* intervertion des lignes */

do{

printf("Quelle est la ligne a intervertir? ");

scanf("%d",&i1);

}while(i1<=0 || i1>taille);

i1=i1-1;

for(j=0;j<taille;j++)

lignetmp[j]=matrice[i1][j];

for(j=0;j<taille;j++)

matrice[i1][j]=matrice[imax][j];

for(j=0;j<taille;j++)

matrice[imax][j]=lignetmp[j];

/* affichage de la matrice */

printf("La nouvelle matrice est\n");

for(i=0;i<taille;i++) {for(j=0;j<taille;j++)

printf("%f \t",matrice[i][j]);

printf("\n");

} return 0;

}

Références

Documents relatifs

imprime toutes les lignes contenant le mot analyse suivi du mot lexical dans tous les fichiers de suffixe .tex. (L’option -i

En cas de redistribution du document ou d’une version dérivée, il doit être partagé à son tour sous licence Creative Commons BY SA. Le police cursive utilisée est « AA

Syntaxe de l’adressage indirect par registre en langage symbolique.- Comme nous l’avons d´ej` a vu, en langage symbolique, pour d´esigner une constante on ´ecrit celle-ci

Le fait d’avoir trouv´ e une m´ ethode it´ erative (au moins) convergente prouve que la matrice A est inversible.. D´ ecrire l’algorithme de Gauss-Seidel appliqu´ e ` a

Par contre, on voit facilement qu’en tout point x, toute boule pour la distance usuelle centr´ ee en x contient une boule pour d centr´ ee en x (en effet si x 6= 0, pour ε &gt;

De deux choses l’une, soit elle est continue et son noyau est ferm´ e, soit elle ne l’est pas et dans ce cas elle n’est born´ ee sur aucune boule5. Il suit alors que l’image

Consid´ erons un point a dans le produit (suppos´ e non vide, sinon on a pas besoin de continuer !). On voit alors facilement que deux points du produit ne diff´ erant que d’un

Pour v´ erifier que c’est un hom´ eomorphisme, on peut soit utiliser (et montrer comme ci-dessous) que S(X ) est compact si X est compact et S n+1 s´ epar´ e ou bien ´