Le Programmateur

Les programmes du Programmateur !

Aller au contenu | Aller au menu | Aller à la recherche

29nov. 2009

Le serveur d'un chat en C

Je présente ici le serveur d'un logiciel de chat en C. Il utilise biensûr les sockets et nécessite le client décrit dans cet article pour fonctionner.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h> 
 
#define NPORT 10000
#define CONNEXION 0
#define MESSAGE 1
#define DISCONNECT 2
 
char * surnom[10];
int sockService[10];
int occupe[10];
struct sockaddr_in client_adr[10];
socklen_t ** client_len;
struct sockaddr_in serveur_adr;
pthread_t  * thread_reception;    
int lastFreePlace;
 
int sockListen;

Lire la suite

29nov. 2009

Le client d'un chat en C

Je présente ici le client d'un logiciel de chat en C. Il utilise biensûr les sockets et nécessite un serveur décrit dans cet article pour fonctionner.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pthread.h> 
 
#define NPORT 10000
#define CONNEXION 0
#define MESSAGE 1
#define DISCONNECT 2
 
int identifiant;
char * surnom;
struct sockaddr_in serveur_adr;
int socketConnexionServeur;

Lire la suite

29nov. 2009

Simulation d'une calculatrice avec des listes en CamL

Je crois que tout est dans le titre ! Je définis ici quelques fonctions correspondant aux opérations standards sur les chiffres avant de définir une fonction d'évaluation de l'expressions. C'est en fait le même fonctionnement que dans une calculatrice.

type expression = Const of int
|Var of string
|Sum of expression * expression
|Diff of expression * expression
|Prod of expression * expression
|Quot of expression * expression ;;

Lire la suite

29nov. 2009

Termes ouverts et termes fermés en CamL

Ce programme décrit tout d'abord quelques objets nécessaires (listes, arbres) et quelques fonctions associées, avant de s'attaquer à la définition des termes. Une fois les termes définis, je définis alors plusieurs fonctions liées au filtrage et à la substitution sur les termes. Bon courage !

(* Les Listes *) 
type 'a liste=Nil | Cons of 'a * 'a liste;;
let l1=Cons( 1,Cons( 2,Cons( 3,Cons( 4,Nil )  )  )  ) ;;
let l2=Cons( 5,Cons( 4,Cons( 3,Cons( 2,Nil )  )  )  ) ;;
let rec ( estTriee:'a liste -> bool  ) =function 
	Nil->true 
	|Cons( a,Nil ) ->true 
	|Cons( a,Cons( b,l )  ) ->( a<b ) && estTriee( Cons( b,l )  ) 
;;
estTriee( l1 ) ;;
estTriee( l2 ) ;;

Lire la suite

29nov. 2009

Gestion d'une promotion d'étudiants en CamL

Ce programme est un exemple d'utilisation de CamL pour gérer une promotion, avec ses notes, ses épreuves, etc.

(*Une note est soit un chiffre soit une constante du type ABI(ABsence Injustifiée)*)
type Note = Chiffre of int |ABI|ABJ|DEFNote|DISNote|NoteNC;;
 
type Resultat = ADM|AJ|DEFRes|DISRes|ResNC;;
 
type Epreuve = RP|SSA|Comp|FASD|Anglais|Libre;;
 
(*Un étudiant est composé d'un nom, d'un prénom et d'un numéro d'étudiant*)
type Etudiant = Etu of (string * string * int);;

Lire la suite

29nov. 2009

Sitemap dynamique pour Google en Php

<?php
//put this file in the base directory of the website
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\">";
$webSite = 'http://www.'.$_SERVER['HTTP_HOST'];//the website's name
$directories= array ( //write here the directories to parse
		'.' , 
		'images' , 
		'section1'
);

Lire la suite

23nov. 2009

Multi moteur de recherche en JavaScript

Voilà un tout petit code pour illustrer comment modifier des options de tags HTML en JavaScript. La page de test est ici. Et voici le code source tant attendu ;-) :

tab = new Array(  ) ;
tab[0] = new Array( 'Google','http://www.google.com/search','get','q' ) ;
tab[1] = new Array( 'Yahoo ! ','http://fr.search.yahoo.com/search','get','p' ) ;
tab[2] = new Array( 'Altavista','http://www.altavista.com/web/results','get','q' ) ;
tab[3] = new Array( 'Le Monde','http://www.lemonde.fr/web/recherche_resultats/1,13-0,1-0,0.html','get','query' ) ;
tab[4] = new Array( 'Les Echos','http://archives.lesechos.fr/site/resultats.php','post','freeTextField' ) ;

Lire la suite

23nov. 2009

Le système solaire en JavaScript

Aujourd'hui, un petit programme en JavaScript avec une partie du système solaire en rotation. Vous pouvez voir le résultat ici. Maintenant, côté code, on commence d'abord par définir les paramètres du système :

tab = new Array();
// de la forme ('Nom',a,b,periode,XCentrePlanete,YCentrePlanete,Numero de la planete autour de laquelle elle tourne)
tab[0] = new Array('soleil',0,0,1,0);
tab[1] = new Array('mercure',58,59,88,0);
 
tab[2] = new Array('venus',109,108,225,0);
tab[3] = new Array('terre',150,149,365,0);
 
tab[4] = new Array('mars',228,227,686,0);
tab[5] = new Array('phobos',90,90,150,4);
tab[6] = new Array('deimos',30,20,120,4);
tab[7] = new Array('lune',30,30,28,3);
var t=0;

Lire la suite

23nov. 2009

Modélisation d'un circuit électrique en Scheme

Cet article présente un programme dont le but est de modéliser un circuit électrique. On commence par définir les notions de résistance, d'inductance, puis petit à petit, on définit un circuit électrique. On peut alors connaître la résistance du circuit... tout ça avec si peu de paranthèses ! :-)

Lire la suite

23nov. 2009

Nombres de Hamming et séries alternées en Scheme

Un petit programme sur les nombres de Hamming et les séries alternées.

(display "1. Preludio")
(define 
  (remove-factors n p)
  (if (zero? (remainder n p))
      (remove-factors (quotient n p) p)
      n))

Lire la suite

21nov. 2009

Gestion du temps en Scheme

Voici un programme permettant d'effectuer diverses fonctions en lien avec la gestion du temps, en Scheme.

(define (duration? x)
  (and (list? x) (pair? (cadr x))
       (integer? (car x)) (>= (car x) 0)
       (integer? (caadr x)) (>= (caadr x) 0) (< (caadr x) 60)
       (integer? (cdadr x)) (>= (cdadr x) 0) (< (cdadr x) 60)))
(duration? 2006)
(duration? '(a . b))
(duration? '(11 (100 . 0)))
(duration? '(11 (0 . 0)))

Lire la suite

21nov. 2009

Conversion d'unités et calcul de surface en Scheme

Tout est expliqué dans le titre et commenté dans le code !

(display "1) Calcul de surfaces simples")
 
(define pi (* 4 (atan 1)))
pi
(define (simple-surface r f) (f (* r r)))

Lire la suite

21nov. 2009

Les listes en Scheme

Exemple de possibilités de travail sur les listes en Scheme :

(define (neg->zero x)
  (if (< x 0)
      0
      x))
(define (quasi2pred n)
  (if (< n 2)
      (cons 0 0)
      (cons (- n 1) (- n 2))))

Lire la suite

21nov. 2009

Fonctions récursives en Scheme

Je présente ici un exemple de définition et d'utilisation de fonctions récursives en Scheme.

(display "Somme des chiffres")
(newline)
(define (digit-sum nb) 
  (if (< nb 10)
      nb
      (+ (digit-sum (quotient nb 10)) (remainder nb 10))))
(display "Essai avec 198")
(digit-sum 198)

Lire la suite

21nov. 2009

Débuts en Scheme

Voici un petit programme présentant quelques fonctions de base en Scheme. Définition et utilisation d'une variable :

(define pi (* 4 (atan 1)))
(+ (* 4.1 9.8) (/ (* 2 pi) 3))

Lire la suite

21nov. 2009

Lecture et Ecriture dans un fichier en Prolog

Voici un exemple d'I/O en Prolog :

% Exemple 8 : utilisation de read/1 et write/1
addition:- write('Entrez un nombre :'),read(A),write('Entrez un autre nombre:'),read(B), Z is A+B, nl, write(A), write('+'),write(B),write('='), write(Z).
 
% Exemple 9 : utilisation de read/2 , write/2, close et open
addition:- open('Fichier.txt',append,Stream),write(Stream,'3'),
write(Stream, '+'), write(Stream, '4'),
write(Stream, '='), write(Stream,'7 '), close(Stream).

21nov. 2009

Les listes en Prolog

Voici un petit fichier commenté sur la gestion des listes en Prolog :

  1. % Exemple 3 : Listes
  2. appartient(X,[X|Y]).
  3. appartient(X,[Z|Y]):- appartient(X,Y).

Lire la suite

21nov. 2009

Ecrire des règles

Voici quelques règles toutes simples, pour comprendre l'idée du Prolog.

convient_physiquement(X,Y):- homme(Y,T,C,A) , recherche(X,T,C,A).
convient_physiquement(X,Y):- femme(Y,T,C,A) , recherche(X,T,C,A).
 
ont_memes_gouts(X,Y):- gout(X,M,L,S) , gout(Y,M,L,S).