Utilisateur:Tejgad/Codage
Un article de Wikipédia, l'encyclopédie libre.
Présentation | Codage | Brouillon |
Voici la page où je mets le code de mes créations. Ça peut aider, si, si.
[modifier] Compteur Condorcet
Ce code en C compte les voix d'un vote Condorcet (sans blague ?). Le fichier attaché s'appelle votes.txt . Application console, il retourne le résultat de chacun des duels, dans les deux sens. Il donne aussi le nombre de victoire de chaque option, ce qui donne une indication à propos des cycles. NB : Le programme affiche des numéros de ligne. S'il s'arrête au numéro n, il y a une erreur dans le fichier à la ligne n+1.
Instructions pour le fichier votes.txt
- Une ligne par vote et commentaires
- Les votes doivent se trouver en début de ligne sous la forme 1 > 2 > 3,4,5 > 6,7 :
- Des chiffres
- Le signe d'ordre est toujours >
- Un espace avant et après >
- Le signe d'équivalence est n'importe quoi sauf un espace ou un chiffre
- Un espace après le dernier chiffre, le caractère après l'espace ne doit pas être un >
- Le dernier vote doit être la dernière ligne (pas de retour)
Code
#include <stdio.h> #include <stdlib.h> #define NBOPTIONS 7 #define NBDUELS (NBOPTIONS*NBOPTIONS) int main(int argc, char *argv[]) { FILE* fichier = NULL; int carac = 0 , boucleur = 0 , stat = NBOPTIONS , nombre = 0 , ordre[NBOPTIONS] = {0}, duels[NBDUELS] = {0}, i , j , votants=0, vic=0; fichier = fopen("votes.txt", "r"); if (fichier != NULL) { do { for(i=0;i<NBOPTIONS;i++) { ordre[i] = 0; } stat = NBOPTIONS; boucleur = 0; do { fscanf(fichier, "%ld", &nombre); ordre[nombre-1] = stat; carac = fgetc(fichier); if (carac == ' ') { carac = fgetc(fichier); if (carac != '>') { boucleur = 1; } else { stat--; } fseek(fichier, 1, SEEK_CUR); } }while (boucleur == 0); for(i=0 ; i<NBOPTIONS; i++) { for(j=0; j<NBOPTIONS; j++) { if (i!=j && ordre[j]>ordre[i]) { duels[NBOPTIONS*i+j]++; } } } while (carac != EOF && carac !='\n') { carac = fgetc(fichier); } votants++; printf("%ld\n", votants); }while (carac != EOF); fclose(fichier); printf("\n"); for(i=0; i<NBOPTIONS; i++) { for(j=0; j<NBOPTIONS; j++) { if (i!= j) { printf("%ld vers %ld : %ld contre %ld soit %ld \n", i+1 , j+1, duels[NBOPTIONS*j+i], duels[NBOPTIONS*i+j], duels[NBOPTIONS*j+i]-duels[NBOPTIONS*i+j]); } } printf("\n"); } for(i=0; i<NBOPTIONS; i++) { vic=0; for(j=0; j<NBOPTIONS; j++) { if(i!=j && duels[NBOPTIONS*j+i]>duels[NBOPTIONS*i+j]) { vic++; } } ordre[i]=vic; } for(i=0; i<NBOPTIONS; i++) { printf("%ld : %ld victoire(s) \n", i+1, ordre[i]); } } return 0; }
Page suivante : Brouillon→