Terminale NSI
Evaluation n°1
Nom : Prénom : Note :
Exercice n° 1 : Récursivité 1 -- 3 pts

Soit le programme Python suivant :


       
  1. Que vaut la variable a après l'exécution de ce programme (justifiez votre réponse) ?

  2. Ecrire une version itérative de cette fonction.

S

Exercice n° 2 : Récursivité 2 -- 4 pts

La suite de Syracuse est définie par :

  • $u_{n+1} = \frac{u_n}{2}$ si $u_n$ est pair ,
  • $u_{n+1} = 3 \times u_n + 1$ sinon

avec $u_0$ un entier quelconque plus grand que 1.

  1. Ecrire une fonction itérative syracuse_iterative(u_n)

    qui affiche les valeurs successives de la suite $u_n$ tant que $u_n$ est plus grand que 1.

  2. Ecrire une fonction récursive syracuse_récursive(u_n)

    qui affiche les valeurs successives de la suite $u_n$ tant que $u_n$ est plus grand que 1.

La conjecture de Syracuse affirme que quelle que soit la valeur de $u_0$, il existe un indice n dans la suite tel que $u_n = 1$

Cette conjecture défie toujours les mathématiciens ...

Exercice n° 3 : Plus de place sur la clef USB -- 5 pts

Plus beaucoup de place sur ta clef USB ?

Nous disposons d'une clef USB bien remplie sur laquelle il ne reste que 5 Go de libre. Nous souhaitons copier sur cette clef des fichiers vidéos pour l'emporter en voyage. Chaque fichier a un poids et chaque vidéo a une durée. La durée n'est pas proportionnelle à la taille car les fichiers sont de formats différents (avec des taux de compression différents. Le tableau qui suit présente les 7 fichiers disponibles avec les durées données en minutes.

NomDurée en minPoids
Vidéo A1144,57 Go
Vidéo B802,71 Go
Vidéo C32630 Mo
Vidéo D201,65 Go
Vidéo E182,15 Go
Vidéo F5320 Mo
Vidéo G485 Mo

Problème : Quelles vidéos copier sur la clef USB pour que la durée des vidéos soient la plus grande possible tout en ne dépassant pas un poids de 5 Go ?

  1. Quelle est la valeur que l'on cherche à maximiser/minimiser ? Quelle est la contrainte ?
  2. Quel problème reconnaissez-vous ici ?

Dans le programme Python ci-dessous, vous trouverez deux fonctions :

  • La fonction remplit_clef(liste_noms, liste_poids, liste_durees, poids_max) qui utilise un algorithme connu pour remplir au mieux la clef USB en maximisant la durée totale et en respectant la contrainte (variable poids_max).

  • La fonction remplit_clef_recur(liste_noms, liste_poids, liste_durees, poids_max, liste_indices_utilises=[], ind=0, poids_total=0, duree_totale=0) qui est une version récursive de la fonction précédente.


       

       

Les données sur les vidéos (nom, durée en minutes et poids en Go) sont modélisées par 3 listes :

  • liste_noms : la liste des noms des vidéos

  • liste_durees : la liste des durées des vidéos

  • liste_poids : la liste des poids des vidéos

  1. Etudiez le code de la fonction remplit_clef et donner le type d'algorithme utilisé par cette fonction.

  2. Dans le corps de la fonction remplit_clef_recur, remplacez dans les lignes avec des pointillés par un code Python correct.

Exercice n° 4 : ReplIt 1 -- 4 pts

Sur votre compte ReplIt traiter le projet nommé Somme des entiers impairs.

Ne pas oublier de cliquer sur "Submit" une fois votre programme codé, commenté et testé.

En utilisant votre programme, donner le résultat de somme_entiers_impairs(liste_cubes).

Exercice n° 5 : Bonus : ReplIt 2 -- 3 pts

Sur votre compte ReplIt traiter le projet nommé Nombres parfaits.

Ne pas oublier de cliquer sur "Submit" une fois votre programme codé, commenté et testé.

Terminale NSI
Evaluation n°1
Nom : Prénom : Note :
Exercice n° 1 : Récursivité 1 -- 3 pts

Soit le programme Python suivant :


       
  1. Que vaut la variable a après l'exécution de ce programme (justifiez votre réponse) ?

  2. Ecrire une version itérative de cette fonction.

Exercice n° 2 : Récursivité 2 -- 4 pts

L'algorithme d'Euclide permet de déterminer le PGCD (le plus Grand Diviseur Commun) de deux entiers non nuls.

Il est basé sur une suite de divisions euclidiennes.

PGCD(a,b) = PGCD(b,r) avec r le reste dans la division euclidienne de a par b.

Exemple : PGCD(546,462) = PGCD(462,84) car 546 = 462x1 + 84 (84 est le reste de la division euclidienne de 546 par 462).

On réitère le processus : PGCD(462,84) = PGCD(84,42) car 462 = 84x5 + 42 (42 est le reste de la division euclidienne de 462 par 84.)

On réitère le processus : PGCD(84,42) = PGCD(42,0) car 84 = 42x2 + 0 (0 est le reste de la division euclidienne de 84 par 42.)

L'algorithme s'arrête lorsque le reste obtenu est nul.

Et le PGCD est alors le dernier reste non nul.

  1. Ecrire une fonction Python itérative nommée PGCD_iteratif(a,b) qui implémente l'algorithme de calcul du PGCD des entiers a et b.

  2. Ecrire une fonction Python récursive nommée PGCD_recursif(a,b) qui implémente l'algorithme de calcul du PGCD des entiers a et b.

Exercice n° 3 : Plus de place sur la clef USB -- 5 pts

Plus beaucoup de place sur ta clef USB ?

Nous disposons d'une clef USB bien remplie sur laquelle il ne reste que 5 Go de libre. Nous souhaitons copier sur cette clef des fichiers vidéos pour l'emporter en voyage. Chaque fichier a un poids et chaque vidéo a une durée. La durée n'est pas proportionnelle à la taille car les fichiers sont de formats différents (avec des taux de compression différents. Le tableau qui suit présente les 7 fichiers disponibles avec les durées données en minutes.

NomDurée en minPoids
Vidéo A1144,57 Go
Vidéo B802,71 Go
Vidéo C32630 Mo
Vidéo D201,65 Go
Vidéo E182,15 Go
Vidéo F5320 Mo
Vidéo G485 Mo

Problème : Quelles vidéos copier sur la clef USB pour que la durée des vidéos soient la plus grande possible tout en ne dépassant pas un poids de 5 Go ?

  1. Quelle est la valeur que l'on cherche à maximiser/minimiser ? Quelle est la contrainte ?
  2. Quel problème reconnaissez-vous ici ?

Dans le programme Python ci-dessous, vous trouverez deux fonctions :

  • La fonction remplit_clef(liste_noms, liste_poids, liste_durees, poids_max) qui utilise un algorithme connu pour remplir au mieux la clef USB en maximisant la durée totale et en respectant la contrainte (variable poids_max).

  • La fonction remplit_clef_recur(liste_noms, liste_poids, liste_durees, poids_max, liste_indices_utilises=[], ind=0, poids_total=0, duree_totale=0) qui est une version récursive de la fonction précédente.


       

       

Les données sur les vidéos (nom, durée en minutes et poids en Go) sont modélisées par une liste nommée liste_videos dont les éléments sont des tuples de la forme (nom_video,duree_video,poids_video).

  1. Etudiez le code de la fonction remplit_clef et donner le type d'algorithme utilisé par cette fonction.

  2. Dans le corps de la fonction remplit_clef_recur, remplacez dans les lignes avec des pointillés par un code Python correct.

Exercice n° 4 : ReplIt 1 -- 4 pts

Sur votre compte ReplIt traiter le projet nommé Produit des entiers pairs.

Ne pas oublier de cliquer sur "Submit" une fois votre programme rédiger

En utilisant votre programme, donner le résultat de produit_entiers_pairs(liste_carres).

Exercice n° 5 : Bonus : ReplIt 2 -- 3 pts

Sur votre compte ReplIt traiter le projet nommé Nombres parfaits.

Ne pas oublier de cliquer sur "Submit" une fois votre programme codé, commenté et testé.

Terminale NSI
Evaluation n°1
Nom : Prénom : Note :
Exercice n° 1 : Récursivité 1 -- 3 pts

Soit le programme Python suivant :


       
  1. Que vaut la variable a après l'exécution de ce programme (justifiez votre réponse) ?

  2. Ecrire une version itérative de cette fonction.

Exercice n° 2 : Récursivité 2 -- 4 pts

L'algorithme d'Euclide permet de déterminer le PGCD (le plus Grand Diviseur Commun) de deux entiers non nuls.

Il est basé sur une suite de divisions euclidiennes.

PGCD(a,b) = PGCD(b,r) avec r le reste dans la division euclidienne de a par b.

Exemple : PGCD(546,462) = PGCD(462,84) car 546 = 462x1 + 84 (84 est le reste de la division euclidienne de 546 par 462).

On réitère le processus : PGCD(462,84) = PGCD(84,42) car 462 = 84x5 + 42 (42 est le reste de la division euclidienne de 462 par 84.)

On réitère le processus : PGCD(84,42) = PGCD(42,0) car 84 = 42x2 + 0 (0 est le reste de la division euclidienne de 84 par 42.)

L'algorithme s'arrête lorsque le reste obtenu est nul.

Et le PGCD est alors le dernier reste non nul.

  1. Ecrire une fonction Python itérative nommée PGCD_iteratif(a,b) qui implémente l'algorithme de calcul du PGCD des entiers a et b.

  2. Ecrire une fonction Python récursive nommée PGCD_recursif(a,b) qui implémente l'algorithme de calcul du PGCD des entiers a et b.

Exercice n° 3 : Plus de place sur la clef USB -- 5 pts

Plus beaucoup de place sur ta clef USB ?

Nous disposons d'une clef USB bien remplie sur laquelle il ne reste que 5 Go de libre. Nous souhaitons copier sur cette clef des fichiers vidéos pour l'emporter en voyage. Chaque fichier a un poids et chaque vidéo a une durée. La durée n'est pas proportionnelle à la taille car les fichiers sont de formats différents (avec des taux de compression différents. Le tableau qui suit présente les 7 fichiers disponibles avec les durées données en minutes.

NomDurée en minPoids
Vidéo A1144,57 Go
Vidéo B802,71 Go
Vidéo C32630 Mo
Vidéo D201,65 Go
Vidéo E182,15 Go
Vidéo F5320 Mo
Vidéo G485 Mo

Problème : Quelles vidéos copier sur la clef USB pour que la durée des vidéos soient la plus grande possible tout en ne dépassant pas un poids de 5 Go ?

  1. Quelle est la valeur que l'on cherche à maximiser/minimiser ? Quelle est la contrainte ?
  2. Quel problème reconnaissez-vous ici ?

Dans le programme Python ci-dessous, vous trouverez deux fonctions :

  • La fonction remplit_clef(liste_noms, liste_poids, liste_durees, poids_max) qui utilise un algorithme connu pour remplir au mieux la clef USB en maximisant la durée totale et en respectant la contrainte (variable poids_max).

  • La fonction remplit_clef_recur(liste_noms, liste_poids, liste_durees, poids_max, liste_indices_utilises=[], ind=0, poids_total=0, duree_totale=0) qui est une version récursive de la fonction précédente.


       

       

Les données sur les vidéos (nom, durée en minutes et poids en Go) sont modélisées par une liste nommée liste_videos dont les éléments sont des tuples de la forme (nom_video,duree_video,poids_video).

  1. Etudiez le code de la fonction remplit_clef et donner le type d'algorithme utilisé par cette fonction.

  2. Dans le corps de la fonction remplit_clef_recur, remplacez dans les lignes avec des pointillés par un code Python correct.

Exercice n° 4 : ReplIt 1 -- 4 pts

Sur votre compte ReplIt traiter le projet nommé Produit des entiers pairs.

Ne pas oublier de cliquer sur "Submit" une fois votre programme rédiger

En utilisant votre programme, donner le résultat de produit_entiers_pairs(liste_carres).

Exercice n° 5 : Bonus : ReplIt 2 -- 3 pts

Sur votre compte ReplIt traiter le projet nommé Nombres premiers : comptage.

Ne pas oublier de cliquer sur "Submit" une fois votre programme codé, commenté et testé.

Terminale NSI
Evaluation n°1
Nom : Prénom : Note :
Exercice n° 1 : Récursivité 1 -- 3 pts

Soit le programme Python suivant :


       
  1. Que vaut la variable a après l'exécution de ce programme (justifiez votre réponse) ?

  2. Ecrire une version itérative de cette fonction.

Exercice n° 2 : Récursivité 2 -- 4 pts

L'algorithme d'Euclide permet de déterminer le PGCD (le plus Grand Diviseur Commun) de deux entiers non nuls.

Il est basé sur une suite de divisions euclidiennes.

PGCD(a,b) = PGCD(b,r) avec r le reste dans la division euclidienne de a par b.

Exemple : PGCD(546,462) = PGCD(462,84) car 546 = 462x1 + 84 (84 est le reste de la division euclidienne de 546 par 462).

On réitère le processus : PGCD(462,84) = PGCD(84,42) car 462 = 84x5 + 42 (42 est le reste de la division euclidienne de 462 par 84.)

On réitère le processus : PGCD(84,42) = PGCD(42,0) car 84 = 42x2 + 0 (0 est le reste de la division euclidienne de 84 par 42.)

L'algorithme s'arrête lorsque le reste obtenu est nul.

Et le PGCD est alors le dernier reste non nul.

  1. Ecrire une fonction Python itérative nommée PGCD_iteratif(a,b) qui implémente l'algorithme de calcul du PGCD des entiers a et b.

  2. Ecrire une fonction Python récursive nommée PGCD_recursif(a,b) qui implémente l'algorithme de calcul du PGCD des entiers a et b.

Exercice n° 3 : Plus de place sur la clef USB -- 5 pts

Plus beaucoup de place sur ta clef USB ?

Nous disposons d'une clef USB bien remplie sur laquelle il ne reste que 5 Go de libre. Nous souhaitons copier sur cette clef des fichiers vidéos pour l'emporter en voyage. Chaque fichier a un poids et chaque vidéo a une durée. La durée n'est pas proportionnelle à la taille car les fichiers sont de formats différents (avec des taux de compression différents. Le tableau qui suit présente les 7 fichiers disponibles avec les durées données en minutes.

NomDurée en minPoids
Vidéo A1144,57 Go
Vidéo B802,71 Go
Vidéo C32630 Mo
Vidéo D201,65 Go
Vidéo E182,15 Go
Vidéo F5320 Mo
Vidéo G485 Mo

Problème : Quelles vidéos copier sur la clef USB pour que la durée des vidéos soient la plus grande possible tout en ne dépassant pas un poids de 5 Go ?

  1. Quelle est la valeur que l'on cherche à maximiser/minimiser ? Quelle est la contrainte ?
  2. Quel problème reconnaissez-vous ici ?

Dans le programme Python ci-dessous, vous trouverez deux fonctions :

  • La fonction remplit_clef(liste_noms, liste_poids, liste_durees, poids_max) qui utilise un algorithme connu pour remplir au mieux la clef USB en maximisant la durée totale et en respectant la contrainte (variable poids_max).

  • La fonction remplit_clef_recur(liste_noms, liste_poids, liste_durees, poids_max, liste_indices_utilises=[], ind=0, poids_total=0, duree_totale=0) qui est une version récursive de la fonction précédente.


       

       

Les données sur les vidéos (nom, durée en minutes et poids en Go) sont modélisées par 3 listes :

  • liste_noms : la liste des noms des vidéos

  • liste_durees : la liste des durées des vidéos

  • liste_poids : la liste des poids des vidéos

  1. Etudiez le code de la fonction remplit_clef et donner le type d'algorithme utilisé par cette fonction.

  2. Dans le corps de la fonction remplit_clef_recur, remplacez dans les lignes avec des pointillés par un code Python correct.

Exercice n° 4 : ReplIt 1 -- 4 pts

Sur votre compte ReplIt traiter le projet nommé Somme des entiers impairs.

Ne pas oublier de cliquer sur "Submit" une fois votre programme codé, commenté et testé.

En utilisant votre programme, donner le résultat de somme_entiers_impairs(liste_cubes).

Exercice n° 5 : Bonus : ReplIt 2 -- 3 pts

Sur votre compte ReplIt traiter le projet nommé Nombres premiers : comptage.

Ne pas oublier de cliquer sur "Submit" une fois votre programme codé, commenté et testé.