Travaux Pratiques développement C++ S3. Le Carré Magique

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

LES REGLEMENTS AVEC SOCIEL.NET DERNIERE MISE A JOUR : le 14 juin 2010

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

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

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Bases de programmation. Cours 5. Structurer les données

CEGID - Business Suite Gestion commerciale

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

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

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Chap III : Les tableaux

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Gestion distribuée (par sockets) de banque en Java

Le langage C. Séance n 4

CORRECTION EXERCICES ALGORITHME 1

Correction TD algorithmique

TP, première séquence d exercices.

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

Prezi. Table des matières

TP : Gestion d une image au format PGM

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Cours Informatique Master STEP

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

I. Introduction aux fonctions : les fonctions standards

FIDÉICOMMIS. Être en mesure de :

Travaux Dirigés n 1 : chaînes de caractères

Programme Compte bancaire (code)

Cours de Systèmes d Exploitation

La Clé informatique. Formation Excel XP Aide-mémoire

GESTION DES FICHIERS C/UNIX

Comment réaliser une capture d écran dans Word. Alors comment ouvrir une page Word?

Le Service de Télétransmission par Internet des banques du Réseau OCÉOR GUIDE UTILISATEURS. Version V1.0

IMAGES NUMÉRIQUES MATRICIELLES EN SCILAB

a) b)

E.I.S : Un outil performant pour I'analyse du risque en Assurance

STAGE IREM 0- Premiers pas en Python

EXCEL TUTORIEL 2012/2013

Solutions du chapitre 4

Algorithmes récursifs

Algorithmique et Programmation, IMA

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

Calculs de probabilités avec la loi normale

Excel 2007 Niveau 3 Page 1

Création du projet : 1 sur 13

Les structures. Chapitre 3

1 Recherche en table par balayage

GUIDE D UTILISATION. Gestion de compte. à destination des entreprises (Employeurs et Organismes de Formation)

Fiche de version 12.16a - Septembre Gestion des Plans d actions personnalisés (PAP)... 6

La classification automatique de données quantitatives

PRISE EN MAIN D UN TABLEUR. Version OPEN OFFICE

RÉALISATION DE GRAPHIQUES AVEC OPENOFFICE.ORG 2.3

Correction des Travaux Pratiques Organiser son espace de travail

LES TOUT PREMIERS PAS

4. Les structures de données statiques

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

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

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

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

COURS AUTOCAD. Création et utilisation des blocs. b leclerc. ERP Jean Moulin METZ

Utilisation de l éditeur.

ACTIVITÉ DE PROGRAMMATION

Premiers Pas en Programmation Objet : les Classes et les Objets

Examen Médian - 1 heure 30

eevision 2 Guide utilisateur Mail : contact@naotic.fr Tél. +33 (0) Fax. +33 (0)

Encryptions, compression et partitionnement des données

Assistant d e tablissement de Tableaux

Rapport financier électronique

Par combien de zéros se termine N!?

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Notice d Utilisation du logiciel Finite Element Method Magnetics version 3.4 auteur: David Meeker

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.

Initiation à LabView : Les exemples d applications :

Service des ressources informatiques - Conseil Scolaire de District Catholique Centre-Sud Page 1

Utilisation de l outil lié à MBKSTR 9

Esterel The french touch star touch esterel advance

TP3 : Manipulation et implantation de systèmes de fichiers 1


Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

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

Modes Opératoires WinTrans Mai 13 ~ 1 ~

iil est désormais courant de trouver sur Internet un document

EXCEL PERFECTIONNEMENT SERVICE INFORMATIQUE. Version /11/05

IRL : Simulation distribuée pour les systèmes embarqués

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Initiation à Excel. Frédéric Gava (MCF)

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Statistiques descriptives sous Excel. Lætitia Perrier Bruslé Cours de statistique descriptive sous Excel

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

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

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Corrigé des exercices sur les références

TD3 - Facturation avec archivage automatisé

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Manuel d'installation de GESLAB Client Lourd

Initiation à l algorithmique

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

Exporter des écritures. Importer des écritures. Depuis EBP Comptabilité.

Planifier et contrôler un projet avec Microsoft Project

Transcription:

Le Carré Magique On appelle carré magique d ordre n un carré n x n dont les éléments sont des nombres entiers 1, 2,, n 2 disposés de telle sorte que la somme des n nombres situés sur une n( n 2 +1) ligne, sur une colonne ou sur une diagonale soit toujours égale à :. 2 n( n 2 + 1) Exemple : carré magique d ordre 5 (n=5 et = 65) 2 1 24 1 8 15 23 5 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 Dans tout ce qui suit, on considère n impair. Le but de ce développement est : De permettre à un utilisateur de saisir une matrice d entiers et de déterminer si celle-ci représente un carré magique. De générer des carrés magiques pout tout n impair < 100. De présenter ces deux fonctionnalités sous forme d un menu. Vous allez développer ces fonctionnalités de manière incrémentale : 1. La version 1 permet de renseigner et d afficher une matrice carrée d ordre n. 2. La version 2 permet de tester si une matrice carrée est magique ou non. 3. La version 3 permet de générer et afficher une matrice carrée d ordre n avec n impair et n < 100. 4. La version 4 permet de regrouper ces deux fonctionnalités dans un menu. 5. Qu en est-il des carrés magiques d ordre pair? Ils existent aussi et sont beaucoup plus difficiles à générer. Nous en verrons un exemple pour les matrices carrés d ordre 6! -1-

1. Travail à faire pour la Version 1 Travaux Pratiques développement C++ S3 Définir en C++ le type matrice carrée d entiers d ordre TAILLE (Carre) où TAILLE désigne la constante 100. Définir et implémenter en C++ les fonctions de prototype suivant : -- initialise une matrice carrée d entiers d ordre n à zéro procédure initialisercarré (sortie carré <Carré>, entrée n <Entier>); -- lit une matrice carrée d ordre n d entiers désignée par carré à partir -- de valeurs saisies au clavier procédure lirecarré (sortie carré <Carré>, entrée n <Entier>) ; -- affiche une matrice carrée d ordre n d entiers désignée par carré procédure écrirecarré (entrée carré <Carré>, entrée n <Entier>) ; Ecrire un programme de test permettant de saisir une valeur n, d initialiser la matrice carré et de l afficher. Ecrire un programme de test permettant de saisir une valeur n, de renseigner une matrice carré et de l afficher. L affichage permettra de visualiser une matrice et non une suite de valeurs. On supposera les valeurs de n renseignées correctement. Remarques : Il est conseillé d utiliser les variables nommées i et j pour gérer les parcours sur les tableaux et les matrices. La variable i représente l indice d un élément dans un tableau ou l indice d une ligne dans une matrice. La variable j représente l indice d une colonne dans une matrice. Matrice[i][j] représente alors l élément présent à la ligne i et à la colonne j. Vous utiliserez des boucles for imbriquées pour le traitement séquentiel des éléments dans une matrice. 2. Travail à faire pour la Version 2 Soit la donnée d une matrice carrée d ordre impair, il s agit maintenant d implémenter le test d un carré magique. Il s agit de calculer la somme des lignes, des colonnes, de la première et deuxième diagonale, de vérifier que tous ces nombres sont égales à la valeur escomptée. Plus formellement : estcarremagique( M ) = vraie ( i [0, n 1]: sommeligne( M, i) = valeur) ( j [0, n 1] : sommecolonne( M, j) = valeur) somme1erediagonale ( M ) = somme2emediagonale( M ) = valeur avec M de type int[ n][ n] 0 < n < 100 impair( n) valeur = n( n 2 2 + 1) -2-

Les résultats des calculs seront stockés dans un tableau de 2n + 2 valeurs et le test d égalité des valeurs se fera par l appel à la fonction élémentsegaux. Définir en C++ le type tableau de (TAILLE * 2 + 2) entiers (TabEntiers) où TAILLE désigne la constante 100. Définir et implémenter dans l ordre donné les fonctions de prototype suivant : -- détermine si l entier i est un nombre impair fonction estimpair (entrée i <Entier>) retourne <Booléen> ; -- calcule et renvoie la somme d une ligne i d une matrice carrée -- lève l exception "LIGNE INVALIDE" si i ne vérifie pas 0 i n-1 fonction sommeligne (entrée carré <Carré>, entrée n <Entier>, entrée i <Entier>) -- calcule et renvoie la somme d une colonne j d une matrice carrée -- lève l exception "COLONNE INVALIDE" si j ne vérifie pas 0 j n-1 fonction sommecolonne (entrée carré <Carré>, entrée n <Entier>, entrée j <Entier>) -- calcule et renvoie la somme de la première diagonale d une matrice carrée fonction somme1èrediagonale (entrée carré <Carré>, entrée n <Entier>) -- calcule et renvoie la somme de la deuxième diagonale d une matrice carrée fonction somme2èmediagonale (entrée carré <Carré>, entrée n <Entier>) -- détermine si tous les éléments d un tableau d entiers tab de n éléments -- sont égaux à la valeur val -- lève l exception "LONGUEUR INCORRECTE" si n ne vérifie pas 0 n NB_SOMMES fonction elémentsegaux (entrée tab <TabEntier>, entrée n <Entier>, entrée val <Entier>) retourne <Booléen> ; -- détermine si une matrice carrée d ordre n désignée par carré est magique -- lève l exception "ORDRE PAIR" si n est pair fonction estcarrémagique (entrée carré <Carré>, entrée n <Entier>) retourne <Booléen> ; Remarques : Pour faire les tests de vos fonctions au fur et à mesure, vous n allez pas saisir des matrices carrés mais utiliser un jeu de test que vous aurez construit en initialisant des variables de type Carre. Les traitements des fonctions sommexxxx se feront à l aide d une boucle simple for. Il est inutile de parcourir tous les éléments de la matrice. -3-

Exemple d un test : // déclaration d'une matrice carre 5 x 5 int ok5[5][5] = { 1, 24, 1, 8, 15, 23, 5,, 14, 16, 4, 6, 13, 20, 22, 10, 12, 19, 21, 3, 11, 18, 25, 2, 9 }; // recopie dans structure de données Carré Carre ok; for (int i =0; i < 5; i++) { for (int j =0; j < 5; j++) { ok[i][j] = ok5[i][j]; } } 3. Travail à faire pour la Version 3 Il nous reste à générer un carré magique pout tout n impair. Ce procédé «simple» a été ramené de Chine par monsieur De la Loubère, mathématicien et accessoirement ambassadeur de France au Siam. Ce procédé ne fonctionne que pour les matrices carrés d ordre impair, il en existe d autres plus complexes traitant les carrés magiques d ordre pair. Implémentez la procédure suivante et testez! // construit un carré magique d ordre n // lève l exception "ORDRE PAIR" si n est pair // lève l exception "ORDRE INCORRECT" si n ne vérifie pas 0 <= n <= TAILLE void construirecarremagique (Carre carre, const int n) throw (Chaine) ; Le procédé est le suivant : Initialisation : Placer le nombre 1 dans la case du milieu de la ligne supérieure. Traitement itératif : Puis écrire dans l ordre les nombres de 2 à n 2 en s élevant pour chacun diagonalement vers la droite et en observant les règles suivantes : 1. Lorsqu on arrive à la ligne horizontale supérieure, placer le nombre suivant dans la ligne horizontale inférieure (comme si cette dernière était transportée à la partie supérieure du carré). 2. Lorsqu on atteint la colonne de droite, placer le nombre suivant dans la première colonne de gauche (comme si cette dernière suivait immédiatement la dernière de droite). 3. Lorsqu on arrive sur une case occupée, placer le nombre suivant dans la case immédiatement au dessous de celle qui contient le dernier nombre inscrit. Ce traitement est simulé à la figure suivante pour une matrice carré d ordre 5. -4-

4. Travail à faire pour la Version 4 Ecrire un programme C++ utilisant les fonctions implémentées et qui à l aide d un menu permet d aiguiller sur les options suivantes : Que voulez-vous faire? 1. Saisir une matrice carree et determiner si elle correspond a un carre magique 2. Calculer et afficher le carre magique d une matrice carree d ordre n 3. Quitter l application Votre choix : _ 5. Les carrés magiques d ordre 6 Pour ce cas précis et en fonction des matrices de départ données ce n est pas plus difficile que pour les carrés d ordre impair Soit la donnée d un carré magique d ordre 3, on supposera qu il est renseigné correctement par une constante nommée Ordre3 de type matrice 3x3 d entiers. Ordre 3 8 1 6 3 5 4 9 2-5-

Soit la donnée d un carré particulier composé uniquement des chiffres 0, 1, 2 et 3 de telle sorte que toutes les sommes soient égales à 9. On supposera qu il est renseigné correctement par une constante nommée Medjig de type matrice 6x6 d entiers. Medjig 2 3 0 2 0 2 1 0 3 1 3 1 3 1 1 2 2 0 0 2 0 3 3 1 3 2 2 0 0 2 0 1 3 1 1 3 Le procédé pour calculer un carré magique d ordre 6 est alors le suivant : Multiplier toutes les cases du carré Medjig par 9. Divisez votre carré 6x6 obtenu en 9 carrés de 2x2. Vous obtenez alors un carrré 3x3 de carré 2x2, comme indiqué sur la figure. A chaque case d un carré 2x2 rajoutez l entier correspondant dans le carré magique d ordre 3. Et vous devriez obtenir ce carré magique d ordre 6 : Ordre 6 26 35 1 19 6 24 1 8 28 10 33 15 30 12 14 23 25 3 21 5 32 34 16 31 22 2 9 2 20 4 13 36 18 11 29 Ecrivez alors une petite procédure permettant d obtenir ce carré magique. -6-