70 lines
1.4 KiB
C
70 lines
1.4 KiB
C
|
# include <stdio.h>
|
||
|
# include <stdlib.h>
|
||
|
|
||
|
struct mail {
|
||
|
double x;
|
||
|
double y;
|
||
|
struct mail* suivant;
|
||
|
};
|
||
|
|
||
|
typedef struct mail maillon;
|
||
|
|
||
|
void afficher_liste(maillon* liste) {
|
||
|
maillon* p;
|
||
|
for (p = liste; p != NULL; p = p->suivant) {
|
||
|
printf("(%.1f, %.1f) -> ", p->x, p->y);
|
||
|
}
|
||
|
putchar('\n');
|
||
|
}
|
||
|
|
||
|
maillon* creation_liste(void) {
|
||
|
int i;
|
||
|
maillon* p;
|
||
|
maillon* premier;
|
||
|
maillon* s;
|
||
|
srand(time(NULL));
|
||
|
premier = (maillon*) malloc(sizeof(maillon));
|
||
|
if (!premier) {
|
||
|
printf("Erreur d'allocation mémoire. (1) \n");
|
||
|
}
|
||
|
premier->x = -12; /* Le premier maillon sera toujours négatif, les autres seront aléatoires */
|
||
|
premier->y = -3;
|
||
|
p = premier;
|
||
|
for (i = 0; i != 4; i++) {
|
||
|
s = (maillon*) malloc(sizeof(maillon));
|
||
|
if (!s) {
|
||
|
printf("Erreur d'allocation mémoire. (2) \n");
|
||
|
}
|
||
|
s->x = (rand() % 50) - 25;
|
||
|
s->y = (rand() % 50) - 25;
|
||
|
p->suivant = s;
|
||
|
p = s;
|
||
|
}
|
||
|
return premier;
|
||
|
}
|
||
|
|
||
|
maillon* supprime_coord_negatives(maillon* liste) {
|
||
|
maillon* p;
|
||
|
maillon* premier = liste;
|
||
|
maillon* precedent = liste;
|
||
|
for (p = liste; p != NULL; p = p->suivant) {
|
||
|
if ((p->x) < 0.0 && (p->y) < 0.0) {
|
||
|
p = precedent;
|
||
|
p->suivant = p->suivant->suivant;
|
||
|
precedent = p;
|
||
|
p = p->suivant;
|
||
|
}
|
||
|
else {
|
||
|
precedent = p;
|
||
|
}
|
||
|
}
|
||
|
return premier;
|
||
|
}
|
||
|
|
||
|
int main(void) {
|
||
|
maillon* liste = creation_liste();
|
||
|
afficher_liste(liste);
|
||
|
afficher_liste(supprime_coord_negatives(liste));
|
||
|
return EXIT_SUCCESS;
|
||
|
}
|