correction du CC du 21/04/2008
2 participants
L2 chimie :: L2 chimie S4 :: PC4i :: Exams
Page 1 sur 1
correction du CC du 21/04/2008
pour ceux qui veulent je peut leur envoyer une copie en pdf
CC de PC4i (correction)
I. Codage des nombres en binaire
I.1. Représentation des entiers
Question 1 :
A et B sont codés sur 1 octet (8 bits ) .
A = 124 ---[en binaires] ---> A = 01111100
B = 201 ---[en binaires] ---> B = 11001001
A + B = 01111100 + 11001001 = 111100101 (9 bits => over flow)
Donc le programme renvoie la valeur 69.
Question 2 :
A = 44 ---[en binaires] ---> A = 00101100
B = 201 ---[en binaires] ---> B = 11001001
A + B = 00101100 + 11001001 = 11110101 (8 bits => pas d'over flow)
Donc le programme renvoie la valeur 245.
I.2. Représentation des réels
Question :
float A= 44.25
Un float est codé sur 32 bits
signe * mantisse * exp (exposant)
signe [1 bit] mantisse [23 bits] exposant [8 bits]
donc A [binaire] =
II. Analyse de code
II.1. Qu'affiche le programme suivant ?
int ma_fonction( int x ) {
int y ;
x = 0;
y = -1;
return x+y;
}
main() {
int x = 22,y= 23, z;
z=ma_fonction(x);
printf( "x=%d y=%d z=%d \n", x, y, z ) ;
}
Le programme affiche : x=22 y=23 z=-1
Cela est dû au fait que x et y ne sont pas modifiés par la fonction "ma_fonction"
Car x est initialisé à 0 et y à -1 dans "ma_fonction" mais sont inchangés dans la
Fonction "main», et z est égale à 0 + (-1) = -1.
II.2.Recopier le programme en corrigeant les fautes
Ledit programme :
#include [stdio.h]
#include [math.h]
main(){
int i, n, fn, valeur-exacte;
int NMAX;
double pi=3.14159;
printf(" Calcul de la serie de Riemann "\n);
printf("Combien d iterations "\n);
scanf("%d",NMAX);
valeur-exacte = pi*pi / 6. ;
for (n=1; n++; n < NMAX);{
fn = 1 / (n^2);
somme=somme+fn
printf("Apres %d iterations, somme = %d, valeur exacte = %d \n, n, somme, valeur-exacte");
}
printf("\n Apres %d iterations, la valeur calculee est %e \n", NMAX, somme);
}
Le programme corrigé :
#include <stdio.h>
#include <math.h>
main(){
int i, n;
int NMAX;
double pi=3.14159, fn, somme, valeur_exacte;
printf(" Calcul de la serie de Riemann \n");
printf("Combien d iterations \n");
scanf("%d",&NMAX);
valeur_exacte = (pi*pi) / 6.0 ;
for (n=1; n < NMAX; n++) (rien) {
fn = 1 / (n*n); /* ou pow(n,2) */
somme=somme+fn ;
printf("Apres %d iterations, somme = %lf, valeur exacte = %lf \n", n, somme, valeur_exacte );
}
printf("\n Apres %d iterations, la valeur calculee est %e \n", NMAX, somme);
}
III. Ecriture de code
III.1. programme qui calcule la somme et le produit des 10 premiers entiers et affiche le résultat.
#include <stdio.h>
Main() {
Int i , som=0 , prod=0 ;
For(i = 1 ; i < 11 ; i++) {
Som += i ;
Prod *= i ;
}
Printf(" somme des 10 premiers entiers = %d \n",som ) ;
Printf(" produit des 10 premiers entiers = %d \n",prod ) ;
}
III.2.Modifier le programme de la question II.2 de la manière suivante :
-l’utilisateur n’entre plus la valeur de NMAX.
-le calcul de la somme s’arrête lorsque la valeur de fin devient inférieure à 10-5.
-le programme affiche à la fin de l’exécution le nombre d’itérations de la boucle.
#include <stdio.h>
#include <math.h>
main(){
int i, n;
double pi=3.14159, fn, somme, valeur-exacte;
printf(" Calcul de la serie de Riemann \n");
valeur_exacte = (pi*pi) / 6.0 ;
fn = 1 ;
n = 0 ;
while(fn > pow(10,-5) ) {
fn = 1 / (n*n);
somme=somme+fn ;
n++ ;
}
printf("\n Apres %d iterations, la valeur calculee est %e \n la valeur exacte est %lf \n", NMAX, somme, valeur_exacte);
}
voili voilou ^_^
CC de PC4i (correction)
I. Codage des nombres en binaire
I.1. Représentation des entiers
Question 1 :
A et B sont codés sur 1 octet (8 bits ) .
A = 124 ---[en binaires] ---> A = 01111100
B = 201 ---[en binaires] ---> B = 11001001
A + B = 01111100 + 11001001 = 111100101 (9 bits => over flow)
Donc le programme renvoie la valeur 69.
Question 2 :
A = 44 ---[en binaires] ---> A = 00101100
B = 201 ---[en binaires] ---> B = 11001001
A + B = 00101100 + 11001001 = 11110101 (8 bits => pas d'over flow)
Donc le programme renvoie la valeur 245.
I.2. Représentation des réels
Question :
float A= 44.25
Un float est codé sur 32 bits
signe * mantisse * exp (exposant)
signe [1 bit] mantisse [23 bits] exposant [8 bits]
donc A [binaire] =
II. Analyse de code
II.1. Qu'affiche le programme suivant ?
int ma_fonction( int x ) {
int y ;
x = 0;
y = -1;
return x+y;
}
main() {
int x = 22,y= 23, z;
z=ma_fonction(x);
printf( "x=%d y=%d z=%d \n", x, y, z ) ;
}
Le programme affiche : x=22 y=23 z=-1
Cela est dû au fait que x et y ne sont pas modifiés par la fonction "ma_fonction"
Car x est initialisé à 0 et y à -1 dans "ma_fonction" mais sont inchangés dans la
Fonction "main», et z est égale à 0 + (-1) = -1.
II.2.Recopier le programme en corrigeant les fautes
Ledit programme :
#include [stdio.h]
#include [math.h]
main(){
int i, n, fn, valeur-exacte;
int NMAX;
double pi=3.14159;
printf(" Calcul de la serie de Riemann "\n);
printf("Combien d iterations "\n);
scanf("%d",NMAX);
valeur-exacte = pi*pi / 6. ;
for (n=1; n++; n < NMAX);{
fn = 1 / (n^2);
somme=somme+fn
printf("Apres %d iterations, somme = %d, valeur exacte = %d \n, n, somme, valeur-exacte");
}
printf("\n Apres %d iterations, la valeur calculee est %e \n", NMAX, somme);
}
Le programme corrigé :
#include <stdio.h>
#include <math.h>
main(){
int i, n;
int NMAX;
double pi=3.14159, fn, somme, valeur_exacte;
printf(" Calcul de la serie de Riemann \n");
printf("Combien d iterations \n");
scanf("%d",&NMAX);
valeur_exacte = (pi*pi) / 6.0 ;
for (n=1; n < NMAX; n++) (rien) {
fn = 1 / (n*n); /* ou pow(n,2) */
somme=somme+fn ;
printf("Apres %d iterations, somme = %lf, valeur exacte = %lf \n", n, somme, valeur_exacte );
}
printf("\n Apres %d iterations, la valeur calculee est %e \n", NMAX, somme);
}
III. Ecriture de code
III.1. programme qui calcule la somme et le produit des 10 premiers entiers et affiche le résultat.
#include <stdio.h>
Main() {
Int i , som=0 , prod=0 ;
For(i = 1 ; i < 11 ; i++) {
Som += i ;
Prod *= i ;
}
Printf(" somme des 10 premiers entiers = %d \n",som ) ;
Printf(" produit des 10 premiers entiers = %d \n",prod ) ;
}
III.2.Modifier le programme de la question II.2 de la manière suivante :
-l’utilisateur n’entre plus la valeur de NMAX.
-le calcul de la somme s’arrête lorsque la valeur de fin devient inférieure à 10-5.
-le programme affiche à la fin de l’exécution le nombre d’itérations de la boucle.
#include <stdio.h>
#include <math.h>
main(){
int i, n;
double pi=3.14159, fn, somme, valeur-exacte;
printf(" Calcul de la serie de Riemann \n");
valeur_exacte = (pi*pi) / 6.0 ;
fn = 1 ;
n = 0 ;
while(fn > pow(10,-5) ) {
fn = 1 / (n*n);
somme=somme+fn ;
n++ ;
}
printf("\n Apres %d iterations, la valeur calculee est %e \n la valeur exacte est %lf \n", NMAX, somme, valeur_exacte);
}
voili voilou ^_^
Rémi- Messages : 3
Date d'inscription : 31/03/2011
Age : 35
Re: correction du CC du 21/04/2008
merkiiiiiiiiiiiiiiiii
Eglantine- Messages : 27
Date d'inscription : 09/01/2011
Age : 33
L2 chimie :: L2 chimie S4 :: PC4i :: Exams
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum