Série 4 - Moodle

Transcription

Série 4 - Moodle
Série 4 - correction
Exercice 1 (niveau 1): Retrouver les erreurs.
// faire include de stdio.h et stdlib.h
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int x, y; // syntaxique
printf ("Please enter two numbers : "); // syntaxique
scanf ("%d %d", &x, &y);
if (x == y) // semantique
printf ("Both numbers are equal!\n");
if ((x < 0) && (y < 0)) // 2 erreurs syntaxiques
printf ("Both numbers are negative!\n");
if (x < y) // semantique
printf ("The second number is greater than the first!\n");
return EXIT_SUCCESS;
}
Exercise 4 (niveau 1): Creating / Reading / Manipulating / Writing Variable Size
Multidimensional Arrays
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int w = 0, h = 0;
int x = 0, y = 0;
int lambda = 0;
printf("Please enter the scalar value:\n");
scanf("%d", &lambda);
printf("Please enter the height and the width of the matrix:\n");
if(scanf("%d %d", &h, &w) != 2)
{
printf("Wrong input! Exiting...");
return EXIT_FAILURE;
}
int matrix[h][w];
printf("Please enter the content of the matrix\n");
for(y = 0; y < h; ++y)
for(x = 0; x < w; ++x)
{
if(scanf("%d", &(matrix[y][x])) != 1)
{
printf("Wrong input! Exiting...");
return EXIT_FAILURE;
}
}
printf("The resulting matrix is:\n");
}
for(y = 0; y < h; ++y)
{
for(x = 0; x < w; ++x)
{
printf("%d ", lambda * matrix[y][x]);
}
printf("\n");
}
return EXIT_SUCCESS;
Exercice 5 (niveau 1): Ce nombre est-il premier?
Le programme suivant indique si un nombre entier entré au clavier par l'utilisateur, par exemple x,
est premier ou non. Remarque: il suffit de tester si x est divisible par 1 ... sqrt(x). Comme cela on
peut réduire l’ordre de complexité du programme de O(x) à O(sqrt(x)).
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (void)
{
int valeur_courante = 0;
int i = 0;
int max;
printf ("Entrez un nombre entier:");
scanf ("%d", &valeur_courante);
// la borne max permet de réduire le coût calcul
// de O(valeur_courante) à O(sqrt(valeur courante))
max = sqrt(valeur_courante);
for (i = 2; i <= max ; ++i)
{
if (valeur_courante % i == 0)
{
printf ("%d n'est pas un nombre premier\n", valeur_courante);
exit(0);
}
}
printf ("%d est un nombre premier\n", valeur_courante);
return EXIT_SUCCESS;
}
Exercice 6 (niveau 2): crible d'Eratosthène
Un tableau de booléens à une seule entrée de taille n+1 est déclaré juste après la
lecture de n.
Le tableau est initialisé à vrai. Ensuite on trouve une double boucle suivie d’une boucle
d’affichage sélectif.
Dans la boucle d’indice i on parcourt tous les nombres de 2 à n. si le nombre i est
premier alors on met à faux tous ses multiples jusqu’à n avec la boucle d’indice k.
Cela explique pourquoi la boucle k commence à 2*i et progresse de i à chaque
passage.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main (void)
{
int n;
printf ("nombre N: ");
scanf("%u",&n);
int premier[n+1];
int i, k ;
premier[0]= premier[1] = false;
for(i=2 ; i <= n ; i++)
premier[i]= true;
for(i=2 ; i <= n ; i++)
if(premier[i])
for(k= 2*i; k <= n ; k += i)
premier[k]= false;
for(i=2 ; i <= n ; i++)
if(premier[i])
printf ("Le nombre %d \t est premier\n", i);
}
return EXIT_SUCCESS;
Exercice 7 (niveau 2 et 3): Boucles imbriquées: le triangle de Pascal
Les programmes suivants calculent le triangle de Pascal. L'ordre de complexité du
premier programme est O(N*N*N). La deuxième solution est plus rapide. Elle utilise la
propriété de récurrence. L'ordre de complexité est O(N*N).
Programme 1:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int n, p, i;
for (n=0; n <= 10; n++)
{
for (p=0; p <= n; p++)
{
double v = 1; /* Calcule le coefficient binomial: */
for (i=0; i < p; i++) /* d’abord toutes les multiplications */
v *= n - i;
for (i=2; i <= p; i++) /* et ensuite toutes les divisions. */
v /= i;
printf ("%5g", v);
}
printf ("\n");
}
}
return EXIT_SUCCESS;
Programme 2:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int n, p;
for (n=0; n <= 10; n++)
{
double v = 1; /* Le premier coeff. binomial de la ligne est 1 */
for (p=0; p <= n; p++)
{
printf ("%5g", v);
v *= n - p; /* Calcule le prochain coefficient binomial */
v /= p + 1; /* a partir de celui actuel. */
}
printf ("\n");
}
}
return EXIT_SUCCESS;

Documents pareils