Concours Informatique Luxembourgeois 2007 Epreuve de Sélection Préliminaire

Documents pareils
Examen Médian - 1 heure 30

Corrigé des TD 1 à 5

1. Structure d'un programme FORTRAN 95

Algorithmes et programmation en Pascal. Cours

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

Enseignement secondaire technique

Cours Informatique Master STEP

Algorithmique et programmation : les bases (VBA) Corrigé

Recherche dans un tableau

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

3 ème Partie : Vérification par tests

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

Cours d algorithmique pour la classe de 2nde

Plan du cours Cours théoriques. 29 septembre 2014

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

Programme Compte bancaire (code)

Programmation structurée et algorithmes de base en Pascal

Organigramme / Algorigramme Dossier élève 1 SI

0 si a=b. Si a^ et b^ sont deux éléments différents du même anneau, alors le résultat de

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

Listes de validation dans OpenOffice Calc

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Application 1- VBA : Test de comportements d'investissements

STAGE IREM 0- Premiers pas en Python

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

L ALGORITHMIQUE. Algorithme

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

OCL - Object Constraint Language

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

Algorithmique & programmation

Programmer en JAVA. par Tama

TRIGONOMETRIE Algorithme : mesure principale

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Visual Basic for Applications

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

Dans l'article précédent, vous avez appris

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

Rapport de Mini-Projet en ArcGIS Engine

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

Compilation (INF 564)

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

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

.NET - Classe de Log

4 Exemples de problèmes MapReduce incrémentaux


Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Préparation à l examen EFA en Macro

Analyse Combinatoire

Programmation linéaire

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

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

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

Programmation sous Delphi

NOTIONS DE PROBABILITÉS

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

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

as Architecture des Systèmes d Information

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

Gestion mémoire et Représentation intermédiaire

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)

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

TP JAVASCRIPT OMI4 TP5 SRC

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

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

TP 1 Introduction à Matlab Février 2009

Exercices de dénombrement

Algorithmique et Programmation, IMA

PROGRAMMATION EVENEMENTIELLE sur EXCEL

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

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

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

Nombre dérivé et tangente

FORMATION au VBA Pour EXCEL. Version 2007 & +

Langage Java. Classe de première SI

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

ALGORITHMIQUE ET PROGRAMMATION En C

Introduction à MATLAB R

distribution quelconque Signe 1 échantillon non Wilcoxon gaussienne distribution symétrique Student gaussienne position

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Utilitaires méconnus de StrataFrame

Vue d ensemble de Windows PowerShell

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Programmation avec Microsoft Visual Basic. NET. Réponses aux questions Solutions des exercices

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

EES : Engineering Equation Solver Fiche récapitulative - Marie-Sophie Cabot

Bases de Données Avancées PL/SQL

1 Complément sur la projection du nuage des individus

Corrigé des exercices sur les références

Création d installateurs pour Windows avec InnoSetup

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

Projet de programmation (IK3) : TP n 1 Correction

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Cours de Fortran 90 / 95

Solutions du chapitre 4

Investissement dans la construction de nouveaux bâtiments résidentiels (travaux mis en place) Méthodologie

Transcription:

Concours Informatique Luxembourgeois 2007 Epreuve de Sélection Préliminaire Solutions modèles en Pascal Problème I 3N + 1 10 points Suite intéressante, mais programme simple, pas de commentaires. program Suite; var n : integer; readln(n); write(n,' '); while n > 1 do if n mod 2 = 0 then n := n div 2 else n := 3 * n + 1; write(n,' '); readln end. Problème II La tirelire d'alexandre 20 points Ce problème est du domaine des arrangements, combinaisons et permutations. Ici il s'agit des arrangements sans répétition de 3 éléments choisis parmi 9. Le nombre d'arrangements sans répétition de p éléments choisis parmi n est le nombre défini par: A p n = n! ( n p)! Dans notre exemple n = 9 et p = 3.Nous obtenons donc: 3 9! 9! 9 8 7 6! A 9 = = = = 9 8 7 = 504 (9 3)! 6! 6! Notre programme doit par conséquent afficher 504 combinaisons différentes. Page 1 de 8

Voici le programme: program Tirelire; var i,j,k,num : integer; f : text; assign(f,'tirelire.txt'); rewrite(f); num := 0; for k := 1 to 9 do if (i <> j) and (j <> k) and (i <> k) then writeln(f,i,j,k); num := num + 1 writeln(f,num); close(f) end. Ce programme affiche effectivement 504 combinaisons. On essaye toutes les combinaisons possibles. Mais on n'affiche que celles qui ne contiennent pas de répétitions. Problème III Money 30 points Avant de programmer calculons la place mémoire nécessaire pour enregistrer les différents montants. L'énoncé stipule un maximum de 10 billets de chaque sorte. Le montant le plus grand vaut donc: 10 5 + 10 10 + 10 20 + 10 50 + 10 100 + 10 200 + 10 500 = 50 + 100 + 200 + 500 + 1000 + 2000 + 5000 = 8850 Ce montant en pas de cinq euros: 8850 = 1770 5 Nous avons donc besoin d'un tableau d'entiers de dimension maximale de 1770. Page 2 de 8

program Money; type ttab = array [1..1770] of integer; var f : text; A5,A10,A20,A50,A100,A200,A500 : integer; I,J,K,L,M,N,O,sum,t : integer; tab : ttab; procedure exchange (var a,b : integer); var t : integer; t := a; a := b; b := t La fonction intab vérifie si sum est contenu dans le tableau ta. function intab (sum : integer; ta :ttab; t : integer) : boolean; var temp : boolean; i : integer; temp := false; for i := 1 to t do if ta[i] = sum then temp := true; intab := temp Cette procédure trie le tableau ta par la méthode de sélection. procedure sort (var ta : ttab; t : integer); var i,j,min,posmin : integer; for i := 1 to t-1 do min := ta[i]; posmin := i; for j := i+1 to t do if ta[j] < min then min := ta[j]; posmin := j exchange(ta[i],ta[posmin]) end procedure output (ta : ttab; t : integer); var i : integer; ff : text; assign(ff,'money_out.txt'); rewrite(ff); for i := 1 to t do writeln(ff,ta[i]); close(ff) Page 3 de 8

assign(f,'money_in.txt'); reset(f); read(f,a5); read(f,a10); read(f,a20); read(f,a50); read(f,a100); read(f,a200); read(f,a500); close(f); t := 0; for I := 0 to A5 do for J := 0 to A10 do for K := 0 to A20 do for L := 0 to A50 do for M := 0 to A100 do for N := 0 to A200 do for O := 0 to A500 do sum := I*5 + J*10 + K*20 + L*50 + M*100 + N*200 + O*500; if sum > 0 then if not intab(sum,tab,t) then t := t + 1; tab[t] := sum end sort(tab,t); output(tab,t); writeln(t); readln end. Classement du tableau! Dans ces 7 répétitives imbriqués on construit tous les montants possibles. On ajoute le montant sum au tableau seulement s'il est différent de 0 et s'il n'est pas déjà contenu dans le tableau. Problème IV Sudoku 40 points program Sudoku; type tsudo = array [1..9,1..9] of integer; tliste = array [1..9,1..9] of string; var Sudo : tsudo; Liste : tliste; SNu : boolean; Page 4 de 8

procedure liresudo (var Sudo : tsudo); var i,j : integer; f : text; assign(f,'sudoin.txt'); reset(f); read(f,sudo[i,j]); readln(f) close(f) function ok(k,i,j : integer) : boolean; var Temp : boolean; lig,col,xbox,ybox : integer; Temp := true; { lignes } for col := 1 to 9 do if Sudo[i,col] = k then Temp := false; { colonnes } for lig := 1 to 9 do if Sudo[lig,j] = k then Temp := false; { sous-carrés 3x3 } if i <= 3 then xbox := 1 else if i <= 6 then xbox := 4 else xbox := 7; if j <= 3 then ybox := 1 else if j <= 6 then ybox := 4 else ybox := 7; for lig := xbox to xbox + 2 do for col := ybox to ybox + 2 do if Sudo[lig,col] = k then Temp := false; ok := temp Lecture du Sudoku dans le fichier externe 'SUDOIN.txt'. Pour des explications supplémentaires, consulter les solutions modèles de l'année passée! La fonction ok vérifie si le candidat k peut être placé dans la cellule [i,j]. La vérification se fait dans les lignes, les colonnes et les souscarrés 3x3. Page 5 de 8

procedure construireliste (var Liste : tliste); var i,j,k : integer; Liste[i,j] := ''; for k := 1 to 9 do if Sudo[i,j] <> 0 then Liste[i,j] := 'xxx' else if ok(k,i,j) then Liste[i,j] := Liste[i,j] + inttostr(k) procedure placersolitairenu (var Sudo : tsudo); var i,j : integer; SNu := false; Un solitaire nu est le seul candidat de la cellule. La liste des candidats ne contient donc qu'un seul candidat (length = 1). if length(liste[i,j]) = 1 then SNu := true; Sudo[i,j] := strtoint(liste[i,j]) end function Done : boolean; Done := not Snu Pour construire la liste des candidats, on vérifie tous les chiffres de 1 à 9 dans toutes les cases du Sudoku à l'aide de la fonction ok. Pour les chiffres déjà placés on met xxx dans la liste des candidats. procedure ecriresudo (Sudo : tsudo); var i,j : integer; f : text; assign(f,'sudoout.txt'); rewrite(f); write(f,sudo[i,j],' '); writeln(f) close(f) Ecriture du Sudoku dans le fichier externe 'SUDOOUT.txt'. Pour des explications supplémentaires, consulter les solutions modèles de l'année passée! liresudo(sudo); construireliste(liste); repeat placersolitairenu(sudo); construireliste(liste) until Done; ecriresudo(sudo); end. Page 6 de 8

Test des programmes Les programmes des élèves ont été testés avec les entrées suivantes: I. Suite (10 pts, 2 pts par test) 1. 11 (exemple donné) 2. 0 (hors limites) 3. 1 (nombre limite) 4. 12 (un nombre pair) 5. 1000000 (nombre maximal) II. Tirelire (20 pts) résultat correct = 20 pts III. Money (30 pts, 6 pts par test) 1. 1 0 1 0 0 0 0 (exemple donné) 2. 10 10 10 10 10 10 10 (nombres maximaux) 3. 0 0 0 0 0 0 0 (cas limite) 4. 5 5 5 5 5 5 5 (cas quelconque) 5. 0 0 0 1 0 0 0 (test simple) IV. Sudoku (40 pts, 8 pts par test) 1. 0 7 6 2 4 8 0 5 0 (exemple donné dans l'énoncé) 0 0 0 7 5 0 0 0 0 0 8 0 0 0 0 6 0 0 0 0 0 0 0 0 0 7 4 4 0 8 0 1 0 3 0 2 2 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 6 0 0 0 0 0 2 9 0 0 0 0 9 0 8 6 5 1 4 0 2. 0 7 6 2 4 8 0 5 0 (exemple impossible) 0 0 0 7 5 0 0 0 0 0 8 0 0 0 0 6 0 0 0 0 0 0 0 0 0 7 4 4 0 8 0 1 0 3 0 2 2 3 0 0 0 0 0 0 0 0 0 3 0 0 0 0 6 0 0 0 0 0 2 9 0 0 0 0 9 0 8 6 5 1 4 1 3. (Sudoku vide) Page 7 de 8

4. 9 7 0 3 0 4 0 6 5 (exemple permettant 0 2 0 5 0 6 0 8 0 de résoudre complè- tement le Sudoku) 0 0 5 8 0 2 9 0 0 0 0 2 0 4 0 3 0 0 0 0 8 7 0 5 1 0 0 0 6 0 2 0 8 0 3 0 8 4 0 1 0 9 0 2 7 5. 9 7 1 3 8 4 2 6 5 (Soduko complété, solution 3 2 4 5 1 6 7 8 9 du Sudoku précédant) 5 8 6 9 2 7 4 1 3 4 1 5 8 3 2 9 7 6 7 9 2 6 4 1 3 5 8 6 3 8 7 9 5 1 4 2 2 5 7 4 6 3 8 9 1 1 6 9 2 7 8 5 3 4 8 4 3 1 5 9 6 2 7 Page 8 de 8