Anonymní profil Mich – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Mich – Programujte.comAnonymní profil Mich – Programujte.com

 

Příspěvky odeslané z IP adresy 195.178.88.–

Mich
Pascal › Množina s libovolnou mocností
14. 4. 2009   #99066

Tak pěkné dopoledne, pokud si chcete trochu zamyslet v jiném jazyce a s množinami..mohli byste mi poradit..jak to tu mám doplnit, aby to fungovalo, jak má? A jestli byste mohli i s výkladem, proč kde co. Něco mi jede a něco ne..a nějak mi to algoritmicky nemyslí, předem děkuju, jestli se někdo přemůže. :smile1:

//sablona
//Mno?ina s libovolnou mocností

#include <stdio.h>
#include <conio.h>

#define K 100
typedef unsigned char tSet[K/8+1]; //+1 pro pripad kdy K neni nasobkem osmi

//z M se stane prázdná mno?ina
void ClearSet(tSet M)
{
for(int i=0; i<K; i=i+1)
M[i/8] &= ~(1<<(i%8));
//nebo
//for(int i=0; i<(K/8+1); i=i+1)
// M[i] = 0; //vynuluju vsechny prvky pole
}


//vytvoøí novou mno?inu M s kardinalitou K prvkù, kde K je konstanta
void CreateSet(tSet M)
{
ClearSet(M);
for(int i=0; i<K; i=i+1) //pripravim K prvku
M[i/8] |= (1 << (i%8));
}


//Pøidá do mno?iny M prvek n. Pokud dojde k chybì (prvek nemù?e být souèástí mno?iny), nedìlá procedura nic.
void AddSet (tSet M, int n)
{
if( n <= K )
M[n/8] |= (1 << (n%8));
}

//ubere z mno?iny M prvek n. Pokud dojde k chybì (prvek nemù?e být souèástí mno?iny), nedìlá procedura nic.
void DelSet(tSet M, int n)
{
//UKOL
}

//vrátí True, pokud se prvek n v mno?inì M nachází. Vrátí False, pokud se prvek n v mno?inì M nenachází nebo pokud prvek být v mno?inì nemù?e.
bool InSet (tSet M, int n)
{
//UKOL
return false;
}

//rozdíl mno?in M1 a M2 (tj. výsledek obsahuje prvky mno?iny M1, které se nenacházejí v M2).
//Výsledek se vrací v M1.
void DiffSet (tSet M1, tSet M2)
{
//UKOL
}

//Test mno?in M1 a M2 na rovnost.
bool EquSet (tSet M1, tSet M2)
{
//UKOL
return false;
}

//provede sjednocení mno?in M1 a M2, výsledek ulo?í do M1
void UnionSet (tSet M1, tSet M2)
{
//UKOL
}

//provede prùnik mno?in M1 a M2, výsledek ulo?í do M1
void IntersectSet (tSet M1, tSet M2)
{
//UKOL
}

//vypise prvky mnoziny
void PrintSet(tSet M)
{
for(int i=0; i<K; i=i+1)
{
if( M[i/8] & (1<<(i%8)) )
printf("\n%d", i);
}
}

int main()
{
tSet m1;
tSet m2;

CreateSet(m1);
CreateSet(m2);

ClearSet(m1); //nastavim mnozinu na 0
ClearSet(m2);

AddSet(m1, 4);
AddSet(m1, 72);
AddSet(m1, 9);
AddSet(m1, 17);
AddSet(m1, 72);

AddSet(m2, 1);
AddSet(m2, 21);
AddSet(m2, 4);
AddSet(m2, 17);

if( InSet(m1, 9) )
printf("\nCislo 9 je soucasti mnoziny.");
else
printf("\nCislo 9 neni soucasti mnoziny.");

DelSet(m1, 9);

if( InSet(m1, 9) )
printf("\nCislo 9 je soucasti mnoziny.");
else
printf("\nCislo 9 neni soucasti mnoziny.");

if( EquSet(m1, m2) )
printf("\nMnoziny se shoduji.");
else
printf("\nMnoziny jsou ruzne.");

IntersectSet(m1, m2);
printf("\nPrvky mnoziny M1");
PrintSet(m1);

UnionSet(m1, m2);
printf("\nPrvky mnoziny M1");
PrintSet(m1);

printf("\nLibovolnou klavesou ukoncete program.");
getch();
return 0;
}

Ještě jednou předem díky

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý