1 / 46

FLSI602 Génie Informatique et Réseaux

FLSI602 Génie Informatique et Réseaux. Alberto Bosio alberto.bosio@lirmm.fr www.lirmm.fr/~bosio/FLSI602. Agenda. langage de programmation C UNIX/Linux Réseau. Bibliographie. B.W. Kernighan, D.M. Ritchie, “Le langage C (2ème édition)”, Dunod, 2000 Internet …. Historique.

oberon
Download Presentation

FLSI602 Génie Informatique et Réseaux

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FLSI602 Génie Informatique et Réseaux Alberto Bosio alberto.bosio@lirmm.fr www.lirmm.fr/~bosio/FLSI602

  2. Agenda • langage de programmation C • UNIX/Linux • Réseau

  3. Bibliographie • B.W. Kernighan, D.M. Ritchie, “Le langage C (2ème édition)”, Dunod, 2000 • Internet …

  4. Historique • Histoire du C est très liée à l'histoire du système UNIX. • En 1969, la 1ère version du système UNIX voit le jour programmée en assembleur. • Ken Thompson créa un nouveau langage de programmation, nommé B. • En 1971, création du successeur de B, nommé C, créé par Dennis Ritchie.

  5. Historique • En 1983, un standard pour le langage C est créé : • la norme ANSI (American National Standards Institute). • La plupart des compilateurs (Borland, Microsoft, GNU CC...) utilisent ce standard. • un programme écrit en ANSI C est compilable presque partout.

  6. Structure d'un programme • En langage C <directives de précompilation> <définitions de types de donnes> <prototypes de fonctions> <définitions de variables globales> <définitions de fonctions> • Structure d'une fonction <type> nomFonction(<paramètres>) { <définition de variables> <instructions> }

  7. Structure d'un programme • En langage C • Le partie principale du programme est une fonction nommée main. <type> main(<paramètres>) { <définition de variables > <instructions> }

  8. Un premier exemple • Calcul du volume d’une sphère /* Directive de précompilation */ #include <stdlib.h> /* Fonction principale */ void main(void) { const float PI = 3.14159; /* Définition d’une constante */ float rayon; /* Définition d’une variable */ float volume; /* Définition d’une variable */ volume = 4*PI*rayon*rayon*rayon / 3; }

  9. Un premier exemple • Calcul du volume d’une sphère /* Directive de précompilation */ #include <stdlib.h> /* Fonction principale */ void main(void) { const float PI = 3.14159; /* Définition d’une constante */ float rayon; /* Définition d’une variable */ float volume; /* Définition d’une variable */ volume = 4*PI*rayon*rayon*rayon / 3; } Commentaire

  10. Un premier exemple • Calcul du volume d’une sphère /* Directive de précompilation */ #include <stdlib.h> /* Fonction principale */ void main(void) { const float PI = 3.14159; /* Définition d’une constante */ float rayon; /* Définition d’une variable */ float volume; /* Définition d’une variable */ volume = 4*PI*rayon*rayon*rayon / 3; } constant

  11. Un premier exemple • Calcul du volume d’une sphère /* Directive de précompilation */ #include <stdlib.h> /* Fonction principale */ void main(void) { const float PI = 3.14159; /* Définition d’une constante */ float rayon; /* Définition d’une variable */ float volume; /* Définition d’une variable */ volume = 4*PI*rayon*rayon*rayon / 3; } variable

  12. Un premier exemple • Calcul du volume d’une sphère /* Directive de précompilation */ #include <iostream.h> /* Fonction principale */ void main(void) { const float PI = 3.14159; /* Définition d’une constante */ float rayon; /* Définition d’une variable */ float volume; /* Définition d’une variable */ volume = 4*PI*rayon*rayon*rayon / 3; } instructions

  13. Les types, variables et constantes • Les commentaires /* Sur plusieurs lignes : en C, C++ ou Java */ • Les types de données • Entiers : short, int, long int, unsigned short, . . . • Réels : float, double, long double • Caractères : char, unsigned char

  14. Les types, variables et constantes

  15. Les types, variables et constantes • Déclarations et initialisation de variables • int jour, mois, annee = 2000; • double puissance = 10.4; • char reponse = ‘A’; • int test = 10;

  16. Les types, variables et constantes • Le type char char reponse = ‘A’; printf(“%c“, response); /* A */ printf(“%d“, response); /* 65 */ char reponse = 65; printf(“%c“, response); /* A */ reponse = 65 + 32 ; printf(“%c“, response); /* a */

  17. Les types, variables et constantes • Le type char char reponse = ‘A’; printf(“%c“, response); /* A */ printf(“%d“, response); /* 65 */ char reponse = 65; printf(“%c“, response); /* A */ reponse = 65 + 32 ; printf(“%c“, response); /* a */ ASCII Code (http://www.asciitable.com/)

  18. Les types, variables et constantes • Définition d’une constante • Directive de précompilation en langage C #define SIZE 100 • Mot clef réservé « const » en langage C const int SIZE = 100;

  19. Les types, variables et constantes • Les constantes littérales • Une constante de type caractère est entourée de simple-quotes • ‘A’, ‘b’, ‘\n’ (retour à la ligne), ‘\t’ (tabulation) • Une constante de type chaîne est entourée de double-quotes • “il est trop tard\n“, “Janvier\tFevrier\tMars“ • Les énumérations • Une énumération permet de définir un nouveau type enum Saison { Printemps = ‘P’, Ete = ‘E’, Automne = ‘A’, Hiver = ‘H’ }; Saison S = Printemps;

  20. Les types, variables et constantes • La définition d’un nouveau type • Le mot clef réservé « typedef » typedef int typeEntier; . . . typeEntier i; // int i; i = 5; typedef float typeTableau[10]; . . . typeTableau notes; // float notes[10]; notes[4] = 10.5;

  21. Les différents types d’opérateurs • Opérateur d’affectation • Symbole « = » • Opérateurs arithmétiques • Symboles « + », « - », « * », « / », « % » • + addition • - soustraction • * multiplication • / division • % reste de la division (modulo)

  22. Les différents types d’opérateurs • Opérateurs bit à bit • Symboles « & », « ^ », « | », « << », «  >> » 26 & 150 = (00011010 & 10010110) = 00010010 = 18 /* ET */ 26 ^ 150 = (00011010 ^ 10010110) = 10001100 = 140 /* OU exclusif */ 26 | 150 = (00011010 | 10010110) = 10011110 = 158 /* OU */ 13 << 3 = (00001101 << 3) = 01101000 = 104 /* Décalage */ 150 >> 2 = (10010110 >> 2) = 00100101 = 37 /* Décalage */

  23. Les différents types d’opérateurs • Opérateurs d’incrémentation • Pour simplifier certaines expressions ++i; ou i++; /* i = i + 1; */ --i; ou i--; /* i = i - 1; */ i = ++j; /* j = j + 1; i = j; pré-incrémentation */ i = j++; /* i = j; j = j + 1; post-incrémentation */ • Opérateurs d’affectation élargis • Pour simplifier certaines affectations i = i + 4; /* i += 4; */ temps = temps * k; /* temps *= k; */

  24. Les différents types d’opérateurs • Les opérateurs conditionnels if (ok == true) . . . /* Test d’égalité */ if (ok != false) . . . /* Test d’inégalité */ if (i < 4) . . . if (i <= 4) . . . if (i >= 4) . . . • Les opérateurs logiques if ((ok == 1) && (i < 4)) . . . /* si ok est 1 ET i est inférieur à 4 */ if ((ok == 1) || (i < 4)) . . . /* si ok est 1 OU i est inférieur à 4 */ if (!(ok == 1)) . . . /* s’il est faux que ok soit 1 */

  25. Les différents types d’opérateurs • Les opérateurs de « cast » • Pour convertir explicitement le type de certaines données double x = 14.5; int i; i = int(x); ou i = (int) x; /* i=14;*/ i = 10; x = i / 4; /* x = 2; */ i = 10; x = double(i) / 4; /* x = 2.5; */

  26. Les entrées / sorties en C • Comment afficher des informations ? • La fonction « printf » • Définition dans la bibliothèque « stdio.h » • Syntaxe : printf(<un format d’affichage>, <une liste d’expressions>) int qt = 4; float pr = 10.5; printf(“quantite = %d et prix = %f”, qt, pr); /* quantite = 4 et prix = 10.5 */ • Un format d’affichage est une chaîne comportant • Des caractères à afficher tels quels • Des codes de format : « %d », « %f »

  27. Les entrées / sorties en C • Comment afficher des informations ? • Les différents codes de format int i = 6; printf(“entier = %d”, i); float x = 2.3; printf(“réel = %f”, x); char c = ‘A’; printf(“cara = %c”, c); char *m = “oui”; printf(“mes = %s”, m);

  28. Les entrées / sorties en C • Comment lire des données au clavier ? • La fonction « scanf » • Définition dans la bibliothèque « stdio.h » • Syntaxe : scanf (<un format de lecture>, <une liste d’adresses>) int i; float x; scanf(“%d %f”, &i, &x); • pour lire au clavier un entier et un réel placés respectivement dans les variables « i » et « x »

  29. L’exécution conditionnelle /* Exemple de branchement conditionnel */ if (a > b) { plusGrand = a; plusPetit = b; } else{ plusGrand = b; plusPetit = a; } printf (“%d est plus grand que %d”, plusGrand, plusPetit); /* Exemple de branchement conditionnel */ if ((a >= b) && (a >= c)) plusGrand = a; else { if (b >= c) plusGrand = b; else plusGrand = c; }

  30. L’exécution conditionnelle /* Exemple de « switch » en C */ int mois, nbjours, annee; switch(mois) { /* Mois de 30 jours */ case 4 : case 6 : case 9 : case 11 : nbjours = 30; break; /* Mois de 31 jours */ case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 : nbjours = 31; break; /* Mois de février */ case 2 :{ if (estBissextile(annee)) nbjours = 29; else nbjours = 28; break; } default : printf (“Mois non valide”); } /* Fin du switch */

  31. L’exécution itérative • Trois types de boucles • La boucle « while  » compteur = 1; while (compteur <= 5) { printf (“boucle : %d \n”,compteur); compteur++; } • La boucle « for  » for(compteur = 1; compteur <= 5; compteur++) printf (“boucle : %d \n”,compteur); • La boucle « repeat » do { printf (“Voulez-vous recommencer ? ”); scanf (“%c”, &reponse); } while ((reponse == ‘o’) || (reponse == ‘O’));

  32. Modes de transmission des arguments • La transmission par valeur void echanger(int a, int b) { int tmp = a; a = b; b = tmp; printf (“%d - %d\n”,a, b); } void main() { int i = 4, j = 8; echanger(i, j); /* a sera une copie de i, et b une copie de j */ printf (“%d - %d\n”,i, j); }

  33. Modes de transmission des arguments • La transmission par référence (adresse) void classer(int a, int b, int* min, int* sup) { if (b > a) { *min=a; *sup=b; } else { *min=b; *sup=a; } } void main() { int i = 4, j = 8, m, s; classer(i, j, &m, &s); printf (“%d - %d\n”,m, s); }

  34. Les fonctions • Fonction retournant une valeur int min(int a, int b) { int t; if (a < b) t = a; else t = b; return (t); } • Fonction de type « void » void calculer_min() { int a, b; printf (“Donnez deux entiers : ”); scanf (“ %d %d ” , &a ,&b); printf (“Le min entre %d et %d est %d ”, a, b, min(a,b)); }

  35. Les tableaux en C • Tableaux unidimensionnels typedef double Vecteur[10]; double x[10]; Vecteur y; for(int i = 0; i < 10; i++) x[i] = y[i] = 0.0;

  36. Les tableaux en C float vett[10]; 3 6 index 0 1 2 4 5 7 8 9 vett

  37. Les tableaux en C float vett[10]; 3 6 index 0 1 2 4 5 7 8 9 vett vett[4] = 5,4

  38. Les tableaux en C float vett[10]; 3 6 index 0 1 2 4 5 7 8 9 vett vett[4] = 5,4

  39. Les tableaux en C • Tableaux multidimensionnels typedef double Matrice[10][5]; double A[10][5]; Matrice B; for(int i = 0; i < 10; i++) for(j = 0; j < 5; j++) B[i][j] = A[i][j];

  40. Les tableaux en C float matr[5][3] 0 1 2 matr Index de colonne 0 1 2 3 4 Index de ligne

  41. Les tableaux en C float matr[5][3] 0 1 2 matr Index de colonne 0 1 2 3 4 Index de ligne matr[1] [2] = 4,5

  42. Les tableaux en C / C++ float matr[5][3] 0 1 2 matr Index de colonne 0 1 2 3 4 Index de ligne matr[1] [2] = 4,5

  43. Les tableaux • Mode de transmission • Un tableau n’est jamaistransmis par valeur • Un tableau est toujourstransmis par adresse void initialise(double* t, int n) { int i; for(i = 0; i < n; i++) t[i] = i; } double somme(double* t, int n) { double s; int i; for(i = 0, s = 0.0; i< n; i++) s = s + t[i]; return (s); } void main() { double x[2], y[3]; initialise(x, 2); initialise(y, 3); Printf (“%f , %f\n” ,somme(x, 2), somme(y, 3)); }

  44. Les tableaux • Mode de transmission • Différents modes de déclaration des fonctions void initialise(double* t, int n); void initialise(double t[], int n); • Toutes ces déclarations sont équivalentes

  45. Les chaînes de caractères • Sans type prédéfini en langage C #include <string.h> char prenom[64] = “Pierre”; char nom[64] = { ‘J’, ‘o’, ‘y’, ‘c’, ‘e’, ‘\0’ }; strcpy(prenom, “James”); /* Erreur : prenom = “James”; */ strcat(nom, “ ”); strcat(nom, prenom); scanf (“%s”, nom); printf (“%s”, nom);

  46. Les chaînes de caractères • Sans type prédéfini en langage C if (nom[0] == ‘A’) … if (strcmp(nom, prenom) < 0) /* Erreur : if (nom < prenom)*/ if (strcmp(nom, prenom) == 0) /* Erreur : if (nom == prenom)*/ printf (“Longueur = %d”, strlen(nom));

More Related