2] Proposition de correction

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

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

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)

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

Chap III : Les tableaux

Recherche dans un tableau

Le langage C. Séance n 4

Créer un publipostage avec Word 2007.

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Les chaînes de caractères

Chapitre 2. Classes et objets

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

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

LibreOffice Calc : introduction aux tableaux croisés dynamiques

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

6. Les différents types de démonstrations

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

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

Les structures. Chapitre 3

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Généralités sur le Langage Java et éléments syntaxiques.

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

1 - Clients 2 - Devis 3 - Commandes 4 - Livraisons 5 - Factures 6 - Avoirs 7 - Modèles

INITIATION A LA PROGRAMMATION

Cours Informatique Master STEP

Java Licence Professionnelle CISII,

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Programmation Objet - Cours II

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

1.6- Génération de nombres aléatoires

INFORM :: DEMARRAGE RAPIDE A service by KIS

GOL-502 Industrie de services. Travaux Pratique / Devoir #7

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

Algorithmique et Programmation, IMA

Aide à l utilisation

Chapitre 2 Devine mon nombre!

Dossier Logique câblée pneumatique

Introduction au langage C

Rappels Entrées -Sorties

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

Programmation en langage C

RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

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

NOTIONS DE PROBABILITÉS

Manuel d'utilisation d'apimail V3

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours 1 : Qu est-ce que la programmation?

1. Contexte général page Le compte auprès de la BCGE...page La procuration 2.2 Les accès e-banking 2.3 Le bon de retrait 2.

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

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

Reaper : utilisations avancées

MDI Chèque de Allégroupe Réclamation

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

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

Manuel Gestion du crédit

Réseau : Interconnexion de réseaux, routage et application de règles de filtrage.

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

I. Introduction aux fonctions : les fonctions standards

COURS WINDEV NUMERO 3

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

COMMUNICATION PC/MINITEL

Propagation sur réseau statique et dynamique

Beyond 20/20 Browser - Français. Version 7.0, SP4

as Architecture des Systèmes d Information

Stockage du fichier dans une table mysql:

LES DÉTERMINANTS DE MATRICES

Installation et Réinstallation de Windows XP

Éditeur Elsevier Langue(s) Multilingue

Création d'un questionnaire (sondage)

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

Les processus légers : threads. Système L3, /31

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

Plan du cours. Historique du langage Nouveautés de Java 7

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

La programmation des PIC en C. Les fonctions, les interruptions.

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

LA RÉGULARISATION DES CHARGES EN FIN D EXERCICE

Classer et partager ses photographies numériques

BTS IRIS Cours et Travaux Pratiques. Programmation C. A. Lebret, TSIRIS, Lycée Diderot, 1995/06. en conformité avec le référentiel du BTS IRIS

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Utiliser Access ou Excel pour gérer vos données

Courriel Archiver Version 2: Sommaire. Archiver : Sommaire. Comment ça marche Support Technique Préférences. Recherche

Programmation Classique en langage C

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Le modèle de données

Cours 14 Les fichiers

Gestion des utilisateurs : Active Directory

TP Service HTTP Serveur Apache Linux Debian

LES FICHES Domaines. Domaine D1. Travailler dans un environnement numérique

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

Les diagrammes de modélisation

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Raison sociale, but et siège de l'association

Transcription:

Proposition de Correction TP4 PEROUMALNAÏK M. mail: mperouma@univ-ag.fr web : http://grimaag.univ-ag.fr/~mperouma/ Seconde partie : Pointeurs I] Exercice 6 : Conception : 1] Enoncé A partir du programme principal suivant (voir énoncé ): Ecrivez la fonction int calculelongueur(char* texte) qui doit calculer la longueur de la chaîne passée en paramètre d'entrée. Ce calcul devra se faire à l'aide du pointeur de char «p_lettre» qui se déplacera sur la chaîne en recherchant le caractère de fin de chaîne. 2] Proposition de correction a) Explications Avant toute chose, regardons de plus près l'entête proposée pour la fonction calculelongueur int calculelongueur(char texte[taille]) Selon moi, cette façon d'écrire n'est pas propre, donc, tout au long de ce corrigé, quand il s'agira de travailler sur un tableau, quelque sera son type, j'utiliserai un pointeur vers les données de ce tableau. Je remplaçe donc par l'écriture suivante (équivalente mais à mon sens plus élégante et plus proche de la vérité) int calculelongueur(char* texte)

Dans cet exercice, la chaine de caractères est passée en paramètre de la fonction et nous devons utiliser le pointeur p_lettre pour circuler sur cette chaine. Plus généralement, un pointeur contient une adresse mémoire d'une zone d'un certain type, et incrémenter le pointeur revient à adresser la zone mémoire suivante. Considérons l'exemple suivant : #include<stdio.h> main() char chaine[6]='s','a','l','u','t','\0'; int i; for(i=0;i<6;i++) printf(«%c»,*(chaine+i)); printf(«\n»); Ce code permet d'afficher successivement les cases du tableau de caractère chaine en utilisant uniquement le fait que chaine soit un tableau : une suite de zones mémoire de même type (donc de même taille) juxtaposées. On passe ainsi d'une case à l'autre en incrémentant le pointeur sur ces cases. Nous venons donc de voir comment, à l'aide d'un pointeur, on peut parcourir les cases d'un tableau donné : nous pouvons donc accéder au contenu de chacune de ces cases. Sachant que le caractère de fin de chaîne utilisé par la fonction scanf en utilisant le type «%s» pour la saisie est '\0', nous pouvons déterminer la longueur d'une chaine donnée en la parcourant : tant que nous n'avons pas rencontré ce caractère, la chaîne n'est pas terminée. Nous avons désormais tous les éléments pour remplir le corps de la fonction calculelongueur

b) Code Il y avait plusieurs façons de faire, tant au niveau de la boucle utilisée (for, while, do... while) qu'au niveau de l'utilisation de cette boucle. Dans tous les cas, dans le corps de la fonction, on devait : initialiser le pointeur p_lettre à texte (<=> &texte[0]) utiliser une variable pour déterminer le nombre d'itérations de la boucle avoir comme condition d'arrêt la rencontre avec le caractère '\0' renvoyer le nombre trouvé Voir le fichier TP4_exo4.c => (http://grimaag.univ-ag.fr/~mperouma/telechargements/tp4_exo4.c )

II] Exercice 7 : Conception 1] Enoncé A partir du programme de tri par sélection réalisé au cours des séances précédentes, écrivez un programme de tri dit «non destructif». Il s'agit d'utiliser un tableau de pointeurs de même taille que le tableau à trier, dont les cases pointent vers chacune des cases de ce tableau. Dans un premier temps, modifiez le programme de départ de façon à disposer d'un tel tableau de pointeurs. Ensuite, réalisez le tri par sélection sur le tableau de pointeurs : lorsqu'une permutation sera nécessaire entre deux cases du tableau d'entiers, on prendra soin de ne pas modifier ce tableau mais de permuter les éléments du tableau de pointeurs pointant sur les cases concernées. Ainsi, une fois le tri réalisé, le tableau d'origine n'est pas modifié (d'ou le terme de «non destructif»), mais le tableau de pointeurs est lui trié correctement. 2] Proposition de correction a) Explications Pour réaliser cet exercice, nous allons nous servir comme base de la correction de l'exercice n 1 du TP3 (http://grimaag.univ-ag.fr/~mperouma/telechargements/tp3_exo1.c ) Cependant, le code de la correction étant un peu complexe, nous allons pour les explications utiliser le code suivant (remis par l'un de vos collègues, corrigé et complété):

N Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include<stdio.h> #define TAILLE 10 main() int tab[taille]; int i,imin,j,temp=0; //Initialiser le tableau printf("saisissez %d entiers :\n",taille); for(i=0;i<taille;i++) printf("[%d]? :",i); scanf("%d",&tab[i]); //Premier affichage for(i=0;i<taille;i++) printf("%d ",tab[i]); //Tri par sélection for(j=0;j<taille 1;j++) imin=j; for(i=j;i<taille;i++) if(tab[i]<tab[imin]) imin=i; temp=tab[imin]; tab[imin]=tab[j]; tab[j]=temp; //Affichage après tri for (i=0;i<taille;i++) printf("%d ",tab[i]);

Tout d'abord, nous allons modifier le programme pour pouvoir avoir le tableau de pointeurs : il faut déclarer ce tableau puis l'initialiser avec les adresses du tableau d'entiers : Déclaration : Insérer à la ligne 6 : int* p_tab[taille]; Initialisation : Insérer à la ligne 18 : for(i=0;i<taille;i++) p_tab[i]=&tab[i]; Ensuite, au lieu de manipuler le tableau d'entier, nous allons effectuer nos manipulations sur le tableau de pointeurs : 1) changer le type de la variable temp pour pouvoir permuter les pointeurs 2) remplacer les références à tab[i] par *(p_tab[i]) sauf pour la permutation, puisqu'ici on modifie l'ordre des pointeurs : remplacer tab[x] par ptab[x]. Il ne reste plus qu'a afficher les tableaux de fin, avec deux boucles, une première pour afficher le tableau d'origine (qui n'a pas été modifié) et une seconde pour afficher les données suivant l'ordre du tableau de pointeur. Affichage : Insérer à la ligne 37 printf(" Tableau originel :\n "); Et à la ligne 40 printf(" Tableau classé :\n "); for (i=0;i<taille;i++) printf("%d ",*(ptab[i])); b) Code Voir le fichier TP4_exo5.c => (http://grimaag.univ-ag.fr/~mperouma/telechargements/tp4_exo5.c )

III] Le mot de la fin Merci à tous pour cette année passée ensemble, désolé encore du retard pris pour les corrections. N'oubliez pas que je reste à votre disposition jusqu'à la veille des examens, n'héstez pas à m'envoyer vos mails ou à passer au bureau. Bon courage pour la suite, Cordialement, PEROUMALNAÏK M. mail : mperouma@univ-ag.fr