Corrigé des TD 1 à 5



Documents pareils
Examen Médian - 1 heure 30

Enseignement secondaire technique

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

Algorithmes récursifs

STAGE IREM 0- Premiers pas en Python

Initiation à l algorithmique

= constante et cette constante est a.

Cours Informatique Master STEP

Recherche dans un tableau

Algorithmes et programmation en Pascal. Cours

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Résolution de systèmes linéaires par des méthodes directes

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

Java Licence Professionnelle CISII,


1 Recherche en table par balayage

Application 1- VBA : Test de comportements d'investissements

L ALGORITHMIQUE. Algorithme

Programmation structurée et algorithmes de base en Pascal

Algorithmes et mathématiques. 1. Premiers pas avec Python. Exo Hello world!

Cours d Algorithmique et de Langage C v 3.0

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

Présentation du langage et premières fonctions

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

EXPLOITATIONS PEDAGOGIQUES DU TABLEUR EN STG

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Probabilités Loi binomiale Exercices corrigés

Simulation de variables aléatoires

Découverte du tableur CellSheet

Introduction à MATLAB R

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Continuité et dérivabilité d une fonction

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Algorithmique et Programmation, IMA

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d algorithmique pour la classe de 2nde

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

Maple: premiers calculs et premières applications

CCP PSI Mathématiques 1 : un corrigé

ALGORITHMIQUE ET PROGRAMMATION En C

Probabilités sur un univers fini

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

TD3: tableaux avancées, première classe et chaînes

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Chapitre 2 Devine mon nombre!

TSTI 2D CH X : Exemples de lois à densité 1

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

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

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithme. Table des matières

Raisonnement par récurrence Suites numériques

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

1. Structure d'un programme FORTRAN 95

Tp 1 correction. Structures de données (IF2)

Arbres binaires de recherche

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

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

Solutions du chapitre 4

Rappels sur les suites - Algorithme

Calcul Formel et Numérique, Partie I

Découverte de Python

Continuité en un point

Compilation (INF 564)

CORRECTION EXERCICES ALGORITHME 1

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Cours d algorithmique BTS SIO première année. Nicolas FRANCOIS nicolas.francois@free.fr

Correction de l examen de la première session

Programmer en JAVA. par Tama

La fonction exponentielle

Nombres premiers. Comment reconnaître un nombre premier? Mais...

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

Initiation à la programmation OEF pour Wims (exercices).

Programmation linéaire

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

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

MINISTERE DE L ENSEIGNEMENT TECHNIQUE ET DE LA FORMATION PROFESSIONNELLE. (Pour l obtention du diplôme d analyste programmeur)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Plan du cours Cours théoriques. 29 septembre 2014

Initiation à LabView : Les exemples d applications :

F7n COUP DE BOURSE, NOMBRE DÉRIVÉ

Cours 7 : Utilisation de modules sous python

Chapitre 7. Récurrences

4. Les structures de données statiques

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

Le calcul formel dans l enseignement des mathématiques

Image d un intervalle par une fonction continue

BACCALAURÉAT PROFESSIONNEL ÉPREUVE DE MATHEMATIQUES. EXEMPLE DE SUJET n 2

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Introduction au langage C

Correction du baccalauréat ES/L Métropole 20 juin 2014

Transcription:

Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un nombre n: ); 10 readln(n); 12 (* calcul de la somme *) somme:=0; (* la somme vaut 0 quand on n y a rien ajouté *) 14 for i:=1 to n do somme:=somme+i; 1 (* affichage du résultat *) writeln( La somme des, n, premiers entiers vaut,somme); 18 end. Lorsque n devient trop grand, on dépasse la borne supérieure du type integer, qui est fixée à 3277. Les résultats sont alors faux. Ce problème apparaît à partir de n = 25. 1.2 Table de multiplication 1 (* table de multiplication *) 2 program multiplication; ligne, colonne: integer; 8 for ligne:=1 to 10 do 10 for colonne:=1 to 10 do write(ligne*colonne:4); 12 writeln; 14 end. Page 1/8

1.3 Suite de Fibonacci 1 (* suite de Fibonacci *) 2 program fibonacci; u: integer; (* contient u(n-2) *) v: integer; (* contient u(n-1) *) w: integer; (* contient u(n) *) 8 n, i: integer; 10 write( Combien de termes voulez-vous? ); 12 readln(n); 14 (* initialisation *) u:=1; v:=1; (* u(0) et u(1) *) 1 writeln( u(0) = 1 ); writeln( u(1) = 1 ); 18 (* calcul et affichage des termes *) 20 for i:=2 to n do 22 w := u + v; (* calcul de u(n) par récurrence *) writeln( u(,i, ) =,w); 24 u := v; (* passage au *) v := w; (* rang n+1 *) 2 end. 2 Dichotomie 2.1 Jeu du nombre secret 1 (* jeu du nombre secret *) 2 program jeu; hasard: integer; essai: integer; tentatives: integer; 8 10 randomize; hasard := random(100)+1; 12 tentatives:=0; 14 repeat tentatives:=tentatives+1; 1 write( Entrez un nombre: ); readln(essai); 18 if(essai>hasard) then writeln( Trop grand. ); Page 2/8

if(essai<hasard) then writeln( Trop petit. ); 20 until essai=hasard; 22 writeln( Bravo. Vous avez trouvé en,tentatives, essais. ); end. 2.2 Résolution de f(x) = 0 1 (* Résolution d une équation par dichotomie *) 2 program dicho; a,b,c,eps: real; fa,fc: real; 8 write( Borne a: ); readln(a); 10 write( Borne b: ); readln(b); write( Précision: ); readln(eps); 12 while b-a>eps do 14 c:=(a+b)/2; 1 (* l équation est codée en dur ici: x^2-4x + 3 *) fa := a*a - 4*a +3; 18 fc := c*c - 4*c +3; if fa*fc<0 then 20 b:=c else 22 a:=c; 24 writeln( A la précision,eps,, on a:,a, < alpha <,b); 2 end. 3 Tableaux 3.1 Calcul des coefficients binômiaux C p n 1 (* calcul des coefficients binomiaux à l aide de la formule de Pascal *) 2 program cnp; 4 const MAX = 10; var 8 c: array[0..max, 0..MAX] of integer; n, p: integer; 10 12 for n:=0 to MAX do (* parcours des lignes *) Page 3/8

14 for p:=0 to n do (* parcours des colonnes *) 1 if (p=0) or (n=p) then c[n,p] := 1 else c[n,p] := c[n-1,p] + c[n-1,p-1]; 18 write(c[n,p]:4); 20 writeln; 22 end. 3.2 Calcul des H p n On a de façon assez claire : H p n = n k=0 H p 1 n k. On en déduit alors l algorithme, qui se fait par couches successives de valeurs de p. A la couche p, on peut exprimer tous les H p n en fonction des valeurs calculées à la couche (p 1). 1 (* calcul des H(n,p) *) 2 program hnp; 4 const MAXN = 10; (* valeur maximale de n *) MAXP = 7; (* valeur maximale de p *) 8 var h: array[0..maxn, 1..MAXP] of integer; 10 n, p, k: integer; 12 (* cas de base: nombre de codes à 1 chiffre *) 14 for n:=0 to MAXN do 1 h[n, 1]:=1; write(1:5); 18 writeln; 20 (* cas général *) 22 for p:=2 to MAXP do 24 for n:=0 to MAXN do 2 h[n,p]:=0; for k:=0 to n do h[n,p]:=h[n,p]+h[n-k,p-1]; 28 write(h[n,p]:5); 30 writeln; 32 end. Page 4/8

4 Fonctions 4.1 Quelques fonctions 1 (* évaluation du trin^ome a*x^2 + b*x + c au point x0 *) 2 function trinome(a, b, c, x0: real): real; 4 trinome:=a*x0*x0 + b*x0 + c; (* factorielle itérative *) 8 function factorielle(n: integer): integer; var 10 fact, k: integer; 12 fact:=1; for k:=2 to n do fact:=fact*k; 14 factorielle:=fact; 1 (* factorielle récursive *) 18 function factrec(n: integer): integer; 20 if n=0 then factrec:=1 else factrec:=n*factrec(n-1); 22 4.2 Tours de Hanoï La solution de ce problème est assez claire si l on pense à raisonner de façon récursive. Si l on suppose que l on sait déjà déplacer des piles de n 1 disques, on se rend compte que l on sait déplacer des piles de n disques. 1 (* résolution du problème des tours de hanoï *) 2 program hanoi; 4 (* déplacement de nombre élements du piquet depart vers le piquet arrivee en utilisant comme pivot le piquet intermediaire *) procedure mouvement(depart, arrivee, intermediaire: char; nombre: integer); 8 if nombre=0 then exit; 10 (* on déplace les (n-1) premiers éléments vers le piquet intermédiaire *) mouvement(depart, intermediaire, arrivee, nombre-1); 12 (* on déplace l élément du dessous vers le piquet d arrivée *) 14 writeln(depart, =>, arrivee); 1 (* on déplace les (n-1) éléments du piquet intermédiaire vers l arrivée *) mouvement(intermediaire, arrivee, depart, nombre-1); 18 20 (* programme principal de test *) 22 Page 5/8

mouvement( a, b, c,4); 24 end. 5 Booléens 5.1 Crible d Eratosthène La seule astuce est de stocker l état barré ou non-barré d un nombre dans un tableau de booléens. L état du nombre n est stocké à l indice n du tableau. 1 (* crible d Eratosthène pour la détermination des nombres premiers *) 2 program eratosthene; 4 const max = 100; var 8 premier: array[1..max] of boolean; (* vrai si nombre premier *) i, j: integer; 10 12 (* au début, tous les nombres sont candidats pour ^etre premiers *) for i:=1 to max do premier[i]:=true; 14 write( 1; ); 1 for i:=2 to max do 18 if not premier[i] then continue; 20 (* à ce stade, on est s^ur que i est premier: on l affiche et on barre 22 ses multiples *) write(i, ; ); 24 j:=2*i; while j<=max do 2 premier[j]:=false; 28 j:=j+i; 30 writeln; 32 end. 5.2 Nombres parfaits 1 (* détermine si le nombre n est parfait *) 2 function parfait(n: integer): boolean; var 4 somme, i: integer; somme:=0; Page /8

8 (* ajout de tous les diviseurs stricts de n *) for i:=1 to n div 2 do 10 if (n mod i)=0 then somme:=somme+i; 12 parfait := (somme = n); Les nombres parfaits sont peu nombreux ; les premiers nombres parfaits sont, 28, 49, 8128. 5.3 Suite de Syracuse 1 (* calcul des termes de la suite de syracuse *) 2 program syracuse; u,k: integer; 8 write( u[0] = ); readln(u); 10 k:=0; 12 repeat (* calcul de u[k+1] *) 14 inc(k); if u mod 2 = 0 then u:=u div 2 1 else u:=3*u+1; 18 (* affichage *) write( u[,k, ] =,u, ; ); 20 until u=1; (* conjecture de Syracuse: on repasse toujours par 1 *) end. Un exemple d éxécution correcte est u 0 = 13, u 1 = 40, u 2 = 20, u 3 = 10, u 4 = 5, u 5 = 1, u = 8, u 7 = 4, u 8 = 2, u 9 = 1. On conjecture que pour tout terme initial u 0 donné, il existe un rang N > 0 tel que u N = 1. Cette propriété n est pas démontrée, mais n a jamais été mise en défaut. Page 7/8

Ce qu il faut retenir....1 Techniques de programmation Voici un catalogue des notions fondamentales de programmation abordées cette année, avec les références aux TD correspondants : Variables et types Notion de variable, types char, integer (TD n 1 ), real (TD n 2 ), array (TD n 3 ), boolean (TD n 5 ). Opérations élémentaires Affectation :=, comparaison, opérateurs arithmétiques, y compris div (division entière) et mod (modulo). Notez que les fonctions mathématiques standard sont disponibles en Turbo-Pascal : exp, ln, sin, cos, tan... Structure des programmes Blocs de base : type, var,...end. Fonctions et procédures (TD n 4 et 5 ). Passage des arguments des fonctions par valeur et par référence (TD n ). Structures de contrôle Condition if...then...else (TD n 2 ), boucle for...to...do (TD n 1 ), répétition while...do (TD n 5 ) ou repeat...until (TD n 2 ). Procédures et fonctions de base Procédures élémentaires de dialogue : write[ln], read[ln]. Générateur de nombres aléatoires : randomize et random() (TD n 2 ). Algorithmique Calcul des termes d une suite (TD n 1, 3, 5 ). Calcul polynômial (TD n ). Résolution d équations (TD n 2 ). Probabilités (TD n 7 )..2 Ecriture des programmes Les quelques conseils suivants devraient vous faciliter l écriture des programmes : Pensez à l indentation : il s agit de mettre en retrait le texte de chaque bloc. La structure logique de votre programme est ainsi clairement lisible, ce qui facilite la mise au point de l algorithme. N oubliez pas de mettre des commentaires dans vos programmes. Ils sont délimités en Turbo Pascal par les symboles (*...*). Ils permettent de donner des explications sur des parties de programme de compréhension un peu difficile. Si vous ne savez pas comment démarrer un programme, commencez par réaliser calmement, à la main, la suite d opérations que devra effectuer ce programme. Il ne s agira plus ensuite que de procéder à la traduction en Turbo Pascal des opérations réalisées à la main. Page 8/8