Académique Documents
Professionnel Documents
Culture Documents
L3 INFO 2013–2014
On rappelle qu’un pointeur p peut être affiché avec l’option %p dans la chaı̂ne de caractère donnée à
printf.
int tab[ 5 ];
permute( tab[ 0 ], tab[ 2 ], tab[ 4 ] );
Ou celui-ci :
int tab[ 5 ];
permute( tab, tab + 2, tab + 4 );
Ou encore
int tab[ 5 ];
permute( &tab[ 0 ], &tab[ 2 ], &tab[ 4 ] );
#include <stdio.h>
#include <string.h>
1
char* p = p1;
int l = strlen( p );
int l2 = strlen( p2 );
l -= l2;
if ( l < 0 ) return -1;
int h1 = h( p, p + l2 );
int h2 = h( p2, p2 + l2 );
while ( l >= 0 )
{
if ( ( h1 == h2 ) && ! compare( p, p2, l2 ) )
return p - p1;
h1 -= *p;
h1 += *(p+l2);
++p;
--l;
}
return -1;
}
int main()
{
char s1[] = "youpi";
char s2[] = "entropie";
char s3[] = "mecanique";
char s4[] = "piyou";
char s[] = "Il n’est d’entropie que dans l’allegresse : youpi, s’exclame la belle mecanique, je v
printf( "%s\n", s );
printf( "i(%s) = %d\n", s1, trouve( s, s1 ) );
printf( "i(%s) = %d\n", s2, trouve( s, s2 ) );
printf( "i(%s) = %d\n", s3, trouve( s, s3 ) );
printf( "i(%s) = %d\n", s4, trouve( s, s4 ) );
return 0;
}
h(youpi) = 566
h(entropie) = 870
h(mecanique) = 952
h(piyou) = 566
Il n’est d’entropie que dans l’allegresse : youpi, s’exclame la belle mecanique, je vais pouvoir ap
i(youpi) = 44
i(entropie) = 11
i(mecanique) = 70
i(piyou) = -1
Que fait donc ce programme ? Marchera-t-il pour n’importe quelle chaı̂ne de caractères ?
2
Les arguments donnés à un programme sont fournis sous forme d’un tableau de pointeurs vers des
chaı̂nes de caractères.
Appeler cette fonction dans le main sur les paramètres sauf le premier (c’est le nom du programme),
afficher la chaı̂ne, et désallouer-là correctement.
struct SPoint {
double x;
double y;
};
typedef struct SPoint Point;
Ecrire la fonction creer qui retourne un Point initialisé aux deux coordonnées passées en paramètres.
Ecrire maintenant la fonction reinitialiser qui modifie un Point pour mettre ses coordonnées
à zéro.
Ecrire la fonction qui calcule la distance entre deux points. Faut-il un passage par valeur ou par
adresse ?
Ecrire la fonction qui réalise la translation d’un point. Faut-il un passage par valeur ou par adresse
?
int tab[3][5];
int *a = *tab, i, j;
for (i=0 ; i<15 ; *a++ = i++);
**tab = 15;
**(tab+1) = 16;
*(tab[0]+1) = 17;
*(*tab+8) = 18;
*(tab[2]+3) = 21;
*(*(tab+2)+2) = 22;