commit 2a362849d034b00060488396a368ee7ba96bea06
parent 7ad2b0ee7c702f635b3dda5a857a1c0104427557
Author: John Charron <rm_rf_windows@yahoo.fr>
Date: Wed, 1 Dec 2010 02:01:43 +0100
Supression du dossier exo4-codage-lisp (jc)
Diffstat:
2 files changed, 0 insertions(+), 283 deletions(-)
diff --git a/exo4-codage-lisp/couples.c b/exo4-codage-lisp/couples.c
@@ -1,148 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-int pair(int x){
- return (!(x % 2));
-}
-
-int code_couples_very_slow(int _x, int _y){
- int x, y;
- x = y = 0;
- int code = 0;
- char direction = 'r'; // 'l' pour "left-down", 'r' pour "right-up"
- printf("In the 'couples' function\n");
- sleep(1);
- while(((x != _x) || (y != _y))){
- if((y == 0) && (pair(x))){
- printf("IF1:\n");
- sleep(1);
- x++;
- code++;
- direction = 'l';
- printf("IF N° 1, x = %d, y = %d, code = %d\n", x, y, code);
- sleep(1);
- }
- else if((x == 0) && (!pair(y))){
- printf("IF2:\n");
- sleep(1);
- y++;
- code++;
- direction = 'r';
- printf("IF N° 2, x = %d, y = %d, code = %d\n", x, y, code);
- sleep(1);
- }
- else if((y == 0) && (direction == 'l')){
- printf("IF3:\n");
- sleep(1);
- while((x != 0) && ((x != _x) || (y != _y))){
- printf("WHILE3:\n");
- sleep(1);
- x--;
- y++;
- code++;
- printf("IF N° 3, x = %d, y = %d, code = %d\n", x, y, code);
- sleep(1);
- }
- }
- else if((x == 0) && (direction == 'r')){
- printf("IF4:\n");
- sleep(1);
- while((y != 0) && ((x != _x) || (y != _y))){
- printf("WHILE4:\n");
- sleep(1);
- x++;
- y--;
- code++;
- printf("IF N° 4, x = %d, y = %d, code = %d\n", x, y, code);
- sleep(1);
- }
- }
- }
- return code;
-}
-
-int code_couples_slow(int _x, int _y){
- int x, y;
- x = y = 0;
- int code = 0;
- char direction = 'r'; // 'l' pour "left-down", 'r' pour "right-up"
- while(((x != _x) || (y != _y))){
- if((y == 0) && (pair(x))){
- x++;
- code++;
- direction = 'l';
- }
- else if((x == 0) && (!pair(y))){
- y++;
- code++;
- direction = 'r';
- }
- else if((y == 0) && (direction == 'l')){
- while((x != 0) && ((x != _x) || (y != _y))){
- x--;
- y++;
- code++;
- }
- }
- else if((x == 0) && (direction == 'r')){
- while((y != 0) && ((x != _x) || (y != _y))){
- x++;
- y--;
- code++;
- }
- }
- }
- return code;
-}
-
-
-int code_couples_faster(int _x, int _y){
- int x, y;
- x = y = 0;
- int code = 0;
- int incr_int = 0;
- char direction = 'r'; // 'l' pour "left-down", 'r' pour "right-up"
- while(((x != _x) || (y != _y))){
- if((y == 0) && (pair(x))){
- x++;
- code++;
- incr_int++;
- direction = 'l';
- }
- else if((x == 0) && (!pair(y))){
- y++;
- code++;
- incr_int++;
- direction = 'r';
- }
- else if((y == 0) && (direction == 'l')){
- while((x != 0) && ((x != _x) || (y != _y))){
- x--;
- y++;
- code++;
- }
- }
- else if((x == 0) && (direction == 'r')){
- while((y != 0) && ((x != _x) || (y != _y))){
- x++;
- y--;
- code++;
- }
- }
- }
- return code;
-}
-
-
-
-
-int main(int argc, char **argv, char **envp){
- printf("hello\n");
- int code = 0;
- int x, y, z;
- x = 11;
- y = 5;
- //z = -2;
- code = code_couples_slow(x,y);
- printf("Le code du couple (%d, %d) est %d\n", x, y, code);
-}
diff --git a/exo4-codage-lisp/couples.lisp b/exo4-codage-lisp/couples.lisp
@@ -1,135 +0,0 @@
-#|
-Auteur : John CHARRON
-email : charron.john@gmail.com
-
-Ce petit program a plein de défauts, je le sais, n'en parlons pas pour l'instant.
-L'idée ici était de m'amuser, de faire des progrès en LISP, de faire une implémentation
-d'une question de complexité : le programme sera amélioré par la suite (meilleurs moyens
-de récupérer des données (plus efficace), etc.), il ne s'agit qu'un début.
-L'idée ici est de générer des couples avec une clé :
- - *current* est la liste courante (clé x y)
- - *db* est la base de données, les valeurs générées sont stockées dans *db*
- (inefficace, je sais, car il faudrait pour l'instant faire un parcours séquentiel pour
- retrouver la donnée... j'améliorera cela par la suite, laisser pour l'instant)
- - les fonctions "right" "down-left", "down", "up-right" imitent le movement des
- coordonnées sur un graphe mais au les coordonnées "y" positifs sont en DESSOUS du graphe
- - "move" s'occupe de choisir "right", "down-left" etc. selon les valeurs dans *current*
- - Pour que "move" marche, il faut mettre à jour à chaque "move" *max-x* et *max-y* (ici à l'aide
- de la fonction "update-max-x-y"
- - "zig-zag" fait n "move-and-update" en un seul coup et affiche le contenu de *db* (toutes les couples)
-|#
-
-
-
-;; définition des variables globales (toujours entre astérisques)
-(defvar *current* (list 0 0 0)) ;; liste courante (clé x y)
-(setf *current* (list 0 0 0))
-(defvar *db* nil) ;; base de données qui stocke tous les "(clé x y)"
-(setf *db* nil)
-(push *current* *db*)
-
-(defvar *max-x* 0) ;; valeur maximal de x jusque "là"
-(setf *max-x* 0)
-(defvar *max-y* 0) ;; valeur maximal de y jusque "là"
-(setf *max-y* 0)
-
-#| pour remettre toutes les variables globales à leur valeurs par défaut
-afin de tester, de refaire un 'zig-zag', etc.
-|#
-(defun reset ()
- (progn
- (defvar *current* (list 0 0 0)) ;; liste courante (clé x y)
- (setf *current* (list 0 0 0))
- (defvar *db* nil) ;; base de données qui stocke tous les "(clé x y)"
- (setf *db* nil)
- (push *current* *db*)
- (defvar *max-x* 0) ;; valeur maximal de x jusque "là"
- (setf *max-x* 0)
- (defvar *max-y* 0) ;; valeur maximal de y jusque "là"
- (setf *max-y* 0)
- *current*))
-
-#| Les fonctions "right" "down-left", "down", "up-right" imitent le movement des
-coordonnées sur un graphe mais au les coordonnées "y" positifs sont en DESSOUS du graphe
-|#
-(defun right (L)
- (progn
- (push
- (setf *current*
- (cons (+ 1 (first L)) (cons (+ 1 (second L)) (last L)))) *db*)
- *current*))
-
-(defun down (L)
- (progn
- (push
- (setf *current*
- (cons (+ 1 (first L)) (cons (second L) (cons (+ 1 (third L)) ())))) *db*)
- *current*))
-
-(defun up-right (L)
- (progn
- (push
- (setf *current*
- (cons (+ 1 (first L)) (cons (+ 1 (second L)) (cons (- (third L) 1) ())))) *db*)
- *current*))
-
-(defun down-left (L)
- (progn
- (push
- (setf *current*
- (cons (+ 1 (first L)) (cons (- (second L) 1) (cons (+ 1 (third L)) ())))) *db*)
- *current*))
-
-(defun update-max-x (L)
- (if (> (second L) *max-x*)
- (setf *max-x* (second L))
- nil))
-
-(defun update-max-y (L)
- (if (> (third L) *max-y*)
- (setf *max-y* (third L))
- nil))
-
-(defun update-max-x-y (L)
- (cond
- ((> (second L) *max-x*)
- (setf *max-x* (second L)))
- ((> (third L) *max-y*)
- (setf *max-y* (third L)))
- (t ())))
-
-;; "move" s'occupe de choisir "right", "down-left" etc. selon les valeurs dans *current*
-(defun move (L)
- (cond
- ((and (zerop (third L)) (= *max-x* *max-y*)) ;; RIGHT takes precedence over LEFT becuase it occurs first
- (print "in RIGHT") ;;
- (right L))
- ((and (zerop (second L)) (= *max-x* *max-y*)) ;; DOWN
- (print "in DOWN")
- (down L))
- ((> *max-x* *max-y*) ;; DOWN-LEFT
- (print "in DOWN-LEFT")
- (down-left L))
- ((< *max-x* *max-y*) ;; UP-RIGHT
- (print "in UP-RIGHT")
- (up-right L))))
-
-#|
-On fait un "move" et puis un "update-max-x-y"
-Attention : il faut bien faire un setf L, sinon, le paramètre L de "update-max-x-y utilise la valeur
-de L inchangé !
-|#
-(defun move-and-update (L)
- (progn
- (setf L (move L))
- (update-max-x-y L)
- *db*))
-
-;; "zig-zag" fait n "move-and-update" en un seul coup et affiche le contenu de *db* (toutes les couples)
-(defun zig-zag (L n)
- (if (zerop n)
- (move-and-update *current*)
- (progn
- (move-and-update *current*)
- (zig-zag L (- n 1)))))
-