85
1/85 [email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873 Informatique 3 Licence SI 2ème année [email protected]

Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. [email protected] - https: ... Programme final en ooBasic Sub Main Dim maFeuille

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

1/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Informatique 3

Licence SI 2ème anné[email protected]

Page 2: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

2/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Et d'abord ça veut dire quoi "Informatique" ?

• Informatique : mot créé en 1962 à partir de "information" et "automatique"

• Dans le sens moderne, « ensemble des sciences et techniques en rapport avec le traitement de l'information »

• On différencie parfois l'informatique fondamentale (computer science) du « génie logiciel » ou « génie informatique » (computer engineering)

Page 3: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

3/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Deux semestres résumés en 3h...• Introduction• Boucles, fonctions, récursivité

– Méthodes itératives (boucles)– Fonctions– Méthodes récursives

• Structures, vecteurs, listes– Structures– Vecteurs– Listes chaînées

• Stockage sur disque– Principe général– Opérations courantes– Lecture/écriture au format texte– Lecture/écriture au format binaire

Page 4: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

4/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Algorithme

• Algorithme : méthode de résolution d'un problème programmable sur un ordinateur (vient de Al-Khuwarizmi, également « inventeur » de l'algèbre au 9ème siècle)

• Différents types de méthodes : itératives (boucles) ou récursives

• Utilisation de structures de données (vecteurs, listes)• Pour résoudre un problème complexe, décomposition en

sous-problèmes et donc en sous-programmes

Page 5: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

5/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Exemple : rendre une fraction irréductible

• Exemple : comment réduire la fraction 178468 / 267702 à... 2/3 ?

• Méthode datant de l'antiquité grecque (Euclide) : trouver le Plus Grand Commun Diviseur (PGCD) des deux nombres, puis les diviser par ce PGCD

• … Nouvelle question : comment trouver « facilement » le PGCD de deux nombres u et v ?

Page 6: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

6/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Exemple : trouver le PGCD de deux nombres u et v

• On s'aperçoit que si u ≥ v, alors le PGCD de deux nombres positifs u et v = PGCD(u − v, v)

• Si v > u alors il faut échanger u et v• Si u ≤ 0, alors PGCD(u, v) = v• Par exemple :

– PGCD(10, 4) = PGCD(6, 4)– PGCD(6, 4) = PGCD(2, 4)– PGCD(2, 4) =[échange] PGCD(4, 2) = PGCD(2, 2)– PGCD(2, 2) = PGCD(0, 2)– PGCD(0, 2) = 2

Page 7: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

7/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Exemple : trouver le PGCD de deux nombres u et v

• Algorithme :while (u > 0){if (u <= v){

w = u ;u = v ;v = w ;

}u = u − v ;}

Echange de deux valeurs

Page 8: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

8/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme final en C/C++: reducFraction.cpp

#include <iostream>using namespace std;int main(){

int numerateur, denominateur;int u, v, w;cin >> numerateur >> denominateur;u = numerateur;v = denominateur;while (u > 0) {

Variables

Saisie au clavier

Lignes à toujours mettre au début du programme

Page 9: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

9/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme final : reducFraction.cpp

if (u < v) {w = u;u = v;v = w;}u = u - v;

}

numerateur = numerateur / v;denominateur = denominateur / v;cout << "Fraction réduite: " << numerateur

<< " / " << denominateur << endl;}

Affichage

Page 10: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

10/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Page 11: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

11/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme final en ooBasic

Sub MainDim maFeuille As ObjectDim numerateur As Long, denominateur As LongDim u As Long, v As Long, w As LongmaFeuille = ThisComponent.Sheets.getByName("Feuille1")' Cellule B3numerateur = maFeuille.getCellByPosition(1,2).getValue' Cellule B4denominateur = maFeuille.getCellByPosition(1,3).getValue u = numerateurv = denominateur

Le type Integer ne permet pas demanipuler de grands nombres...

Page 12: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

12/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme final en ooBasic

While u > 0 If u < v Then w = u u = v v = w End If u = u - vWendnumerateur = numerateur / vdenominateur = denominateur / vprint "Fraction réduite: " + numerateur + " / " + denominateurEnd Sub

Page 13: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

13/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programmer avec des fonctions...

• A partir du problème principal, identifier des sous-problèmes

• Pour chaque sous-problème, écrire la solution sous forme de procédure ou de fonction

• On pourra faire appel à ces sous-programmes depuis le programme principal

• On pourra aussi réutiliser une procédure ou une fonction plus tard si le même sous-problème se pose... sans avoir à réécrire le code.

Page 14: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

14/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

• On a besoin d'une fonction qui cherche Sarah Connor

• Programme principal :– Tant que Sarah Connor

non trouvée, chercher Sarah Connor

– Tuer Sarah Connor

Exemple : Terminator

Page 15: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

15/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

• On a besoin d'une fonction qui dessine un trait entre deux points

• Programme principal :– Pour chaque sommet du polygone,

dessiner un trait entre ce sommet et le suivant

– Si le sommet est le dernier, dessiner un trait entre ce sommet et le premier

Exemple : dessiner un polygone

Page 16: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

16/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme : pgcdFonction.cpp

int pgcd(int u, int v) {int w;while (u > 0) {

if (u < v) {w = u;u = v;v = w;}

u = u - v;}

return v;}

Page 17: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

17/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme : pgcdFonction.h

#ifndef PGCDFONCTION#define PGCDFONCTION

int pgcd(int u, int v);

#endif

Le fichier .h ne fait que répertorier les fonctions écrites

A toujours écrire au débutd'un fichier .h

Page 18: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

18/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme : reducFraction.cpp#include <iostream>

using namespace std;

#include "pgcdFonction.h"

int main() {

int numerateur, denominateur, p;

cout << "Numérateur? "; cin >> numerateur;

cout << "Dénominateur ? "; cin >> denominateur;

p = pgcd(numerateur, denominateur);

numerateur = numerateur / p;

denominateur = denominateur / p;

cout << "Fraction réduite: " << numerateur << "/" << denominateur << endl;

}

Page 19: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

19/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Compilation et Exécution

benoit@HP:Info3/Cours/ReducFraction$ g++ reducFraction.cpp pgcdFonction.cpp

benoit@HP:Info3/Cours/ReducFraction$ ./a.out

Numérateur? 345

Dénominateur ? 18

Fraction réduite: 115/6

Page 20: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

20/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme ooBasicFunction pgcd(u As Long, v As Long) As Long Dim nu As Long, nv As Long, w As Long nu = u nv = v While nu > 0 If nu < nv Then w = nu nu = nv nv = w End If nu = nu - nv Wend pgcd = nvEnd Function

Attention, ne jamais modifier lesparamètres d'une fonction Basic !

Il vaut mieux les copier dansdes variables temporaires

Équivalent à retourne (nv)

Page 21: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

21/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme ooBasicSub Main

Dim maFeuille As Object

Dim numerateur As Long, denominateur As Long, p As Long

maFeuille = ThisComponent.Sheets.getByName("Feuille1")

numerateur = maFeuille.getCellByPosition(1,2).getValue

denominateur = maFeuille.getCellByPosition(1,3).getValue

p = pgcd(numerateur, denominateur)

print "PGCD: "+p

numerateur = numerateur / p

denominateur = denominateur / p

print "Fraction réduite: " + numerateur + " / " + denominateur

End Sub

Page 22: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

22/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programmer de manière récursive...

• On parle de programme ou de fonction récursive si la fonction s'appelle elle-même

• Généralement, une fonction récursive fait appel à elle-même pour résoudre une sous-partie du problème, puis utilise le résultat obtenu pour résoudre le problème global

• Nécessite une formulation récursive du problème (par exemple une relation de récurrence)

Page 23: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

23/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

• Exemple : pour dessiner un arbre, on va utiliser la fonction qui dessine un trait pour définir la fonction dessineArbre (angle A, taille T):

– Si T > 0 Alors :• Dessiner trait d'angle A et de taille T• dessineArbre (A – 45°, T-1)• dessineArbre (A + 45°, T-1)

– Sinon on arrête

• La condition Si... est nécessaire pour que le programme s'arrête un jour !

• Pour dessiner l'arbre : dessineArbre (90°, 10)

Programmer de manière récursive...

Page 24: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

24/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Calculer le PGCD de manière récursive

int pgcd(int u, int v) { int w;

if (u <= 0) return v ;if (u < v) { w = u; u = v; v = w;}return pgcd(u-v, v);

}

…......... Le programme principal n'est pas modifié !

Condition d'arrêt

Page 25: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

25/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Liste des appels récursifs

fonction pgcd(E u, v: Entiers): Entier

Variables:w: Entier

DébutSi (u <= 0) alors retourne(v)Si (u < v) alors {

w ← uu ← vv ← w

}retourne pgcd(u - v, v)

Fin

Calcul de pgcd(10, 4) => retourne pgcd(6, 4)Calcul de pgcd(6, 4) => retourne pgcd(2, 4)Calcul de pgcd(2, 4) => retourne pgcd(2, 2)Calcul de pgcd(2, 2) => retourne pgcd(0, 2)Calcul de pgcd(0, 2) => retourne 2Donc pgcd(2, 2) retourne 2Donc pgcd(2, 4) retourne 2Donc pgcd(6, 4) retourne 2Donc pgcd(10, 4) retourne 2

On peut faire la liste des appels récursifs en faisant une simulationd'exécution du programme

Page 26: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

26/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Quizz #1 (somme des n premiers entiers): combien de lignes

comportent une erreur ?1. #include <iostream>

2. using namespace std

3. int somme(int n) {

4.  int somme = n;

5.  for (int i = 1; i < n; i­­)

6.   somme = somme + i

7.  return i;

8. }

9.  int main() {

10.  int n;

11.  cout >> "Entrez n: ";

12.  cin << n;

13.  cout >> Somme = >> somme(n) >> endl;

14. }

15. }

Page 27: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

27/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Renvoie un entieraléatoire entre 0 et 9

Quizz #2: le programme suivant est...

#include <stdlib.h>#include <iostream>using namespace std;

int main() {int valeur1, valeur2;int reponse;srand(time(NULL));valeur1 = rand()%10;valeur2 = rand()%10;cout<<"Quel est le résultat de "<<valeur1<<

" fois "<<valeur2<<" ?"<<endl;cin>>reponse;while (reponse != (valeur1*valeur2)) {

cout<<"Non ! Quel est le résultat de "<<valeur1<<" fois "<<valeur2<<" ?"<<endl;

cin>>reponse;}cout<<"Bravo !"<<endl;}

A) Un jeu de rapiditéB) Un jeu de calcul mental à

deux joueursC) Un jeu de calcul mental à

un joueur assez facileD) Un jeu de calcul mental à

un joueur assez difficile

Page 28: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

28/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Deux semestres résumés en 3h...• Introduction• Boucles, fonctions, récursivité

– Méthodes itératives (boucles)– Fonctions– Méthodes récursives

• Structures, vecteurs, listes– Structures– Vecteurs– Listes chaînées

• Stockage sur disque– Principe général– Opérations courantes– Lecture/écriture au format texte– Lecture/écriture au format binaire

Page 29: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

29/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Variables de type Structure

• Une structure permet d'organiser et de manipuler un ensemble de valeurs qui peuvent être de types différents

• Par exemple, on peut considérer qu'un(e) étudiant(e) est une entité constituée de :– un nom– une date de naissance– un numéro INE– un booléen indiquant s'il ou elle est boursier(e)– ...

Page 30: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

30/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Exemple : structure fraction

• Définition de la structure• Définition des fonctions associées :

– Saisir une fraction au clavier– Afficher une fraction– Diviser une fraction– ...

Page 31: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

31/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

struct fraction {int numerateur, denominateur;

};fraction saisirFraction() {

fraction nb;cin>>nb.numerateur>>nb.denominateur;

return nb;}void diviserFraction(fraction &nb, int v) {

nb.numerateur = nb.numerateur / v;nb.denominateur = nb.denominateur / v;

}

Programme : reducFractionStructure.cpp

!

Page 32: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

32/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

void afficherFraction (fraction nb) {cout<<nb.numerateur<<" / "<< nb.denominateur<<endl;

}

int main() {fraction f;int p;f = saisirFraction();p = pgcd(f.numerateur, f.denominateur);diviserFraction(f, p);cout<<"Resultat: ";afficherFraction(f);

}

Programme : reducFractionStructure.cpp

Page 33: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

33/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Variables de type Vecteur (ou Tableau)

• Un vecteur permet d'organiser et de manipuler un ensemble fini de valeurs toutes du même type

• Un vecteur est représenté par une suite de n cases numérotées de 0 à n − 1

• Exemples :– Les notes d'un groupe de 10 étudiants à un partiel– Les valeurs mesurées toutes les heures par un capteur

sur une période de 24 heures– Suite de 5 fractions qu'on peut réduire avec le

programme précédent– ...

Page 34: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

34/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Exemple : le crible d'Eratosthène (3ème siècle av. JC)

• On cherche à savoir quels sont les nombres premiers entre 2 et 99

• On crée un tableau de booléens de taille 100• On suppose d'abord que tous ces nombres sont premiers :

toutes les cases du tableau sont initialisées à vrai• Pour chaque nombre, on détermine ses multiples : les cases

correspondantes passent à faux• A la fin, seules les cases correspondant à un nombre

premier ont la valeur vrai !

Page 35: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

35/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

#include <iostream>using namespace std;void initialisation (bool p[]) { int i;

for (i = 2; i <= 99; i++) p[i] = true;

}void modificationMultiples (int nb, bool p[]) { int i = 2; while (nb*i < 100) {

p[nb*i] = false; i++;}

}

Programme : cribleEratosthene.cpp

Page 36: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

36/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

int main()

{

bool premiers[100];

int i;

initialisation (premiers);

for (i = 2; i <= 99; i++) {

modificationMultiples (i, premiers);

}

for (i = 2; i <= 99; i++) {

if (premiers[i] == true)

cout << i << " est premier" << endl;

}

}

Programme : cribleEratosthene.cpp

Attention, il n'y aaucun lien entrecette variable i et

celles utiliséesdans nosfonctions

Page 37: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

37/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Quizz #3 : quelle est la seule réponse vraie ?

A) Dans un vecteur les éléments peuvent être de types différents

B) Dans une structure les éléments sont obligatoirement tous du même type

C) On ne peut pas créer une structure contenant un vecteur

D) On peut créer un vecteur contenant des structures

Page 38: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

38/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Quizz #4 : quel est le contenu du tableau « liste » après exécution ?

...

int liste[6] = {1, 1, 1, 2, 2, 2};

int i, j;

i = 0;

while (i < 6) {

 if ((i%2) == 0) {

  j = liste[i];

  liste[i+1] = j+1;

 }

 i++;

}

...

A) {1, 1, 1, 2, 2, 2}B) {1, 2, 3, 1, 2, 3}C) {1, 2, 1, 2, 2, 3}D) {1, 2, 1, 2, 3, 2}

Page 39: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

39/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Listes

• Une liste permet d'organiser et de manipuler un ensemble non-défini de valeurs toutes du même type

• Une liste est une structure dynamique : sa taille peut augmenter ou diminuer pendant l'exécution du programme.

• Elle permet également d'insérer ou de supprimer simplement des éléments

• Les valeurs sont rangées dans des cellules, qui comportent aussi un lien vers la cellule suivante dans la liste (chaînage)

• Si une cellule a un lien NUL, elle est la dernière cellule• Le début de la liste est identifié par un pointeur, appelé en

général L ; si L = NUL, alors la liste est vide

Page 40: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

40/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Définition d'une cellule

structure elem_liste {données : Entierlien : pointeur sur elem_liste

}

L3 5 Nul

Données Lien Données Lien

Page 41: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

41/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Affichage d'une liste : listeAffichage

• Principe : parcourir la liste en suivant le chaînage

procédure affichage(E L: pointeur)DébutTant que (L != NUL) Faire { Afficher(L → données) L ← (L → lien)}

Fin

Page 42: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

42/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Affichage d'une liste : simulation d'exécution

L3 12

Données Lien Données Lien

5 Nul

Données Lien

• Au départ L pointe la première cellule

Afficher(L → données)

Page 43: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

43/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Affichage d'une liste : simulation d'exécution

L

3 12

Données Lien Données Lien

5 Nul

Données Lien

• L ← (L → lien)

• Afficher(L → données)

Page 44: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

44/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Affichage d'une liste : simulation d'exécution

L

3 12

Données Lien Données Lien

5 Nul

Données Lien

• Afficher(L → données)

• L ← (L → lien)

• Tant que (L != NUL)…=> condition d’arrêt

Page 45: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

45/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste

• Principe (ajout en tête):1. créer une nouvelle cellule2. chaîner cette nouvelle cellule avec la tête

de liste3. la nouvelle cellule devient la tête de liste4. on repart à l'étape 1

Page 46: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

46/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : listeCreationfonction création (): pointeurVariables:

L,p: pointeur; c: caractèreDébut

L ← NULFaire { p ← allouer elem_liste Afficher("Entrez une valeur") Saisir(p → donnees) (p → lien) ← L L ← p Afficher("Encore ? (O/N)") Saisir(c)} Tant que (c = 'O')

retourne(L)Fin

Page 47: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

47/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LNul

DébutL ← NULFaire

Page 48: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

48/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LDonnées Lien

DébutL ← NULFaire {

p ← allouer elem_liste

pNul

Page 49: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

49/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LDonnées Lien

DébutL ← NULFaire {

p ← allouer elem_listeSaisir(p → donnees)

p 5Nul

Page 50: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

50/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LDonnées Lien

Nul

DébutL ← NULFaire {

p ← allouer elem_listeSaisir(p → donnees) (p → lien) ← L

p 5Nul

Page 51: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

51/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LDonnées Lien

Nul

DébutL ← NULFaire {

p ← allouer elem_listeSaisir(p → donnees) (p → lien) ← LL ← p

p

5

Page 52: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

52/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LDonnées Lien

Nul

DébutL ← NULFaire {

p ← allouer elem_listeSaisir(p → donnees) (p → lien) ← LL ← p

5

Données Lien

p

Page 53: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

53/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

LDonnées Lien

Nul

DébutL ← NULFaire {

p ← allouer elem_listeSaisir(p → donnees) (p → lien) ← LL ← p

5

Données Lien

p12

Page 54: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

54/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Création d'une liste : simulation d'exécution

L3 12

Données Lien Données Lien

5 Nul

Données Lien

Page 55: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

55/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste

• Suppression de toutes les cellules ayant la valeur val. Deux cas possibles :– Si la cellule est en tête de liste, alors la tête de liste se

déplace sur la cellule suivante– Sinon, on modifie le chaînage de la cellule précédente – Les cellules ne sont pas réellement supprimées, elles

sont simplement sorties de la liste

Page 56: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

56/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : listeSuppression

procédure suppression (E/S L: pointeur, E val:Entier)

Variables:premier: booléenp, prec: pointeur

Débutpremier ← vraip ← Ltant que (p != NUL) faire {

si (p → données = val) alors {// Suppression du 1er élémentsi (premier) alors

L ← L → lien

// Suppression ailleurs

Page 57: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

57/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

sinon prec → lien ← p → lien} // finsi (p → données = val) sinon premier ← fauxprec ← pp ← p → lien} //fin tant que (p != NUL)

Fin

Suppression dans une liste : listeSuppression

Page 58: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

58/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

premier ← vraip ← L tant que (p != NUL) faire {

si (p → données = val) … sinon

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 12

Page 59: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

59/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

sinon premier ← fauxprec ← pp ← p → lien

//fin tant que (p != NUL)

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 12

prec

Page 60: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

60/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

si (p → données = val) alors {si (premier) alors L ← L → lien sinon prec → lien ← p → lien} // finsi (p → données = val)

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 12

prec

Page 61: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

61/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

si (p → données = val) alors {si (premier) alors L ← L → lien sinon prec → lien ← p → lien} // finsi (p → données = val)

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 12

prec

Page 62: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

62/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

tant que (p != NUL) faire {…}fin

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 12

prec

Page 63: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

63/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

premier ← vraip ← L tant que (p != NUL) faire {

si (p → données = val)

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 3

Page 64: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

64/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

premier ← vraip ← L tant que (p != NUL) faire {

si (p → données = val)

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 3

Page 65: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

65/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Suppression dans une liste : simulation d'exécution

si (premier) alorsL ← L → lien

L3 12

Données Lien Données Lien

5 Nul

Données Lien

premier

p

val = 3

Page 66: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

66/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

• Pour plus d'infos sur les listes chaînées :– Reprendre le cours d'Info II

– Faire des simulations d'exécution

Page 67: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

67/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Programme : liste.cpp#include <iostream>using namespace std;

struct elem_liste {int donnees;elem_liste *lien;

};

typedef elem_liste * pointeur;

void affichage (pointeur L) {while (L != NULL) {

cout<<L → donnees<<endl;L = L → lien;

}}

Page 68: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

68/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

pointeur creation() {pointeur L, p;char c;L = NULL;do {

p = new elem_liste;cout<<"Entrez une valeur: ";cin>>p → donnees;p → lien = L;L = p;cout<<"Encore ? (O/N): ";cin>>c;

} while (c == 'O');return L;

}

Programme : liste.cpp

Page 69: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

69/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

pointeur creation() {pointeur L, p;char c;L = NULL;do {

p = new elem_liste; cout<<"Entrez une

valeur: ";cin>>p → donnees;p → lien = L;L = p;cout<<"Encore ?

(O/N): ";cin>>c;

} while (c == 'O');return L;

}

Programme : liste.cpp

Source d’ennui si le système n’a plus assez de mémoire, i.e.

retourne null

Si p=null : Segmentation Fault !Il faudrait toujours tester lavaleur d'un pointeur avant des'en servir...

Page 70: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

70/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

pointeur creation() {pointeur L, p;char c;L = NULL;do {

p = new elem_liste;if (p!=null) {

cout<<"Entrez une valeur: ";cin>>p → donnees;p → lien = L;L = p;cout<<"Encore ? (O/N): ";cin>>c; }

else c = ‘n’;} while (c == 'O');return L;

}

Programme : liste.cpp

Page 71: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

71/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

void suppression (pointeur &L, int val) {bool premier; pointeur p, prec;premier = true;p = L;while (p != NULL) {

if (p → donnees == val) {if (premier)

L = L → lien;else

prec → lien = p → lien;}

else premier = false;prec = p;p = p → lien;}

}

Programme : liste.cpp

Page 72: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

72/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

int main() {

pointeur L;

L = creation();

suppression(L, 10);

affichage(L);

}

Programme : liste.cpp

Page 73: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

73/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Deux semestres résumés en 3h...• Introduction• Boucles, fonctions, récursivité

– Méthodes itératives (boucles)– Fonctions– Méthodes récursives

• Structures, vecteurs, listes– Structures– Vecteurs– Listes chaînées

• Stockage sur disque– Principe général– Opérations courantes– Lecture/écriture au format texte– Lecture/écriture au format binaire

Page 74: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

74/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Fichiers

• Un fichier est une entité dans laquelle on peut lire ou écrire des données. Une fois écrites, les données sont conservées sur le support (disque dur, clef USB, ...)

• Lire des données depuis un fichier équivaut un peu à saisir des données au clavier : le fichier remplace le clavier

• Ecrire des données dans un fichier équivaut un peu à afficher des données à l'écran : le fichier remplace l'écran

• Seule différence : on peut éventuellement se déplacer à l'intérieur du fichier

• Avant toute opération, le fichier doit être chargé en mémoire : on parle d'ouverture ou de chargement

Page 75: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

75/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Exemple de fichier

• Fichier contenant des relevés météo stockés sous la forme suivante : VILLE HEURE1 TEMPERATURE1 HEURE2 TEMPERATURE2

• Exemple :Reykjavik 4 -15.4 16 3.4Limoges 6 -1.5 18 12.5GothamCity 5 18.5 20 30.2

Page 76: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

76/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Ouverture d'un fichier

• Si le fichier n'existe pas encore, il faut le créer (dire où il sera sauvegardé)

• Sinon, il faut le désigner (dire où il est placé)• Une fois créé ou désigné, il faut spécifier le mode

d'ouverture :– mode lecture : permettra seulement de lire des données

dans le fichier– mode écriture : permettra seulement d'écrire des

données dans le fichier– mode lecture/écriture : permettra les deux.

Page 77: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

77/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

La tête de lecture/écriture

Là.

Page 78: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

78/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

La tête de lecture/écriture

• Lorsqu'on ouvre un fichier, la tête de lecture/écriture est positionnée au début du fichier

• Lorsqu'on lit ou écrit un élément dans le fichier, cette opération s'effectue à la position courante de la tête

• Après l'opération, la tête se déplace derrière l'élément qui vient d'être lu ou écrit

• La fonction Fin (fichier) renvoie vrai si la tête a atteint la fin du fichier (inutile d'essayer de lire des données dans ce cas)

• Il est impossible de supprimer ou d'insérer de nouvelles données dans un fichier ; par contre on peut écraser des données (écrire "par-dessus" des données existantes)

Page 79: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

79/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Format texte

• Des données stockées au format texte sont "lisibles par un humain"

• ... et donc lisibles par un éditeur de texte, par exemple gedit ou wordpad

• Dans la pratique (en langage C), lecture avec fscanf et écriture avec fprintf

• Il faudrait toujours vérifier que la fonction fscanf renvoie une valeur > 0 avant d'exploiter les données…!

Page 80: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

80/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Charger un fichier texte (dont on connaît la structure...)

#include <stdio.h>

#include <stdlib.h>

#include <iostream>

using namespace std;

int main() {

 FILE *f;

 f = fopen("relevesMeteo.txt", "r");

 if (f == NULL) {

  printf ("Opération impossible");

  exit (0);

 } 

 while (1) {

  char nom[100];

  int h1, h2; float r1, r2;

  fscanf(f, "%s", nom);

  if (feof(f)) break;

  fscanf(f, "%d", &h1);

  fscanf(f, "%f", &r1);

  

  fscanf(f, "%d", &h2);

  fscanf(f, "%f", &r2);

  cout<<nom<<": ("<<h1<<", "<<r1<<")     ("<<h2<<", "<<r2<<")"<<endl;

 }

 fclose(f);

}

Choix d'un fichierdans le dossier courant

Indique qu'il n'y a plus rien à lire dans le fichier

Page 81: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

81/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Les formateurs

• La syntaxe des formateurs est la suivante :

• %[attributs][largeur][.précision][taille] type

• Un formateur commence donc toujours par le caractère %. Pour afficher ce caractère sans faire un formateur, il faut le dédoubler (%%)

Type de donnée à afficher Caractère de formatage

Entier décimal signé d

Entier décimal non signé u ou i

Entier octal non signé o

Entier hexadécimal non signé

x (avec les caractères 'a' à 'f') ou X (avec les caractères 'A' à 'F')

Flottant de type double f, e, g, E ou G

Caractère isolé c

Chaîne de caractères s

Pointeur p

Page 82: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

82/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Ouverture en lecture, écriture, ...pointeur creation (char nom_fichier[]) {

FILE *f; pointeur L, p;f = fopen(nom_fichier, "r");

• le premier paramètre est évidemment le nom du fichier, le 2ème ("r") représente de mode d'ouverture de ce fichier. Voici les paramètres possibles

– r ouverture en lecture seulement – w ouverture en écriture seulement (la fonction crée le fichier s'il n'existe

pas) – a ouverture en écriture seulement avec ajout du contenu à la fin du fichier

(la fonction crée le fichier s'il n'existe pas) – r+ ouverture en lecture et écriture – w+ ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe

pas) – a+ ouverture en lecture et écriture avec ajout du contenu à la fin du fichier

(la fonction crée le fichier s'il n'existe pas)

Page 83: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

83/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Créer un fichier texte#include <stdio.h>

#include <stdlib.h>

#include <iostream>

using namespace std;

int main() {

 FILE *f;

 int n, i;

 f = fopen("notesEtudiants.txt", "w");

 if (f == NULL) {

  printf ("Opération impossible");

  exit (0);

 } 

 cout<<"Nombre d'étudiants ? ";

 cin>>n;

 for (i = 0; i < n; i++) {

  char nom[100];

  float note;

  cout<<"Nom ? ";

  cin>>nom;

  cout<<"Note ? ";

  cin>>note;

  fprintf(f, "%s ", nom);

  fprintf(f, "%f\n", note);

 }

 fclose(f);

}

!

A vous d'ajouterles espaces et les retours à la ligne

Page 84: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

84/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Quizz #5 : laquelle de ces propositions est fausse ?

A) Un fichier texte peut contenir des données de n'importe quel type (caractères, nombres, etc)

B) Un fichier texte ne peut contenir une image ou une vidéo

C) Un fichier texte peut être facilement compressé

D) Un fichier texte peut contenir un nombre quelconque de caractères

Page 85: Algo 3 - Cours 1 · – Lecture/écriture au format texte – Lecture/écriture au format binaire. Benoit.Crespin@unilim.fr - https: ... Programme final en ooBasic Sub Main Dim maFeuille

85/[email protected] - https://community-sciences.unilim.fr/course/view.php?id=1873

Format binaire

• Les données seront stockées sous forme binaire, donc illisibles avec un éditeur de texte

• Une conversion automatique se fait lors des opérations de lecture/écriture

• En langage C, on utilise les fonctions fread et fwrite

• Ici encore, il faut vérifier que fread renvoie une valeur > 0