aboutsummaryrefslogtreecommitdiff
path: root/semestre 3/structures des données/tme/tme6-11/Chaine.c
blob: d25f38e8c99788b8d5df5187144a80f56e9db8d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "Chaine.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

Chaines* lectureChaines(FILE* f){
    char s[256];
    char* err = fgets(s, 256, f);
    if (!err) return NULL;
    int nbChain;
    sscanf(s, "NbChain: %d", &nbChain);

    err = fgets(s, 256, f);
    if (!err) return NULL;
    int gamma;
    sscanf(s, "Gamma: %d", &gamma);

    Chaines* chains = (Chaines*) malloc(sizeof(Chaines));
    chains->nbChaines = nbChain;
    chains->gamma = gamma;
    
    for (int i = 0; i < nbChain; i++){
        err = fgets(s, 256, f);
        if (!err) {
            free(chains); // avoiding a memory leak
            return NULL;
        }
        CellChaine* chain = (CellChaine*) malloc(sizeof(CellChaine));
        chain->points = NULL;
        chain->suiv = chains->chaines; 
        chains->chaines = chain; 
        int nbPoints;
        sscanf(s, "%d %d %s", &chain->numero, &nbPoints, s);
        for (int j = 0; j < nbPoints; j++){
            CellPoint* point = (CellPoint*) malloc(sizeof(CellPoint));
            point->suiv = chain->points;
            chain->points = point;
            if (j < nbPoints-1) sscanf(s, "%lf %lf %s", &point->x, &point->y, s);
            else sscanf(s, "%lf %lf", &point->x, &point->y);
        }
    }
    return chains;
}

void ecrireChaines(Chaines* c, FILE* f){
    fprintf(f, "NbChain: %d\n", c->nbChaines); 
    fprintf(f, "Gamma: %d\n", c->gamma);
    CellChaine** chains = (CellChaine**) malloc(sizeof(CellChaine)*c->nbChaines);
    CellChaine* chain = c->chaines;
    for (int i = 0; i < c->nbChaines; i++){
        chains[i - c->nbChaines - 1] = chain;
        chain = chain->suiv;
    }
}