Code source d'un tri Fusion en Langage C
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Code source d'un tri Fusion en Langage C



  1. #1
    invitefe71e0cf

    Code source d'un tri Fusion en Langage C


    ------

    Bonsoir a tous
    Je suis actuellement sur l'étude du tri fusion en langage C, et j'ai essayé de trouver un code source. J'ai donc celui ci:
    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <assert.h>
    void fusion(int tableau[],int deb1,int fin1,int fin2)
            {
            int *table1;
            int deb2=fin1+1;
            int compt1=deb1;
            int compt2=deb2;
            int i;
            
            table1=malloc((fin1-deb1+1)*sizeof(int));
    
            //on recopie les éléments du début du tableau
            for(i=deb1;i<=fin1;i++)
                {
                table1[i-deb1]=tableau[i];
                }
                            
            for(i=deb1;i<=fin2;i++)
                {        
                if (compt1==deb2) //c'est que tous les éléments du premier tableau ont été utilisés
                    {
                    break; //tous les éléments ont donc été classés
                    }
                else if (compt2==(fin2+1)) //c'est que tous les éléments du second tableau ont été utilisés
                    {
                    tableau[i]=table1[compt1-deb1]; //on ajoute les éléments restants du premier tableau
                    compt1++;
                    }
                else if (table1[compt1-deb1]<tableau[compt2])
                    {
                    tableau[i]=table1[compt1-deb1]; //on ajoute un élément du premier tableau
                    compt1++;
                    }
                else
                    {
                    tableau[i]=tableau[compt2]; //on ajoute un élément du second tableau
                    compt2++;
                    }
                }
            free(table1);
            }
            
    
    void tri_fusion_bis(int tableau[],int deb,int fin)
            {
            if (deb!=fin)
                {
                int milieu=(fin+deb)/2;
                tri_fusion_bis(tableau,deb,milieu);
                tri_fusion_bis(tableau,milieu+1,fin);
                fusion(tableau,deb,milieu,fin);
                }
            }
    
    void tri_fusion(int tableau[],int longueur)
         {
         if (longueur>0)
                {
                tri_fusion_bis(tableau,0,longueur-1);
                }
         }
    Problème, dés que je lance le déboguage, j'obtient comme erreur que "error C2440: '='*: impossible de convertir de 'void *' en 'int *' La conversion de 'void*' en pointeur vers non 'void' nécessite un cast explicite", sur la ligne en rouge.
    Quelqu'un aurais t"il une idée?
    Merci d'avance en tout cas !!

    -----
    Dernière modification par Jack ; 23/05/2012 à 09h48. Motif: Ajout balises code

  2. #2
    Jack
    Modérateur

    Re : Code source d'un tri Fusion en Langage C

    Bonjour,

    il existe un forum spécialisé pour les problèmes de programmation dans le quel j'ai déplacé ta demande.

    De plus, à des fins de lisibilité, il est demandé de placer du code entre les balises code.

  3. #3
    Jack
    Modérateur

    Re : Code source d'un tri Fusion en Langage C

    Problème, dés que je lance le déboguage, j'obtient comme erreur que "error C2440: '='*: impossible de convertir de 'void *' en 'int *'
    En fait c'est une erreur de compilation.
    Il aurait été intéressant que tu précises quel est ton compilateur. En imaginant qu'il s'agisse de visual studio par exemple, si ton fichier source porte l'extension .cpp, le compilateur C++ est utilisé. Or C++ est beaucoup plus regardant que C au niveau des types lors d'une affectation par exemple.

    La conversion de 'void*' en pointeur vers non 'void' nécessite un cast explicite", sur la ligne en rouge.
    C'est donc clair, il faut caster le pointeur:
    Code:
    table1=(int*)malloc((fin1-deb1+1)*sizeof(int));
    Sinon, ça passera peut-être aussi sans caster en donnant l'extension .c au fichier source

    A+
    Dernière modification par Jack ; 23/05/2012 à 09h55.

  4. #4
    invitefe71e0cf

    Re : Code source d'un tri Fusion en Langage C

    Bonjour
    merci de ta réponse rapide. En effet, je bosse sous visual c studio. Avec ta modif, l'erreur que j'ai cité n'apparais plus mais il refuse de marcher.Je pense que tu a raison et que c'est une erreur de compilateur ^^'
    Merci bcp en tt cas

  5. A voir en vidéo sur Futura
  6. #5
    Jack
    Modérateur

    Re : Code source d'un tri Fusion en Langage C

    mais il refuse de marcher
    C'est à dire?

    A+

  7. #6
    Jack
    Modérateur

    Re : Code source d'un tri Fusion en Langage C

    il y a un truc bizarre dans ton programme: il n'y a pas de fonction main

    A+

Discussions similaires

  1. Code source
    Par invitec30423e2 dans le forum Électronique
    Réponses: 5
    Dernier message: 18/03/2011, 18h30
  2. Un langage codé léger, 2 caractères non codé=1 caractère codé. Une solution?
    Par invite06e0b926 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 30/06/2010, 11h02
  3. code source
    Par invite75b461de dans le forum Électronique
    Réponses: 9
    Dernier message: 26/03/2010, 23h36
  4. [Latex] Formatter du code en langage C
    Par invite359f3846 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 29/06/2006, 09h36
  5. obtenir le code source d'un logiciel
    Par invitee6dbc8ad dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 24/08/2005, 16h39