IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Algorithme de détermination de CFC


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Algorithme de détermination de CFC
    Bonjour à tous,

    Je ne suis pas une spécialiste en programmation mais je suis obligé de programmer l'algorithme de détermination de CFC. J'ai fait plusieurs essais mais çà n'a pas marcher. Voilà le code que j'ai développé:
    #include <stdio.h>
    #include <stdlib.h>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    int main ()
         {
         int i,j,l,c,s;
         int **M;
         int *tabplus,x;
         int *tabmoins,y;
         do 
         {
             printf("donner le nombre de lignes",l);
             scanf("%d",&l);
              printf("donner le nombre de colonnes ",c);
             scanf("%d",&c);
             }
             while (l!=c);
         M= (int **) malloc (l*sizeof(int*)) ;
        for(i=0 ; i<l ; i++)
        *(M+i)=(int *) malloc (c*sizeof(int)) ;
        for(i=0 ; i<l ; i++)
        {
                for(j=0 ; j<c ; j++)
                {
                    printf("M[%d][%d]",i,j);
                    scanf("%d",M[i]+j);
                    }
                    }          
                tabplus=(int *)malloc (c*sizeof(int));
                for (x=0;x<l;x++)
                scanf("%d",tabplus+x);
                tabmoins=(int *)malloc (c*sizeof(int));
                 for (y=0;y<l;y++)
                scanf("%d",tabmoins+y);
            printf("donner un sommet",s);
            scanf("%d",&s);
            tabplus[s]=1;
            tabmoins[s]=1;
                for (j=0;j<c;j++);
                {
                    i=s;
                    if(M[i][j]==1)
                    for(x=0;x<l;x++)
                    tabplus[j]=1;
                    else 
                    tabplus[j]=0;
                    }
                      printf("%d\t",*(tabplus+x));
                      for (i=0;i<l;i++);
                {
                    if(M[i][s]==1)
                          for(y=0;y<l;y++)
                    tabplus[i]=1;
                    else 
                    tabplus[i]=0;
                    }
                      printf("%d\t",*(tabmoins+y));
           return 0;               
    }

    Mon problème que je n'arrive pas de déterminer les tableau tab+ pour les présuccesseurs du sommet s et tab- pour les prédécesseur du sommet s.

    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Qu'est ce que l'algorithme de détermination de CFC?

    Ton code est ignoble. Mais je vois 3-4 trucs:
    1. Ligne 36 et 46, il y a des points virgules derrière les boucles for
    2. Ligne 26, tu initialises tabplus avec le nombre de colonnes. Mais ligne 40 et 49 tu le parcours avec le nombre de lignes.
    3. Ligne 38, elle ne sert à rien
    4. Un doute: pourquoi faire une matrice M de taille cxl alors que tu peux faire un tableau simple de taille cxl?
    5. Utilise memset



    Code nettoyé, mais pas corrigé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int main () {
        int** M = NULL;
        int* tabplus  = NULL;
        int* tabmoins = NULL;
        int i = 0, j = 0, l = 0, c = 0, s = 0, x = 0, y = 0;
     
        do {
            printf("donner le nombre de lignes", l);
            scanf("%d", &l);
            printf("donner le nombre de colonnes", c);
            scanf("%d", &c);
        } while (l != c);
     
        M = (int**) malloc(l * sizeof(int*)) ;
     
        for (i = 0 ; i < l ; i++) {
            *(M+i) = (int *) malloc(c * sizeof(int)) ;
        }
     
        for (i = 0 ; i < l ; i++) {
            for (j = 0 ; j < c ; j++) {
                printf("M[%d][%d]", i, j);
                scanf("%d", (M[i] + j));
            }
        }          
     
        tabplus = (int*) malloc (c * sizeof(int));
     
        for (x = 0; x < l; x++) {
            scanf("%d", (tabplus + x));
        }
     
        tabmoins = (int*) malloc (c * sizeof(int));
     
        for (y = 0; y < l; y++) {
            scanf("%d", (tabmoins + y));
        }
     
        printf("donner un sommet", s);
        scanf("%d", &s);
     
     
        tabplus[s]  = 1;
        tabmoins[s] = 1;
     
        for (j = 0; j < c; j++); {
            i = s;
     
            if (M[i][j] == 1) {
                for (x = 0; x < l; x++) {
                    tabplus[j] = 1;
                }
            } else { 
                tabplus[j] = 0;
            }
        }
     
        printf("%d\t", *(tabplus + x));
     
        for (i = 0; i < l; i++); {
           if (M[i][s] == 1) {
                for (y = 0; y < l; y++) {
                    tabplus[i] = 1;
                }
            } else { 
                tabplus[i] = 0;
            }
        }
     
        printf("%d\t", *(tabmoins + y));
     
        return 0;               
    }

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 984
    Points
    30 984
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par faaffou Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(x=0;x<l;x++)
        tabplus[j]=1;
    }
    Bonjour

    Sans être spécialiste, suffit d'une simple relecture pour se rendre compte que cette boucle ne sert à rien du tout. Sinon c'est vrai que ton code est ignoble. Le problème c'est qu'un code bien écrit simplifie 40% de l'algo et inversement un code aussi pourri ne donne vraiment pas envie de le lire. Merci à foetus pour la remise en forme, c'est grâce à lui que j'ai pu voir ce truc...

    PS: au fait, ça ne sert absolument à rien d'écrire *(tab + x) au lieu de tab[x] (et en plus, même si ça semble impossible, ça réussit quand-même à obscurcir encore plus ton code). C'est vrai que passer par un pointeur optimise les accès tableaux mais c'est à conditions
    1. d'avoir plusieurs accès à tab[x]
    2. d'avoir un second pointeur pt déjà positionné sur tab + x afin de remplacer tab[x] par *pt parce que sinon, le décalage est quand-même recalculé à chaque appel *(tab + x)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/01/2011, 09h36
  2. Algorithme de détermination d'un ShortFilename (8.3) ou LongFileName (LFN)
    Par Marmoccelle dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 31/01/2008, 12h15
  3. algorithme de détermination de "sous-séries"
    Par Giansolo dans le forum Algorithmes et structures de données
    Réponses: 40
    Dernier message: 08/03/2007, 14h11
  4. Algorithme qui détermine un espace couleur hybride
    Par hanane78 dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/02/2007, 18h15
  5. [Image] Algorithme pour déterminer une forme continue
    Par wizzmasta dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 25/04/2006, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo