Вы находитесь на странице: 1из 5

Institut National des Tlcommunications et des Technologies de l'Information et

de la Communication INT-TIC d'Oran Algrie



Langage de Programmation C
3
ime
anne ingnieur
Fiche de TP N 4
Procdures et Fonctions


Exercice 01
En utilisant les sous-programmes, crire un programme qui calcule la somme de deux entiers
avant de permuter leurs valeurs.
#include<stdio.h>

int somme(int a, int b){
return a+b;
}

void permut(int* a, int* b){
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}

int main(){
int x, y;
printf("x = "); scanf("%d",&x);
printf("y = "); scanf("%d",&y);
int s = somme(x, y);
printf("%d + %d = %d\n", x, y, s);
permut(&x, &y);
printf("Apres permutation : x = %d et y = %d",x,y);
return 0;
}






Exercice 02
Ecrire une fonction estTrie qui vrifie si un tableau est tri dans un ordre croissant.
Tester-la dans un programme principal.
#include<stdio.h>
#define N 10

int estTrie(int T[], int n) {

int i;
for (i=0; i<n-1; i++)
if (T[i]>T[i+1])
return 0;

return 1;
}

int main() {

int tab[N];
int i;

for (i=0; i<N; i++) {
printf("T[%d] = ", i+1);
scanf("%d",&tab[i]);
}

int croissant = estTrie(tab, N);

if (croissant == 1)
printf("Le tableau est trie dans une ordre croissant\n");
else
printf("Le tableau n'est pas trie dans une ordre
croissant\n");

return 0;
}








Exercice 03
En utilisant les structures, crire une fonction lendemain qui renvoie le lendemain dune
date. Tester-la dans un programme principal.
#include <stdio.h>
#include <malloc.h>

typedef struct date {
int jour;
int mois;
int annee;
} Date;

Date lendemain (Date d) {

d.jour++;

if ((d.jour>31) || ((d.jour>30) && (d.mois==4 || d.mois==6 ||
d.mois==9 || d.mois==11)) || (d.mois==2 && d.jour>29 &&
d.annee%4==0) || (d.mois==2 && d.jour>28 && d.annee%4!= 0))
{
d.jour = 1;
d.mois++;
}

if (d.mois>12) {
d.mois = 1;
d.annee++;
}

return d;
}

int main () {

Date d;
printf ("====== Date ======\n");

do {
printf ("jour : "); scanf ("%d", &d.jour);
} while (d.jour<1 || d.jour>31);

do {
printf ("mois : "); scanf ("%d", &d.mois);
} while (d.mois<1 || d.mois>12);

do {
printf ("annee : "); scanf ("%d", &d.annee);
} while (d.annee<1 || d.annee>2050);

Date dl = lendemain(d);



printf ("Le lendemain de %d/%d/%d est le %d/%d/%d\n", d.jour,
d.mois, d.annee, dl.jour, dl.mois, dl.annee);

return 0;
}

Exercice 04
Ecrire un programme saisissant une chane de caractres ainsi que deux indices a et b, et
recopiant dans une deuxime chane la tranche comprise entre a et b.
#include <stdio.h>
#define N 21

int main() {

char ch1[N];
char ch2[N];

printf("Saississez une chaine de taille 20 au maximum : ");
fgets(ch1, N, stdin);
fflush(stdin);

int a, b;
printf("Donnez les deux indices d'extraction de la sous-chaine\n");
printf(" indice de debut : "); scanf("%d",&a);
printf(" indice de fin : "); scanf("%d",&b);

int i;
for (i=a; i<=b; i++)
ch2[i-a] = ch1[i];
ch2[i-a] = 0;

printf("chaine 1 : %s\n", ch1);
printf("chaine 2 : %s\n", ch2);
return 0;
}

En utilisant une fonction qui fait lextraction de la sous-chaine :

#include <stdio.h>
#include <malloc.h>
#define N 21

char* extraction (char* ch, int a, int b) {

char* ext; // declaration de la chane
ext = (char*) malloc((j-i+2)*sizeof(char)); //allocation de la chane
if (ext == NULL) // test de lallocation
exit(1);



int i; //copie de la sous chane
for (i=a; i<=b; i++)
ext[i-a] = ch[i];
ext[i-a] = 0;

return ext; // renvoie du rsultat (le pointeur ext)
}

int main() {

char ch1[N];
printf("Saississez une chaine de taille 20 au maximum : ");
fgets(ch1, N, stdin);
fflush(stdin);

int a, b;
printf("Donnez les deux indices d'extraction de la sous-chaine\n");
printf(" indice de debut : "); scanf("%d",&a);
printf(" indice de fin : "); scanf("%d",&b);

char* ch2 = extraction(ch1, a, b);

printf("chaine 1 : %s\n", ch1);
printf("chaine 2 : %s\n", ch2);

return 0;
}





R. HACHEMI

Вам также может понравиться