diff options
Diffstat (limited to 'semestre 2/informatique')
6 files changed, 250 insertions, 0 deletions
diff --git a/semestre 2/informatique/5- Tableaux à plusieurs dimensions & strings.md b/semestre 2/informatique/5- Tableaux à plusieurs dimensions & strings.md new file mode 100644 index 0000000..4d259b5 --- /dev/null +++ b/semestre 2/informatique/5- Tableaux à plusieurs dimensions & strings.md @@ -0,0 +1,49 @@ +--- +tags: + - sorbonne + - informatique +semestre: 2 +--- +## Tableaux à plusieurs dimensions +Pour déclarer un tableau à deux dimensions, on fait : +```c +T tab[n1][n2]; +``` +où `n1` et `n2` sont deux entiers naturels non nul et `T` est un type valide. + +On a que `tab[0][a] = *(tab+a)` et que `tab[b][a] = *(tab+a+n2*b)` (`n2` étant la taille de tableau à l'intérieur) +|> besoin de connaître la taille des deux lignes ! +|> d'une manière plus concrète, on a `tab[4][5]`, donc `tab[2][3] = *(tab+3+2*5)` +## Strings +Un caractère est de type `char` et peut se noter avec un entier ou un caractère ASCII avec `''` (i.e. `'a'`) +|> est enregistré sur un octet : 256 valeurs possibles +|> est affichable avec `%d` (car est un petit int) et `%c` +|> ne contient pas assez de place pour tout afficher : problème pour encoder les accents -> besoin d'utiliser une autre table d'encodage + +> [!NOTE] Interprétation des `char` +> En C, on peut remplacer n'importe quelle valeur entière `char` par leur équivalent en caractère + +Les chaînes de caractères sont entre `""` (i.e. `"hello world"`) : ce sont des `char[]` +|> se termine ***toujours*** par `\0` (est le 0 ou le null des chaînes de caractères) +|> on peut les déclarer classiquement avec `char s[8] = "bonjour";` +|> on les affiche avec `%s` + +> [!info] Le `\0` est sous-entendu avec les guillemets, mais pas quand on déclare manuellement (avec un tableau) + +> [!warning] Différence entre strings et tableau de caractère +> Si on n'utilise pas de `\0` dans un tableau, cela devient un array de caractère + +> [!error] Initialisation d'un string +> Quand on initialise et assigne un string, on doit bien faire attention à ce que le tableau soit assez grand + +> [!warning] On ne peut pas modifier une chaîne de caractère statique +> i.e. `char *p = "hello"` n'est pas modifiable +> +> Par contre, `char s[] = "hello";`, `char *p = s;` et `p[0] = 'H'` est valide + +La bibliothèque de gestion des strings est `string.h` +|> permet de compter la taille d'un string avec `strlen` +|> *voir poly pour les autres fonctions* + +> [!warning] Les chaines de caractère sont des arrays ! +> Donc, quand on doit renvoyer une nouvelle chaîne de caractères, on doit utiliser `malloc` pour éviter d'avoir un segmentation fault ! diff --git a/semestre 2/informatique/td/4- arrays.md b/semestre 2/informatique/td/4- arrays.md new file mode 100644 index 0000000..5c1067d --- /dev/null +++ b/semestre 2/informatique/td/4- arrays.md @@ -0,0 +1,10 @@ +--- +tags: + - sorbonne + - informatique + - td +semestre: 2 +--- +Pour utiliser du random en C, on a besoin de `stdlib.h` +- `srand` permet de set la seed (on peut utiliser `time(NULL))` qui est dans `time.h` pour utiliser le timestamp actuel) +- `rand` donne un aléatoire entre 0 et `RAND_MAX` (une constante prédéfinie)
\ No newline at end of file diff --git a/semestre 2/informatique/tme/semaine3/17_compter_random.c b/semestre 2/informatique/tme/semaine3/17_compter_random.c new file mode 100644 index 0000000..10a1ff3 --- /dev/null +++ b/semestre 2/informatique/tme/semaine3/17_compter_random.c @@ -0,0 +1,29 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +#define NB_VALEURS 20 +#define VMIN -20 +#define VMAX 20 + +int valeur_aleatoire(int min, int max){ + return min + rand()%(max+1-min); +} + +void pos_neg_zero(int *neg, int *zero, int *pos, int v){ + if (v > 0) (*pos)++; + else if (v < 0) (*neg)++; + else (*zero)++; +} + +int main(){ + srand(time(NULL)); + int neg = 0, pos = 0, zero = 0; + for (int i = 0; i < NB_VALEURS; i++){ + int v = valeur_aleatoire(VMIN, VMAX); + pos_neg_zero(&neg, &zero, &pos, v); + } + printf("valeurs:\n\t- positives: %d\n\t- nulles: %d\n\t- négatives: %d\n", pos, zero, neg); + return 0; +} + diff --git a/semestre 2/informatique/tme/semaine3/18_tri_trois_valeurs.c b/semestre 2/informatique/tme/semaine3/18_tri_trois_valeurs.c new file mode 100644 index 0000000..cfea419 --- /dev/null +++ b/semestre 2/informatique/tme/semaine3/18_tri_trois_valeurs.c @@ -0,0 +1,38 @@ +#include <assert.h> + +void echange(int *a, int *b){ + int t = *a; + *a = *b; + *b = t; +} + +void tri(int *a, int *b){ + if (*a <= *b) return; + echange(a,b); +} + +void tri_3(int *a, int *b, int *c){ + tri(a, b); + tri(a, c); + tri(b, c); +} + +int main(){ + int a = 2, b = 5; + echange(&a, &b); + assert(a == 5); + assert(b == 2); + tri(&a, &b); + assert(a == 2); + assert(b == 5); + int c = 8; + a = 4; b = 2; + tri_3(&a, &b, &c); + assert(a == 2 && b == 4 && c == 8); + a = 2; b = 4; c = 8; + tri_3(&a, &b, &c); + assert(a == 2 && b == 4 && c == 8); + a = 8; b = 4; c = 2; + tri_3(&a, &b, &c); + assert(a == 2 && b == 4 && c == 8); +} diff --git a/semestre 2/informatique/tme/semaine3/19_moyenne_min_max.c b/semestre 2/informatique/tme/semaine3/19_moyenne_min_max.c new file mode 100644 index 0000000..11c66db --- /dev/null +++ b/semestre 2/informatique/tme/semaine3/19_moyenne_min_max.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <assert.h> +#define VAL1 12 +#define VAL2 7 +#define VAL3 5 +#define VAL4 9 + +void min_max(int *min, int *max, int v){ + if (v > *max) *max = v; + if (v < *min) *min = v; +} + +void stats(float*moy, int*max, int*min, int a, int b, int c, int d){ + if (a < 0) return; + int sum = a; + *min = a; + *max = a; + if (b < 0) { + *moy = a; + return; + } + sum += b; + min_max(min, max, b); + if (c < 0) { + *moy = sum/ (float) 2; + return; + } + sum += c; + min_max(min, max, c); + if (d < 0){ + *moy = sum/ (float) 3; + return; + } + sum += d; + min_max(min, max, d); + *moy = sum/ (float) 4; +} + +void afficher_resultat(float moyenne, int min, int max){ + printf("max = %d, min = %d, moy = %.2f\n",max,min,moyenne); +} + +int main(){ + float moy = -1; + int min, max = -1; + + stats(&moy, &max, &min, VAL1, VAL2, VAL3, VAL4); + + afficher_resultat(moy, min, max); + return 0; +} diff --git a/semestre 2/informatique/tme/semaine3/20_calcul_racines_polynomes.c b/semestre 2/informatique/tme/semaine3/20_calcul_racines_polynomes.c new file mode 100644 index 0000000..08a9cdc --- /dev/null +++ b/semestre 2/informatique/tme/semaine3/20_calcul_racines_polynomes.c @@ -0,0 +1,73 @@ +#include <stdio.h> +#include <math.h> + +int nb_racines(int a, int b, int c){ + float delta = b*b-4*a*c; + if (delta > 0) return 2; + else if (delta == 0) return 1; + return 0; +} + +int nb_racines_delta(int a, int b, int c, float*delta){ + *delta = b*b-4*a*c; + if (*delta > 0) return 2; + else if (*delta == 0) return 1; + return 0; +} + +int racines(int a, int b, int c, float*r1, float*r2){ + float delta; + int nb = nb_racines_delta(a, b, c, &delta); + *r1 = (-b-sqrt(delta))/(2*a); + *r2 = (-b+sqrt(delta))/(2*a); + return nb; +} + +void affiche_polynome(int a, int b, int c){ + printf("Polynome : "); + if (a == -1) printf("-"); + else if (a != 1) printf("%d", a); + printf("x*x"); + + if (b != 0) { + printf(" "); + if (b == -1) printf("-"); + else if (b != 1 && b > 0) printf("+%d", b); + else if (b != 1 && b < 0) printf("%d", b); + printf("x"); + } + + if (c != 0) { + printf(" "); + if (c > 0) printf("+%d", c); + else if (c < 0) printf("%d", c); + } + printf("\n"); +} + +void affiche_racine(int a, int b, int c){ + float r1 = 1.0, r2 = 1.0; + + int nb_r = racines(a, b, c, &r1, &r2); + if (nb_r == 2) printf("Le polynome a 2 racines : %.3f et %.3f\n", r1, r2); + else if (nb_r == 1) printf("Le polynome a une racine double : %.3f\n", r1); + else printf("Le polynome n'a pas de racine reelle.\n"); +} + +int main(){ + printf("\n\n=========================================================\n\n"); + int a = 4, b = 4, c = 1; + affiche_polynome(a, b, c); + affiche_racine(a, b, c); + printf("\n"); + + a = 4; b = 6; c = 1; + affiche_polynome(a, b, c); + affiche_racine(a, b, c); + printf("\n"); + + a = -7; b = -5; c = -1; + affiche_polynome(a, b, c); + affiche_racine(a, b, c); + return 0; +} |
