Travaux Pratiques Initiation à la programmation en C

Documents pareils
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

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


Le prototype de la fonction main()

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

Les structures. Chapitre 3

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

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

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

Algorithmique et Programmation, IMA

Les chaînes de caractères

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)

Cours d Algorithmique et de Langage C v 3.0

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

Le langage C. Séance n 4

Rappels Entrées -Sorties

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

Projet Matlab : un logiciel de cryptage

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Conversion d un entier. Méthode par soustraction

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

Initiation à la programmation en Python

Informatique Générale

TP : Gestion d une image au format PGM

Conventions d écriture et outils de mise au point

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

UE Programmation Impérative Licence 2ème Année

Cours d Informatique

Programmation système I Les entrées/sorties

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

Solutions du chapitre 4

Logiciel de Base. I. Représentation des nombres

Les Réseaux sans fils : IEEE F. Nolot

STAGE IREM 0- Premiers pas en Python

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Algorithmique, Structures de données et langage C

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

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

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

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

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

I. Introduction aux fonctions : les fonctions standards

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

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

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

TS 35 Numériser. Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S

TP 1. Prise en main du langage Python

Chap III : Les tableaux

Algorithme. Table des matières

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

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

Introduction à l algorithmique et à la programmation M1102 CM n 3

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Introduction au langage C

Une version javascript sera disponible directement dans le cours prochainement.

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Représentation d un entier en base b

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Codage d information. Codage d information : -Définition-

Note de cours. Introduction à Excel 2007

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

1 Introduction au codage

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

La sécurité dans un réseau Wi-Fi

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

INITIATION A LA PROGRAMMATION

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

Jeux de caracte res et encodage (par Michel Michaud 2014)

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

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

Introduction à l algorithmique et à la programmation (Info 2)

ALGORITHMIQUE ET PROGRAMMATION En C

Programmation système de commandes en C

Claude Delannoy. 3 e édition C++

Analyse de sécurité de logiciels système par typage statique

Les fichiers. Chapitre 4

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Information. BASES LITTERAIRES Etre capable de répondre à une question du type «la valeur trouvée respecte t-elle le cahier des charges?

AGASC / BUREAU INFORMATION JEUNESSE Saint Laurent du Var Tel : bij@agasc.fr Word: Les tableaux.

Cours 1 : Qu est-ce que la programmation?

Le langage C. Introduction, guide de reference

Initiation au binaire

1. Utilisation du logiciel Keepass

PIXMA MG5500. series. Guide d'installation

Université de La Rochelle. Réseaux TD n 6

I- Définitions des signaux.

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.

Créer une base de données

Chapitre 2. Classes et objets

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Transcription:

Université de Savoie Module ETRS-505 Travaux Pratiques Initiation à la programmation en C Sylvain MONTAGNY sylvain.montagny@univ-savoie.fr Bâtiment chablais, bureau 13 04 79 75 86 86 Liste des exercices TP1 : Conversion binaire, solution d équation du second degré, tri à bulle, double cryptage d une chaine de caractère. TP2 : Tableau et nombre divisibles, fonctions statistiques, trame Ethernet, occurrence d un mot, copie de motif. TP3 : Jeu du morpion Retrouver tous les documents de Cours/TD/TP sur le site www.master-electronique.com

Université de Savoie Module ETRS-505 Introduction au langage C TP 1 Exercice 1 : Conversion binaire Ecrire un programme qui calcul et affiche la représentation binaire d un nombre entier positif. La représentation doit se lire naturellement de gauche à droite et doit avoir une représentation sur 16 bits. Exercice 2 : Solution d'une équation polynomiale du second degré Ecrire un programme qui calcule les solutions d'une équation du type ax 2 +bx+c=0. Tous les cas possibles (sauf complexe) doivent être traités. Rappel sur les tableaux : Un tableau (unidimensionnel) A est une variable structurée formée d'un nombre entier N de variables simples du même type, qui sont appelées les composantes du tableau. Le nombre de composantes N est alors la dimension du tableau. En faisant le rapprochement avec les mathématiques, on dit encore que "A est un vecteur de dimension N" La déclaration d un tableau (exemple) : int JOURS[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // définit un tableau du type int de dimension 12. Les 12 composantes sont initialisées par les valeurs respectives 31, 28, 31,..., 31. Accéder à une valeur du tableau (exemple) : On peut accéder à la première composante du tableau par JOURS[0], à la deuxième composante par JOURS[1],..., à la dernière composante par JOURS[11]. Affectation des valeurs du tableau (exemple) : On affecte les valeurs du tableau de la facon suivante : JOURS[0]=10 ; // affectation de la composante 0 par 10

JOURS[11]=120 ; // affectation de la composante 11 par 120 Exercice 3 : Tri à bulle Ecrire un programme qui trie un tableau à l'aide de l'algorithme dit du "tri à bulle" qui est le suivant : Répéter Parcourir tous les éléments du tableau Si la valeur du i ème élément du tableau est plus grande que celle du suivant, réaliser une permutation (c'est-à-dire affecter au i ème élément la valeur du suivant et réciproquement) Tant que des permutations sont effectuées Le tableau sera initialisé avec des valeurs constantes que vous choisirez pour illustrer votre tri. Vous afficherez donc le tableau avant et après. Exercice 4 : Double cryptage d'une chaîne de caractères Le but de cet exercice est d'effectuer un double cryptage sur une chaîne de caractères. Seules les lettres en minuscule de 'a' à 'z' seront encodées. Les majuscules, les caractères accentués et les autres symboles ne sont pas pris en compte. 1. Codage «a vaut k»: Ecrire une fonction qui retourne la version cryptée d'un caractère donné en paramètre selon la formule "a vaut k" : 'a' devient la lettre 'k', 'b' devient la lettre 'l',... 'y' devient la lettre 'i' 'z' devient la lettre 'j'. Les autres caractères ne sont pas modifiés. 2. Voyelle en chiffre Ecrire une fonction qui transforme les voyelles en chiffre. La fonction doit retourner le caractère : '0' pour 'a', '1' pour 'e',..., '5' pour 'y'. Les autres caractères ne sont pas modifiés. 3. Codage complet Ecrire une fonction qui transforme et crypte entièrement une chaîne de caractères (donnée en paramètre) en utilisant les fonctions précédentes avec l'ordre suivant : cryptage selon la formule "a vaut k" puis codage des voyelles.

Université de Savoie Module ETRS-505 Introduction au langage C TP 2 Exercice 1 : Tableaux et nombres divisibles 1. Condition de divisibilité Ecrire une fonction qui retourne vrai (utiliser les valeurs entières 0 et 1) si un nombre entier donné en paramètre vérifie les conditions de divisibilité suivantes : soit le nombre est impair et est divisible par 3, soit le nombre est divisible 5. 2. Remplissage conditionnel d un tableau Ecrire la fonction principale du programme (main) dont le but est de remplir un tableau statique selon le principe suivant : tout nombre compris entre 1 et 2000 qui vérifie les conditions de divisibilité est ajouté dans le tableau. Vous afficherez ensuite l ensemble de ces nombres. Exercice 2 : Fonctions statistiques 1. Nombre de voyelles Ecrire une fonction qui calcule et retourne le nombre de voyelles contenues dans une chaîne de caractères donnée en paramètre. On considère que la chaine de caractère fournie en paramètre ne possède que des lettres en minuscule. 2. Nombre de consonne Ecrire une fonction qui calcule et retourne le nombre de consonnes contenues dans une chaîne de caractères donnée en paramètre. On considère que la chaine de caractère fournie en paramètre ne possède que des lettres en minuscule. 3. Nombre de mots Ecrire une fonction qui calcule et retourne le nombre de mots contenus dans une chaîne de caractères donnée en paramètre.

Exercice 3 : Trame Ethernet Le but de cet exercice est d analyser et d extraire les informations contenues dans les champs d en-tête d une trame Ethernet dont le format est donné ci-dessous : Octets de synchronisation (7 octets) valeur constante égale à 7 fois l octet 10101010 (représentation binaire) Octet de début de trame (1 octet) Valeur constante égale à l octet 10101011 (représentation binaire) @Ethernet destination (6 octets) @Ethernet source (6 octets) Longueur ou protocole (2 octets) On ne s occupera pas du champ de données, ni du CRC contenus dans le reste de la trame. Pour cela, deux exemples de trame Ethernet sont mis à disposition pour tester les fonctions à programmer. Ces trames sont fournies sous la forme d un tableau d octets (tableau de type char, cf annexe). 1. Test de la synchronisation Ecrire la fonction int testsynchrodebut(char * trame) qui teste si les 8 premiers octets sont valides (si aucun bit n a été modifié par rapport aux valeurs attendues). La fonction retournera 1 si le test est positif ; 0 sinon. 2. Affichage de l adresse MAC Ecrire la fonction void afficheraddrmac(char * trame) qui affiche en hexadécimal l adresse MAC selon la notation habituelle (exemple : 00:0c:12:1A:37:DE). 3. Affichage du protocole : Ecrire la fonction void afficherprotocole(char * trame) qui affiche en hexadécimal la valeur du protocole. 4. Affichage de la trame Ecrire la fonction void affichertrame(char * trame) qui utilise les fonctions précédentes. Elle doit indiquer si la trame est valide et, le cas échéant, afficher les informations contenues dans l en-tête. Exercice 4 : Occurrence d un mot Ecrire une fonction occurrences qui compte le nombre d apparitions d un mot (occurrences) dans une phrase. Cette fonction doit avoir le prototype suivant : int occurrences(char * texte, char * mot); Exemple d utilisation de cette fonction qui doit produire la phrase suivante en sortie : la phrase "cheval chien chien cheval chien" contient 3 fois le mot "chien" On ne tiendra pas compte des mots contenus dans d autre mots (exemple : chienne) 1. 2. int main(void) 3. { 4. int n; 5. char mot[] = "chien"; 6. char phrase[] = "cheval chien chien cheval chien";

7. 8. n = occurrences(phrase, mot); 9. printf("la phrase \"%s\" contient %d fois le mot \"%s\"\n", phrase, n, mot); 10. return 0; 11. } Exercice 5 : Copie de motif Ecrire une fonction qui copie et reproduit une chaîne de caractère (motif) dans une autre chaîne de caractère autant de fois que possible. Les motifs recopiés seront espacés d un nombre fixe de caractères donnés en paramètre. Exemple : copie du motif "abc" dans la chaîne "0123456789012345678901" avec 2 espaces entre chaque copie du motif. Avant copie du motif : 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 \0 2 caractères entre chaque motif Après copie du motif : a b c 3 4 a b c 8 9 a b c 3 4 a b c 8 9 a b \0 motif motif L espace entre deux reproductions du motif doit être supérieur ou égal à 1 caractère (nombre donné en paramètre). De plus, en fonction de la place disponible, le motif peut ne pas être copié entièrement (voir exemple). La fonction doit avoir pour prototype : void copiemotif(char * texte, char * motif, int espaces); Exemple d utilisation de la fonction pour l exemple donné ci-dessus : 1. int main(void) 2. { 3. char texte[] = "0123456789012345678901"; 4. 5. copiemotif(texte, "abc", 2); 6. printf("%s\n", texte); 7. return 0; 8. }

Annexe /* ------------------------------------------------------------------ Fichier : exemple.c Creation : 01/11/04 Auteur(s) : Yann Laurillau Objectif : Analyse de trame ------------------------------------------------------------------ */ /* --- Includes ----------------------------------------------------- */ #include <stdio.h> /* ------------------------------------------------------------------ Nom : affichertrame ------------------------------------------------------------------ */ void affichertrame(char * trame) { /* A COMPLETER */ } /* ------------------------------------------------------------------ Nom : main ------------------------------------------------------------------ */ int main(void) { unsigned char trame1[] = { 170, 170, 170, 170, 170, 170, 170, 171, 255, 255, 255, 255, 255, 255, 0, 12, 110, 244, 185, 217, 8, 6 }; unsigned char trame2[] = { 170, 170, 170, 172, 170, 170, 170, 171, 0, 12, 26, 33, 234, 87, 0, 12, 110, 244, 185, 217, 8, 0 }; affichertrame(trame1); affichertrame(trame2); return 0; }

Université de Savoie Module ETRS-505 Introduction au langage C TP 3 L'objectif de ce TP est de programmer un jeu du morpion qui consiste à aligner trois symboles identiques soit en ligne verticale, horizontale ou diagonale sur une grille 3x3. Ce jeu se joue à deux, tour à tour, l'un utilisant le symbole X, l'autre le O. A chaque étape du jeu, le programme doit afficher la grille en mode texte et demander dans quelle case poser un pion. Les colonnes seront identifiées par les lettres a, b et c ; les lignes par les chiffres 1, 2 et 3. A l'écran, vous devez obtenir un résultat semblable a ceci : a b c 1 X O 2 O X 3 O Placer un pion X > c 1 Position déjà occupée! Placer un pion X > b 3 a b c 1 X O 2 O X 3 X O Placer un pion O > c 2 a b c 1 X O 2 O X O 3 X O O a gagné! Mais vous pouvez faire beaucoup mieux en termes de convivialité et de fonctionnalité du programme!!! Contraintes : Réaliser les affichages de la grille en mode texte, Réaliser la saisie de la position du pion souhaitée pour chaque joueur (utiliser la fonction scanf("%c",<variable>) pour la saisie de caractères) et traiter les positions interdites,

Tester si le jeu est terminé et indiquer qui est le vainqueur, Utiliser un tableau pour représenter la grille en mémoire, Segmenter le programme en plusieurs fonctions, avec au moins o Une fonction pour l'affichage de la grille, o Une fonction pour la saisie de la position, o Une fonction de test de choix de position, o Une fonction de test de fin de jeu. Pour le reste vous êtes libre d appréhender le sujet de la façon dont vous le souhaiter. Lorsque votre programme fonctionne, vous pouvez utiliser une librairie graphique pour modifier le design de votre interface. ATTENTION : Il ne sert à rien de passer à cette étape si votre programme ne fonctionne pas correctement et que tous les bugs ne sont pas convenablement résolus.