TP07 Listes Chainées (suite)
This commit is contained in:
parent
ba81c711f4
commit
e032e57920
58
APL1.2/TP07/chaines.c
Normal file
58
APL1.2/TP07/chaines.c
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
|
||||||
|
struct char_ {
|
||||||
|
char letter;
|
||||||
|
struct char_* next;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct char_ string_char;
|
||||||
|
typedef string_char* string;
|
||||||
|
|
||||||
|
void printString(string str) {
|
||||||
|
while (str != NULL) {
|
||||||
|
printf("%c", str->letter);
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
string toString(char* str) {
|
||||||
|
|
||||||
|
string_char* last_c = NULL;
|
||||||
|
for (int i = strlen(str)+1; i >= 0; i--) {
|
||||||
|
string_char* c = malloc(sizeof(string_char));
|
||||||
|
c->letter = str[i];
|
||||||
|
c->next = last_c;
|
||||||
|
last_c = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return last_c;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* toCharT(string str) {
|
||||||
|
int count = 0;
|
||||||
|
string str2 = str;
|
||||||
|
while (str2 != NULL) {
|
||||||
|
count++;
|
||||||
|
str2 = str2->next;
|
||||||
|
}
|
||||||
|
char* new_str = calloc(sizeof(char), count);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
new_str[i] = str->letter;
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
return new_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
string c = toString("Hello World !");
|
||||||
|
printString(c);
|
||||||
|
char* c2 = toCharT(c);
|
||||||
|
printf("%s\n", c2);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
63
APL1.2/TP07/extensions.c
Normal file
63
APL1.2/TP07/extensions.c
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
|
||||||
|
struct char_ {
|
||||||
|
char letter;
|
||||||
|
struct char_* next;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct char_ string_char;
|
||||||
|
typedef string_char* string;
|
||||||
|
|
||||||
|
string toString(char* str) {
|
||||||
|
|
||||||
|
string_char* last_c = NULL;
|
||||||
|
for (int i = strlen(str)+1; i >= 0; i--) {
|
||||||
|
string_char* c = malloc(sizeof(string_char));
|
||||||
|
c->letter = str[i];
|
||||||
|
c->next = last_c;
|
||||||
|
last_c = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return last_c;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* toCharT(string str) {
|
||||||
|
int count = 0;
|
||||||
|
string str2 = str;
|
||||||
|
while (str2 != NULL) {
|
||||||
|
count++;
|
||||||
|
str2 = str2->next;
|
||||||
|
}
|
||||||
|
char* new_str = calloc(sizeof(char), count);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
new_str[i] = str->letter;
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
return new_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sputs(string str) {
|
||||||
|
while (str != NULL) {
|
||||||
|
printf("%c", str->letter);
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void sfgets(string* str, int maxLength, FILE * stream) {
|
||||||
|
char line[2048];
|
||||||
|
fgets(line, maxLength, stream);
|
||||||
|
|
||||||
|
*str = toString(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
string c;
|
||||||
|
sfgets(&c, 1000, stdin);
|
||||||
|
sputs(c);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
109
APL1.2/TP07/flocon.c
Normal file
109
APL1.2/TP07/flocon.c
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <graph.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "graph_sup.h"
|
||||||
|
|
||||||
|
struct vertex {
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
struct vertex* next;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct vertex vert;
|
||||||
|
typedef vert* poly;
|
||||||
|
|
||||||
|
double rad(double deg) {
|
||||||
|
return deg/180 * M_PI;
|
||||||
|
}
|
||||||
|
|
||||||
|
poly makeTri(double x, double y, double r) {
|
||||||
|
vert* p1 = malloc(sizeof(vert));
|
||||||
|
p1->x = x + cos(rad(30)) * r;
|
||||||
|
p1->y = y + sin(rad(30)) * r;
|
||||||
|
|
||||||
|
vert* p2 = malloc(sizeof(vert));
|
||||||
|
p2->x = x + cos(rad(150)) * r;
|
||||||
|
p2->y = y + sin(rad(150)) * r;
|
||||||
|
|
||||||
|
vert* p3 = malloc(sizeof(vert));
|
||||||
|
p3->x = x + cos(rad(270)) * r;
|
||||||
|
p3->y = y + sin(rad(270)) * r;
|
||||||
|
|
||||||
|
p1->next = p2;
|
||||||
|
p2->next = p3;
|
||||||
|
p3->next = p1;
|
||||||
|
|
||||||
|
return p1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void incPoly(poly* tri_add) {
|
||||||
|
poly tri = *tri_add;
|
||||||
|
vert* start = tri;
|
||||||
|
|
||||||
|
int has_started = 0;
|
||||||
|
while (tri != start || has_started == 0) {
|
||||||
|
has_started = 1;
|
||||||
|
int x = tri->x;
|
||||||
|
int y = tri->y;
|
||||||
|
vert* next = tri->next;
|
||||||
|
int xx = next->x;
|
||||||
|
int yy = next->y;
|
||||||
|
|
||||||
|
vert* p1 = malloc(sizeof(vert));
|
||||||
|
vert* p2 = malloc(sizeof(vert));
|
||||||
|
vert* p3 = malloc(sizeof(vert));
|
||||||
|
|
||||||
|
double tx = (xx - x) / 3;
|
||||||
|
double ty = (yy - y) / 3;
|
||||||
|
|
||||||
|
p1->x = x + tx;
|
||||||
|
p1->y = y + ty;
|
||||||
|
|
||||||
|
p3->x = x + tx * 2;
|
||||||
|
p3->y = y + ty * 2;
|
||||||
|
|
||||||
|
p2->x = p1->x + (cos(rad(-60)) * tx - sin(rad(-60)) * ty);
|
||||||
|
p2->y = p1->y + (sin(rad(-60)) * tx + cos(rad(-60)) * ty);
|
||||||
|
|
||||||
|
tri->next = p1;
|
||||||
|
p1->next = p2;
|
||||||
|
p2->next = p3;
|
||||||
|
p3->next = next;
|
||||||
|
|
||||||
|
tri = tri->next->next->next->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawPoly(poly tri) {
|
||||||
|
vert* start = tri;
|
||||||
|
|
||||||
|
int has_started = 0;
|
||||||
|
while (tri != start || has_started == 0) {
|
||||||
|
has_started = 1;
|
||||||
|
int x = tri->x;
|
||||||
|
int y = tri->y;
|
||||||
|
vert* next = tri->next;
|
||||||
|
int xx = next->x;
|
||||||
|
int yy = next->y;
|
||||||
|
|
||||||
|
tri = tri->next;
|
||||||
|
DessinerSegment(x, y, xx, yy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
|
||||||
|
poly tri = makeTri(1920/2, 1080/2, 550);
|
||||||
|
|
||||||
|
|
||||||
|
InitialiserGraphique();
|
||||||
|
CreerFenetre(100, 100, 1920, 1080);
|
||||||
|
SetColor(255, 0, 0);
|
||||||
|
for (int i = 0; i < 10; i++) incPoly(&tri);
|
||||||
|
drawPoly(tri);
|
||||||
|
Touche();
|
||||||
|
FermerGraphique();
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
71
APL1.2/TP07/graph_sup.c
Normal file
71
APL1.2/TP07/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/TP07/graph_sup.h
Normal file
32
APL1.2/TP07/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
|
122
APL1.2/TP07/raffinements.c
Normal file
122
APL1.2/TP07/raffinements.c
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
#include<stdio.h>
|
||||||
|
#include<stdlib.h>
|
||||||
|
#include<string.h>
|
||||||
|
|
||||||
|
struct char_ {
|
||||||
|
char letter;
|
||||||
|
struct char_* next;
|
||||||
|
struct char_* prev;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct char_ string_char;
|
||||||
|
typedef string_char* string;
|
||||||
|
|
||||||
|
|
||||||
|
string toString(char* str) {
|
||||||
|
|
||||||
|
string_char* last_c = NULL;
|
||||||
|
for (int i = strlen(str); i >= 0; i--) {
|
||||||
|
string_char* c = malloc(sizeof(string_char));
|
||||||
|
c->letter = str[i];
|
||||||
|
c->next = last_c;
|
||||||
|
if (last_c != NULL) last_c->prev = c;
|
||||||
|
last_c = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
return last_c;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* toCharT(string str) {
|
||||||
|
int count = 0;
|
||||||
|
string str2 = str;
|
||||||
|
while (str2 != NULL) {
|
||||||
|
count++;
|
||||||
|
str2 = str2->next;
|
||||||
|
}
|
||||||
|
char* new_str = calloc(sizeof(char), count);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; i++) {
|
||||||
|
new_str[i] = str->letter;
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
return new_str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sputs(string str) {
|
||||||
|
while (str != NULL) {
|
||||||
|
printf("%c", str->letter);
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void sfgets(string* str, int maxLength, FILE * stream) {
|
||||||
|
char line[2048];
|
||||||
|
fgets(line, maxLength, stream);
|
||||||
|
|
||||||
|
*str = toString(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sstrlen(string str) {
|
||||||
|
int count = 0;
|
||||||
|
while (str != NULL) {
|
||||||
|
count++;
|
||||||
|
str = str->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sstrcpy(string* str1, string str2) {
|
||||||
|
string_char* last_c = NULL;
|
||||||
|
int length = sstrlen(str2);
|
||||||
|
while (str2->next != NULL) str2 = str2->next;
|
||||||
|
|
||||||
|
for (int i = length; i >= 0; i--) {
|
||||||
|
string_char* c = malloc(sizeof(string_char));
|
||||||
|
c->next = last_c;
|
||||||
|
c->letter = str2->letter;
|
||||||
|
str2 = str2->prev;
|
||||||
|
if (last_c != NULL) c->prev = last_c;
|
||||||
|
last_c = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
*str1 = last_c;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sstrcmp(string str1, string str2) {
|
||||||
|
while (str1 != NULL || str2 != NULL) {
|
||||||
|
if (str1 == NULL && str2 == NULL) break;
|
||||||
|
else if (str1 == NULL && str2 != NULL) return -1;
|
||||||
|
else if (str1 != NULL && str2 == NULL) return -1;
|
||||||
|
else if (str1->letter != str2->letter) return -1;
|
||||||
|
|
||||||
|
str1 = str1->next;
|
||||||
|
str2 = str2->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
string sstrcat(string* stra, string* strb) {
|
||||||
|
string str1 = *stra;
|
||||||
|
string str2 = *strb;
|
||||||
|
|
||||||
|
while (str1->next->next != NULL) str1 = str1->next;
|
||||||
|
str1->next = str2;
|
||||||
|
str2->prev = str1;
|
||||||
|
while (str1->prev != NULL) str1 = str1->prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
string c = toString("Hello World !");
|
||||||
|
string d = NULL;
|
||||||
|
sstrcpy(&d, c);
|
||||||
|
sputs(d);
|
||||||
|
sputs(c);
|
||||||
|
sstrcat(&d, &c);
|
||||||
|
sputs(d);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user