begin process at 2012 05 27 16:00:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Linux

 > LES ENCHÈRES

LES ENCHÈRES


 Information sur la source

Note :
Aucune note
Catégorie :Applications Linux Classé sous :memoire partagée, semaphore, exclusion metuelle Niveau :Débutant Date de création :21/07/2008 Date de mise à jour :24/07/2008 14:07:08 Vu / téléchargé :3 322 / 109

Auteur : mohtouati

Ecrire un message privé
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Simulation des enchères en créent le vendeur qui propose un objet et sa valeur initial et un temps pour les clients doivents respecter un nombre de clients serent créés chaque client propose un pris supérieur tout en respectant l'exclusion mutuelle etla derniere misa jour du prix de l'objet bien sur en respectant son montant d'argent qui lui reste

Source

  • /*********************************************************************** université de bejaia
  • Fait par:
  • TOUATI Mohamed
  • BELGHALI Belaid
  • AZIRA Abderrezak
  • Proposé par M.Redhouane
  • TP SE2
  • 4ieme année informatique
  • 2007.2008 2007 . 2008
  • ***********************************************************************/
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <time.h>
  • #include <sys/types.h>
  • #include <sys/ipc.h>
  • #include <sys/sem.h>
  • #include <sys/wait.h>
  • #include "ccrt.h"
  • int main (){
  • key_t cle;
  • pid_t f;
  • int num_f, nb_f, i, status;
  • int id_sem;
  • struct sembuf op_v= {0, +1, SEM_UNDO};
  • struct sembuf op_p= {0, -1, SEM_UNDO};
  • ushort init_sem[] = {1};
  • //génération de la clé...pour le semaphore
  • if ( (cle = ftok (".", 'a')) == -1){
  • perror ("ftok");
  • return -1;
  • }
  • //création d'un sémaphores...
  • if ( (id_sem = semget (cle, 1 ,IPC_CREAT | IPC_EXCL | 0666)) == -1 ){
  • perror ("semget");
  • return -1;
  • }
  • //initialisation du sémaphore...
  • if (semctl (id_sem, 0, SETALL, init_sem)==-1){
  • perror ("semctl");
  • return -1;
  • }
  • int id_mem;
  • const int taille=0x6400;
  • key_t clef;
  • int *val;
  • //génération de la clé...pour la memoire partagée
  • if ( (clef = ftok (".", 'a')) == -1){
  • perror ("ftok");
  • return -1;
  • }
  • //génération du segment de la mémoire partagée...
  • id_mem = shmget (cle, taille, IPC_CREAT|IPC_EXCL|0666);
  • if (id_mem == -1){
  • perror ("id_mem");
  • return -1;
  • }
  • time_t t0,t1,tc;
  • val = (int*)shmat (id_mem,0, 0);
  • val[0]= 100;
  • int dif,m,r,y,k,l;
  • int prixin;
  • ClrScr();
  • TextBackground(YELLOW);
  • GotoXY (3,3);
  • TextColor(RED);
  • printf("Le vendeur:");
  • TextColor(RED);
  • printf(" je propose un Golf TDI pour les enchere");
  • TextColor(BLUE);
  • GotoXY (8,5);
  • printf("Le prix de depart est: \t\tDA\b\b\b\b\b\b\b\b\b\b\b");
  • scanf("%d",&prixin);
  • val[0]=prixin;
  • printf ("Donnez le nombre de client: ");
  • a:scanf ("%d", &nb_f); getchar(); // pour éviter le problème d'entréé...
  • if (nb_f<2){
  • printf ("Vous devez donner un nombre superieur à 1...\n\n");
  • goto a;
  • }
  • int poche[100];
  • for(i=1;i<=nb_f;i++)
  • {
  • printf("Introduire le solde du client (%d) \t\tDA\b\b\b\b\b\b\b\b\b\b",i);
  • scanf("%d",&poche[i]);
  • }
  • int tmax;
  • printf("Introduire le temp max :");
  • scanf("%d",&tmax);
  • time(&t0);
  • ClrScr();
  • num_f = 1; // le numéro du premier client...
  • for (i=0; i<nb_f; i++){
  • srand (time(NULL));//initialisation de la génération des nombres aléatoires
  • f = fork();// créer un client..
  • switch (f){
  • case -1:{
  • perror ("fork()");
  • return -1;
  • }
  • case 0:{ // les client...
  • while (1){
  • sleep ((rand()%4)); // temps aléatoire entre deux prposietions
  • for(i=1;i<=nb_f;i++){
  • GotoXY (3,2*i);
  • TextColor(BLACK);
  • printf("le client(%d)",i);
  • }
  • time(&t1);
  • if(num_f!=val[1] && t1-t0<=tmax && poche[num_f]-val[0]>0)
  • {
  • if (semop(id_sem, &op_p, 1) == -1 ){
  • perror ("semop - p");
  • return -1;
  • }
  • dif=poche[num_f]-val[0];
  • m=rand()%50+1;
  • if(m-dif<0){
  • ClrScr();
  • time(&tc);
  • l=tc-t0;
  • k=tmax-l;
  • GotoXY (52,20);
  • printf("Le temps restant ");
  • TextColor(RED);
  • printf(" %d",k );
  • if(k==0) {
  • GotoXY (23,12);
  • TextColor(BLUE);
  • printf("Le vendeur: ");
  • GotoXY (38,12);
  • TextColor(RED);
  • printf(" le temps est terminé !!!");
  • }
  • for(i=1;i<=nb_f;i++){
  • if(i!=num_f){
  • GotoXY (3,2*i);
  • TextColor(BLACK);
  • printf("Le client(%d)",i);
  • }
  • if(i==num_f){
  • r=(rand()%4);
  • TextColor(BLUE);
  • GotoXY (3,2*i);
  • printf("---------->");
  • TextColor(RED);
  • GotoXY (19,2*i);
  • if (r== 0) printf("Le client(%d): j'ajoute %d DA",i,m);
  • if (r== 1) printf("Le client(%d): je propose %d DA en plus ",i,m);
  • if (r== 2) printf("Le client(%d): je donne %d DA",i,val[0]+m);
  • if (r== 3) printf("Le client(%d): %d DA ",i,val[0]+m);
  • }
  • }
  • GotoXY (63,4);
  • TextColor(BLUE);
  • printf ("///////////");
  • GotoXY (65,5);
  • TextColor(RED);
  • printf ("%d DA",val[0]+m);
  • TextColor(BLUE);
  • GotoXY (63,6);
  • printf ("///////////");
  • val[1]=num_f;
  • val[0]=val[0]+m;}
  • printf("\n\n");
  • if (semop (id_sem, &op_v, 1) == -1 ){
  • perror ("semop - v");
  • return -1;
  • }
  • }
  • // pour casser la boucle while(1)
  • time(&t1);
  • if(t1-t0>tmax)
  • break;
  • }
  • return 0;
  • }// fin zone des clients...
  • }
  • num_f++; // la prochain numéro de client..
  • sleep (1); // attendre une seconde avant la prochaine génération des clients...
  • }
  • // le père...
  • for (i=0; i<nb_f; i++)// le point de rdv avec le pere il faut execute nb_f fois pour rendre la main au père
  • wait (&status);
  • if (semctl (id_sem, 0, IPC_RMID, 0) == -1){ // la libération du sémaphore...
  • perror ("semctl");
  • return -1;
  • }
  • if(val[1]>0)
  • {
  • ClrScr();
  • TextColor(RED);
  • GotoXY (3,2);
  • printf("Le vendeur:");
  • TextColor(BLUE);
  • GotoXY (27,4);
  • printf("*************************************");
  • GotoXY (31,5);
  • printf("Filicitation pour le client %d\n",val[1]);
  • GotoXY (27,6);
  • printf("*************************************");
  • TextColor(RED);
  • GotoXY (18,10);
  • //TextColor();
  • printf("Le gagnant est le client : %d",val[1]);
  • GotoXY (18,12);
  • printf("Avec un prix de : %d DA", val[0]);
  • TextColor( MAGENTA);
  • GotoXY (3,17);
  • printf("Merci pour tous les perticipants, à un prochain encher.");
  • TextColor(BLACK);
  • GotoXY (1,22);
  • }
  • else /////////s'il n y a pas de proposition valide
  • {
  • printf("Dommage! la Golf n'a ete achetee par aucun des client!!\n\n ");
  • }
  • shmdt (val);
  • if (shmctl (id_mem, IPC_RMID, 0) == -1){ // suppression de la mémoire partagée...
  • perror ("shmctl");
  • return -1;
  • }
  • return 0;
  • }
/*********************************************************************** université de bejaia
Fait par:    
	       TOUATI Mohamed
                BELGHALI Belaid	
                AZIRA Abderrezak                  
Proposé par M.Redhouane 
   	       
TP SE2 
4ieme année informatique
2007.2008                             2007 . 2008
***********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/wait.h>

#include "ccrt.h"

int main (){
	key_t	cle;
	pid_t	f;
	int	num_f, nb_f, i, status;

	int id_sem;
	struct sembuf op_v= {0, +1, SEM_UNDO};
	struct sembuf op_p= {0, -1, SEM_UNDO};
	ushort init_sem[] = {1};

	//génération de la clé...pour le semaphore
	if ( (cle = ftok (".", 'a')) == -1){
		perror ("ftok");
		return -1;
	}
		
	//création d'un sémaphores...
	if ( (id_sem = semget (cle, 1 ,IPC_CREAT | IPC_EXCL | 0666)) == -1 ){
		perror ("semget");
		return -1;
	}

	//initialisation du sémaphore... 
	if (semctl (id_sem, 0, SETALL, init_sem)==-1){
		perror ("semctl");
		return -1;
	}

        int		id_mem;
	const	int	taille=0x6400;
	key_t		clef;

	int		*val;

	//génération de la clé...pour la memoire partagée
	if ( (clef = ftok (".", 'a')) == -1){
		perror ("ftok");
		return -1;
	}

	//génération du segment de la mémoire partagée...
	id_mem = shmget (cle, taille, IPC_CREAT|IPC_EXCL|0666);
	if (id_mem == -1){
		perror ("id_mem");
		return -1;
	}

time_t t0,t1,tc;
val = (int*)shmat (id_mem,0, 0);	
val[0]= 100;
int dif,m,r,y,k,l;
int prixin;

ClrScr();
TextBackground(YELLOW);
GotoXY (3,3);
TextColor(RED);
printf("Le vendeur:");
TextColor(RED);
printf(" je propose un Golf TDI pour les enchere");
TextColor(BLUE);
GotoXY (8,5);
      printf("Le prix de depart est: \t\tDA\b\b\b\b\b\b\b\b\b\b\b");
	scanf("%d",&prixin);
	val[0]=prixin;

	printf ("Donnez le nombre de client: ");
	a:scanf ("%d", &nb_f); getchar(); // pour éviter le problème d'entréé...
	if (nb_f<2){
		printf ("Vous devez donner un nombre superieur à 1...\n\n");
		goto a;
	}
	int poche[100];
	for(i=1;i<=nb_f;i++)
	{
	printf("Introduire le solde du client (%d) \t\tDA\b\b\b\b\b\b\b\b\b\b",i);
	scanf("%d",&poche[i]);
	}
 
int tmax;
printf("Introduire le temp max :");
scanf("%d",&tmax);

	time(&t0);

ClrScr();
	num_f = 1; // le numéro du premier client...
	for (i=0; i<nb_f; i++){
		srand (time(NULL));//initialisation de la génération des nombres aléatoires
		f = fork();// créer un client..		
		
		switch (f){
			case -1:{
					perror ("fork()");
					return -1;
				}

			case  0:{ // les client...
	
					while (1){
						
						sleep ((rand()%4)); // temps aléatoire entre deux prposietions
for(i=1;i<=nb_f;i++){
GotoXY (3,2*i);
TextColor(BLACK);
printf("le client(%d)",i);
}
						
						time(&t1);
                                                if(num_f!=val[1] && t1-t0<=tmax && poche[num_f]-val[0]>0)
                                                {
						
						if (semop(id_sem, &op_p, 1) == -1 ){
							perror ("semop - p");
							return -1;
						}

						dif=poche[num_f]-val[0];
						m=rand()%50+1;
						if(m-dif<0){

                                                ClrScr();

                                                time(&tc);
                                                l=tc-t0;
                                                k=tmax-l;
                                                GotoXY (52,20);
                                                printf("Le temps restant  ");
                                                TextColor(RED);
                                                printf(" %d",k );
                                                if(k==0) {
                                                GotoXY (23,12);
                                                TextColor(BLUE);
                                                printf("Le vendeur: ");
                                                GotoXY (38,12);
                                                TextColor(RED);
                                                printf(" le temps est terminé  !!!");
                                                }
                                                for(i=1;i<=nb_f;i++){
                                                if(i!=num_f){
                                                GotoXY (3,2*i);
                                                TextColor(BLACK);
                                                printf("Le client(%d)",i);
                                                       }
                                                if(i==num_f){
                                                r=(rand()%4); 
                                                TextColor(BLUE);
                                                GotoXY (3,2*i);
                                                printf("---------->");
                                                TextColor(RED);
                                                GotoXY (19,2*i);

                          if (r== 0) printf("Le client(%d): j'ajoute %d DA",i,m);
                          if (r== 1) printf("Le client(%d): je propose %d DA en plus ",i,m);
                          if (r== 2) printf("Le client(%d): je donne %d DA",i,val[0]+m);
                          if (r== 3) printf("Le client(%d): %d DA ",i,val[0]+m);
                                                            }   
                                                    }

                                                GotoXY (63,4);
	                                        TextColor(BLUE);
                                                printf ("///////////");
                                                GotoXY (65,5);
                                                TextColor(RED);
                                                printf ("%d DA",val[0]+m);
	                                        TextColor(BLUE);
                                                GotoXY (63,6);
                                                printf ("///////////");

                                                 val[1]=num_f;
						val[0]=val[0]+m;}
						printf("\n\n");
						
						if (semop (id_sem, &op_v, 1) == -1 ){
							perror ("semop - v");
							return -1;
						}
                                                }

						// pour casser la boucle while(1)
						time(&t1);
						if(t1-t0>tmax)
							break;
					}
					return 0;
					

				}// fin zone des clients...

		}
		num_f++; // la prochain numéro de client..
		sleep (1); // attendre une seconde avant la prochaine génération des clients...
	}

	// le père...
	for (i=0; i<nb_f; i++)// le point de rdv avec le pere il faut execute nb_f fois pour rendre la main au père 
		wait (&status);

	if (semctl (id_sem, 0, IPC_RMID, 0) == -1){ // la libération du sémaphore...
		perror ("semctl");
		return -1;
	}
	
	if(val[1]>0)
	{
ClrScr();
	TextColor(RED);
GotoXY (3,2);
printf("Le vendeur:");
	TextColor(BLUE);
GotoXY (27,4);
printf("*************************************");
GotoXY (31,5);
printf("Filicitation pour le client %d\n",val[1]);
GotoXY (27,6);
printf("*************************************");
	TextColor(RED);
GotoXY (18,10);
	//TextColor();
	printf("Le gagnant est le client : %d",val[1]);
GotoXY (18,12);
        printf("Avec un prix de : %d DA", val[0]);
	TextColor( MAGENTA);
GotoXY (3,17);
        printf("Merci pour tous les perticipants, à un prochain encher.");
	TextColor(BLACK);
GotoXY (1,22);

 	}
	else /////////s'il n y a pas de proposition valide
	{
	printf("Dommage! la Golf n'a ete achetee par aucun des client!!\n\n  ");
		
	}
	shmdt (val);

	if (shmctl (id_mem, IPC_RMID, 0) == -1){ // suppression de la mémoire partagée...
		perror ("shmctl");
		return -1;
	}

	return 0;
}
 

 Conclusion

universté de bejaia

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • a.outTélécharger ce fichier [Réservé aux membres club]13 821 octets
  • ccrt.hTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 887 octets
  • encher21.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier16 178 octets
  • Rapport de TP.docTélécharger ce fichier [Réservé aux membres club]48 640 octets

Télécharger le zip


 Historique

22 juillet 2008 02:30:42 :
ajout d'un fichier.h

 Sources du même auteur

Source avec Zip ANALYSEUR LEXICAL POUR UN COMPILATEUR ALGORITHMIQUE
Source avec Zip ALGORITHME DE DJIKSTRA
Source avec Zip Source avec une capture LA FERMETURE TRANSITIVE
Source avec Zip Source avec une capture COMPOSENTE CONNEXES D'UN GRAPHE

 Sources de la même categorie

Source avec Zip TRAITEMENT D'IMAGE PGM par Jios
Source avec une capture COLORIMÈTRE NUMÉRIQUE LINUX par valchek
Source avec Zip TRAITEMENTS D'IMAGES AU FORMAT PGM AVEC LES ALGORITHMES DE C... par lemout
Source avec Zip ALGORITHME ACO INTERFACE GTK par RyBeN
Source avec Zip COMPRESSER SES SAUVEGARDES SMSBACKUPRESTORE (ANDROID) EN C A... par ThalLab

 Sources en rapport avec celle ci

Source avec Zip CLIENT SERVEUR LINUX SOCKET PIPE SEMAPHORE MUTEX FICHIER TEX... par fredzool
SUPRIMER SHM SEM MSGQUEUE par Shibo_Sources

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Variable partagée : semaphore ? [ par sena ] Bonjour,j'ai deux fonctions.Une de ces 2 fonctions est un thread qui s'exécute toutes les 3 secondes.Ces 2 fonctions utilisent une même variable.je su Semaphore Solaris [ par carton99 ] Bonjour, je me suis peut etre trompé de theme! Bref j'utilise les semaphores par exemple P(mutex) ou V(gare1). J'aimerai réaliser des fonctions pour


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales