Accueil > Forum > > > > RECURSIVITE pour tous les traitements sur les arbres et liste chaînée - Langage C
RECURSIVITE pour tous les traitements sur les arbres et liste chaînée - Langage C
vendredi 25 novembre 2011 à 23:15:24 |
RECURSIVITE pour tous les traitements sur les arbres et liste chaînée - Langage C

HerveYims
|
Bonjour à tous, SVP j'ai un bug avec mon programme ci-dessous en fait :
Soit un fichier des concerts donnés en 2011 en Europe comprenant les noms des groupes ou artistes, le nom de la salle, le pays, la date, le nombre de spectateurs et le prix moyen de la place. Le nombre de concerts d’un artiste ou d’un groupe est indéterminé. De plus, le nombre de concerts peut être différent d’un artiste à un autre.
Le but est de lire ce fichier et de créer un arbre binaire de recherche qui sera trié sur le nom du groupe ou de l’artiste. Chaque n½ud de l’arbre contiendra également un pointeur vers une liste chaînée des concerts auxquels cet artiste a participé pendant l’année 2011ainsi que les informations concernant ce concert (cfr.fichier). En cas d’annulation d’un concert, le nombre de spectateurs sera nul.
Il devra être possible :
1. d’afficher la liste des artistes ou des groupes dans l’ordre alphabétique avec les concerts auxquels ils ont participé ainsi que le nombre de spectateurs présents à chaque concert. Si le nombre de spectateur est nul, un message apparaîtra du style « Concert annulé ».
2. d’a jouter un nouveau concert pour un artiste ou un groupe déterminé ainsi que les informations associées.
3. de donner toutes les dates, les salles et les pays des concerts prestés par un artiste ou un groupe en 2011 trié par ordre croissant de date.
4. de déterminer le classement des artistes ou des groupes par ordre décroissant du nombre de spectateurs en 2011.
5. D’afficher Le groupe ou l’artiste ayant rapporté la recette la plus importante en 2011.
Mon code source se présente comme suit :
Code C/C++ : #include <stdio.h>
#include <string.h>
#include <limits.h>
struct s_noeud
{
char *nom ;
struct s_element *listeConcert;
struct s_noeud *fg,*fd;
};
struct s_element
{
char *concert;
int spectateur ;
struct s_element *suivant;
};
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Prototype des fonctions que l'on va utiliser //
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Création d'un noeud
struct s_noeud *creerNoeud(char *nom, struct s_element *tete);
// Création de l'arbre
struct s_noeud *creerArbre(struct s_noeud *racine,char *nom,struct s_element *tete);
// Affichage de l'arbre
void afficherArbre(struct s_noeud *racine,struct s_element *ptrSurElement);
// Lecture du fichier
void lectureFichier(FILE *fich,char *nom);
// Création de la liste chaînée
struct s_element *creerListe(struct s_element *tete,char *concert,int spectateur );
// Création d'un concert dans la liste
struct s_element *creerConcert(struct s_element *tete,char *concert,int spectateur );
// Ajout d'un concert joué pour un artiste donné
struct s_noeud *ajouterConcert(struct s_noeud *racine, char *nomConcert, int classementSpectateur);
// Additione le spectateur de chaque concert
int compterSpectateur(struct s_element *concert);
// Recherche un artiste et renvoit son noeud
struct s_noeud *rechercherArtiste(struct s_noeud *racine,char *nom);
void meilleurArtiste(struct s_noeud *racine,struct s_noeud **meilleur,struct s_element *ptrSurElement,int *MAX);
void freeArbre(struct s_noeud *racine);
void freeListe(struct s_element *element);
void main ()
{
FILE *fich=fopen("concerts.txt","r");
short choix = -1,tmpSpectateur,tmpClassementSpectateur;
char tmpNom[51],tmpNomSalle[51],tmpPays[51],tmpDate[51],tmpNbrSpectateur[51],tmpPrixMoyen[51],tmpConcert[51],tmpNomConcert[51];
struct s_noeud *racine=NULL;
struct s_element *tete=NULL;
struct s_element *ptrSurElement;
int spectateurArtiste = 0;
struct s_noeud *positionArtiste;
int max = -INT_MAX;
if(fich) // Si ouverture du fichier réussi
{
// Boucle de lecture du fichier
while(fscanf(fich,"%s",tmpNom) != EOF)
{
fscanf(fich,"%s",tmpConcert); // Lecture d'amorçe
while(tmpConcert[0] != '.') // Tant qu'on ne tombe pas sur le . on continue
{
fscanf(fich,"%hd",&tmpSpectateur);
tete = creerListe(tete,tmpConcert,tmpSpectateur);
fscanf(fich,"%s",tmpConcert);
}
racine = creerArbre(racine,tmpNom,tete); // On crée l'arbre
tete=NULL; // On remet la liste chaînée créée à NULL
// Sinon on obtiendra une liste contenant tous les concerts
} // joué de tous les artistes.
do
{
printf("1.Afficher les artistes ou les groupes par odre alphabetique\n");
printf("2.Ajouter un/des concert(s) a un artiste ou groupe\n");
printf("3.Afficher les concerts\n");
printf("4.Classement des artistes ou groupes par rapport au nombre de spectateur\n");
printf("5.Groupe ou artiste ayant remporté la recette la plus importante...\n");
printf("0.Quitter\n");
printf("Choix : ");
scanf("%hd",&choix);
system("cls");
switch(choix)
{
case 1 : system("cls");
if (racine == NULL)
{
printf("Aucun groupe ou artiste ! \n");
}
else
{
ptrSurElement = racine->listeConcert;
afficherArbre(racine,ptrSurElement);
}
_getch();
system("cls");
break;
case 2 : system("cls");
printf("Nom de l artiste ou du groupe : ");
fflush(stdin);
gets(tmpNom);
positionArtiste = rechercherArtiste(racine,tmpNom);
if(positionArtiste != NULL)
{
printf("Nom du groupe ou de l artiste : ");
fflush(stdin);
gets(tmpNomConcert);
printf("Spectateur : ");
fflush(stdin);
scanf("%hd",&tmpClassementSpectateur);
ajouterConcert(positionArtiste,tmpNomConcert,tmpClassementSpectateur);
printf("Ajout termine ! \n");
}
else
{
printf("Artiste ou groupe introuvable !\n");
}
_getch();
system("cls");
break;
case 3 : positionArtiste=racine;
meilleurArtiste(racine,&positionArtiste,ptrSurElement,&max);
printf("Le meilleur serveur est %s avec %hd aces",positionArtiste->nom,max);
break;
case 5 : system("cls");
printf("Nom : ");
fflush(stdin);
gets(tmpNom);
system("cls");
positionArtiste = rechercherArtiste(racine,tmpNom);
if(positionArtiste != NULL)
{
spectateurArtiste=compterSpectateur(positionArtiste->listeConcert);
printf("%s a fait %hd spectateur pendant le concert\n",tmpNom,spectateurArtiste);
}
else
{
printf("L'artiste %s est introuvable",tmpNom);
}
_getch();
system("cls");
break;
case 0 : freeArbre(racine);
break;
}
}
while(choix !=6);
}
else
{
printf("Fichier introuvable !\n");
}
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Cette fonction permet de créer un noeud en prennant comme paramètre les //
// informations relatives à ce noeuds. //
// Elle allouera l'espèce nécessaire et initialisera les pointeurs fg & fd à NULL. //
// Celà permettra s'il n'y a plus rien à gauche ni à droite d'un noeud d'obtenir //
// NULL comme résultat, c'est-à-dire fin de l'arbre, ou fin d'une branche. //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
struct s_noeud *creerNoeud(char *nom, struct s_element *tete)
{
struct s_noeud *noeud;
short taille;
noeud=(struct s_noeud*)malloc(sizeof(struct s_noeud)); // Allocation de la "taille" des pointeurs
// du noeud.
taille=strlen(nom); // Nombre de caractères contenu dans nom
noeud->nom = (char*)malloc(taille * sizeof(char) + sizeof(char)); // Allocation de la taille du nom + 1 caractère
strcpy(noeud->nom,nom); // pour le \0
noeud->fd = NULL;
noeud->fg = NULL;
noeud ->listeConcert = tete;
return noeud;
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Fonction récursive qui permettra de se placer au bon endroit dans //
// l'arbre (par rapport au nom et prénom) //
// Si Racine = NULL, celà veut dire que le noeud où l'on se trouve sur //
// un noeud vide. On va donc y créer un noeud avec les informations souhaitées. //
// Par contre s'il y a des informations dans le noeud où l'on se trouve //
// alors on va le comparer avec le nom que l'on veut ajouter. Si racine->nom //
// est plus grand que que nom, alors le noeud contenant le nom sera mit vers //
// le fils gauche du noeud pointé actuellement //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
struct s_noeud *creerArbre(struct s_noeud *racine,char *nom,struct s_element *tete)
{
if(racine == NULL)
{
racine = creerNoeud(nom,tete); // On crée et alloue un noeud
}
else
{
if( strcmpi(racine->nom,nom) > 0) // On compare le noeud avec les infos que l'on a
{
racine->fg = creerArbre(racine->fg,nom,tete); // Si la condition respecté, on se déplace dans l'arbre
}
else
{
if(strcmpi(racine->nom,nom) < 0)
{
racine->fd = creerArbre(racine->fd,nom,tete);
}
else
{
if(strcmpi(racine->nom,nom) > 0) // A VOIR
{
racine->fg = creerArbre(racine->fg,nom,tete);
}
else
{
racine->fd = creerArbre(racine->fd,nom,tete);
}
}
}
}
return racine;
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Simple fonction récursive par symétrie. //
// On va aller le plus à gauche possible tant que l'on ne quitte pas l'arbre. //
// Si on descend de trop, on va remonter d'un cran et se déplacer vers la droite. //
// Utilisation d'un pointeur temporaire pour ne pas modifier la liste chaînée //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
void afficherArbre(struct s_noeud *racine,struct s_element *ptrSurElement)
{
if(racine != NULL)
{
ptrSurElement = racine->listeConcert;
afficherArbre(racine->fg,ptrSurElement);
printf("Nom : %s\n",racine->nom);
while(ptrSurElement != NULL)
{
printf("spectateur : %s",ptrSurElement->concert);
if(ptrSurElement->spectateur == 0)
{
printf("/Aucun spectateur !");
}
else
{
printf("/spectateur : %hd",ptrSurElement->spectateur);
}
ptrSurElement = ptrSurElement->suivant;
printf("\n");
}
printf("\n\n\n");
afficherArbre(racine->fd,ptrSurElement);
}
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Fonction récursive permettant de se placer à la fin de la liste chaînée. //
// Elle alloue également la bonne taille pour chaque élément via la fonction //
// creationConcert. //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
struct s_element *creerListe(struct s_element *tete,char *concert,int spectateur)
{
if(tete == NULL)
{
tete = creerConcert(tete,concert,spectateur);
}
else
{
tete->suivant = creerListe(tete->suivant,concert,spectateur);
}
return tete;
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Fonction de création d'un élément dans la liste, on y alloue la taille //
// nécessaire et on initialise le pointeur vers le prochain élément sur NULL //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
struct s_element *creerConcert(struct s_element *tete,char *concert,int spectateur)
{
short taille;
tete = (struct s_element*)malloc(sizeof(struct s_element));
taille = strlen(concert);
tete->concert = (char*)malloc(taille*sizeof(char) + sizeof(char) );
strcpy(tete->concert,concert);
tete->spectateur = spectateur;
tete->suivant = NULL;
return tete;
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Procédure qui parcours la liste des concerts pour lequel l'artiste rechercher //
// auparavant a participé . Dés qu'on arrive à la fin de la liste (racine->liste == NULL) //
// alors on est donc arrivé à la fin de celle-ci. //
// On utilise un pointeur temporaire, pour ne pas modifier la liste. (en ne travaillant pas avec la //
// variable racine) //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
struct s_noeud *ajouterConcert(struct s_noeud *racine, char *nomConcert, int classementSpectateur)
{
short taille;
struct s_element *nouveau;
struct s_element *ptr;
ptr = racine->listeConcert;
nouveau = (struct s_element*)malloc(sizeof(struct s_element));
taille=strlen(nomConcert);
nouveau->concert = (char*)malloc(taille * sizeof(char) + sizeof(char));
strcpy(nouveau->concert,nomConcert);
nouveau->spectateur = classementSpectateur;
nouveau->suivant = NULL;
if(ptr != NULL)
{
while(ptr->suivant != NULL)
{
ptr = ptr->suivant;
}
ptr->suivant = nouveau;
}
else
{
racine->listeConcert= nouveau;
}
return racine;
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //
// Fonction permettant de se placer à la bonne position dans l'arbre et de //
// renvoyer 0 si pas trouver, et s'il a été trouvé renvoyer le position //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
struct s_noeud *rechercherArtiste(struct s_noeud *racine,char *nom)
{
if(racine == NULL)
{
return NULL;
}
else
{
if( strcmpi(racine->nom,nom) > 0)
{
return rechercherArtiste(racine->fg,nom);
}
else
{
if( strcmpi(racine->nom,nom) < 0)
{
return rechercherArtiste(racine->fd,nom);
}
else
{
if( strcmpi(racine->nom,nom) > 0) // A VOIR
{
return rechercherArtiste(racine->fg,nom);
}
else
{
if(( strcmpi(racine->nom,nom) < 0)) // A VOIR
{
return rechercherArtiste(racine->fd,nom);
}
else
{
return racine;
}
}
}
}
}
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Simple fonction qui va balayer une liste chaînée tout en additionnement //
// le nombre de spectateur que fait un artiste //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
int compterSpectateur(struct s_element *concert)
{
int spectateur=0;
while( concert != NULL )
{
spectateur += concert ->spectateur;
concert = concert->suivant;
}
return spectateur;
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Fonction recherchant l'artiste ayant obtenu le plus de spectateur au total //
// >>>>>>>>>>>>>> A TERMINER <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
void meilleurArtiste(struct s_noeud *racine,struct s_noeud **meilleur,struct s_element *ptrSurElement,int *MAX)
{
int sommeActuel = 0;
if(racine != NULL)
{
ptrSurElement = racine->listeConcert;
meilleurArtiste(racine->fg,meilleur,ptrSurElement,MAX);
while(ptrSurElement != NULL)
{
sommeActuel += ptrSurElement->spectateur;
ptrSurElement = ptrSurElement->suivant;
}
if(*MAX < sommeActuel)
{
*meilleur = racine;
*MAX = sommeActuel;
}
printf("actuel:%hd ",sommeActuel);
printf("max:%hd \n",*MAX);
meilleurArtiste(racine->fd,meilleur,ptrSurElement,MAX);
}
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
// Fonctions libérants la mémoire occupé par l'arbre //
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//
void freeArbre(struct s_noeud *racine)
{
if(racine != NULL)
{
freeArbre(racine->fg);
freeArbre(racine->fd);
free(racine->nom);
free(racine);
}
}
void freeListe(struct s_element *element)
{
if(element->suivant->concert == NULL)
{
printf("aaa");
printf("%s",element->concert);
free(element->concert);
free(element);
}
else
{
freeListe(element->suivant);
}
}
Merci :-)
|
|
samedi 26 novembre 2011 à 13:50:34 |
Re : RECURSIVITE pour tous les traitements sur les arbres et liste chaînée - Langage C

buno
|
Hello,
Je pense qu'une petite lecture s'impose...
Je vois, dans ma boule de cristal, où est le bug. Il se situe...entre le clavier et la chaise...
Bon, plus sérieusement, sans question précise et ni code précis, on ne va pas pourvoir t'aider....
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
|
|
vendredi 2 décembre 2011 à 11:58:20 |
Re : RECURSIVITE pour tous les traitements sur les arbres et liste chaînée - Langage C

JulSoft
|
@buno: Ma boule de crystal me dit que c'est dans la fonction marquée "A TERMINER" qu'il manque quelque chose... Comme quoi c'est pas si mal foutu que ça les données des exercices d'info...
@HerveYims: Ca m'a tout l'air d'être du parcours de listes chainées pur et dur. Vous avez du voir comment on fait ça en cours non?
Un truc du genre
Code C/C++ :
while(courant.suivant!=null){
// traitement sur courant.suivant
// courant = courant.suivant;
}
|
|
Cette discussion est classée dans : element, noeud, racine, struct, concert
Répondre à ce message
Sujets en rapport avec ce message
Probleme structure XML [ par saturne_1606 ]
Bonjour à tous!Voilà, j'essaie de programmer des structures en C pour gérer le XML.Voici mes structures :typedef struct{ char* name; char* data;
Liste Chainees, niveau debutant [ par Anysse ]
Salut, alors voila, je code sous DevC++ 4.9.9.0C'est mon premier programme utilisant les Listes chainees, et je n 'arrive pas a comprendre pourquoi il
Creation de STRCAT pour liste chainees [ par Anysse ]
Salut j'ai fais une fonction qui est censee concatener deux listes chainees, mais apparemment, il doit y avoir un probleme de passage ar adresse, enfi
Arbre binaire de recherche et structure [ par Jsl1_54 ]
slt,j'ai un petit probleme pour acceder au données d'une structure:en fait j'ai quatre structures liées entre elles, soit avec des pointeur ou pas...
Fonction recherche (listes chainées) [ par adri10 ]
Bonjour à tous, Bon voilà j'ai un gros problème avec ma fonction recherche en liste chainées. Je pensais que mon programme était correct puisqu'en le
[debutant]structure dans un arbre binaire/pointeur [ par gluff ]
Bonjour,je n'arrive pas a remplir des strucutures a partir de la lecture d'un fichier.Dans le fichier sont contenus un liste de nom de personne et un
Les arbres en C [ par nadias ]
Bonsoir tout le monde,Je voudrai SVP etre corriger s'il y a erreur merci.On me demande de creer un arbre. Voici la consigne:"Cette arbre possède des n
Trier une liste chainée [ par ango973 ]
Bonjour,J'ai un probleme avec une fonction qui doit me trier une liste chainée selon le nom mais apres le passage dans ma fonction la liste reste iden
Recherche dans un arbre (en C) [ par salsa81 ]
Bonjour, Voilà je suis en train de faire quelques révision sur les arbres en C et je bloque sur un point. J'ai un arbre dont voici la structure : [
Problème pointeur en c++ [ par ch3mical ]
Bonjourj'ai un problème avec une partie de code , lorsque je créer mon arbre binaire jai un message d'erreur lorsque je rappel ma fonction récursive .
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|