aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/structures des données/tme/tme1-2/exo1
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-09-19 12:16:41 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-09-19 12:16:41 +0200
commit5a08a4e1e055a0a702a54cfa867d7fdebf2c1ad7 (patch)
tree470e9aeb90b79f61beaab352fa0e394b9e76b11f /semestre 3/structures des données/tme/tme1-2/exo1
parentcac7f3e868e98281f9f2b841101b09f02cf664fd (diff)
Cours du 15 au 19 septembre
Diffstat (limited to 'semestre 3/structures des données/tme/tme1-2/exo1')
-rw-r--r--semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c23
-rw-r--r--semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c33
-rw-r--r--semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c45
3 files changed, 101 insertions, 0 deletions
diff --git a/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c
new file mode 100644
index 0000000..51b6d92
--- /dev/null
+++ b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p1.c
@@ -0,0 +1,23 @@
+#include<stdio.h>
+#include<stdlib.h>
+
+const static int len = 10;
+
+int main(void) {
+ int *tab;
+ /* etait en unsigned */
+ int i;
+
+ tab = (int*)malloc(len*sizeof(int));
+
+ /* quand etait en unsigned, on avait un overflow a cause du i--, ce qui le remettait en positif
+ * ainsi, la boucle ne s'arretait jamais
+ */
+ for (i=len-1; i>=0; i--) {
+ tab[i] = i;
+ }
+
+ free(tab);
+ return 0;
+}
+
diff --git a/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c
new file mode 100644
index 0000000..fb99ee7
--- /dev/null
+++ b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p2.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct adresse {
+ int numero;
+ char* rue;
+ int code_postal;
+} Adresse;
+
+Adresse* creer_adresse(int n, char* r, int c) {
+ Adresse* new = (Adresse*) malloc(sizeof(Adresse));
+
+ new->numero = n;
+ /* l'erreur dans ce code etait que new->rue n'etait pas assez grand pour contenir 'r'
+ * de plus, le pointeur n'allait pas etre persistant, donc on a besoin de rajouter un malloc
+ * pour la regler, je l'ai donc initialisee
+ */
+ new->rue = (char*) malloc(sizeof(char)*strlen(r));
+ strcpy(new->rue, r);
+ new->code_postal = c;
+
+ return new;
+}
+
+int main(void) {
+ Adresse* maison = creer_adresse(12, "manoeuvre", 15670);
+
+ printf("Adresse courante : %d rue %s %d France\n", maison->numero, maison->rue, maison->code_postal);
+
+ return 0;
+}
+
diff --git a/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c
new file mode 100644
index 0000000..577721c
--- /dev/null
+++ b/semestre 3/structures des données/tme/tme1-2/exo1/tme1_exo1p3.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef struct tableau{
+ int* tab;
+ int maxTaille;
+ int position;
+}Tableau;
+
+void ajouterElement(int a, Tableau *t){
+ t->tab[t->position]=a;
+ t->position++;
+}
+
+Tableau* initTableau(int maxTaille){
+ Tableau* t = (Tableau*)malloc(sizeof(Tableau));
+ t->position=0;
+ t->maxTaille=maxTaille;
+ /* les 400 bytes repeperes par valgrind proviennent d'ici : 400/4 = 100, 4 etant la taille d'un int ici */
+ t->tab=(int*)malloc(sizeof(int)*maxTaille);
+ return t;
+}
+
+void affichageTableau(Tableau* t){
+ printf("t->position = %d\n",t->position);
+ printf("[ ");
+ for (int i=0; i < (t->position); i++){
+ printf("%d ",t->tab[i]);
+ }
+ printf("]\n");
+}
+
+int main(){
+ Tableau* t;
+ t = initTableau(100);
+ ajouterElement(5,t);
+ ajouterElement(18,t);
+ ajouterElement(99999,t);
+ ajouterElement(-452,t);
+ ajouterElement(4587,t);
+ affichageTableau(t);
+ /* ce programme provoquait un leak car il ne liberait jamais tab */
+ free(t->tab);
+ free(t);
+}