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



Documents pareils
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)

INITIATION A LA PROGRAMMATION

Le prototype de la fonction main()

Introduction au langage C

Compression de Données - Algorithme de Huffman Document de Conception

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Programmation système de commandes en C

Les structures de données. Rajae El Ouazzani

Algorithmique I. Algorithmique I p.1/??

Recherche dans un tableau

Programmation Classique en langage C

3IS - Système d'exploitation linux - Programmation système

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

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

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

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

I. Introduction aux fonctions : les fonctions standards

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

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

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

Le langage C. Séance n 4

Java Licence Professionnelle CISII,

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

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

Programmation système I Les entrées/sorties

Introduction à MATLAB R

Chap III : Les tableaux

Algorithmique et Programmation, IMA

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Initiation à LabView : Les exemples d applications :

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

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

BASES DE DONNEES TP POSTGRESQL

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Initiation à la programmation en Python

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

Initiation. àl algorithmique et à la programmation. en C

4. Groupement d objets

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

Rappels Entrées -Sorties

Archivage Messagerie Evolution pour usage HTML en utilisant Hypermail

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


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Programmation en langage C

Algorithmique, Structures de données et langage C

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

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

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

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Le système de gestion des fichiers, les entrées/sorties.

Conventions d écriture et outils de mise au point

Programmation impérative

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

V- Manipulations de nombres en binaire

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

Programmer en JAVA. par Tama

Cours Programmation Système

Les structures. Chapitre 3

Cours Informatique Master STEP

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

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

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

Programmation système en C/C++

OS Réseaux et Programmation Système - C5

Arguments d un programme

Corrigé des TD 1 à 5

Chapitre 1 : La gestion dynamique de la mémoire

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

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

Application 1- VBA : Test de comportements d'investissements

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

STAGE IREM 0- Premiers pas en Python

Cours 6 : Tubes anonymes et nommés

Architecture des ordinateurs

Programmation en C. École Nationale Supérieure de Techniques Avancées. Pierre-Alain Fouque et David Pointcheval

Les fichiers. Chapitre 4

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

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

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

Principes des langages de programmation INF 321. Eric Goubault

INFO-F-105 Language de programmation I Séance VI

Programmation C. Apprendre à développer des programmes simples dans le langage C

Introduction au Langage de Programmation C

Programme Compte bancaire (code)

Présentation du langage et premières fonctions

ARBRES BINAIRES DE RECHERCHE

URECA Initiation Matlab 2 Laurent Ott. Initiation Matlab 2

Cours de C. Allocation dynamique. Sébastien Paumier

Arbres binaires de recherche

Claude Delannoy. 3 e édition C++

1. Structure d'un programme FORTRAN 95

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

Les arbres binaires de recherche

Transcription:

2003-2004 Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES Maude Manouvrier La reproduction de ce document par tout moyen que ce soit est interdite conformément aux articles L111-1 et L122-4 du code de la propriété intellectuelle

TABLE DES MATIERES RECHERCHE DICHOTOMIQUE DANS UN TABLEAU D'ENTIERS...3 TRI PAR SELECTION ORDINAIRE D'UN TABLEAU D'ENTIERS...4 TRI A BULLE D'UN TABLEAU D'ENTIERS...5 TRI RAPIDE D'UN TABLEAU D'ENTIERS...6 UTILISATION DES FONCTIONS FREAD ET FWRITE...9 Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 2

RECHERCHE DICHOTOMIQUE DANS UN TABLEAU D'ENTIERS /* Programme de recherche dichotomique d'un élément dans une liste d'entiers */ int main() /* DECLARATION DES VARIABLES */ int itableau[]=1,2,3,5,6,8,9; /* Tableau TRIE d entiers */ int irecherche; /* Elément recherché */ int ipremier; /* Indice du premier élément du sous-tableau analysé */ int idernier; /* Indice du dernier élément du sous-tableau analysé */ int imilieu; /* Indice de l'élément du milieu du sous-tableau analysé */ int itrouve; /* Booléen indiquant si l'élément est trouvé */ int ifin=1; /* Indication de fin de saisie (0=fin) */ /* Tant que l'utilisateur souhaite faire des recherches */ while(ifin) printf("quel élément recherchez-vous? "); scanf("%d",&irecherche); /* Initialisation des variables*/ ipremier=0; idernier=6; itrouve=0; /* Tant qu'on a pas trouve l'élément recherché ou que le sous-tableau */ /* contient plus de 1 élément */ while((ipremier <= idernier)&&(itrouve==0)) /* Calcul de la position de l'élément du milieu */ imilieu=(ipremier+idernier)/2; /* Si l'élément du milieu est l'élément recherché */ if(itableau[imilieu]==irecherche) itrouve =1; /* Si la valeur recherchée est plus petite */ /* que la valeur du l'élément du milieu */ /* Alors on regarde le sous-tableau de gauche */ if(itableau[imilieu]>irecherche) idernier = imilieu -1; /* sinon on regarde le sous-tableau de droite*/ ipremier = imilieu +1; if(!itrouve) printf("cette valeur n'appartient pas à la liste\n"); printf("cette valeur appartient à la liste\n"); printf("voulez-vous continuer? (Taper 0 pour sortir du programme) : "); scanf("%d",&ifin); /* Si l'utilisateur ne saisit pas un nombre, on sort du programme */ if(!isalpha(ifin)) ifin=0; /* reprise itrouve=0; /* Fin du while */ /* Fin du main */ d'une recherche */ Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 3

TRI PAR SELECTION ORDINAIRE D'UN TABLEAU D'ENTIERS /* Programme qui trie les éléments d'une liste d'entiers */ /* (tri par sélection ordinaire) */ const int TAILLE=10; int main() /* DECLARATION DES VARIABLES */ int itableau[taille]; /* Liste d entiers de taille max TAILLE avec i<taille */ int iindiceelcour; /* L'indice de l'élément courant */ int imin; /* L'élément de valeur minimum dans la liste */ int icompteur; /* Un compteur pour la boucle */ int iechange; /* Une variable temporaire pour l'échange de deux éléments */ /* CORPS DU PROGRAMME */ /* Saisie des éléments de la liste */ for(iindiceelcour =0; iindiceelcour <TAILLE; iindiceelcour ++) /* Affichage d'un message demandant la valeur du ième entier */ /* avec i incrémenté à chaque passage de la boucle */ printf("saisissez la valeur de U%d\n", iindiceelcour); /* Saisie de la valeur du ième entier scanf("%d",&itableau[iindiceelcour]); /* Pour tous les éléments de la liste */ for(iindiceelcour=0; iindiceelcour<taille; iindiceelcour++) /* Initialisation de l'élément de valeur minimum */ imin = itableau[iindiceelcour]; /* Pour tous les éléments allant de l'élément courant */ /* au dernier élément de la liste */ for(icompteur=iindiceelcour+1; icompteur<taille; icompteur++) /* Si la valeur de l'élément courant n'est pas la valeur minimum */ if (imin > itableau[icompteur]) /* Alors, on échange l'élément courant avec celui de valeur minimum */ iechange = itableau[iindiceelcour]; itableau[iindiceelcour] = itableau[icompteur]; itableau[icompteur] = iechange; */ /* Mise à jour du minimum */ imin = itableau[iindiceelcour]; /*Affichage de la liste */ printf("la liste après tri est la suivante : \n"); for(iindiceelcour=0; iindiceelcour<(taille-1); iindiceelcour++) printf("%d, ",itableau[iindiceelcour]); printf("%d\n ",itableau[taille-1]); Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 4

TRI A BULLE D'UN TABLEAU D'ENTIERS /* Programme qui trie les éléments d'une liste d'entiers (tri à bulle) */ int main() /* DECLARATION DES VARIABLES */ int *itableau=null; /* Liste des entiers */ int inb_elements ; /* Nombre d'éléments dans la liste */ int icompteurdebut; /* Compteur pour la boucle allant du début à la fin */ int icompteurfin; /* Compteur pour la boucle allant de droite à gauche */ int iechange; /* Variable temporaire pour l'échange de deux éléments */ /* CORPS DU PROGRAMME */ /* Saisie des éléments de la liste */ printf("nombre d'éléments dans la liste :"); scanf("%d", &inb_elements); itableau=(int*)malloc(inb_elements*sizeof(int)); for(icompteurdebut=0; icompteurdebut<inb_elements; icompteurdebut++) /* Affichage d'un message demandant la valeur du ième entier */ /* avec i incrementé à chaque passage de la boucle */ printf("saisissez la valeur de U%d\n",iCompteurDebut); /* Saisie de la valeur du ième entier */ scanf("%d",&itableau[icompteurdebut]); /* Pour tous les éléments de la liste de gauche à droite */ for(icompteurdebut =0;iCompteurDebut <inb_elements;icompteurdebut ++) /* Pour tous les éléments à partir du dernier jusqu'au dernier élément trié */ for(icompteurfin =inb_elements-1; icompteurfin >icompteurdebut; icompteurfin --) /* Si l'élément courant est plus petit que l'élément précédent */ if (itableau[icompteurfin] < itableau[icompteurfin-1]) /* ou if (itableau[icompteurfin] > itableau[icompteurfin-1]) si on veut l'ordre décroissant */ /* Alors, on échange les éléments */ iechange = itableau[icompteurfin]; itableau[icompteurfin] = itableau[icompteurfin-1]; itableau[icompteurfin-1] = iechange; /*Affichage de la liste */ printf("la liste après tri est la suivante : \n"); for(icompteurdebut =0; icompteurdebut <inb_elements-1; icompteurdebut ++) printf("%d, ",itableau[icompteurdebut]); printf("%d\n ",itableau[inb_elements-1]); free(itableau); Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 5

TRI RAPIDE D'UN TABLEAU D'ENTIERS /* FICHIER CONTENANT DES FONCTIONS PERMETTANT DE */ /* TRIER RAPIDEMENT UN TABLEAU D'ENTIERS */ /* */ /* EXEMPLE : tableau = (3 7 1 4 2) */ /* on prend le premier élément comme pivot */ /* Inf reçoit les éléments inférieurs au pivot : Inf = (1 2) */ /* Sup reçoit les éléments supérieurs au pivot : Sup = (7 4) */ /* le tableau concaténation de Inf, 3 (le pivot) et Sup avec */ /* Inf et Sup triés de la même manière (appel récursif) */ /* */ /* Fonction d'affichage d'un tableau d'entiers : affiche */ /* Parametres : un tableau d'entiers : int* iptableau */ /* la taille du tableau : int itaille */ /* Creation : MM 13/09/2000 */ /* Derniere mise a jour : MM 13/09/2000 */ void affiche(int *iptableau, int itaille) int icompteur; /* Affichage du tableau */ printf("("); if(itaille == 0) printf(")\n"); if(itaille == 1) printf("%d)\n",*(iptableau)); for(icompteur=0;icompteur<itaille;icompteur++) if(icompteur < itaille -1) printf("%d ",*(iptableau+icompteur)); printf("%d)\n",*(iptableau+icompteur)); /* Fonction de TRI RAPIDE d'un tableau d'entier : tri_rapide */ /* Description : un pivot est choisi dans le tableau (le 1er élément) */ /* le tableau est découpé en deux sous-tableau Inf et Sup */ /* contenant respectivement les entiers inférieurs et */ /* les entiers supérieurs au pivot. */ /* le tableau renvoyé contient la concaténation de Inf */ /* trié (par appel récursif), du pivot et de Sup trié. */ /* */ /* Paramètre d'entrée : un tableau d'entiers : int *iptableau */ /* la taille de ce tableau : int itaille */ /* Retour : un tableau d'entiers (int *) */ /* Creation : MM 13/09/2000 */ /* Derniere mise a jour : 13/09/2000 */ int* tri_rapide(int * iptableau, int itaille) /* Pivot du tableau : 1er element */ int ipivot; /* Tableau contenant les éléments < au pivot */ int* ipinf; /* Nombre d'elements du tableau Inf */ int itailleinf=0; /* Tableau contenant les éléments > au pivot */ int* ipsup; /* Nombre d'elements du tableau Sup */ int itaillesup=0; /* Compteur */ int icompteur; Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 6

/* Si le tableau contient moins de 2 éléments, on ne fait rien */ if (itaille < 2) return iptableau; ipivot=*iptableau; /* Ecriture des tableaux Inf et Sup */ /* Chacun contiendra au maximum itaille elements -1 */ ipinf=(int*)malloc(sizeof(int)*(itaille-1)); ipsup=(int*)malloc(sizeof(int)*(itaille-1)); for(icompteur=1;icompteur<itaille;icompteur++) if(*(iptableau+icompteur)> ipivot) *(ipsup+itaillesup)=*(iptableau+icompteur); itaillesup++; *(ipinf+itailleinf)=*(iptableau+icompteur); itailleinf++; /* Fin du for */ /* Reecriture du tableau à partir de Inf et Sup triés et du pivot */ ipinf=tri_rapide(ipinf,itailleinf); ipsup=tri_rapide(ipsup,itaillesup); itaille=0; /* Insertion des elements de Inf dans le tableau final */ for(icompteur=0;icompteur<itailleinf;icompteur++) *(iptableau+icompteur)=*(ipinf+icompteur); itaille++; /* Insertion du pivot dans le tableau final */ *(iptableau+icompteur)=ipivot; itaille++; /* Insertion des elements de Sup dans le tableau final */ for(icompteur=0;icompteur<itaillesup;icompteur++) *(iptableau+itaille)=*(ipsup+icompteur); itaille++; free(ipinf); free(ipsup); return iptableau; Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 7

/* PROGRAMME PRINCIPAL avec passage en paramètre d'un fichier */ /* contenant en premier la taille d'un tableau puis les entiers du */ /* tableaux séparés par des espaces */ /* PAR EXEMPLE si le fichier contient la ligne : 9 10 5 12 2 9 1 3 4 7 */ /* Le resultat sera : */ /* > a.out > Le tableau avant le tri est : (10 5 12 2 9 1 3 4 7) > Le tableau après le tri est : (1 2 3 4 5 7 9 10 12) */ int main(int argc, char* argv[]) /* Fichier contenant le tableau */ FILE *FTableau; /* Taille du tableau */ int itaille; /* Tableau d'entiers */ int *iptableau; /* Compteur */ int icompteur; /* Si le nom du fichier n'est pas passé en paramètre, on sort */ if(argc!=2) return 0; if((ftableau=fopen(argv[1],"r"))==null) printf("erreur Ouverture du fichier\n"); /* Lecture de la taille du tableau */ fscanf(ftableau,"%d",&itaille); /* Allocation mémoire du tableau d'entiers */ iptableau=(int*)malloc(itaille*sizeof(int)); /* Ecriture du tableau à partir des données du fichier */ for(icompteur=0;icompteur<itaille;icompteur++) fscanf(ftableau,"%d",(iptableau+icompteur)); printf("le tableau avant le tri est : "); affiche(iptableau,itaille); iptableau=tri_rapide(iptableau,itaille); printf("le tableau après le tri est : "); affiche(iptableau,itaille); free(iptableau); fclose(ftableau); Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 8

UTILISATION DES FONCTIONS FREAD ET FWRITE /* PROGRAMME EXEMPLE D'UTILISATION DES FONCTIONS */ /* fread et fwrite */ /* */ /* Creation : MM 13/09/2000 */ #include<string.h> int main(int argc, char* argv[]) /* Descripteur de fichier */ FILE *Fichier; /* Chaîne de caractères utilisée pour afficher le contenu du fichier */ char *cpchaine; /* le programme prend en paramètres deux arguments, le nom du fichier et */ /* une chaîne de caractères sans espace */ if(argc <3) printf("usage : programme nom_fichier chaines_de_caracteres_sans_espace\n"); if((fichier=fopen(argv[1],"w+"))==null) printf("erreur ouverture fichier\n"); /* Ecriture de la chaine de cara passees en parametres dans le fichier */ fwrite(argv[2],strlen(argv[2])+1,1,fichier); /* Positionnement au debut du fichier */ fseek(fichier,seek_set,0); cpchaine=(char*)malloc(strlen(argv[2]+1)); /* Lecture et affichage du contenu du fichier */ if(fread(cpchaine,strlen(argv[2])+1,1,fichier)>0) printf("contenu du fichier : %s\n",cpchaine); fclose(fichier); Université Paris-Dauphine - Maude Manouvrier - Reproduction interdite 9