Matematické Fórum


1. 8. 2026 (L) Fórum bude brzy uzavřeno 😿

Nejste přihlášen(a). Přihlásit

#1 28. 01. 2010 13:20

XOR
Zelenáč
Příspěvky: 10
Reputace:   
 

Práce s polem v Céčku

Dobrý den,
prosím Vás, mám problém s touto úlohou:
Napište funkci, která bude mít jako vstupní parametry dvě pole se známou velikostí (vždy pole a velikost) a bude vracet pole, které bude obsahovat vždy ty prvky, které obsahuje prvky zároveň prvního a druhého pole (tedy průnik množin).
Dělá mi problém přijít na to, jak to napsat, když potřebuji i zajistit například dvojici (trojici apod) za sebou opakujících stejných čísel.
Předem děkuji.

Offline

  • (téma jako vyřešené označil(a) musixx)

#2 28. 01. 2010 13:45

musixx
Místo: Brno
Příspěvky: 1771
Reputace:   45 
 

Re: Práce s polem v Céčku

Jen pro ujasnění:

pole A: 11223334445
pole B: 1234446

Výsledek má být pole obsahující čtyři prvky, a to 1234, a to nejspíš v libovoném pořadí, ne?

Offline

 

#3 28. 01. 2010 14:01

XOR
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Práce s polem v Céčku

↑ musixx: jestli to má být opravdu průnik, řekl bych, že by v tom novém poli měly být všechny ty tři čtyřky. samozřejmě v libovolném pořadí.

Offline

 

#4 28. 01. 2010 15:11

musixx
Místo: Brno
Příspěvky: 1771
Reputace:   45 
 

Re: Práce s polem v Céčku

Já mám teda jiné představy o průniku množin, ale budiž.

Teď záleží na tom, jak efektivně to chceš naprogramovat. Zajímá tě vůbec, jestli výsledný algoritmus bude kvadratický, kubický či nějaký jiný? A jakým způsobem se alokuje paměť pro to výstupní pole?

Offline

 

#5 28. 01. 2010 15:21

XOR
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Práce s polem v Céčku

↑ XOR: to vůbec. Stačí "hrubá síla".

Offline

 

#6 28. 01. 2010 16:58 — Editoval musixx (28. 01. 2010 17:16)

musixx
Místo: Brno
Příspěvky: 1771
Reputace:   45 
 

Re: Práce s polem v Céčku

V tom případě třeba něco takového jako níže. Pokud by se mělo hrát aspoň trochu na efektivitu, pak bych uvažoval o setřízení obou vstupních polí a vůbec o úplně jiném přístupu.

Netestoval jsem, takže tam můžou být nějaké překlepy. A také nepíšu žádné parádičky typu for(;--length;) atd...

Code:

#define min(a,b) ((a)<(b) ? (a) : (b))

int is_member(int element, int *array, int array_length)
{
    int i;

    for (i = 0; i < array_length; i++) if (array[i] == element) return 1;

    return 0;
}

int nr_of_occur(int element, int *array, int array_length)
{
    int i, nr;

    nr = 0;
    for (i = 0; i < array_length; i++) if (array[i] == element) nr += 1;

    return nr;
}

void array_intersection(int *a1, int length_a1, int *a2, int length_a2, int *intersection, int *intersection_length)
{
    int i, j, nr;

    *intersection_length = 0;

    for (i = 0; i < length_a1; i++)
    {
        /* go through array a1 */

        if (!is_member(a1[i], intersection, *intersection_length))
        {
            /* a1[i] is not in the output array - compute a number of its occurance in input arrays */
            nr = min(nr_of_occur(a1[i], a1, length_a1), nr_of_occur(a1[i], a2, length_a2));

            /* add nr copies of a1[i] into the output array, and update its length */
            for (j = 0; j < nr; j++) intersection[*intersection_length++] = a1[i];
        }
    }
}

void main(void)
{
    int a1[100], length_a1;
    int a2[100], length_a2;
    int a3[100], length_a3;

    /* fill in a1, a2, length_a1, length_a2 */

    array_intersection(a1, length_a1, a2, length_a2, a3, &length_a3);

    /* work with a3 - valid length is length_a3 */
}

EDIT: Zvlášť na efektivitu dbám při těch funkcích coby argumentech makra. :-)

Offline

 

#7 30. 01. 2010 11:09

XOR
Zelenáč
Příspěvky: 10
Reputace:   
 

Re: Práce s polem v Céčku

↑ musixx:Děkuju mockrát!

Offline

 

#8 02. 02. 2010 18:22

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Práce s polem v Céčku

Jenom nechápu, než přejdeš k programování, proč máš množiny, kde se opakují prvky?

Porušuješ matematické zákony...


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#9 03. 02. 2010 07:17

musixx
Místo: Brno
Příspěvky: 1771
Reputace:   45 
 

Re: Práce s polem v Céčku

↑ RePRO: Byl bych smířlivější. Po provedeném upřesnění zadání má i to, co žádá XOR, smysl. Akorát tomu raději říkejme třeba průnik polí, kde teda nemáme na mysli zrovna algebraické struktury...

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson