Les enchères

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 / Exemple :


/*********************************************************************** 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

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.