Corrections des TP précédents. Les tableaux en C. TP 6: script shell. La commande cut

Documents pareils
Le prototype de la fonction main()


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)

Algorithmique et Programmation, IMA

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

Introduction au langage C

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

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

Rappels Entrées -Sorties

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

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

Programmation Classique en langage C

Programmation système I Les entrées/sorties

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INFO-F-404 : Techniques avancées de systèmes d exploitation

Chap III : Les tableaux

Programmation en langage C

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

Programmation système en C/C++

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

Le langage C. Séance n 4

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

Java Licence Professionnelle CISII,

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

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

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

COMPARAISONDESLANGAGESC, C++, JAVA ET

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

Arguments d un programme

Outils pour la pratique

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

Cours Programmation Système

Programmation C. J.-F. Lalande. 15 novembre 2012

Les chaînes de caractères

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

STAGE IREM 0- Premiers pas en Python

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

Programmation système de commandes en C

ALGORITHMIQUE ET PROGRAMMATION En C

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

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

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

Corrigé des TD 1 à 5

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

Initiation à la programmation en Python

INITIATION A LA PROGRAMMATION

Langages et Concepts de Programmation Introduction à la programmation en langage C

Cours d Algorithmique et de Langage C v 3.0

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Programmation en langage C Eléments de syntaxe

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

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

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

Principes des langages de programmation INF 321. Eric Goubault

1. Structure d'un programme FORTRAN 95

Exercice sur les Dockers

I. Introduction aux fonctions : les fonctions standards

Les structures. Chapitre 3

Conventions d écriture et outils de mise au point

Langage Éric Guérin 5 octobre 2010

D r o i t s D r o i t s Q u i z z : i n t e r n e t t e x t e

INF 104 (SELC) Introduction au langage C

Claude Delannoy. 3 e édition C++

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

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

Solutions du chapitre 4

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP : Gestion d une image au format PGM

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

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

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

Chapitre 1 : La gestion dynamique de la mémoire

Programmer en JAVA. par Tama

Cours d algorithmique pour la classe de 2nde

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

TP, première séquence d exercices.

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

Table des matières. Chapitre 4 : Variables pointeurs

TP 1. Prise en main du langage Python

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

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

IUT ANNECY Département Mesures Physiques Cours d informatique Initiation au langage C

Le langage C. Introduction, guide de reference

Environnements informatiques

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

Langage Java. Classe de première SI

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

AWS avancé. Surveiller votre utilisation d EC2

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

Programmation Système (en C sous linux) Rémy Malgouyres LIMOS UMR 6158, IUT département info Université Clermont 1, B.P.

Création et Gestion des tables

Cours Informatique Master STEP

Notions fondamentales du langage C# Version 1.0

Découverte de Python

PROGRAMMATION PAR OBJETS

Cours 6 : Tubes anonymes et nommés

Gestion de la mémoire

Programmation en C - Sommaire

Transcription:

Corrections des TP précédents. Les tableaux en C Jean-Sébastien Coron Université du Luxembourg 1 Correction des TP TP 6: script shell Enoncé: Ecrire un script shell taille qui renvoie la taille d un fichier en octets. En utilisant la commande ls -l et la commande cut. $ ls -l monfich.c -rw-r--r-- 1 guest None 60 Oct 14 11:44 monfich.c $ taille monfich.c 60 La commande cut La commande cut Permet de sélectionner certaines parties des lignes d un fichier ou de l entrée standard (si aucun fichier n est précisé). cut [-c] [-f] list [-n] [-d delim] [-s] [file] Options: -c list: spécifie les caractères à sélectionner. -c2-5 sélectionne les caratères 2 à 5 de chaque ligne. La commande cut Options: -f list: sélectionne pour chaque ligne les champs spécifiés, les champs étant délimités par un caractère délimiteur. -f1,5 sélectionne les champs 1 et 5. -d delim: spécifie le caractère délimiteur. -s: supprime les lignes sans caractère délimiteur. list: Liste de nombres séparés par une virgule, avec - pour indiquer un intervalle. 1,2,3,5 ou 1-3,5 Exemples Exemples: $ echo "hello" cut -c 2-4 ell $ echo "he ll o wo" cut -f2,3 -d ll o

Solution TP6 Solution #!/bin/bash x= ls -l $1 echo $x cut -f5 -d La commande echo supprime les espaces en trop: $ echo a b c a b c TP6 Ecrire un script existe qui détermine si un fichier existe ou pas. $ existe toto Le fichier toto existe $ existe tata Le fichier tata n existe pas Solution: Corrigé TP6 #!/bin/bash if [ -s $1 ] then echo "Le fichier $1 existe." else echo "Le fichier $1 n existe pas." fi TP 7 Ecrire un script shell pidof prenant en entrée le nom d un programme et affichant la liste les numéros de processus correspondant à ce programme. $ pidof bash 1672 2888 $ pidof xterm 1025 2112 2

Corrigé Corrigé: #!/bin/bash ps -s grep $1 cut -c4-7 ps -s Affiche la liste des processus s exécutant sur la machine. grep $1 Sélectionne les lignes correspondant au programme passé sur la ligne de commande. cut -c4-7 Sélectionne les caractères 4 à 7. 2 Les boucles For Boucle for Une boucle For permet de répéter une instruction plusieurs fois, à l aide d un compteur. Syntaxe: for(<init>;<test>;<gestion compteur>) Exemple: afficher les nombres de 1 à 10. for (i=1;i<=10;i++) printf("%d\n",i); init: permet d initialiser le compteur. test: permet de tester la valeur du compteur. gestion compteur: permet d incrémenter le compteur. Exemple Le programme suivant calcule 2 n, pour un entier n donné: int c=1; int i; for(i=0;i<n;i++) c=c*2; // c contient 2 n. 3

int a=2; int b=8; int i; int c=1; for(i=0;i<b;i++) c=c*a; printf("%d\n",c); Calcul de c = a b Factoriel Calcul de n! = n (n 1)...3 2 1. int n,i,c=1; scanf("%d",&n); for(i=2;i<=n;i++) c=c*i; printf("%d\n",c); 1) Ecrivez un programme trirect qui affiche un triangle rectangle formé d étoiles de n lignes, avec n lu avec un scanf: $ echo 5 trirect * ** *** **** ***** 4

3 Les tableaux Les tableaux en C Les tableaux permettent de définir un groupe de cases mémoires de même type. Par exemple, si on veut stocker les notes d un élève dans un tableau, on peut définir: int notes[5]; \\ on déclare un tableau de 5 entiers notes[0]=15; \\ première notes notes[1]=8; notes[2]=16; notes[3]=17; notes[4]=9;\\ cinquième note On a ici un tableau d entiers. Différents types de tableaux Les différents types possibles: float tabf[5]: un tableau de 5 float. double tabd[10]: un tableau de 10 double. int tabi[7]: un tableau de 7 int. Attention: Un tableau à n éléments est indexé de 0 à n 1: int tabi[7]. Les cases du tableau vont de tabi[0] à tabi[6]. Taille constante La taille d un tableau doit être constante. Cette taille doit être soit écrite explicitement dans le programme, par ex. int tab[10] Ou bien on peut utiliser l instruction #define: #define N 10 \\ on définit la constante N=10 int tab[n]; int autretab[5]; Avantage: il est plus facile de modifier la taille du tableau. 5

Les caractères Les caractères sont stockés sur un octet (8 bits), comme des entiers non signés. Les caractères sont codés suivant le code ASCII A 65, B 66,... 0 48,... Afficher un caractère: char x; x= A ; printf( %c,x); Les tableaux de caractères Un tableau de caractère constitue une chaîne de caractère. char ch[10]="hello"; crée un tableau de caractère tel que ch[0]= h, ch[1]= e, ch[2]= l, ch[3]= l, ch[4]= o ch[5]= \0, qui est le caractère de fin de chaîne. Les autres caractères ne sont pas initialisés. Affichage d une chaine de caractère: printf("%s",ch); Initialisation d un tableau On peut initialiser un tableau à l aide d une boucle for: #define N 10 int tab[n]; int i; for(i=0;i<n;i++) tab[i]=0; Tous les entiers du tableau sont initialisés à zéro. 6

Exemple Calcul de factoriel à l aide d un tableau: n! = n (n 1) 2 1 #define N 10 int fac[n]; int i; tab[0]=1; for(i=1;i<n;i++) fac[i]=fac[i-1]*i; Tableaux à deux dimensions Il est possible de définir des tableaux à deux dimensions ou plus. int tab[4][3]; déclare un tableau d entier de taille 4*3. Initialisation d un tableau à deux dimensions: #define M 10 #defint N 5 int tab[m][n]; int i,j; for(i=0;i<m;i++) for(j=0;j<n;j++) tab[i][j]=0; Génération de nombres aléatoires La fonction rand() renvoie un entier aléatoire entre 0 et RAND MAX. Sous gcc/cygwin, RAND MAX=2 31. Renvoyer un entier entre 0 et n: Utiliser rand() % n. Initialisation du générateur aléatoire. Fonction srand(). Généralement initialisée avec le temps time(0). #include <stdlib.h> 7

Exemple Affiche un nombre aléatoire entre 0 et 99: #include <stdlib.h> srand(time(0)); int x; x=rand() % 100; printf("%d\n",x); Arguments de la commande Il est possible d obtenir les arguments de la commande du programme. Par exemple, pour un programme fact qui calcule une factorielle, on voudrait pouvoir taper $ fact 5 120 Avantage: Cela évite d écrire int n=5 dans le programme (il faut recompiler lorsqu on modifie cette valeur). Cela évite de demander l entier n à l utilisateur. argc et argv Les mots de la ligne de commande sont stockés dans le tableau argv. La variable argc contient la taille du tableau (=le nombre de mots de la ligne de commande). int main(int argc,char *argv[]) int i; for(i=0;i<argc;i++) // boucle sur tous le tableau printf( %s\n,argv[i]); // affiche les mots 8

Utilisation Si le nom du programme précédent est affiche, alors $ affiche hello world 2 affiche hello world 2 La taille du tableau est argc=4. Conversion chaine entier La fonction int atoi() permet de convertir une chaîne de caractère en un entier. Utile pour convertir les mots argv[i] qui sont des chaines de caractères. Exemple: affiche le carré d un nombre. $ carre 3 9 int main(int argc,char *argv[]) int a=atoi(argv[1]); // conversion printf( %d\n,a*a); 2) Le triangle de Pascal (t i,j ) est défini de la façon suivante, pour tout i 0 et 0 j i: t 0,0 = 1 i 1, j, 0 j i, t i,j = t i 1,j 1 + t i 1,j Dans l égalité précédente, on prend t i, 1 = 0 et t i,i+1 = 0 pour tout i. Ecrire un programme triangle prenant en entrée un entier n sur la ligne de commande et affichant le triangle de Pascal jusqu à la ligne i = n. $ triangle 5 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 3) Recherche d une valeur dans un tableau: méthode séquentielle. On veut rechercher dans un tableau d entier la présence d une certaine valeur. On considère la fonction suivante: int recherche(int val,int tab[],int n) La fonction prend en entrée un tableau tab de taille n, et recherche la valeur val dans ce tableau. Si la valeur val est présente dans le tableau, la fonction renvoie sa position (si val 9

apparaît plusieurs fois dans le tableau, la fonction renvoie une des positions de val). Si val n apparaît pas, la fonction renvoie -1. Ecrire cette fonction en utilisant la méthode de la recherche séquentielle: on compare successivement les valeurs du tableau avec la valeur donnée. 10