TP06 Listes Chainées Début
This commit is contained in:
parent
743b3436df
commit
ba81c711f4
40
APL1.2/TP06/arc_en_ciel.c
Normal file
40
APL1.2/TP06/arc_en_ciel.c
Normal file
@ -0,0 +1,40 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <graph.h>
|
||||
#include "graph_sup.h"
|
||||
|
||||
struct block_ {
|
||||
char* value;
|
||||
struct block_* next;
|
||||
};
|
||||
|
||||
typedef struct block_ block;
|
||||
typedef block* list;
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
InitialiserGraphique();
|
||||
CreerFenetre(100, 100, 800, 200);
|
||||
|
||||
block violet = {"purple", NULL};
|
||||
block indigo = {"indigo", &violet};
|
||||
block bleu = {"blue", &indigo};
|
||||
block vert = {"green", &bleu};
|
||||
block jaune = {"yellow", &vert};
|
||||
block orange = {"orange", &jaune};
|
||||
block rouge = {"red", &orange};
|
||||
|
||||
violet.next = &rouge;
|
||||
|
||||
list l = &rouge;
|
||||
|
||||
while(1) {
|
||||
if (DrawNextFrame()) {
|
||||
SetColorN(l->value);
|
||||
EcrireTexte(200, 50, argv[1], 2);
|
||||
l = l->next;
|
||||
}
|
||||
}
|
||||
FermerGraphique();
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
52
APL1.2/TP06/circulation.c
Normal file
52
APL1.2/TP06/circulation.c
Normal file
@ -0,0 +1,52 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
struct block_ {
|
||||
int value;
|
||||
struct block_* next;
|
||||
};
|
||||
|
||||
typedef struct block_ block;
|
||||
typedef block* list;
|
||||
|
||||
void remLast(list l) {
|
||||
block* b = l;
|
||||
while (b->next->next != NULL) b = b->next;
|
||||
b->next = NULL;
|
||||
}
|
||||
|
||||
void showList(list l) {
|
||||
block* b = l;
|
||||
while (b != NULL) {
|
||||
printf("%d ", b->value);
|
||||
b = b->next;
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
|
||||
list circularRotation(list l) {
|
||||
block* b = l;
|
||||
while (b->next->next != NULL) b = b->next;
|
||||
list first = b->next;
|
||||
first->next = l;
|
||||
b->next = NULL;
|
||||
return first;
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
block b4 = {19, NULL};
|
||||
block b3 = {15, &b4};
|
||||
block b2 = {10, &b3};
|
||||
block b1 = {5, &b2};
|
||||
block b0 = {1, &b1};
|
||||
|
||||
list l = &b0;
|
||||
|
||||
showList(l);
|
||||
remLast(l);
|
||||
showList(l);
|
||||
l = circularRotation(l);
|
||||
showList(l);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
71
APL1.2/TP06/graph_sup.c
Normal file
71
APL1.2/TP06/graph_sup.c
Normal file
@ -0,0 +1,71 @@
|
||||
#include "utils.h"
|
||||
#include <graph.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "graph_sup.h"
|
||||
|
||||
#define FPS 2.0
|
||||
|
||||
/*La liste des bouttons et leur nombre*/
|
||||
button* Buttons;
|
||||
int BT_Count = 0;
|
||||
|
||||
/*Des variables afin de faciliter le calcul du temps entre chaque image pour int DrawNextFrame().*/
|
||||
double delta = (1/FPS)*1000000;
|
||||
unsigned long suivant = (1/FPS)*1000000;
|
||||
|
||||
/*Un set de fonction permettant de facilement mettre en place des boutons, pouvoir les manipuler et les supprimer
|
||||
Ces fonctions utilisent la structure struct Button.*/
|
||||
void ClearButtons() {
|
||||
BT_Count = 0;
|
||||
Buttons = (button*)realloc(Buttons, sizeof(button) * 1);
|
||||
}
|
||||
|
||||
void AddButton(int x, int y, int w, int h, int id) {
|
||||
button BT = {x, y, w, h, id};
|
||||
BT_Count++;
|
||||
Buttons = (button*) realloc(Buttons, (BT_Count+1) * sizeof(button));
|
||||
Buttons[BT_Count-1] = BT;
|
||||
}
|
||||
|
||||
int GetButton(int x, int y) {
|
||||
for (int ID = 0; ID < BT_Count; ID++) {
|
||||
button BT = Buttons[ID];
|
||||
if (x >= BT.x && y >= BT.y && x <= BT.x + BT.w && y <= BT.y + BT.h) {
|
||||
return BT.id;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*Des fonctions appelant celles de la bibliothèque graphique afin de réduire la longueur des noms..*/
|
||||
couleur GetColorN(char* name) {
|
||||
return CouleurParNom(name);
|
||||
}
|
||||
|
||||
couleur GetColor(unsigned char r, unsigned char g, unsigned char b) {
|
||||
return CouleurParComposante(r, g, b);
|
||||
}
|
||||
|
||||
void SetColor(unsigned char r, unsigned char g, unsigned char b) {
|
||||
ChoisirCouleurDessin(CouleurParComposante(r, g, b));
|
||||
}
|
||||
|
||||
void SetColorC(couleur Color) {
|
||||
ChoisirCouleurDessin(Color);
|
||||
}
|
||||
|
||||
void SetColorN(char* name) {
|
||||
ChoisirCouleurDessin(CouleurParNom(name));
|
||||
}
|
||||
|
||||
/*Permet de faire tourner la partie graphique à X images par secondes définit par la constante FPS.*/
|
||||
int DrawNextFrame() {
|
||||
if (Microsecondes() >= suivant) {
|
||||
suivant = Microsecondes() + delta;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
32
APL1.2/TP06/graph_sup.h
Normal file
32
APL1.2/TP06/graph_sup.h
Normal file
@ -0,0 +1,32 @@
|
||||
#ifndef _GRAPH_SUP_H
|
||||
#define _GRAPH_SUP_H
|
||||
|
||||
#define WIDTH 1200
|
||||
#define HEIGHT 700
|
||||
|
||||
struct Button {
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
int id;
|
||||
};
|
||||
|
||||
typedef struct Button button;
|
||||
|
||||
extern button* Buttons;
|
||||
extern int BT_Count;
|
||||
|
||||
void ClearButtons();
|
||||
int GetButton(int x, int y);
|
||||
void AddButton(int x, int y, int w, int h, int id);
|
||||
|
||||
int DrawNextFrame(void);
|
||||
|
||||
couleur GetColorN(char* name);
|
||||
couleur GetColor(unsigned char r, unsigned char g, unsigned char b);
|
||||
void SetColor(unsigned char r, unsigned char g, unsigned char b);
|
||||
void SetColorC(couleur Color);
|
||||
void SetColorN(char* name);
|
||||
|
||||
#endif
|
55
APL1.2/TP06/maximum.c
Normal file
55
APL1.2/TP06/maximum.c
Normal file
@ -0,0 +1,55 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<time.h>
|
||||
|
||||
struct maillon_s {
|
||||
unsigned short valeur;
|
||||
struct maillon_s* suivant;
|
||||
};
|
||||
|
||||
typedef struct maillon_s maillon;
|
||||
typedef maillon* liste;
|
||||
|
||||
void list(liste l) {
|
||||
maillon* m = l;
|
||||
while (m != NULL) {
|
||||
printf("%3hu ", m->valeur);
|
||||
m = m->suivant;
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
|
||||
unsigned short max(liste l) {
|
||||
maillon* m = l;
|
||||
unsigned short max = 0;
|
||||
|
||||
while (m != NULL) {
|
||||
if (m->valeur > max) max = m->valeur;
|
||||
m = m->suivant;
|
||||
}
|
||||
|
||||
return max;
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
liste l;
|
||||
maillon* last_m = NULL;
|
||||
|
||||
srand(time(NULL));
|
||||
for (int i = 0; i < 10; i++) {
|
||||
srand(rand());
|
||||
unsigned short random = rand() % (999-111) + 111;
|
||||
maillon* new_m = malloc(sizeof(maillon));
|
||||
new_m->valeur = random;
|
||||
|
||||
if (last_m != NULL) new_m->suivant = last_m;
|
||||
last_m = new_m;
|
||||
}
|
||||
|
||||
l = last_m;
|
||||
|
||||
list(l);
|
||||
printf("%3hu\n", max(l));
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
111
APL1.2/TP06/selection.c
Normal file
111
APL1.2/TP06/selection.c
Normal file
@ -0,0 +1,111 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<time.h>
|
||||
|
||||
struct block_ {
|
||||
int value;
|
||||
struct block_* next;
|
||||
};
|
||||
|
||||
typedef struct block_ block;
|
||||
typedef block* list;
|
||||
|
||||
void showList(list l) {
|
||||
block* b = l;
|
||||
while (b != NULL) {
|
||||
printf("%d ", b->value);
|
||||
b = b->next;
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
|
||||
list insert(list l, int value, int index) {
|
||||
block* b = l;
|
||||
if (index == -1) {
|
||||
while (b->next != NULL) b = b->next;
|
||||
block* new_block = malloc(sizeof(block));
|
||||
new_block->value = value;
|
||||
b->next = new_block;
|
||||
return l;
|
||||
} else if (index == 0) {
|
||||
block* new_block = malloc(sizeof(block));
|
||||
new_block->value = value;
|
||||
new_block->next = l;
|
||||
return new_block;
|
||||
} else {
|
||||
for (int i = 0; i < index-1; i++) {
|
||||
b = b->next;
|
||||
}
|
||||
|
||||
block* new_block = malloc(sizeof(block));
|
||||
new_block->value = value;
|
||||
new_block->next = b->next;
|
||||
b->next = new_block;
|
||||
return l;
|
||||
}
|
||||
}
|
||||
|
||||
list suppress(list l, int index) {
|
||||
if (index == 0) return l->next;
|
||||
else {
|
||||
block* b = l;
|
||||
for (int i = 0; i < index-1; i++) {
|
||||
b = b->next;
|
||||
}
|
||||
|
||||
if (b->next->next != NULL) b->next = b->next->next;
|
||||
else b->next = NULL;
|
||||
|
||||
return l;
|
||||
}
|
||||
}
|
||||
|
||||
list sort(list l) {
|
||||
list sorted = NULL;
|
||||
while (l != NULL) {
|
||||
int index = 0;
|
||||
int max_index = 0;
|
||||
block* max = malloc(sizeof(block));
|
||||
max->value = 0;
|
||||
block* curr = l;
|
||||
|
||||
while (curr != NULL) {
|
||||
if (curr->value > max->value) {
|
||||
max_index = index;
|
||||
max = curr;
|
||||
}
|
||||
|
||||
index++;
|
||||
curr = curr->next;
|
||||
}
|
||||
|
||||
l = suppress(l, max_index);
|
||||
sorted = insert(sorted, max->value, 0);
|
||||
}
|
||||
|
||||
return sorted;
|
||||
}
|
||||
|
||||
list randList() {
|
||||
list l = NULL;
|
||||
srand(time(NULL));
|
||||
for (int i = 0; i < 10; i++) {
|
||||
srand(rand());
|
||||
int random = rand() % (999-111) + 111;
|
||||
block* new_m = malloc(sizeof(block));
|
||||
new_m->value = random;
|
||||
if (l != NULL) new_m->next = l;
|
||||
l = new_m;
|
||||
}
|
||||
|
||||
return l;
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
list l = randList();
|
||||
showList(l);
|
||||
l = sort(l);
|
||||
showList(l);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user