Cours 1, 6 janvier 2005 Résoudre ax2 + bx + c = 0
- Le C fonctionne toujours au niveau des adresses.
(les autres langages fonctionnent généralement avec identificateurs) scanf ("%f %f %f", &a, &b, &c)
f, pour float (réel)
%, pour code de format
&, "déposer à l'adresse de a".
float bla1, bla2; <- déclaration comme réel.
#include <stdio.h> <- input/output
math.h <- fonctions maths (sqrt)
void main () \
{ > obligatoire …
} /
Visual C++ de MS, ds MS studio 1- Nouveau
2- Application W32 console 3- …
4- Nouveau C++ source f., nommer 5- Editer
6- build -> .exe
Cours 2, 13 janvier 2005
A) Information en C
Une information, en C, est caractérisée par:
1- Son nom (identificateur) caractères: lettre chiffres et _, commençant par une lettre ex.: taille, tp1, nbPouces, PIED_EN_METRES
contre-ex.: 1erTP, TP#1, "TP 1".
conseil: choisir un identif significatif et de longueur raisonnable nota: tp1, Tp1, tP1 et TP1 sont différents
2- Son type:
- int entier 27, -12, 12549, etc.
- float réel 1.27, 2.45, 0.0, -14.235, etc.
- char un caractère 'b', '-', 'Z', etc.
3- Sa valeur:
ex.: age int 27
poids float 72.9
sexe char 'H'
4- Sa nature:
- constante: valeur inchangée durant le traitement du programme (identificateurs tout en majuscules)
ex.: #define PI 3.141592654
#define BAR_INTRA 0.20
#define TAUX_PS 0.07 const int AGE_MAX=139;
const float NOTE_MAX=1000;
- variable
5- Code de format (pour la lecture et l'écriture) (résumé fin de la page 2 sur doc du jour)
6- Le nombre d'octets pour mémoriser l'information et son adresse mémoire.
int age = 21; sizeof(age) = sizeof(int) = 4 float taille = 1.75; sizeof(float) = sizeof(float) = 4 - l'adresse du premier octet est l'adresse de 'information.
&taille
&age
nota: \n (new line), changer de ligne
dans %d, on peut mettre %5d , on réserve alors 5 espaces pour le int
dans %f, on peut mettre %6.2f , on réserve 6 espaces et on veut 2 décimales
B) Opérateurs :
Pour manipuler (opérer) les informations (résumé sur la page 3 du document) 1- Opérateurs arithmétiques (pour les calculs)
+ - / (division entière) * nota: attention! (4/9 donne 0)
% (le modulo, soit le reste d'une division) (4.0/9 donne 0.444…) 2- Opérateurs relationnels
== != < > <= >= (trivial) 3- Opérateurs logiques (pour relier deux conditions ou le contraire)
! (contraire)
&& (ET logique)
|| (OU logique)
C) La sélection (le choix) 'if' if ( condition )
instruction A else
instruction B
nota: un if dans un if (ou else) est "if" imbliqué.
Cours 3, 20 janvier 2005
1- Instructions: A) simple: Une seule action, se termine par ; B) Composée: Un bloc de plusieurs instructions, entre { } 2- if imbriqués if à l'intérieur d'un if (…)
if
bla else
if
bla else
bla 3- Sélection multiple "suivant que" (switch):
switch (variable) { case blu1:
bla break;
case blu2:
bla break;
case blu3:
bla break;
default:
}
srand(time(0)); Lancer générateur aléatoire
maVariable = rand() % max; Obtenir la valeur, entre 0 et max, exclu
Cours 4, 27 janvier 2005 Utilisation des types de boucle
1- for
a) Quand on connaît d'avance le nombre de répétitions
b) Quand on connaît la valeur de départ, la valeur d'arrivée et que le pas est une constante.
2- while
a) Quand on ne sait pas à l'avance le nombre de fois qu'il faut répéter le traitement.
ex.: Tant que (je ne trouve pas) on cherche ex.: Pour la lecture d'un fichier
3- do … while
a) Comme le while, sauf qu'on effectue au moins une fois le traitement.
Nota: Les types de boucle sont généralement interchangeables, (…)
Statistiques de base
Voir: Fichiers cours 4\semaine4.doc, page 3.
À noter: fflush(stdin);
Cours 5, 3 février 2005
A) Fichiers: Fichiers cours 5\fichier_1969.doc
Lexique: FILE * maVar = fopen ("monfichier", "r"); // r ou w while (! feof(maVar)) …
fscanf(maVar, "mes codes de format", &adresses);
fprintf … fclose(maVar);
NOTA: même en lecture, ne PAS OUBLIER le \n …
B) Tableaux à un seul indice 1- Pourquoi un tableau?
o avec un seul nom, on travaille sur plusieurs variables o on peut profiter de plusieurs algorythmes disponbles:
- trier - rechercher - etc…
2- Déclaration et initialisation
a) Déclarer un tableau nombre de cafés et initialiser avec 2 tasses, 1, 0, 3, 2, 1 … int nbCafe[] = {2,1,0,3,2,1};
nbCafe[0] == 2
b) Déclarer un tableau d'au maximum 15 personnes et initialiser les tailles suivantes: 1.72, 1.65, 1.60.
#define MAX_PERS 15;
float taille[MAX_PERS] = {1.72, 1.65, 1.60};
c) Déclarer un tableau et remplir plus tard;
#define MAX_PERS 15;
float taille[MAX_PERS], poids[MAX_PERS];
int numero[MAX_PERS];
char sexe[MAX_PERS];
int nbPers;
3- Trier un tableau
- faire un tri avec 2 for imbriqués, avec un swap si plus petit (par exemple), boucler le j de i à la fin, boucler i de 0 à longueur -1
nota: pour initialiser à 0, il faut utiliser une boucle for
Cours 6, 10 février 2005
Fonctions… avec return
Dans le TP, éviter une lecture avec 9x %f, plutôt une boucle for…
Fait partie de l'intra:
1- Pas de type boolean en C
Pas de type string non plus, plutôt utiliser char chaine[MAX_CAR] = "bla";
en C, c'est un int 1 ou 0
2- Condition synthétisée: return a < b ? a : b ; /* Retournera a si vrai, b si faux */
3- Pour avoir la taille d'un tableau sans borne: taille = sizeof(tableau) / sizeof(type);
4- Majuscule à partir de minuscule, c = c + 'A' – 'a';
En supplément (pas à l'intra): for (i=0, j=k-1; i <j; i++, j--) {…
Cours 7, 17 février 2005
Nota: à partir de #2 TP2, minimiser le code du programme principal fonctions Les avantages de décomposer un long programme en petites fonctions:
- On peut partager la programmation
- La logique de chaque fonction est plus simple
- La maintenance du programme est moins complexe/dispendieuse
Révision:
a) Écrire les déclarations et initialisations des 2 tableaux::
b) Calculer et afficher la moyenne de chacun des deux tableaux c) Compter et afficher le nombre d'item > x ou < y
longueur d'un tableau int nb = sizeof(taille) / sizeof(float); // Si ce sont des float bien sûr
"faire le nécessaire" écrire les appels et la fonction
pas de boolean int !
test dans un tableau for avec return imbriqué pour éviter de faire des tests inutiles;
Conseils:
1- Apporter les feuilles résumées des matières.
2- Apporter les imprimés des TPs 3- Ne pas laisser de réponse vide 4- Bien répartir son temps
Cours 8, 10 mars 2005
…
C) Tableau à 2 indices tableau[0][0] …
Programmation 1- Déclarer :
#define MAX_ETUD 90
#define NB_NOTES 7
typedef float TabReel[MAX_ETUD][NB_NOTES];
Dans le programme:
a) TabReel note;
b) Dans l'entête de la fonction, on a le choix:
(…, TabReel note, …) ou
(…, float note[][NB_NOTES],…) c) Presque toujours travaillé avec for
Utile pour TP3, #1 A, mxn, B, nxp, C mxp for (i=0; i< m; i++)
for (j=0; j<p; j++) { C[i][j]=0.0;
for (k=0; k < n; k++) c[i][j] += A[i * B[ …
fscanf(aLire, "%c", &operation);
switch(operation) {
… case 'x':
fscanf(aLire, "%d%d%d\n", &m, &n, &p);
lire(aLire, A, m, n); afficher(A, "A", m, n);
lire(aLire, B, n, p); afficher(B, "B", n, p);
multiplier(A, B, m, n, p, C);
afficher(C,"C=AxB",m,p);
break;
… }
idempotente, 'i', A2=A
nilpotente, 'n', Ax=0 (ordre = x)
symétrique, 's', Aij=Aji (une partie!, … break!)
Cours 9/10, 24 mars 2005 Type énumération:
But: Donner un nom à une constante pour la clarté du codage.
Le C permet: note[29][Intra] (plutôt que note[29][0])
enum {Intra, Final, TP1, TP2, TP3, TPs, Globale};
for (i = Intra; i <= Globale; i++) …
enum Categorie {Intra, Final, TP1, TP2, TP3, TPs, Globale};
…
enum Categorie cat;
…
note[11][TPs] = note[11][TP1] + note[11][TP2] + note[11][TP3];
ou
note[11][TPs] = 0.0;
for (cat = TP1; cat <= TP3; cat++) …
enum {Lundi = 2, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche = 1};
…
switch (rang) { case Lundi:
Le type structure et le tableau de structure
But: Être moins lourd et moins long à programmer qu'avec une série de tableaux. (entêtes, permutations, nombreux)
struct { (fortement déconseillé)
float taille;
int age;
} pers1, pers2;
struct Personne { float taille;
int age;
} pers1, pers2;
…
struct Personne pers3;
typedef struct {
float taille;
int age;
} Personne;
…
Personne pers3;
…
pers2.taille = 1.72; pers2.age = 23;
…
pers2 = pers1; *** Affecte les valeurs de pers1 à pers2 ***
Tableau de structure:
ex.: #define MAX_PERS 25 typedef struct {
float taille;
int age;
} Personne;
Personne pers[MAX_PERS];
…
pers[3].taille = 1.75;
Nota: Le type structure est l'ancêtre de la notion de classe dans la programmation orientée objet (POO)
Cours 11, 31 mars 2005 - absent -
Etudiant * p = &etud[1]; le pointeur p reçoit l'adresse de la variable etud[1]
printf("%s %4.1f\n", p->codePerm, p->note[TP1]);
p-> codePerm "le code permanent pointé par p"
Nota: (*p).champ est équivalent à p->champ
Nota: p++ augmente l'adresse pour passer automatiquement à l'adresse de la structure suivante!
ex.:
void calculer(float poids[], int nbPers, float *p1, float *p2) { float sommePoids = 0.0;
int i;
for (i = 0; i < nbPers; i++) sommePoids += poids[i]
*p1 = poids[0] + poids[1];
*p2 = sommePoids / nbPers;
}
………
float poids = {56.2, 78.9, …}
int nbPers = sizeof(poids)/sizeof(float);
float somme, moyen;
calculer(poids, nbPers, &somme, &moyen);
printf("%6.2f %6.2f\n", somme, moyen);
Cours 12, 7 avril 2005 1) Le C++ vs le C
(non évalué pour H05)
Le C++, c'est le C incluant des nouveautés.
Buts:
- Rend la programmation plus élégante, plus agréable.
- Permet de faire de la POO template = patron
2) POO (non évalué)