introduction à la programmation exercices · introduction à la programmation exercices david...

13
Introduction à la programmation Exercices David Hébert [email protected] 2017

Upload: others

Post on 22-Oct-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

  • Introduction à la programmationExercicesDavid Hé[email protected]

    2017

  • 1

  • Exercice 1

    Parmi les noms de variables lesquelles ne sont pas correctes pour la programmation ?

    Tagadatsoin_tsoinpouette pouette1212i

    i12_4419-yoifretourn

    gefvTèYGc’estç_estc1x

    AaAaAAAA0p4p+yes++yesyes+

    Exercice 2

    Identifier les 3 erreurs dans chacun des codes en C++ suivants.

    1.1 #include2 using namespce std;3 int main(){4 int i=1, j, k=4;5 i=j/k6 cout

  • Exercice 7

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper son age et affiche son année de naissance.

    Exercice 8

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un nombre réel et qui affiche sa partieentière. Le programme ne devra utiliser qu’une seule variable.

    Exercice 9

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper un réel x et qui affiche la valeur du réelf(x) = (3x2 + 7x)/2.

    Exercice 10

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un nombre entier à quatre chiffres et varetourner deux nombres représentant respectivement le début et la fin du nombre saisi. Par exemple si le nombresaisi est 1024 alors le programme retournera 10 et 24.

    Exercice 11

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un nombre entier à 4 chiffres et affiche lenombre entier ou l’ordre des chiffres est inversé (par exemple 1024 donnera 4201).

    Exercice 12

    Identifier les 3 erreurs dans le code en Python suivant.

    1 #!/usr/bin/python2 # -*- coding: utf-8 -*-3 n=input("Saisir un entier : ")4 if n>33 :5 print(’A’)6 else if n

  • Exercice 15

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper un entier et qui affiche GAGNE si l’entierest entre 56 et 78 bornes incluses PERDU sinon.

    Exercice 16

    Écrire l’algorithme d’un programme qui affiche tous les entiers de 8 jusqu’à 23 (bornes incluses).

    Exercice 17

    Écrire l’algorithme d’un programme qui affiche tous les entiers paires entre 18 et 81 (bornes incluses).

    Exercice 18

    Écrire l’algorithme d’un programme qui affiche tous les entiers multiples de 3 entre 123 et 199 (bornes incluses).

    Exercice 19

    Écrire l’algorithme d’un programme qui affiche tous les entiers multiple de 7 entre 1978 et 2231 (bornes incluses).

    Exercice 20

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche leur somme et ceen utilisant une boucle.

    Exercice 21

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper 10 entiers et qui affiche le plus petit deces entiers.

    Exercice 22

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper un entier n jusqu’à ce qu’il soit plus grandque 5 et qui calcule la somme des cubes de 53 à n3.

    Exercice 23

    Que produirons les programmes suivants :

    4

  • 1.

    1 #include2 using namespace std;3 int main(){4 int i, j, n;5 n=10;67 i=1;8 while(i

  • Exécution C++

    ** *

    * ** *

    * *Process returned 0 (0x0) execution time : X.xxx sPress any key to continue.

    Exercice 27

    A l’aide de boucle écrire l’algorithme d’un programme permettant d’arriver au résultat suivant :

    Exécution C++

    0000000000111111111222222223333333444444555556666777889Process returned 0 (0x0) execution time : X.xxx sPress any key to continue.

    Écrire l’algorithme d’un programme permettant d’arriver à la figure inverse (le haut et le bas sont inversés, commela gauche et la droite).

    Exercice 28

    A l’aide de boucle écrire l’algorithme d’un programme permettant d’arriver au résultat suivant (l’utilisateur saisirl’entier n) :

    Exécution C++

    Saisir n=5** *** ** **** ** *** ***** ** *** **** *****

    Process returned 0 (0x0) execution time : X.xxx sPress any key to continue.

    inversés, comme la gauche et la droite).

    Exercice 29

    A l’aide de boucle écrire l’algorithme d’un programme permettant d’arriver au résultat suivant (l’utilisateur saisirl’entier n) :

    6

  • Exécution C++

    Saisir n=4* ** *** **** *** ** *Process returned 0 (0x0) execution time : X.xxx sPress any key to continue.

    inversés, comme la gauche et la droite).

    Exercice 30

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper un entier n et qui calcule un.

    1.

    {u0 = 3,

    un+1 = 3un − 2 2.

    u0 = 1,

    u1 = 1,

    un+1 = un + un−1

    Exercice 31

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper des entiers strictement positifs et quiaffiche leur moyenne. Lorsqu’on tape une valeur négative, le programme affiche ERREUR et demande de retaperune valeur. Lorsqu’on tape 0, cela signifie que le dernier entier a été tapé. On affiche alors la moyenne. Si le nombred’entiers tapés est égal à 0, on affiche PAS DE MOYENNE.

    Exercice 32

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper un entier n et qui calcule n!.

    Exercice 33

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un entier inférieur ou égale à 10 (et réinvitel’utilisateur à le saisir sinon) et qui affiche la table de multiplication de cet entier (de 0 à 10).

    Exercice 34

    Écrire l’algorithme d’un programme qui permet de faire des opérations sur un entier. Le programme affiche lavaleur de l’entier puis affiche le menu suivant :

    1. Ajouter 12. Multiplier par 23. Soustraire 44. Quitter

    Le programme demande alors de taper un entier entre 1 et 4. Si l’utilisateur tape une valeur entre 1 et 3, on effectuel’opération, on affiche la nouvelle valeur de l’entier puis on réaffiche le menu et ainsi de suite jusqu’à ce qu’on tape4. Lorsqu’on tape 4, le programme se termine.

    Exercice 35

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper un entier n et qui calcule Sn =n∑

    k=1

    1

    k.

    Exercice 36

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un nombre réel x et qui calcule le plus

    7

  • petit entier n tel que Sn =n∑

    k=1

    1

    k> x.

    Exercice 37

    La suite de Syracuse, ou suite des grêlons.On considère la suite définie de manière récurrente par la règle :

    ∀n ∈ N, un+1 =

    un

    2si un est paire,

    3un + 1 sinon.

    avec u0 ∈ N.La conjecture de Syracuse affirme que pour n’importe quelle valeur initiale, il existe un n ∈ N tel que un = 1.

    Le temps de vol de la suite de Syracuse est le plus petit n ∈ N tel que un = 1.L’altitude maximale est la valeur maximale de la suite ; c’est à dire le plus grand un parmi tous les un avant

    que la suite n’atteigne la valeur 1.Par exemple si u0 = 3 alors

    u0 = 3 u1 = 10 u2 = 5 u3 = 16 u4 = 8 u5 = 4 u6 = 2 u7 = 1

    Dans cet exemple, le temps de vol est 7 et l’altitude maximale est 16.1. Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir la valeur de u0 et qui retourne le

    temps de vol et l’altitude maximale.2. Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un entier n et qui affiche les temps

    de vols et toutes les altitudes maximales des suites de Syracuse de premier terme k pour k allant de 1 à n.

    Exercice 38

    Écrire un programme qui saisit 2 tableaux de 5 entiers a et b. Le tableau c est un tableau de 10 entiers. Leprogramme doit mettre dans c la fusion des tableaux a et b. On copiera dans les 5 premières cases de c le tableaua, dans les 5 dernières le tableau b. Le programme affichera ensuite le tableau c.

    Exercice 39

    Écrire l’algorithme d’un programme qui gère une liste d’entiers grâce au menu suivant :1. Ajouter un entier ;2. Afficher la liste des entiers ;3. Supprimer dernier entier de la liste ;4. Afficher la dernière note tapée ;5. Quitter.

    Il y aura au maximum 10 entiers. Lorsqu’on rajoute un entier, il sera rajouté à la fin de la liste.

    Exercice 40

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de taper 10 entiers compris entre 0 et 20 qui serontstockés dans un tableau et qui affiche le nombre de fois qu’on a tapé un 0, le nombre de 1, le nombre de 2, ..., lenombre de 20.

    Exercice 41

    Écrire l’algorithme d’un programme qui invite l’utilisateur à saisir 10 entiers dans un tableau et qui inverse l’ordredes éléments dans un tableau.

    8

  • Exercice 42

    Écrire l’algorithme d’un programme qui invite l’utilisateur à saisir 10 entiers dans un tableau et qui affichera letableau où les entiers ont été décalé de 1 vers la droite (la dernière valeur devenant la première).

    Exercice 43

    Écrire l’algorithme d’un programme qui invite l’utilisateur à saisir 10 entiers dans un tableau ainsi qu’un entiern et qui affichera le tableau où les entiers ont été décalé de n vers la droite (les dernières valeurs devenant lespremières).

    Exercice 44

    Écrire l’algorithme d’un programme qui invite l’utilisateur à saisir 10 réels dans un tableau ainsi qu’un réel x etqui affichera si oui ou non ce nombre est dans le tableau.

    Exercice 45

    Écrire un algorithme qui calcule le plus grand écart dans un tableau (l’écart est la valeur absolue de la différencede deux éléments).

    Exercice 46

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir un entier et qui affiche le caractère ASCIIcorrespondant. Ce programme ne devra utiliser qu’une seule variable.

    Exercice 47

    Écrire l’algorithme d’un programme qui affiche la table des caractère ASCII.

    Exercice 48

    Écrire l’algorithme d’un programme qui demande à l’utilisateur de saisir une chaine de caractère et qui affiche Truesi tous les caractères de la chaine sont des entiers.

    Exercice 49

    Écrire l’algorithme d’un programme qui demande la saisie d’une chaine de caractère et compte le nombre de sesvoyelles.

    Exercice 50

    Écrire l’algorithme d’un programme qui demande la saisie d’une chaine de caractère et affiche la chaine sans lesvoyelles.

    Exercice 51

    Écrire l’algorithme d’un programme qui demande de saisir une phrase et affiche le nombre de mot qui la compose.

    Exercice 52

    Écrire l’algorithme d’un programme qui demande la saisie d’une chaine de caractère et qui affiche si cette chaineest un palindrome ou non.

    Exercice 53

    Écrire l’algorithme d’une procédure qui prend en paramètre un entier et affiche sa parité.

    9

  • Exercice 54

    Écrire l’algorithme d’une fonction qui prend en paramètre un entier relatif n et un réel x et qui renvoie le résultatréel de xn.

    Exercice 55

    Écrire l’algorithme d’une fonction qui prend en paramètre un entier n et qui renvoie n!.

    Exercice 56

    Les coefficients binomiaux.1. Écrire l’algorithme d’une fonction qui prend en paramètre deux entiers n et p et qui calcul le coefficient

    binomial

    (n

    p

    ):=

    n!

    p!(n− p)!en utilisant la fonction de l’exercice précédent.

    2. Écrire la même fonction mais en utilisant la règle de pascal :

    (a)

    (n

    0

    )= 0 (b)

    (n

    p

    )=

    (n− 1

    p− 1

    )+

    (n− 1

    p

    )

    Exercice 57

    Écrire l’algorithme d’une procédure qui prend en paramètre une entier n et qui affiche si le nombre est premier ounon.

    Exercice 58

    Écrire l’algorithme d’une fonction qui prend un entier n et qui renvoie le plus petit nombre premier plus grand quen.

    Exercice 59

    Écrire l’algorithme d’une fonction qui prend en paramètre un entier et qui renvoie le nombre de chiffre qui composecet entier.

    Exercice 60

    Écrire l’algorithme d’une fonction prenant en paramètre deux entiers a et b et qui renvoie le PGCD entre cesentiers.

    Exercice 61

    Écrire une procédure qui prend en paramètre un entier et qui affiche tous ses diviseurs.

    Exercice 62

    Le jeu du plus grand, plus petit1. Écrire l’algorithme d’une procédure qui prend en paramètre un entier et lui attribue une valeur aléatoire

    entre 0 et 1000 (on pourra utiliser la fonction rand() qui tire un nombre aléatoire entre 0 et RAND_MAX ainsique la commande srand(time(NULL)).

    2. Écrire l’algorithme d’une procédure qui prend en paramètre deux entiers a et b et qui affiche :

    • PLUS GRAND si a > b, • PLUS PETIT si a < b, • GAGNE ! ! ! si a = b

    3. Implémenter le jeu du plus grand plus petit : l’utilisateur saisi un entier et l’ordinateur lui indique s’il doitproposer un nombre plus grand ou plus petit et ce jusqu’à ce qu’il trouve l’entier sélectionné aléatoirement

    10

  • par la machine. On pourra par la suite indiquer le nombre d’essai effectuer avant de trouver la bonne réponse.

    Exercice 63

    Écrire l’algorithme d’une procédure qui prend en paramètre un entier et qui affiche tous ses diviseurs.

    Exercice 64

    Tour de Hanoï.Il s’agit d’un casse-tête célèbre qui consiste à trouver une stratégie pour déplacer une pile de n disques d’une tourA à une tour C à l’aide d’une tour auxiliaire B. Tous les disques ont un diamètre différent. Les règles du jeu sontles suivantes :• On ne peut déplacer qu’un seul disque à la fois d’une tour à une autre ;• On ne peut empiler un disque sur un disque de diamètre inférieur.On va écrire un programme qui proposera deux choses : afficher les déplacements à effectuer ou afficher uniquementle nombre de déplacement à effectuer.

    1. Écrire l’algorithme d’une procédure Aff qui prend en paramètre le nombre n de disque, Ti le caractèrecorrespondant à la tour où sont initialement placer les disques et Tf le caractère correspondant à la tour oùseront déplacer les tours. Cette procédure affichera les déplacements à effectuer. Par exemple aff(3,’A’,’C’)affichera :

    Exécution C++

    Deplacer le disque de la tour A vers la tour CDeplacer le disque de la tour A vers la tour BDeplacer le disque de la tour C vers la tour BDeplacer le disque de la tour A vers la tour CDeplacer le disque de la tour B vers la tour ADeplacer le disque de la tour B vers la tour CDeplacer le disque de la tour A vers la tour CProcess returned 0 (0x0) execution time : X.xxx sPress any key to continue.

    2. Écrire l’algorithme d’une fonction qui prend en paramètre le nombre de disque et qui donne le nombre dedéplacement nécessaire pour résoudre le problème des tours de Hanoï.

    3. Écrire l’algorithme de la fonction principale avec un menu qui propose soit d’afficher les déplacements soitd’afficher le nombre de déplacement.

    Exercice 65

    Écrire l’algorithme d’une fonction qui a en paramètres une chaîne de caractères et un entier e. La fonction renvoietrue si la chaîne de caractères est un entier écrit sous la forme d’une suite de chiffres qui ne commence pas par 0,elle renvoie false sinon. Si la chaîne est correcte, la fonction renvoie dans e la valeur de cet entier.

    Exercice 66

    Écrire l’algorithme d’une fonction f ayant en paramètres un tableau t de taille quelconque et un entier n indiquantla taille du tableau. La fonction f doit renvoyer par un return un entier égal à l’indice de la première case dutableau (parmi les n premières) comprise entre 0 et 10. S’il n’existe pas de telle valeur, la fonction renvoie -1.

    Exercice 67

    Dans cet exercice, tab désigne un tableau d’entier et t un entier représentant la taille du tableau d’entier.1. Écrire l’algorithme d’une procédure affiche_tab qui prend en paramètre tab et tet qui affiche les entiers

    qui sont stockés dans tab.2. Écrire l’algorithme d’une procédure saisie_tab qui prend en paramètre tab et t et qui invite l’utilisateur à

    saisir t entiers qui sont stockés dans tab.3. Écrire l’algorithme d’une fonction max_tab qui prend en paramètre tab et t et qui renvoie la plus grande

    11

  • valeur de tab.4. Écrire l’algorithme d’une fonction min_tab qui prend en paramètre tab et t et qui renvoie la plus grande

    valeur de tab.5. Écrire l’algorithme d’une fonction moy_tab qui prend en paramètre tab et t et qui renvoie la moyenne des

    valeur de tab.6. Écrire l’algorithme d’une procédure Ech_tab qui prend en paramètre tab, t et deux entiers a et b tous deux

    plus petit que t et qui échange la valeur de tab[a] et tab[b].7. Pour chacun des algorithme suivant, écrire l’algorithme d’une procédure réalisant le trie par ordre croissant

    de tab.Tri bête et méchant. On compare deux à deux les éléments d’un tableau (tab[i] et tab[j]) et on les

    inverses dès que le premier est plus grand que le second.Trie par bulle. On compare deux à deux les éléments consécutifs d’un tableau et on les inverse si le premier

    est plus grand que le second. On continue jusqu’à ce qu’il n’y ai plus de permutation possible.Tri Shaker. C’est un trie à bulle bidirectionnel. On compare deux éléments consécutifs et on les permutent

    lorsque le premier est plus grand que le second. Lorsqu’on arrive à la fin du tableau on parcours letableau de la fin au début et on continue ainsi jusqu’à ce qu’il n’y ai plus de permutation.

    Tri par insertion. On range chaque élément comme si c’était le dernier élément d’une liste trié.Tri récursif. Si le tableau est de taille 1, on n’a rien à faire. Sinon on prend le plus grand élément du tableau

    qu’on échange avec le dernier élément et on rappel la fonction sur le même tableau de taille t-1.

    Exercice 68

    MatricesUne matrice est un tableau de tableau. Le premier indice correspond à l’indice de ligne et le second à l’indice

    de colonne.1. Écrire l’algorithme d’une procédure Mat_aff qui prend en paramètre un entier n et une matrice M de Rn et

    qui affiche M.2. Écrire l’algorithme d’une procédure Mat_saisie qui prend en paramètre un entier n et une matrice M de Rn

    et qui invite l’utilisateur à saisir chacun des coefficient de M.3. Écrire l’algorithme d’une procédure Mat_nul qui prend en paramètre un entier n et une matrice M de Rn et

    qui initialise M avec la matrice nulle.4. Écrire l’algorithme d’une procédure Mat_id qui prend en paramètre un entier n et une matrice M de Rn et

    qui initialise M avec la matrice identité.5. Écrire l’algorithme d’une procédure Mat_pascal qui prend en paramètre un entier n et une matrice M de Rn

    et qui initialise M avec le triangle de Pascal jusqu’à n.6. Écrire l’algorithme d’une procédure Mat_trans qui prend en paramètre un entier n et deux matrices M et T

    de Rn et qui met dans T la transposée de M (on inverse ligne et colonne).7. Écrire l’algorithme d’une procédure Mat_somm qui prend en paramètre un entier n et trois matrices M, N et S

    de Rn et qui met dans S la somme de M et N.8. Écrire l’algorithme d’une procédure Mat_prod qui prend en paramètre un entier n et trois matrices M, N et P

    de Rn et qui met dans P la somme de M et N.

    12