Evaluation n°1
Scalaires, tableaux, chaînes
void ph(int z, int n) {
if(z>=n) ph(z/n,n);
printf("%d ",z%n);
} Soit la fonction ph définie ci-contre. Donnez
les valeurs affichées à l’écran lors de l’exé- cution de ph(258,16).
Nom : Prénom :
Scalaires - bases
Réalisez une fonction ch telle que, en supposant que la valeur x est comprise entre 0 et 15 (inclus) ch(x) retourne le caractère hexadécimal représentant x. Par exemple, ch(5) doit retourner le caractè- re ‘5’ et ch(11) doit retourner le caractère ‘B’. Le code de la fonction ch doit être aussi concis que possible. Si votre solution ne tient pas dans le cadre, c’est qu’elle est trop compliquée.
Réalisez une fonction f sans aucune boucle telle que f(n,n) affiche n séquences de caractères '+' de longueurs respectives n, n-1, …, 1, séparées par des espaces. Par exemple f(4,4) devra afficher ++++ +++ ++ +. Indice : le premier paramètre représente le nombre de caractères restant à afficher dans la séquence courante, le deuxième paramètre représente le nombre de séquences restant à afficher.
Donnez les valeurs affichées lors de l’exécution de la fonction testPointeurs.
Soient les deux fonctions suivantes :
Scalaires - Pointeurs
void fp(int* p, int x) {
int t=x;
x=*p;
*p=t;
}
void testPointeurs() {
int a=1,b=2;
fp(&a,b);
printf("%d %d\n",a,b);
}
Scalaires - Pointeurs et bitwises
Soient les deux fonctions suivantes :
void cbs(int* p) {
int b1 = (*p)&1;
int b2 = (*p>>1)&1;
int m = (b1^b2)<<7;
*p = (*p >> 1)|m;
}
void testBitwises() {
int i,x=0x0b;
for(i=0; i<4; i++) {
cbs(&x);
printf("%.02x ",x);
} }
Donnez les valeurs affichées lors de l’exécution de la fonction testPBitwises.
Scalaires - bitwises
Réalisez une fonction mir qui permet d'inver- ser l'ordre des élé- ments d'un tableau d'entiers. Par exemple, si le tableau contient les valeurs 1,2,3,7 alors après appel de cette fonction il con- tiendra les valeurs 7,3,2,1.
Réalisez une fonction reverse qui inverse l'ordre des éléments d'un tableau d'entiers compris entre les indi- ces i1 et i2 inclus, sans affecter les autres valeurs. La fonction reverse doit utiliser la fonction mir (et non le contrai- re). Par exemple, si le tableau contient les valeurs 1,2,3,7,5 avec i1=1 et i2=3, alors après appel de cette fonction il contiendra les valeurs 1,7,3,2,5.
Tableaux 1d (et pointeurs)
void mir(int tab[], int n) {
}
Réalisez une fonction récursive min qui re- tourne l'adresse de la plus petite valeur d'un tableau d'entiers. Cet- te fonction ne doit pas utiliser de boucle (ni for, ni do, ni while…).
void reverse(int tab[], int i1, int i2) {
}
int* minTab(int tab[], int n) {
}
Réalisez une fonction cmp- SubStr qui compare les n premiers caractères de deux chaînes et retourne un entier représentant le Booléen vrai si les n premiers caractères de chaque chaîne forment des séquences identiques et faux sinon. Par exemple si s1 pointe "Picsou" et s2 pointe
"Picfou" alors cmpSubStr(s1,s2,3) doit re-
tourner vrai et
cmpSubStr(s1,s2,4) doit re- tourner faux. On suppose que les deux chaînes comportent chacune au moins n caractères.
Chaines (et pointeurs)
int cmpSubStr(char* s1, char* s2, int n) {
}
Réalisez une fonction isIn qui vérifie si une chaîne t est dans une chaîne s. Par exemple, les chaînes "ic", "sou"
et "Pic" sont dans la chaîne "Picsou" alors que "cou" n'y est pas.
On supposera que t ne comporte pas plus de caractères que s. Vous devez utiliser la fonc- tion cmpSubStr.
int isIn(char* t, char* s) {
int nt = strlen(t);
int ns = strlen(s);
}
Réalisez une fonction améliorée isInEff qui fait la même chose que isIn, mais plus efficacement. On appelle signature d'une chaîne ou d'une séquence de caractères la somme des
int isInEff(char* t, char* s) {
}
Merci de commenter votre code. Il sera tenu compte de sa clarté et de sa concision.