Keresés

Új hozzászólás Aktív témák

  • DEV_NULL

    őstag

    Sziasztok!

    A problémám amire tőletek várnék megoldást; a feladat egy C program ami először bekér egy számot, majd bekér ennyi de maximum 50 számot. Ezeket megszűri, hogy ne legyen benne ismétlődés, majd olyan ismétlődés nélküli számnégyeseket csinál belőlük ahol az első és utolsó szám összege megegyezik a második és harmadik szám összegével és a végén ezek darabszámát. Ezt egy robot ellenőrzi. Két gond van, az egyik, hogy malloc hibával elszáll, vagy ha program kimenete több ezer megfelelő számnégyes, akkor még néhány száz darab nullás számnégyest kipörget a végére... Én már kezdem feladni, bízom benne, tudtok segíteni. Remélem sikerül normálisan bemásolni a kódot, most írok ide először...

    Hiba: prog: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)

    Köszi előre is!

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct dec10Hazi
    {
        unsigned int meret, meret2;
        unsigned int csere, csere2;
        unsigned int *cim, *cim2;
        unsigned int tomb[4];
        unsigned int db;
    } Nehez;

    int main()
    {
       Nehez hazi;
        unsigned int h, a, z, i;

        scanf("%u", &hazi.meret);

        hazi.cim=malloc(sizeof(unsigned int)*hazi.meret);

       for(h=0; h<hazi.meret; h++)
            {
            scanf("%u", &hazi.cim[h]);
            }

       hazi.csere2=1;
        while(hazi.csere2)
            {
            for(h=0; h<hazi.meret-1; h++)
                {
                if(hazi.cim[h]>hazi.cim[h+1])
                    {
                    hazi.csere=hazi.cim[h];
                    hazi.cim[h]=hazi.cim[h+1];
                    hazi.cim[h+1]=hazi.csere;
                    }
                }
            hazi.csere2=0;
            for(h=0; h<hazi.meret-1; h++)
                {
                if(hazi.cim[h]>hazi.cim[h+1])
                    {
                   hazi.csere2=1;
                   break;
                   }
               }
            }

       hazi.meret2=0;
       for(h=0; h<hazi.meret-1; h++)
            {         
            if(hazi.cim[h]<hazi.cim[h+1])
                {            
                hazi.meret2++;
                }         
            }
        hazi.meret2++;

        hazi.cim2=malloc(sizeof(unsigned int)*hazi.meret2);

       h=0;
       hazi.csere=0;
       hazi.cim2[hazi.csere]=hazi.cim[h];
        h++;

       while(hazi.csere<hazi.meret2)
            {
           if(hazi.cim[h]>hazi.cim2[hazi.csere])
                {
               hazi.cim2[++hazi.csere]=hazi.cim[h];
                h++;
                }
           else  
                {
               h++;
               }
            }

       hazi.db=0;
      for(h=0; h<hazi.meret-3; h++)
            {         
           hazi.tomb[0]=hazi.cim2[h];
           for(a=h+1; a<hazi.meret-2; a++)
                {            
               hazi.tomb[1]=hazi.cim2[a];
                for(z=a+1; z<hazi.meret-1; z++)
                    {                 
                   hazi.tomb[2]=hazi.cim2[z];
                   for(i=z+1; i<hazi.meret; i++)
                        {                     
                       hazi.tomb[3]=hazi.cim2[i];
                       if(hazi.tomb[0]+hazi.tomb[3]==hazi.tomb[1]+hazi.tomb[2])
                            {
                            hazi.db++;
                            }
                        }
                   }
               }
            }

        printf("%u\n", hazi.db);

       free(hazi.cim);
        free(hazi.cim2);

        return 0;
    }

    [ Szerkesztve ]

  • DEV_NULL

    őstag

    válasz kovisoft #5993 üzenetére

    Szia!

    Köszi a választ. A ++t áttéve megszűnik a malloc hiba, viszont a kimeneten a darabszám, sajnos nem jó. Valamiért vagy több, vagy kevesebb, mint amennyinek lennie kellene...

    [ Szerkesztve ]

  • DEV_NULL

    őstag

    válasz kovisoft #5995 üzenetére

    Köszi a segítséget!

    Mivel sehogy sem akart működni egy teljesen új, sokkal egyszerűbb megközelítésből oldottam meg végül:

    #include <stdio.h>
     
     
    typedef struct
    {
        unsigned int tomb[50];
        unsigned int szam, db;
        unsigned int meret, meret2;
    } Nehez;
     
     
    Nehez meret()
    {
        Nehez hazi;
        hazi.meret2=0;
        hazi.db=0;
     
        scanf("%u", &hazi.meret);
     
        return hazi;
    }
     
    Nehez beker()
    {
        Nehez hazi;
        unsigned int h, a;
     
        for(h=0; h<hazi.meret; h++)
            {
            scanf("%u", &hazi.szam);
            a=0;
            while(a<h && hazi.szam!=hazi.tomb[a])
                {
                a++;
                }
            if(a==h)
                {
                hazi.tomb[hazi.meret2]=hazi.szam;
                hazi.meret2++;
                }
            }
     
        return hazi;
    }
     
    Nehez rendez(Nehez hazi)
    {
        unsigned int h, a;
     
        for(h=0; h<hazi.meret2; h++)
            {
            for(a=h+1; a<hazi.meret2; a++)
                {
                if(hazi.tomb[h]>hazi.tomb[a])
                    {
                    hazi.szam=hazi.tomb[a];
                    hazi.tomb[a]=hazi.tomb[h];
                    hazi.tomb[h]=hazi.szam;
                    }
                }
            }
     
        return hazi;
    }
     
    Nehez szamol(Nehez hazi)
    {
        unsigned int h, a, z, i;
     
        for(h=0; h<hazi.meret2; h++)
            {
            for(a=h+1; a<hazi.meret2; a++)
                {
                for(z=a+1; z<hazi.meret2; z++)
                    {
                    for(i=z+1; i<hazi.meret2; i++)
                        {
                        if(hazi.tomb[h]+hazi.tomb[i]==hazi.tomb[a]+hazi.tomb[z])
                            {
                            hazi.db++;
                            }
                        }
                    }
                }
            }
     
        return hazi;
    }
     
    void kiir(Nehez hazi)
    {
        printf("%u", hazi.db);
    }
     
     
     
    int main()
    {
        Nehez hazi;
     
        hazi=meret();
        hazi=beker();
     
        hazi=rendez(hazi);
        hazi=szamol(hazi);
     
        kiir(hazi);
     
        return 0;
    }


Új hozzászólás Aktív témák