Souci avec un code

Souci avec un code - C - Programmation

Marsh Posté le 29-10-2006 à 10:55:55    

Bonjour a tous,
j'ai un petit souci avec ce code; je vous explique:
j'aimerais avec le code suivant inscrire des candidats d'une epreuve sportive avec leur performance, j'ai donc creer une structure candi pour le candidat avec le nom et le numero de dossard et un structure Arrive qui rentre les performance (numero de dossard avec le temps realise). Concernant cette organisation, ce n'est surement pas la meilleure mais elle fonctione :).La ou cela coince c'est a l'invite d'un numero de dossard, j'entre le n° puis jai une invite pour entrer un temps, le seul hic c'est que je voudrais que lorsque j'entre un numero de dossard ui a deja ete classé (dans Arrive[i].doss) et bien que ca me dise DEJA INSCRIT.. et ca j'y arrive pas.
A propose des variables, nbp est le nombre de candidat au total (a savoir 20 maximum), et nbs est le nombre de personnes deja classées dans Arrive.
 
 
 do
 {
   
  if(dossardlu > nbp || dossardlu<1)
  {
   printf("AUCUN INSCRIT\n" );
   system("pause" );
  }
  else
  {
   j=0;
   for(i=0 ; i<=nbs ; i=i+1)
   {
    if(dossardlu==Arrive[i].doss)
    j=1;  
   }
   if (j == 0)
   {
    printf("ENTREZ LE TEMPS REALISE\n" );
    scanf("%f",&tpslu);
    Arrive[nbs].tps=tpslu;
    nbs=nbs+1;
    if(tpslu == 0)
     printf("%d %s %s DISQUALIFIE\n",dossardlu,Candi[dossardlu-1].nom,Candi[dossardlu-1].nat);
    else
     printf("%d %s %s %.2f\n",dossardlu,Candi[dossardlu-1].nom,Candi[dossardlu-1].nat,tpslu);
   }
   else
   {
    printf("DEJA INSCRIT\n" );
    system("pause" );
   }  
   
   
  }
 printf("ENTREZ LE NUMERO DE DOSSARD\n" );
 scanf("%d",&dossardlu);
 }
 
Merci de votre aide

Message cité 1 fois
Message édité par Zoltan87 le 29-10-2006 à 11:03:18
Reply

Marsh Posté le 29-10-2006 à 10:55:55   

Reply

Marsh Posté le 29-10-2006 à 11:12:18    

[Merci de lire les règles du forum et d'apprendre à utiliser les balises code.]

Zoltan87 a écrit :

j'aimerais avec le code suivant inscrire des candidats d'une epreuve sportive avec leur performance, j'ai donc creer une structure candi pour le candidat avec le nom et le numero de dossard et un structure Arrive qui rentre les performance (numero de dossard avec le temps realise). Concernant cette organisation, ce n'est surement pas la meilleure mais elle fonctione :).La ou cela coince c'est a l'invite d'un numero de dossard, j'entre le n° puis jai une invite pour entrer un temps, le seul hic c'est que je voudrais que lorsque j'entre un numero de dossard ui a deja ete classé (dans Arrive[i].doss) et bien que ca me dise DEJA INSCRIT.. et ca j'y arrive pas.


Ca ne me parait pas très difficile.
 
C'est une simple recherche de doublon.
 
Ce qu'il faut faire, c'est une saisie 'provisoire' des données (qui ne modifie pas la base), puis une vérification de l'existence (il suffit de parcourir les données existantes dans la base), puis, selon le résultat, une confirmation des données en les ajoutant à la base, sinon l'affichage du message d'erreur "Dejà inscrit".
 
Ces quelques lignes s'appellent "algorithme textuel". Elles sont la base de l'organisation de ton code.
 
On peut maintenant traduire en pseudo-code de la façon suivante :  


BEGIN
; saisie 'provisoire' des données (qui ne modifie pas la base),  
 
   saisie(data)
 
; vérification de l'existence (il suffit de parcourir les données existantes dans la base),  
 
   IF is_in (base, data.element)
; selon le résultat, une confirmation des données en les ajoutant à la base,  
 
      ajoute (base, data)
 
   ELSE
; sinon l'affichage du message d'erreur "Déjà inscrit".
 
    affiche ("Déjà inscrit" )
 
   ENDIF
END


etc. En raffinant on fini par arriver au code C...


Message édité par Emmanuel Delahaye le 29-10-2006 à 11:14:15

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 29-10-2006 à 11:36:01    

Merci beaucoup !
Mais pouvez-vous m'expliquer ce que vous entendez par saisie 'provisoire' des données ?
Est-que cela pourrait aller ?
 
for(i = 0; i < nbs && (dossardlu - 1 < nbp) && (Arrive[i].pers != dossardlu -1); i = i + 1); // dossard déjà inscrit ou inexistant ?  
if(i == nbs) enregistrement
sinon "deja inscrit"  

Reply

Marsh Posté le 29-10-2006 à 11:45:43    

Zoltan87 a écrit :

Mais pouvez-vous m'expliquer ce que vous entendez par saisie 'provisoire' des données ?


Dans une variable locale.

Citation :


Est-que cela pourrait aller ?
 
for(i = 0; i < nbs && (dossardlu - 1 < nbp) && (Arrive[i].pers != dossardlu -1); i = i + 1); // dossard déjà inscrit ou inexistant ?  
if(i == nbs) enregistrement
sinon "deja inscrit"

C'est pas hyper clair comme présentation...


   for (i = 0; i < nbs  
            && (dossardlu - 1 < nbp)  
            && (Arrive[i].pers != dossardlu -1);  
            i = i + 1) // dossard déjà inscrit ou inexistant ?  
      if (i == nbs)  
         enregistrement
      sinon  
         "deja inscrit"


Pour éviter ce genre d'écriture gore, j'avais suggéré d'écrire une fonction de recherche...
 
J'ai l'impression de parler dans le vide...


Message édité par Emmanuel Delahaye le 29-10-2006 à 11:46:20

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed