Exercices d informatique pour la 2 e B



Documents pareils
Corrigé des TD 1 à 5

Initiation à la programmation en Python

Recherche dans un tableau

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Coefficients binomiaux

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

STAGE IREM 0- Premiers pas en Python

Examen Médian - 1 heure 30

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Cours Informatique Master STEP

Chapitre 2 Devine mon nombre!

avec des nombres entiers

Maple: premiers calculs et premières applications

Présentation du langage et premières fonctions

Algorithmes récursifs

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Probabilités sur un univers fini

Feuille TD n 1 Exercices d algorithmique éléments de correction

CORRECTION EXERCICES ALGORITHME 1

Initiation à l algorithmique

I. Introduction aux fonctions : les fonctions standards

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Algorithme. Table des matières

Utilisation d objets : String et ArrayList

Solutions du chapitre 4

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Programmation C++ (débutant)/instructions for, while et do...while

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : bij@agasc.fr Word: Les tableaux.

DOCM Solutions officielles = n 2 10.

Découverte du tableur CellSheet

Licence Sciences et Technologies Examen janvier 2010

Note de cours. Introduction à Excel 2007

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

1 Recherche en table par balayage

V- Manipulations de nombres en binaire

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Rappels sur les suites - Algorithme

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

Application 1- VBA : Test de comportements d'investissements

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Probabilités Loi binomiale Exercices corrigés

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Raisonnement par récurrence Suites numériques

Pour l épreuve d algèbre, les calculatrices sont interdites.

Plan du cours Cours théoriques. 29 septembre 2014

Algorithmique et programmation : les bases (VBA) Corrigé

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Le chiffre est le signe, le nombre est la valeur.

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique

TP 1. Prise en main du langage Python

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Découverte de Python

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

EXCEL TUTORIEL 2012/2013

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

Exercices sur le chapitre «Probabilités»

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

Cours d algorithmique pour la classe de 2nde

Date : Tangram en carré page

Représentation d un entier en base b

Chaînes de Markov au lycée

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Introduction à MATLAB R

C f tracée ci- contre est la représentation graphique d une

Objets Combinatoires élementaires

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Initiation à la programmation OEF pour Wims (exercices).


Chapitre 10. Les interfaces Comparable et Comparator 1

Programmation Objet - Cours II

Cours 02 : Problème général de la programmation linéaire

ACTIVITÉ DE PROGRAMMATION

Définitions. Numéro à préciser. (Durée : )

Architecture des Systèmes d Information Architecture des Systèmes d Information

Exercices de dénombrement

Algorithmique avec Algobox

La persistance des nombres

Petit lexique de calcul à l usage des élèves de sixième et de cinquième par M. PARCABE, professeur au collège Alain FOURNIER de BORDEAUX, mars 2007

Cours d Informatique

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Feuille d exercices 2 : Espaces probabilisés

315 et 495 sont dans la table de 5. 5 est un diviseur commun. Leur PGCD n est pas 1. Il ne sont pas premiers entre eux

Débuter avec Excel. Excel

Probabilités conditionnelles Loi binomiale

Continuité et dérivabilité d une fonction

Algorithmique avec Algobox

Baccalauréat ES/L Métropole La Réunion 13 septembre 2013 Corrigé

Algorithmique & programmation

Programmation linéaire

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

Par combien de zéros se termine N!?

Cours d arithmétique Première partie

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Transcription:

Exercice 1 Exercices d informatique pour la 2 e B Voici une application en console Delphi contenant des erreurs. Trouvez-les et redressez-les dans l esprit du programmeur, puis donner la sortie écran. program Affectations; {$APPTYPE CONSOLE} uses SysUtils; var int1,int2:integer; ext1,ext2:extended; char1:char; str1,str2:string; bool1,bool2,bool3:boolean; begin int1:=sqrt(400); ext1:=int1+30; bool1:=ext1=50; int2:=ext1 div 6; ext2:=int2*8; int1:=ext1+ext2; writeln(int1); writeln(int2); writeln(ext1); writeln(ext2); char1:='r'; str1:='bonjou'+char1; str2:='tout le monde'; writeln(str1+' '+str2); char1:=str1; writeln(char1); bool1:=ext1=50; bool2:=char1=x; bool3:=str1>str2; writeln(bool1); writeln(bool2); writeln(bool3) readln end. Exercice 2 Ecrire une application en console Delphi qui détermine si une année A donnée par l'utilisateur est bissextile ou non. Depuis l'instauration du calendrier, sont bissextiles les années soit divisibles par 4 mais non divisibles par 100, soit divisibles par 400. 1

Exercice 3 Ecrire une application en console Delphi qui détermine le nombre et le signe des racines d'une équation du 2 e degré 2 ax bx c 0, sans calculer les racines. Dans le cas particulier où a 0, le programme affichera le message : "Cette équation n'est pas du second degré." Exercice 4 A l aide de boucles for écrire un programme qui produit l écran-sortie suivant : Exercice 5 Dans tous les exercices qui suivent, l écran de sortie devra se présenter sous la forme d un tableau dont chaque ligne contient au plus 10 nombres et chaque nombre sera formaté de sorte qu il occupe 6 colonnes de l écran. a) Ecrire un programme qui affiche à l'écran tous les nombres entiers de 1 à n (n donné). b) Ecrire un programme qui affiche à l'écran les carrés des entiers de 1 à n (n donné). c) Ecrire un programme qui affiche tous les entiers entre deux limites réelles entrées par l'utilisateur, du plus petit au plus grand. Exercice 6 Trouver tous les nombres donnés par l utilisateur. N dont la somme des chiffres est égale à S, S et N étant Exercice 7 Ecrire une application en console Delphi qui choisit au hasard un entier naturel secret compris entre 1 et 100 et qui demande à l'utilisateur de deviner cet entier naturel. Le programme informera le joueur à chaque essai si le nombre secret est > ou < que le 2

nombre entré. Lorsque le joueur a deviné le nombre correct, le programme félicitera le joueur et écrira à l'écran le nombre d'essais. De plus : a) Pour signaler qu'il n'a plus envie de jouer en cours d'une partie, le joueur entrera 0 au clavier. Le programme affichera alors le nombre secret et la partie se termine. b) Après chaque partie, le programme demandera au joueur s'il veut faire une nouvelle partie et le joueur entrera le caractère 'o' pour oui, 'n' pour non. Rappels : Le générateur de nombres aléatoires doit être initialisé à l'aide de l'instruction randomize. La fonction random(n) retourne un entier aléatoire x tel que 0 x n. Exercice 8 Ecrire un programme qui affiche le plus grand et le plus petit nombre d'une suite de nombres réels positifs entrés au clavier par l'utilisateur. Le programme se termine si l'utilisateur entre -1. (-1 ne fait pas partie de la suite.) Exercice 9 Ecrire un programme qui écrit à l écran les suites d entiers commençant par les nombres donnés jusqu à ce que le résultat soit pour la première fois plus grand que 6 10. Combien de termes de ces suites sont affichés dans chaque cas? (1) 1, 3, 6, 8, 16, 18, 36, 38, 76, (+2, puis 2, ) (2) 1, 6, 16, 36, 76, (+2 puis 2 en une étape, ) (3) 1, 8, 3, 24, 19, 152, 147, ( 8, puis 5, ) (4) 1, 3, 19, 147, ( 8 puis 5 en une étape ) (5) 0, 1, 1, 2, 3, 5, 8, 13, 21,. (suite de Fibonacci) (6) 2, 1, 3, 4, 7, 11, 18,. (suite de Lucas, même principe) (7) 1, 0, 100, 50, 150, 75, 175, 88, 188, (div 2, puis +100) 3

Exercice 10 Pour n, on définit : u n 1 1 1 1... 2 3 n. u. Trouver le plus petit entier n tel que 10 n Exercice 11 Implémenter l algorithme d Héron (d Alexandrie) pour calculer la racine carrée d un nombre réel positif a : on choisit un réel u 0 arbitraire, puis on 0 calcule récursivement : u n 1 u 2 a n 1 u n 1, pour n 1 jusqu à ce que l on obtienne la précision voulue par l utilisateur. Par exemple pour 3 17 calculer 2, on part de u 1, alors u 1, 5, u 1, 41666..., 0 1 2 2 12 u 577 =1,414215686... etc. 3 409 Exercice 12 Ecrire un programme qui affiche la suite de Collatz pour un entier naturel non nul donnée. Cette suite est définie de la manière suivante : On part d'un entier naturel non nul ; s il est pair, on le divise par 2 ; s il est impair, on le multiplie par 3 et on ajoute 1. En répétant l opération, on obtient une suite récurrente, c.-à-d. une suite d'entiers positifs dont chacun ne dépend que de son prédécesseur. Par exemple, à partir de 14, on construit la suite des nombres : 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1. La suite s'arrête si on tombe sur 1. On conjecture mais on n'a pas démontré jusqu'à aujourd'hui que la suite de Syracuse se termine pour chaque entier naturel. Voilà pourquoi, votre programme comportera une limite pour le nombre maximal de termes qu'il calculera. On utilisera obligatoirement la fonction collatz qui est définie de la manière suivante pour un entier naturel non nul : n / 2 si n est pair collatz( n) 3n 1 si n est impair 4

Exercice 13 Faire un tableau d exécution dans chacun des exemples suivants, puis donner valeur finale des variables demandées : a) a et b sont des variables de type integer. Quelle est la valeur de a après les instructions suivantes? a:=3; for b:=0 to 5 do a:=a+4; for b:=5 downto 3 do a:=a+b; b) s est une variable de type string. Quelle est la valeur de s après les instructions suivantes? s 'ab'; while length(s)<11 do s s+'x'+s; c) test est une variable de type boolean et i une variable de type integer. Quelles sont les valeurs de test et de i après les instructions suivantes? test false; i 10; while not(test) do if i>6 then i i-1 else test true; Exercice 14 Quel est l écran de sortie du programme suivant : program boucle1; {$APPTYPE CONSOLE} uses SysUtils; var x:integer; begin x:=1; while x<>6 do begin x:=x+2; write(x,' '); x:=x-1 readln; end. Exercice 15 Ecrire les fonctions suivantes : (1) Un fonction cube qui retourne le cube d un nombre réel donné. (2) Une fonction distance qui retourne la distance d un point Mxy (, ) à l origine. 5

(3) Une fonction max qui retourne le maximum de trois réels donnés. (4) Une fonction hypotenuse qui retourne la longueur de l hypoténuse d un triangle rectangle de cathètes données. (5) Une fonction pgcd qui retourne le pgcd de deux entiers naturels donnés a) à l aide de l algorithme de soustraction et b) à l aide de l algorithme de division d Euclide. (6) Une fonction ppcm qui retourne le ppcm de deux entiers naturels donnés. (7) Une fonction phi qui pour un entier naturel non nul n, retourne le nombre d entiers m tels que pgcd( mn, ) 1. (8) Une fonction diviseurs qui compte pour un entier naturel non nul n donné, le nombre de diviseurs de n. (9) Une fonction puissance qui prend en entrée un réel x de type extended et un entier n de type integer et qui retourne x n. (10) Une fonction sigma qui calcule, pour un entier n donné, la somme de tous les diviseurs de n. Exercice 16 (1) Ecrire une fonction booléenne prime qui prend en entrée un entier naturel p et détermine si p est premier ou non. (2) Ecrire une application en console Delphi qui écrit les nombres premiers compris entre deux bornes a à b choisis par l'utilisateur à l'écran. Exercice 17 (1) Ecrire une fonction puissance qui prend en entrée un réel x et un entier naturel n et qui calcule x n. (2) Utiliser cette fonction dans le programme somme pour afficher la somme des puissances k-ièmes des n premiers entiers naturels non nuls à l'écran (n et k donnés par l'utilisateur). Exercice 18 On considère la fonction suivante : function monmot(s:string):string; var i:integer; begin result:=''; i:=1; 6

while i<=length(s) do begin if i mod 2 = 0 then result:=result+s[i]; i:=i+1 end (1) Quelle est la sortie écran du programme principal suivant? begin writeln(monmot('albert Einstein')); writeln(monmot('paris')+ monmot('berlin')); writeln(monmot('paris'+'berlin')); readln end. (2) Réécrire la fonction monmot en transformant la boucle while en une boucle for. On essayera de se débarrasser également de l'instruction if. Exercice 19 Ecrire un programme qui demande à l utilisateur deux mots contenant exactement un trait d union et qui intervertit et écrit à l écran les deux parties derrière les traits d union. Donc par exemple : croque-monsieur et porte-avions deviennent respectivement croque-avions et porte-monsieur. Exercice 20 Ecrire une procédure delchar qui enlève toutes les occurrences d une lettre donnée d une chaîne de caractères. Par exemple, si s := informatique et si on écrit l appel delchar( i,s) alors la variable s sera transformée en nformatque. On demande d utiliser la procédure prédéfinie delete. Exercice 21 Ecrire une fonction countchar qui compte le nombre de lettres distinctes dans une chaîne de caractères. Par exemple : countchar( mathematiques ) retourne 9. Exercice 22 Ecrire une fonction avecespaces qui insère entre deux lettres successives d un mot donné un espace. Par exemple : avecespaces( info ) = i n f o. On demande d utiliser la procédure prédéfinie insert. 7

Exercice 23 Ecrire une fonction motaleatoire qui prend en entrée un mot et qui retourne un mot formé exactement des mêmes lettres, mais dans un ordre aléatoire. Par exemple : motaleatoire( informatique ) = utonirafqmei. Exercice 24 Ecrire une fonction booléenne testparentheses qui vérifie si les parenthèses dans un string représentant une expression mathématique sont correctement placées. On ne demande pas de vérifier la syntaxe des autres opérations. Par exemple : Exercice 25 testparentheses('(3+4x)*(8x-5)-(2*(x-3)-x)') = true testparentheses('3+(4x*(8x-5)-(2*(x-3)-x)') = false testparentheses('3+4x*8x-5-(2*(x-3)-x))') = false Ecrire une fonction alphabeticstring qui prend en entrée un caractère majuscule et un entier n non nul et qui retourne le string formé de n lettres successives de l alphabet et commençant avec la lettre fournie par l utilisateur. Si on dépasse la lettre Z, on recommence cycliquement avec A. Par exemple : alphabeticstring( T,5)= TUVWX alphabeticstring( X,8)= XYZABCDE alphabeticstring( Z,28)= ZABCDEFGHIJKLMOPQRSTUVWXYZA Exercice 26 Ecrire les fonctions booléennes suivantes : (1) Une fonction bissextile qui teste si une année A (nombre entier) donnée est bissextile ou non (voir exercice 1). (2) Une fonction palindrome qui teste si une chaîne de caractères donnée est un palindrome, c.-à-d. un texte ou un mot dont l'ordre des lettres reste le même qu'on le lise de gauche à droite ou de droite à gauche comme dans l'expression «ZEUS A ETE A SUEZ». (3) Une fonction souschaine(a,b:string):boolean, qui examine si un string donné a est une sous-chaîne d'un deuxième string donné b. Par exemple : a) souschaine(titi,tatitito) retourne true et b) souschaine(titi,titatoti) retourne false. 8

(4) Une fonction anagramme qui teste si deux chaînes de caractères données sont des anagrammes l'une de l'autre. Un anagramme d'un mot est un mot différent formé avec exactement les mêmes lettres. Par exemple : a) anagramme(algorithme,logarithme) retourne true et b) anagramme(test,tete) retourne false. Exercice 27 Ecrire les procédures suivantes : (1) Une procédure diviseurs(n:integer) qui écrit à l écran tous les diviseurs de l entier naturel non nul n. (2) Une procédure hasard(n,a,b:integer) qui écrit à l écran n entiers naturels aléatoires tels que a n b. (3) Une procédure premiers(a,b:integer) qui écrit à l écran tous les nombres premiers compris entre a et b. (4) Une procédure parfaits(a,b:integer), qui recherche et écrit à l écran tous les nombres parfaits compris entre a et b. Par définition, un nombre n est parfait lorsqu il est égal à la somme de tous ses diviseurs propres (c.-à-d. tous les diviseurs autres que n). Par exemple, 6 est parfait car 6 1 2 3. (5) Une procédure titre(s :string) qui écrit le string s sur l écran entouré d un cadre formé de caractères *. (6) Une procédure somme(a,b:extended ; var s :extended) qui calcule la somme de deux réels a et b et la stocke dans le paramètre s. (7) Une procédure echange(var s:string;i,j:integer) qui échange les caractères d indices i et j du string s. (8) Une procédure effacer(var s:string;debut,n:integer) qui efface n caractères du string s à partir du caractère d indice debut. (9) Une procédure separer(s :string; var prenom, nom :string) qui prend en entrée une chaîne de caractères s du type a_b et qui stocke les deux parties a et b dans les paramètres prenom et nom respectivement. Exercice 28 a) Ecrire une procédure rectangle qui permet de dessiner sur l'écran un rectangle formé de caractères '*'. Les dimensions du rectangle peuvent être choisis par l'utilisateur. 9

b) Ecrire une procédure escalier qui permet de dessiner sur l'écran un "escalier" formé de caractères '*'. Le nombre de marches peut être choisi par l'utilisateur. On pourra programmer les trois variantes ci-dessous : c) Ecrire une procédure echiquier qui permet de dessiner sur l'écran un échiquier formé de caractères '*' et ' ' symbolisant les cases noires et blanches respectivement. Les dimensions de l'échiquier peuvent être choisies par l'utilisateur. On pourra commencer par supposer que les dimensions de l'échiquier sont paires, puis essayer d'améliorer le programme (voir sorties écran ci-dessous). d) Ecrire une procédure croix à un paramètre n type integer qui dessine à l'écran le motif explicité sur l'exemple d'exécution ci-dessous, obtenu par l'appel croix(7) : 10

n lignes (ici n=7) n lignes ligne formée en tout par 4n+1 caractères : 2n+1 caractères '*' séparés par 2n espaces. Exercice 29 (1) Ecrire une procédure factorisation(n :integer) qui écrit à l écran la décomposition en facteurs premiers de n. Exemple : Pour n = 360, la procédure affichera : 2*2*2*3*3*5. (2) Même question, mais on demande d afficher le résultat comme produit de puissances. Exemple : Pour n = 360, la procédure affichera à l écran : 2^3*3^2*5^1. Exercice 30 a) Ecrire une fonction factorial qui calcule la factorielle d'un entier naturel n. On rappelle que : n! 1 2 3... n et par définition : 0! 1. b) Ecrire une fonction binomial qui calcule le coefficient binomial k n! C, n k! n k! avec 0 k n. ( C est le nombre de façons qu'il y a à choisir un sous-ensemble de k k n éléments dans un ensemble de n éléments donné.) Exercice 31 Ecrire un programme qui affiche le tableau des images de la fonction 3 2 f : x ax bx cx d. On demandera à l'utilisateur d'entrer les coefficients a, b, c et d du polynôme f au clavier. L'utilisateur choisira par ailleurs les bornes min et max entre lesquels x varie et le pas h à utiliser dans le tableau de variation. 11

Exercice 32 Ecrire un programme qui demande à l'utilisateur d'entrer autant de mots qu'il veut. Lorsque l'utilisateur entre un '.', le programme forme une phrase en concaténant tous les mots entrés dans l'ordre et en les séparant par un espace. La phrase écrite à l'écran devra se terminer par un point. Exercice 33 (1) Ecrire une fonction somme qui retourne la somme des chiffres (=Quersume) d'un entier naturel. Par exemple : somme 94 ' 307 9 4 3 0 7 23. On se servira des opérateurs div et mod. x div 10 retourne le reste entier de la division de x par 10 (donc le dernier chiffre de x) x mod 10 retourne le quotient entier de la division de x par 10 (donc le nombre formé des chiffres de x à l'exception du dernier chiffre) (2) Ecrire une fonction somme_alt qui retourne la somme alternée des chiffres d'un entier naturel (les chiffres sont précédés alternativement du signe + et du signe ). Par exemple : somme_alt 94 ' 307 9 4 3 0 7 15. (3) Utiliser ces fonctions pour écrire une application en console Delphi qui teste si un entier naturel entré par l'utilisateur est divisible par 3, par 9 ou par 11. Exercice 34 Ecrire un programme qui recherche une racine d un polynôme p du 3 e degré par la méthode dichotomique : L utilisateur entre deux réels a b tels que p a p b 0, c.-à-d. tels que p a et p b soient de signes opposés. (Le programme devra vérifier si cette condition est bien remplie et afficher au cas contraire un message d erreur). p a b 2 : il y a alors 3 possibilités : - a b ou bien p 2 a b 0, alors 2 est une racine de p et le problème est résolu ; - a b ou bien p 2 p a 0 a b a : 2 ; - a b ou bien p 2 p b 0 a b b : 2 ; Cet algorithme se poursuit jusqu à ce que b a, où est l erreur tolérée sur la racine, fixée au préalable par l utilisateur. Le programme calcule 12

Exercice 35 Ecrire une application en console Delphi qui simule un jeu de pile ou face : avant de commencer le jeu, le joueur entrera son capital de départ (entier). A chaque partie, le programme demande au joueur de choisir sa mise et d'entrer 'P' s'il décide de miser sur 'Pile', 'F' s'il décide de miser sur 'Face'. Le programme contrôle ensuite si la mise pariée n'est pas plus élevée que le capital restant du joueur (auquel cas il demande d'entrer une nouvelle mise), puis il choisit au hasard l'un des deux entiers 0 (correspondant à 'Pile') ou 1 (correspondant à 'Face'). Si le joueur a correctement deviné, sa mise est ajoutée à son capital, sinon elle est retranchée du capital. Le programme se termine soit si le joueur n'a plus d'argent, soit s'il décide d'arrêter luimême de jouer. Exercice 36 (1) Ecrire un programme qui permet de simuler le tirage au sort d une main de k cartes (sans remise) dans une jeu contenant 52 cartes. (2) Ecrire un programme qui permet de simuler le tirage au sort de k boules dans une urne contenant a boules noires et b boules blanches. On distinguera les deux cas : tirages avec ou sans remise. 13

Exercice 37 Ecrire le programme qui recherche et compte tous les triplets pythagoriciens (x,y,z) tels que 1 x y max, où max est un entier entré par l utilisateur. On rappelle qu un triplet pythagoricien est un triplet d entiers naturels (x,y,z) tels que 2 2 2 x y z. Exemple d exécution : Exercice 38 On définit le type liste par : const max = 10; //déclaration d une constante type liste = array[1..max] of integer; (1) Ecrire une procédure echanger qui prend en entrée un tableau du type liste et deux entiers i et j. Cette procédure devra échanger les deux éléments d indices i et j du tableau. (2) Ecrire une procédure effacer qui prend en argument un tableau de type liste et un indice pos. La procédure devra supprimer l élément d indice pos et décaler les éléments qui le suivent d un indice vers la gauche. (3) Ecrire une procédure inserer qui prend en argument un tableau de type liste, un indice pos et un nouvel élément de type integer à insérer à l endroit pos. Les éléments d indices supérieurs ou égaux à pos seront donc décalés d une position vers la droite. Le dernier élément de la liste sera effacé. (4) Ecrire une fonction rotation prenant en argument un tableau de type liste, et un entier n. La fonction effectue la rotation (décalage) des éléments du tableau de n positions vers la droite. Par exemple, avec n=2, le tableau (1,2,3,4,5,6,7,8,9,10) contiendra après rotation (9,10,1,2,3,4,5,6,7,8). (5) Ecrire une procédure randomfill qui prend en entrée un tableau du type liste et qui le remplit de façon aléatoire avec les entiers de 1 à 100, chaque entier apparaissant exactement une seule fois dans le tableau. 14

Exercice 39 Ecrire un programme qui permet de trier par ordre croissant une liste d entiers dont les éléments et leur nombre sont donnés par l utilisateur. L algorithme à implémenter est le tri par sélection : on cherche dans la liste le plus petit élément et on l échange avec le premier élément de la liste, on cherche l élément le plus petit parmi les éléments restants, c.-à-d. à partir du deuxième. On recommence l algorithme en ne prenant plus en considération les éléments déjà triés jusqu à ce qu on arrive à la fin de la liste. Le tableau trié doit être écrit sur l écran. On introduira le type liste, défini comme suit : type liste = record items : array[1..1000] of integer ; count: integer ; end ; et on utilisera une procédure echange(var t:liste;i,j:integer) qui échange les éléments d indices i et j d un tableau de t type liste. Exercice 40 On construit une suite de nombres entiers de la manière suivante : on choisit un nombre de départ a 1 parmi les entiers de 1 à 99 ; on obtient an en multipliant le chiffre des unités de a 1 n par 5 et en ajoutant au résultat le chiffre des dizaines de a n. on arrête le procédé dès que a { a, a,..., a }, c.-à-d. on tombe sur un n 1 1 2 n élément déjà obtenu auparavant. Le dernier terme de la suite est alors a n. Ecrire un programme, qui pour un entier de départ a 1 donné, écrit à l écran tous les termes de la suite ainsi définie et compte le nombre de termes de cette suite. (1) Que se passe-t-il si on part a) d un multiple de 7? b) d un entier 50 et non multiple de 7? (2) Pour quel entier de départ obtient-on la suite a) la plus courte b) la plus longue? 15

Exercice 41 Soit T un tableau d'entiers de taille N, contenant uniquement des 0 et des 1, placés au hasard. (On peut imaginer par exemple que c est une suite de résultats du lancer d une pièce de monnaie. Une série dans T est une suite d'éléments consécutifs et égaux de T. Ecrire un programme qui cherche la plus longue série dans un tableau donné T, l'indice de son premier élément et sa longueur. Exercice 42 Réaliser une petite calculatrice qui permet de faire des opérations sur des fractions. Le programme permettra a) de simplifier des fractions et b) d effectuer plusieurs opérations élémentaires (addition, soustraction, multiplication et division) sur les fractions, l une à la suite de l autre, comme dans l exemple d exécution ci-dessous. On ne demande pas que la calculatrice respecte les règles de priorité. On utilisera le type fraction défini par : type fraction = record n,d:integer; Exercice 43 Ecrire un programme qui permet d effectuer des opérations sur les ensembles d entiers, comportant au plus 100 éléments. On utilisera les définitions suivantes : const max=100; type ensemble = record nom:string ; elem:array[1..max] of integer; card:integer 16

Le programme permettra à l utilisateur d entrer un par un les éléments de deux ensembles A et B, puis on pourra calculer au choix A B, A B et A\ B. Les ensembles résultats seront présentés sans éléments doubles : une procédure reduction permettra de les éliminer. Par exemple : {0, 1, 1, 2} deviendra {0, 1, 2}. Le programme permettra également de comparer les deux ensembles A et B : il décidera si A B, si A B ou si B A. On structurera le programme en procédures et fonctions adéquates. Exercice 44 Ecrire un programme qui permet de calculer la somme et le produit de 2 matrices à coefficients réels, de dimensions quelconques. On utilisera le type matrice défini par : type matrice = record name : string ; items : array[1..100,1..100] of extended; rowcount,colcount : integer ; Le programme comportera : a) deux procédures saisie et affichage, permettant respectivement à l utilisateur d entrer et d afficher les éléments d une matrice, ligne par ligne ; b) deux fonctions somme et produit, retournant respectivement la somme et le produit de deux matrices; Lorsque la somme ou le produit ne sont pas définis, un message d erreur sera affiché par le programme. Exercice 45 Ecrire un programme qui permet d effectuer les opérations usuelles sur les polynômes : a) addition et soustraction, b) multiplication, c) évaluation en un réel donné par l algorithme de Horner d) dérivation. Pour chaque opération, on écrira une procédure adéquate. En outre, une procédure saisie et une procédure affichage permettront de lire et d écrire à l écran les coefficients et le degré d un polynôme. On utilisera les définitions suivantes : const max=1000; type poly = record nom :string ; c:array[0..max] of extended; d:integer 17

où c représente le tableau avec les coefficients du polynôme, c.-à-d. cn [ ] est le coefficient de x n, et d est le degré du polynôme. Exercice 46 Pour analyser les résultats des élèves d un lycée dans les 4 branches mathématiques, allemand français et anglais, on introduit les types suivant : type etudiant = record nom,prenom:string; notes:array[1..4] of integer; moyenne:extended lycee = record items :array[1..1000] of etudiants ; count :integer ; On pourra implémenter les noms des branches sous forme d un tableau, à déclarer comme constante : const branches:array[1..4] of string = ('mathematiques','allemand','francais','anglais'); Par exemple : toto.notes[1] 35 ; toto.notes[2] 36 ; toto.notes[3] 37 ; toto.notes[4] 38 ; signifie que l étudiant toto a eu 35 en mathematiques, 36 en allemand, 37 en français et 38 en anglais. Le programme à réaliser comportera le menu suivant : 1 : Saisie 2 : Affichage par ordre alphabetique 3 : Tri par branche ou par moyenne 4 : Recherche d etudiants 5 : Quitter L utilisateur, en choisissant le numéro correspondant pourra donc saisir les différents champs relatifs aux étudiants (1), afficher sur l écran les étudiants et leurs résultats soit par ordre alphabétique (2), soit en les classant suivant la note d une branche donnée ou suivant la moyenne générale (3), ou bien chercher tous les étudiants vérifiant une certaine condition (4). Cette condition sera entrée par l utilisateur sous 18

l une des formes suivantes : prenom>titi ou nom=toto ou moyenne>40 ou informatique=30 Donc : champ =,>,< valeur sans espace. (Au lieu d écrire une procédure saisie, on pourra aussi remplir aléatoirement le tableau avec les étudiants et leurs résultats, pour mieux pouvoir tester le programme.) Exercice 47 Ecrire un programme qui permet de représenter graphiquement un chemin aléatoire reliant le coin supérieur gauche au coin inférieur droit d une grille rectangulaire, dont le nombre de lignes et de colonnes pourra être choisi par l utilisateur. Le chemin doit avoir la longueur minimale, c.-à-d. on pourra uniquement se promener d une position vers la droite ou d une position vers le bas dans la grille. On utilisera les types : type grille = record items:array[1..100,1..100] of integer; rowcount,colcount:integer chemin = record items:array[1..200] of integer; count:integer; La difficulté consiste à choisir un chemin au hasard : pour cela, on remarque que pour l exemple d exécution ci-dessus, parmi les (10-1)+(20-1)=28 transitions à faire (vers la droite ou vers le bas), il suffit de choisir les 10-1=9 endroits ou on descend. Le chemin obtenu dans l exemple d exécution peut donc être représenté par la liste : (1,0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,0,1) 19

Chaque 1 représente une position où on descend, chaque 0 représente une position où on se déplace vers la droite. Exercice 48 Ecrire un programme qui demande à l utilisateur d entrer d abord le nombre d élèves d une classe, puis d entrer une à une les notes en mathématiques de ces élèves (entiers compris entre 01 et 60). Les notes sont stockées dans une liste notes:array[1..100]of integer. (On pourra aussi écrire une procédure qui remplit automatiquement le tableau avec des notes choisies au hasard pour accélérer le processus de saisie ) On demande ensuite de remplir une liste frequences:array[1..60]of integer avec les fréquences de ces notes. Donc par exemple frequences[43] est le nombre d élèves qui ont obtenu 43 points. Les fréquences groupées (intervalles [1,9[, [10,20[,[20,30[, [50,60]), seront affichées à l écran à l aide d un diagramme. Exercice 49 Ecrire un programme qui permet de calculer la somme et le produit de 2 matrices à coefficients réels, de dimensions quelconques. On utilisera le type matrice défini par : type matrice = record name : string ; items : array[1..100,1..100] of extended; rowcount,colcount : integer ; Le programme comportera : a) deux procédures saisie et affichage, permettant respectivement à l utilisateur d entrer et d afficher les éléments d une matrice, ligne par ligne ; b) deux fonctions somme et produit, retournant respectivement la somme et le produit de deux matrices; Lorsque la somme ou le produit ne sont pas définis, un message d erreur sera affiché par le programme. 20

21