Beruflich Dokumente
Kultur Dokumente
Travaux Pratiques :
Langage C
Licence Professionnelle TSEI :
1.2 Exercice 2
1.3 Exercice 3
1.4 Exercice 4
1.5 Exercice 5
1.6 Exercice 6
1.7 Exercice 7
2.2 Exercice 2
Ecrire un programme qui saisit un entier a et range dans un tableau d’entier les
valeurs de ai avec i = 0,N.
2.3 Exercice 3
2.4 Exercice 4
2.5 Exercice 5
2.6 Exercice 6
3.2 Exercice 2
3.3 Exercice 3
3.4 Exercice 4
un nombre (nombre1)
un opérateur (+,-,*,/)
un nombre (nombre2)
3.5 Exercice 5
3.6 Exercice 6
4.2 Exercice 2
Il faut saisir les valeurs en m2 pour tous les appartements. Ecrire une boucle de
saisie.
TP5
5.1 Exercice 1
5.2 Exercice 2
5.3 Exercice 3
Il est fréquent que l’on munisse les matricules, les codes de nomenclature, les
numéros de compte, . . . , d’une clé de contrôle qui permet de vérifier leur
validité. Cette clé est calculée selon un certain procédé à partir des autres
chiffres. Elle est en général ajoutée à la fin du code. Une technique simple pour
produire une clé de contrôle consiste à multiplier chaque chiffre du code par un
certain facteur (i.e. une pondération), à faire la somme des chiffres des produits
obtenus, à diviser cette somme par 10 et à retrancher à 10 le reste de la division.
Cette différence donne la clé de contrôle.
Exemple:
a%b
5.5 Exercice 5
6.2 Exercice 2
Ecrire une fonction qui calcule le produit C d’une matrice A ayant nla lignes et
nca colonnes par une matrice B ayant nlb lignes et ncb colonnes. Ces trois
matrices seront représentées par des tableaux de double déclarés avec N lignes et
N colonnes, N étant une constante suffisamment grande. On rappelle que le
produit Anla,nca Bnlb,ncb est une matrice Cnla,ncb définie par :
6.3 Exercice 3
Verbe : trouver
je trouve
tu trouves
il trouve
nous trouvons
vous trouvez
ils trouvent
6.5 Exercice 5
6.6 Exercice 6
Écrire une fonction fonc qui reçoit comme arguments une fonction f, un tableau
d’entiers ainsi que la taille du tableau. La fonction f prend deux entiers en
paramètres et retourne un entier. Si le tableau contient les valeurs x0,x1,x2,...,xn
la fonction fonc retourne la valeur:
f(f(... f(f(x0,x1),x2),...)xn)
Vous écrirez plusieurs fonctions f de telle sorte que la fonction fonc retourne le
maximum, la somme ou le produit des éléments du tableau?
6.7 Exercice 7
Vous commencerez par mettre toutes ces fonctions dans un même fichier. Vous
les placerez ensuite chacune dans des fichiers différents. Les variables globales
seront placées dans la fonction main.
TP7
7.1 Exercice 1
Soit le programme :
int main(void)
{
int a;
int *pa;
int **ppa;
a = 1;
pa = &a;
ppa = &pa;
return(0);
}
Que valent les expressions suivantes &a, *pa, &pa, *ppa, **ppa , &ppa?
Parmi les expressions précédentes, lesquels désignent la même la valeur que
celle contenue dans a, pa et ppa?
7.2 Exercice 2
7.3 Exercice 3
7.4 Exercice 4
7.5 Exercice 5
int main ()
{
int tab[dim] = { 6,7,8,9,1,0,3,2,5,4 };
int i,j,tmp;
for(i=0;i<dim-1;i++)
for (j=i;j<dim;j++)
if (tab[i]>tab[j]) {
tmp=tab[i];
tab[i]=tab[j];
tab[j]=tmp;
}
return (0);
}
int *p;
p=tab;
7.6 Exercice 6
7.7 Exercice 7
Écrire un programme qui range les éléments d’un tableau A du type int dans
l’ordre inverse. Le programme utilisera des pointeurs P1 et P2 et une variable
numérique AIDE pour la permutation des éléments.
7.8 Exercice 8
1) (*p++)[1] 1) (*p++)[1]
2) *p++[1] 2) *p[1]++
3) (*++p)[4] 3) (*++p)[4]
4) *++*p 4) *++*p
TP8
8.1 Fonctions Utiles
#include <stdlib.h>
int aleatvar(int n)
{
int i;
static int prem = 1 ; /* valeur prise au premier appel a aleatvar */
time_t date ; /* time_t est un type entier defini dans time.h */
/* ----------------------------------------------*/
/* Modification de la "graine" pour une
nouvelle sequence de nombres aleatoires */
/* ----------------------------------------------*/
if{prem}
{
srand(time(&date));
prem = 0 ;
}
/* ----------------------------------------------*/
/* generation du nombre aleatoire */
/* ----------------------------------------------*/
i = rand() / (RAND_MAX + 1. ) * (n+1) ;
return(i);
}
Pour utiliser rand, srand, et time , il faut
#include <stdlib.h>
#include <time.h>
8.2 Le temps en C
Quelques fonctions:
Le type time_t est en fait un typedef pour unsigned long défini ainsi dans
time.h :
#ifndef _TIME_T_DEFINED
typedef long time_t; /* time value */
#define _TIME_T_DEFINED /* avoid multiple def’s of time_t */
#endif
En fait la fonction time retourne le temps passé depuis le 1er janvier 1970
en secondes (norme POSIX). Elle retourne -1 en cas d’échec. Si ptr n’est
pas égal à null alors la valeur retournée par la fonction est aussi affectée à
*ptr.
ctime: La fonction ctime est très similaire dans son fonctionnement. Elle a
pour prototype :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
clock_t clock(void);
Tout comme time_t, clock_t est un autre nom pour unsigned long :
La routine clock renvoie le temps utilisé par le préprocesseur en
microsecondes.
Ainsi en faisant deux appels à clock, l’un au départ d’un programme, et
l’autre à la fin, on obtient par différence le temps utilisé par le
programme.
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
/**
* fonction contenant des boucles
* inutiles faisant un traitement
* inutile permettant de perdre du temps
*/
void compute( void )
{
int i, j;
double x;
x = 0.0;
//boucles inutiles
for( i = 1; i <= 10000; i++ ) {
for( j = 1; j <= 10000; j++ ) {
x += i + j ;
}
}
printf( "%16.7f\n", x );
}
//faire un traitement
compute();
//afficher la difference
printf( "Le temps d’execution est de %lu secondes\n",
(long) ((end_time - start_time) / CLOCKS_PER_SEC) );
return 0;
}
Le programme ci-dessus donne la sortie :
9.2 Exercice 2
Chaque ligne du fichier texte contiendra une date: jour, mois, année.
qui relise dans le tableau d les dates sauvegardées dans le fichier spécifié
par nomfichier par EnregistreDates. LireDates retournera le nombre de
dates lues.
9.3 Exercice 3
L’algorithme de tri par sélection permet de trier les éléments d’un tableau par
ordre croissant (ou décroissant). Il peut être décrit comme suit, pour un tableau
T de N éléments :
10.1 Exercice 1
10.2 Exercice 2
10.3 Exercice 3
Arbre binaire.
Notons que la structure noeud contient des pointeurs sur des variables de type
struct noeud: la construction est "récursive". Le fichier data_01.c Il contient le
corps des fonctions. Il utilise bien sûr data_01.h .
10.4 Exercice 4
Liste chaînée.
La liste chaînée est une structure très pratique pour stocker et parcourir des
données. Elle est constituée d’une tête et d’éléments.
La tête de liste contient une information spécifique (un nom par exemple) et un
pointeur sur le premier élément de la liste. Chaque élément contient une
information (ici un entier pour simplifier) et un pointeur sur l’élément suivant.
Le pointeur sur le suivant du dernier élément vaut null.
écrire la structure C correspondant à la tête de liste: TETE. On y mettra
aussi une information, par exemple: un nom (chaîne de caractères).
écrire la structure C correspondant à un élément: ELEMENT.
L’information contenue dans chaque élément sera représentée, ici,
simplement par un entier. On supposera, pour simplifier la
programmation, que ces entiers sont tous différents.
écrire une fonction ajouter qui insère dans une liste un élément contenant
l’information i de telle sorte que la liste soit triée par construction dans
l’ordre des entiers croissants.
écrire une fonction qui parcourt la liste en écrivant l’information contenue
dans chaque élément.
écrire une fonction supprimer qui élimine de la liste un élément contenant
l’information de valeur i (si il en existe un).
déclarer et allouer une tête de liste, ajouter des éléments, l’écrire, en
supprimer, l’écrire encore.
Remarque:
on veillera à faire fonctionner les fonctions ajouter et supprimer dans tous
les cas de figure: en début de liste, en milieu de liste et en fin de liste.
Le fichier data_02.h C’est le fichier à inclure pour les applications qui utiliseront
des listes chaînées. Il contient les définitions de type et les prototypes des
fonctions.
Notons que les structures ELEMENT et TETE contiennent des pointeurs sur des
variables de type struct element (pas toujours défini).