Programmation Delphi : Algorithmes obligatoires



Documents pareils
Corrigé des TD 1 à 5

Deuxième partie : Cours de I ère. Applications Delphi

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Recherche dans un tableau

Algorithmes et programmation en Pascal. Cours

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

Arbres binaires de recherche

Examen Médian - 1 heure 30

Cours d initiation à la programmation en C++ Johann Cuenin

4. Les structures de données statiques

Compilation (INF 564)

Génie Logiciel avec Ada. 4 février 2013

Java Licence Professionnelle CISII,

Algorithmes récursifs

Cours Informatique Master STEP

LES TYPES DE DONNÉES DU LANGAGE PASCAL

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Initiation à l algorithmique

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)

Algorithmique & programmation

STAGE IREM 0- Premiers pas en Python

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

Programmer en JAVA. par Tama

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

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

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

Introduction à la programmation concurrente

Paginer les données côté serveur, mettre en cache côté client

1. Structure d'un programme FORTRAN 95

Programmation Objet - Cours II

Présentation du langage et premières fonctions

Projet de programmation (IK3) : TP n 1 Correction

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Chapitre 10. Les interfaces Comparable et Comparator 1

PROGRAMMATION EVENEMENTIELLE sur EXCEL

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Cours de Programmation 2

# 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>

Enseignement secondaire technique

Package Java.util Classe générique

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Découverte du tableur CellSheet

Programmation structurée et algorithmes de base en Pascal

Algorithmique et programmation : les bases (VBA) Corrigé

Cours d algorithmique pour la classe de 2nde

Gestion mémoire et Représentation intermédiaire

ALGORITHMIQUE ET PROGRAMMATION En C

CORRECTION EXERCICES ALGORITHME 1

Note de cours. Introduction à Excel 2007

Découverte de Python

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

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

1S Modèles de rédaction Enoncés

Introduction à MATLAB R

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

4 Exemples de problèmes MapReduce incrémentaux

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Application 1- VBA : Test de comportements d'investissements

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

Algorithmique, Structures de données et langage C

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

.NET - Classe de Log

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Nombre dérivé et tangente

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

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

Plateforme PAYZEN. Définition de Web-services

Programmation Orientée Objet Java

Programmation linéaire

Corrigé des exercices sur les références

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

Création d installateurs pour Windows avec InnoSetup

CHAPITRE V. Recherche et tri

Polynômes à plusieurs variables. Résultant

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Représentation géométrique d un nombre complexe

Algorithmique I. Algorithmique I p.1/??

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Quelques Algorithmes simples

Microsoft Excel. Tableur

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

as Architecture des Systèmes d Information

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

Structure fonctionnelle d un SGBD

Tableau et enregistrement en Pascal et Première version du jeu du puissance 4 I3 - Algorithmique et programmation

Le langage VHDL. Eduardo Sanchez EPFL

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

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Plan du cours Cours théoriques. 29 septembre 2014

Transcription:

Programmation Delphi : Algorithmes obligatoires I re B, 2012 13 Version 3.5 du 10 septembre 2012 Table des matières 1 Mathématiques élémentaires 2 1.1 Fonction puissance à exposant naturel..................... 2 1.1.1 Version itérative................................ 2 1.1.2 Version récursive................................ 2 1.2 Fonction puissance rapide à exposant naturel................. 2 1.3 Fonction factorielle................................ 3 1.3.1 Version itérative................................ 3 1.3.2 Version récursive................................ 3 1.4 Fonction pgcd................................... 3 1.4.1 Algorithme d Euclide par soustraction.................... 3 1.4.2 Algorithme d Euclide par division...................... 4 1.5 Nombre premier?.................................... 4 2 Polynômes 5 2.1 Addition......................................... 5 2.2 Multiplication...................................... 6 2.3 Dérivation........................................ 6 2.4 Intégration....................................... 7 2.5 Schéma de Horner................................... 7 3 Algorithmes de tri 8 3.1 Tri par sélection.................................... 8 3.1.1 Version récursive................................ 8 3.1.2 Version itérative................................ 8 3.2 Tri par insertion.................................... 9 3.2.1 Version récursive................................ 9 3.2.2 Version itérative................................ 9 3.3 Tri rapide (Quicksort)................................. 10 3.3.1 Version récursive................................ 10 3.3.2 Fonction auxiliaire division....................... 10 4 Algorithme de recherche 11 4.1 Recherche séquentielle................................. 11 4.2 Recherche dichotomique................................ 11 4.2.1 Version récursive................................ 11 4.2.2 Version itérative................................ 12 4.3 Fréquence d un élément dans une liste........................ 12 4.4 Minimum d une liste d entiers non vide........................ 12 4.5 Maximum d une liste d entiers non vide....................... 13

1 Mathématiques élémentaires 1.1 Fonction puissance à exposant naturel 1.1.1 Version itérative La fonction suivante calcule b e pour un exposant e naturel. Le cas particulier b = e = 0 n est pas traité correctement. 1 function puissance ( base : extended ; expo : integer ) : extended ; 3 p : extended ; 5 p :=1; 6 for i:=1 to expo do 7 p:=p base ; 8 puissance:=p 1.1.2 Version récursive La fonction suivante calcule b e pour un exposant e naturel. Le cas particulier b = e = 0 n est pas traité correctement. 1 function puissance ( base : extended ; expo : integer ) : extended ; 2 begin 3 i f expo=0 then 4 puissance :=1 5 else 6 puissance:=base puissance ( base, expo 1) 7 end ; 1.2 Fonction puissance rapide à exposant naturel 1 function puissrapid ( base : extended ; expo : integer ) : extended ; 2 begin 3 i f expo=0 then 4 puissrapid :=1 5 else i f expo mod 2 = 0 then 6 puissrapid:= puissrapid ( base base, expo div 2) 7 else 8 puissrapid:= base puissrapid ( base, expo 1) 2

1.3 Fonction factorielle Les fonctions suivantes calculent n! pour n naturel. 1.3.1 Version itérative 1 function factorielle ( n : integer ) : integer ; 3 fact : integer ; 5 fact :=1; 6 for i:=2 to n do 7 fact:=fact i ; 8 factorielle:= fact 1.3.2 Version récursive 1 function factorielle ( n : integer ) : integer ; 2 begin 3 i f n<2 then 4 factorielle :=1 5 else 6 factorielle:=n factorielle ( n 1) 7 end ; 1.4 Fonction pgcd Les fonctions suivantes déterminent le pgcd de deux nombres naturels non nuls. 1.4.1 Algorithme d Euclide par soustraction 1 function euclidediff ( a, b : integer ) : integer ; 2 begin 3 while a<>b do 4 i f a>b then 5 a:=a b 6 else 7 b:=b a ; 8 euclidediff:=a 3

1.4.2 Algorithme d Euclide par division 1 function euclidedivi ( a, b : integer ) : integer ; 2 var c : integer ; 4 while b>0 do begin 5 c:=a mod b ; 6 a:=b ; 7 b:=c 8 end ; 9 euclidedivi:=a 10 end ; 1.5 Nombre premier? 1 function primtest ( n : integer ) : boolean ; 2 var i, lim : integer ; 3 prim : boolean ; 5 i f n<2 then 6 prim:= false 7 else i f n=2 then 8 prim:= true 9 else i f n mod 2 = 0 then 10 prim:= false 11 else begin 12 i :=3; 13 prim:=true ; 14 lim:=round ( s q r t ( n ) ) ; 15 while ( i<=lim ) and prim do 16 i f n mod i = 0 then prim:= false 17 else i:=i+2 18 end ; 19 primtest:= prim 20 end ; 4

2 Polynômes Le type poly représente des polynômes à coefficients réels et de degré inférieur ou égal à 100. 1 type poly = record 2 c : array [ 0.. 1 0 0 ] of extended ; 3 d : integer 4 end ; Dans les algorithmes suivants, les polynômes sont passés par variables aux fonctions pour des raisons d efficacité : on évite ainsi de copier tout le contenu des polynômes dans la pile, mais on se limite à transmettre un pointeur vers l endroit où le polynôme original est stocké. En passant les polynômes par valeurs, on ne modifierait pas les effets produits par les fonctions en question, mais la quantité de mémoire occupée lors de l appel de ces fonctions serait plus élevée. 2.1 Addition 1 function somme ( var a, b : poly ) : poly ; 3 s : poly ; 5 i f a. d<=b. d then begin 6 s. d:=b. d ; 7 for i:=0 to a. d do 8 s. c [ i ]:= a. c [ i]+b. c [ i ] ; 9 for i:=a. d+1 to b. d do 10 s. c [ i ]:= b. c [ i ] 11 end 12 else begin 13 s. d:=a. d ; 14 for i:=0 to b. d do 15 s. c [ i ]:= a. c [ i]+b. c [ i ] ; 16 for i:=b. d+1 to a. d do 17 s. c [ i ]:= a. c [ i ] 18 end ; 19 while ( s. d>0) and ( s. c [ s. d ]=0) do 20 s. d:=s. d 1; 21 somme:=s 22 end ; 5

2.2 Multiplication 1 function produit ( var a, b : poly ) : poly ; 2 var i, j : integer ; 3 p : poly ; 5 i f ( ( a. d=0) and ( a. c [ 0 ] = 0 ) ) or ( ( b. d=0) and ( b. c [ 0 ] = 0 ) ) then begin 6 p. d :=0; 7 p. c [ 0 ] : = 0 8 end 9 else begin 10 p. d:=a. d+b. d ; 11 for i:=0 to p. d do 12 p. c [ i ] : = 0 ; 13 for i:=0 to a. d do 14 for j:=0 to b. d do 15 p. c [ i+j ]:= p. c [ i+j]+a. c [ i ] b. c [ j ] 16 end ; 17 produit:=p 18 end ; 2.3 Dérivation 1 function derivee ( var a : poly ) : poly ; 3 der : poly ; 5 for i:=1 to a. d do 6 der. c [ i 1]:=a. c [ i ] i ; 7 i f a. d=0 then begin 8 der. d :=0; 9 der. c [ 0 ] : = 0 10 end 11 else 12 der. d:=a. d 1; 13 derivee:= der 14 end ; 6

2.4 Intégration La procédure donne la primitive à terme constant 0. 1 function primitive ( var a : poly ) : poly ; 3 prim : poly ; 5 prim. c [ 0 ] : = 0 ; 6 for i:=0 to a. d do 7 prim. c [ i+1]:=a. c [ i ] / ( i +1); 8 i f ( a. d=0) and ( a. c [ 0 ] = 0 ) then 9 prim. d:=0 10 else 11 prim. d:=a. d+1; 12 primitive:= prim 13 end ; 2.5 Schéma de Horner 1 function horner ( var a : poly ; x : extended ) : extended ; 3 px : extended ; 5 px:=a. c [ a. d ] ; 6 for i:=a. d 1 downto 0 do 7 px:=px x+a. c [ i ] ; 8 horner:=px 7

3 Algorithmes de tri Les algorithmes de cette section réalisent un tri lexicographique. La procédure echange réalise l échange de deux éléments d une liste. 1 procedure echange ( var liste : TListBox ; i, j : integer ) ; 2 var aux : string ; 4 aux:=liste. Items [ i ] ; 5 liste. Items [ i ]:= liste. Items [ j ] ; 6 liste. Items [ j ]:= aux 7 end ; 3.1 Tri par sélection 3.1.1 Version récursive 1 procedure triselectionr ( var liste : TListBox ; debut : integer ) ; 2 var j, min : integer ; 4 min:=debut ; 5 for j:= debut+1 to liste. Items. Count 1 do 6 i f liste. Items [ j]<liste. Items [ min ] then 7 min:=j ; 8 echange ( liste, debut, min ) ; 9 i f debut<liste. Items. Count 2 then 10 triselectionr ( liste, debut+1) 11 end ; 3.1.2 Version itérative 1 procedure triselectioni ( var liste : TListBox ) ; 2 var i, j, min : integer ; 4 for i:=0 to liste. Items. Count 2 do begin 5 min:=i ; 6 for j:=i+1 to liste. Items. Count 1 do 7 i f liste. Items [ j]<liste. Items [ min ] then 8 min:=j ; 9 echange ( liste, i, min ) 10 end 11 end ; 8

3.2 Tri par insertion 3.2.1 Version récursive 1 procedure triinsertionr ( var liste : TListBox ; g, d : integer ) ; 2 var j : integer ; 3 candidat : string ; 4 termine : boolean ; 5 begin 6 i f g<d then begin 7 triinsertionr ( liste, g, d 1); 8 candidat:=liste. Items [ d ] ; 9 j:=d ; 10 termine:= false ; 11 while ( not termine ) and ( j>g ) do 12 i f liste. Items [ j 1] > candidat then begin 13 liste. Items [ j ]:= liste. Items [ j 1]; 14 j:=j 1 15 end 16 else termine:=true ; 17 i f j<d then 18 liste. Items [ j ]:= candidat 19 end 20 end ; 3.2.2 Version itérative 1 procedure triinsertioni ( var liste : TListBox ) ; 2 var i, j : integer ; 3 candidat : string ; 4 termine : boolean ; 5 begin 6 for i:=1 to liste. Items. Count 1 do begin 7 candidat:=liste. Items [ i ] ; 8 j:=i ; 9 termine:= false ; 10 while ( not termine ) and ( j>0) do 11 i f liste. Items [ j 1] > candidat then begin 12 liste. Items [ j ]:= liste. Items [ j 1]; 13 j:=j 1 14 end 15 else termine:=true ; 16 i f j<i then 17 liste. Items [ j ]:= candidat 18 end 1 9

3.3 Tri rapide (Quicksort) 3.3.1 Version récursive 1 procedure trirapide ( var liste : TListBox ; g, d : integer ) ; 4 i f g<d then begin 5 i:=division ( liste, g, d ) ; 6 trirapide ( liste, g, i 1); 7 trirapide ( liste, i+1,d ) 8 end 3.3.2 Fonction auxiliaire division 1 function division ( var liste : TListBox ; g, d : integer ) : integer ; 2 var i, j : integer ; 3 candidat : string ; 5 candidat:=liste. Items [ d ] ; 6 j:=d 1; 7 i:=g ; 8 while i<=j do 9 i f liste. Items [ i]<candidat then 10 i:=i+1 11 else i f liste. Items [ j]>candidat then 12 j:=j 1 13 else begin 14 echange ( liste, i, j ) ; 15 i:=i+1; 16 j:=j 1 17 end ; 18 echange ( liste, i, d ) ; 19 division:=i 20 end ; 10

4 Algorithme de recherche 4.1 Recherche séquentielle 1 function rechercheseq ( liste : TListBox ; cle : string ) : integer ; 3 trouve : boolean ; 5 i :=0; 6 trouve:=false ; 7 while ( not trouve ) and ( i<liste. Items. Count ) do 8 i f liste. Items [ i]=cle then 9 trouve:= true 10 else 11 i:=i+1; 12 i f trouve then 13 rechercheseq:=i 14 else 15 rechercheseq:= 1 16 end ; 4.2 Recherche dichotomique 4.2.1 Version récursive 1 function rechdichor ( liste : TListBox ; cle : string ; g, d : integer ) : integer ; 2 var milieu : integer ; 4 i f g>d then 5 rechdichor:= 1 6 else begin 7 milieu :=( g+d ) div 2 ; 8 i f liste. Items [ milieu]=cle then 9 rechdichor:= milieu 10 else i f cle<liste. Items [ milieu ] then 11 rechdichor:=rechdichor ( liste, cle, g, milieu 1) 12 else 13 rechdichor:=rechdichor ( liste, cle, milieu+1,d ) 14 end 15 end ; 11

4.2.2 Version itérative 1 function rechdichoi ( liste : TListBox ; cle : string ) : integer ; 2 var milieu, g, d : integer ; 4 g :=0; 5 d:=liste. Items. Count 1; 6 milieu :=( g+d ) div 2 ; 7 while ( cle<>liste. Items [ milieu ] ) and ( g<=d ) do begin 8 i f cle<liste. Items [ milieu ] then 9 d:= milieu 1 10 else 11 g:= milieu +1; 12 milieu :=( g+d ) div 2 13 end ; 14 i f cle=liste. Items [ milieu ] then 15 rechdichoi:= milieu 16 else 17 rechdichoi:= 1 18 end ; 4.3 Fréquence d un élément dans une liste 1 function frequence ( liste : TListBox ; cle : string ) : integer ; 2 var i, freq : integer ; 4 freq :=0; 5 for i:=0 to liste. Items. Count 1 do 6 i f liste. Items [ i]=cle then 7 freq:=freq+1; 8 frequence:= freq 4.4 Minimum d une liste d entiers non vide 1 function minimum ( liste : TListBox ) : integer ; 2 var i, mini : integer ; 4 mini:= StrToInt ( liste. Items [ 0 ] ) ; 5 for i:=1 to liste. Items. Count 1 do 6 i f StrToInt ( liste. Items [ i]) < mini then 7 mini:= StrToInt ( liste. Items [ i ] ) ; 8 minimum:= mini 12

4.5 Maximum d une liste d entiers non vide 1 function maximum ( liste : TListBox ) : integer ; 2 var i, maxi : integer ; 4 maxi:= StrToInt ( liste. Items [ 0 ] ) ; 5 for i:=1 to liste. Items. Count 1 do 6 i f StrToInt ( liste. Items [ i]) > maxi then 7 maxi:= StrToInt ( liste. Items [ i ] ) ; 8 maximum:= maxi 13