Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Exemple de corrigé
int main()
{
int a,i,somme=0;
printf("entrez 10 entiers:\n");
return 0;
}
La fonction d'Ackermann A(m, n) est définie pour m, n ≥ 0 par les conditions suivantes :
A(0, n) = n+1 ;
A(m, 0) = A(m-1, 1) pour m > 0 ;
A(m, n) = A(m-1, A(m, n-1)) pour m, n >0.
1) Écrire une fonction récursive qui calcule la fonction d'Ackermann.
2) Dérouler le calcul de A(1, 2)
int ack(int m, int n)
{
if (m==0)
return n+1;
else
if (n==0)
return ack(m-1,1);
else
return ack(m-1,ack(m,n-1));
}
1/6
A(1,2) = A(0,A(1,1)
= A(0,A(0,A(1,0)))
= A(0,A(0,A(0,1)))
= A(0,A(0,2))
= A(0,3)
= 4
int main()
{
float a = 9.5, b = 4.7;
float* x;
x = fonc( # );
printf("%f\n", # );
free(x);
return(0);
}
1) Ecrire une fonction fonc adaptée à ce main, qui permet de renvoyer le résultat du calcul
2 x 2 + 3 y − 7 , et dont le prototype est le suivant :
float* fonc(float* x, float* y)
2) Que doit-on mettre à la place des "#" dans le main afin que le programme affiche le
résultat du calcul ? Expliquez.
1)
float* fonc(float* x, float* y)
{
float *ptr = (float*) malloc(sizeof(float));
*ptr = (2 * (*x) * (*x) + 3 * (*y) - 7);
return ptr;
}
2)
main()
{
float a = 9.5, b = 4.7;
float* x;
x = calcul( &a, &b );
printf("%f\n", *x );
free(x);
return(0);
}
On doit mettre *x car la fonction printf attend un réel, en raison du format "%f" demandé, et
donc on doit lui passer le réel pointé par le pointeur x, autrement dit *x (opérateur de
déréférencement).
2/6
Exercice 4 sur 3 pts (1 par réponse)
Expliquer quel résultat produit l'exécution de la fonction f selon les différentes valeurs des
arguments a et b:
• si a est multiple de b (a=k.b avec k entier >=0), alors f retourne b
• si b est nul quelque soit a, f retourne 0
• sinon f boucle indéfiniment ( erreur de segmentation)
La note est de zéro à cet exercice si l'étudiant n'a fait qu'une simple traduction du programme
en français (style "si a vaut zéro ça renvoie b, etc…")
1) Créer un nouveau type Aliment qui inclut son nom, et un numéro. Créer un nouveau
type TabAliments qui est un tableau de 20 éléments de type Aliment.
2) Créer un nouveau type Espece, qui contient son nom, son type d'aliment (numéro de
l'aliment), la quantité habituelle consommée quotidiennement (nombre d'unités), et un
numéro. Créer un nouveau type TabEspeces qui est un tableau de 30 éléments de type
Espece.
3) Créer un nouveau type Animal qui inclut son nom, et son espèce (numéro de son espèce).
Créer un nouveau type TabAnimaux qui est un tableau de 100 éléments de type Animal.
4) Créer une fonction AfficheNomAnimal qui, pour un Animal donné affiche son nom.
5) Créer une fonction AfficheEspece qui, pour une Espece donnée, affiche son nom ainsi
que le nom du type d'aliment qu'elle consomme.
6) Créer une fonction ChercheEspece qui renvoie l'Espece d'un animal donné.
3/6
7) Créer une fonction AfficheNomAlimentDe qui, pour un Animal donné, affiche le nom
de l'aliment qu'il consomme.
8) Créer une fonction QuantiteNecessaire qui, pour un Aliment donné, retourne la
quantité totale nécessaire de cet aliment pour un jour pour l'ensemble des animaux du zoo.
#include <stdio.h>
1)
typedef struct
{
char nom[20];
int numero;
} Aliment;
2)
typedef struct
{
char nom[20];
int ali;
int quantite;
} Espece;
3)
typedef struct
{
char nom[20];
int esp;
} Animal;
4)
void AfficheNomAnimal(Animal ani)
{
printf("Animal : %s\n", ani.nom);
}
5)
void AfficheEspece(Espece esp, TabAliments TAl)
{
printf("Espèce : %s mange %s\n", esp.nom, TAl[esp.ali].nom);
}
6)
Espece ChercheEspece(Animal ani, TabEspeces TE)
{
return (TE[ani.esp]);
}
4/6
7)
void AfficheNomAlimentDe(Animal ani, TabEspeces TE, TabAliments TAl)
{
Espece esp = TE[ani.esp];
Aliment ali = TAl[esp.ali];
printf("L'aliment de %s est %s\n", ani.nom, ali.nom);
}
8)
int QuantiteNecessaire(Aliment al, TabAnimaux TAn, int nbAni, TabEspeces TE)
{
int i;
int quant=0;
Espece esp;
return quant;
}
AfficheNomAnimal(TAn[2]);
AfficheNomAlimentDe(TAn[2], TE, TAl);
AfficheEspece(TE[2], TAl);
for (i=0; i<nbAli; i++)
{
printf("Quantité nécessaire de %s : %d\n", TAl[i].nom,
QuantiteNecessaire(TAl[i], TAn, nbAni, TE));
}
return 0;
}
6/6