Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

mnoziny-zp2-10

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

/* struktura reprezentujici mnozinu */
typedef struct {
	int *prvky;			/* pole pro bitove ulozeni prvku */
	int pocet;			/* pocet prvku v mnozine */
} mnozina;

void vypis(mnozina A);		/* vypis indexu prvku dane mnoziny na obrazovku */
mnozina prunik(mnozina A, mnozina B);	/* prunik dvou mnozin */
mnozina sjednoceni(mnozina A, mnozina B);	/* sjednoceni dvou mnozin */
mnozina rozdil(mnozina A, mnozina B);	/* rozdil prvni a druhe mnoziny */

int main()
{
	mnozina A, B, C;

	/* vytvoreni mnoziny A */
	A.prvky = (int *)malloc(3 * sizeof(int));
	A.prvky[0] = 43;
	A.prvky[1] = 55;
	A.prvky[2] = 42351;
	A.pocet = 3 * sizeof(int)* 8;

	/* vytvoreni mnoziny B */
	B.prvky = (int *)malloc(3 * sizeof(int));
	B.prvky[0] = 43;
	B.prvky[1] = 5501;
	B.prvky[2] = 42000;
	B.pocet = 3 * sizeof(int)* 8;

	/* vypis mnoziny A na obrazovku */
	printf("Mnozina A: \n");
	vypis(A);
	printf("\n");

	/* vypis mnoziny B na obrazovku */
	printf("Mnozina B: \n");
	vypis(B);
	printf("\n");

	/* vypocet pruniku a jeho vypis na obrazovku */
	C = prunik(A, B);
	printf("Prunik mnozin A a B: \n");
	vypis(C);
	printf("\n");

	/* vypocet sjednoceni a jeho vypis na obrazovku */
	free(C.prvky);
	C = sjednoceni(A, B);
	printf("Sjednoceni mnozin A a B: \n");
	vypis(C);
	printf("\n");

	//vypocet rozdilu a jeho vypis na obrazovku *
	free(C.prvky);
	C = rozdil(A, B);
	printf("Rozdil mnozin A a B: \n");
	vypis(C);
	printf("\n");

	system("pause");
	return 0;
}

void vypis(mnozina A)
{
	long maska;
	int index;
	int i, j;
	int mez_i;

	index = 0;

	/* vypocet meze cyklu */
	mez_i = A.pocet / (sizeof(int)* 8) + 1;

	/* cyklus pres cisla typu int */
	for (i = 0; i < mez_i; i++) {

		/* vypocet meze cyklu */
		int mez_j = (i < mez_i - 1) ? sizeof(int)* 8 : (A.pocet % (sizeof(int)* 8));

		/* posun masky na zacatek */
		maska = 1;

		/* cyklus pres jednotlive bity */
		for (j = 0; j < mez_j; j++) {

			/* pokud je prvek v mnozine - bit 1 pod maskou,
			* tak vypiseme odpovidajici index
			*/
			if (A.prvky[i] & maska)
				printf("%i, ", index);
			maska *= 2;		/* posun masky */
			index++;		/* posun indexu */
		}
	}
}

mnozina prunik(mnozina A, mnozina B)
{
	/* DOPLNTE */
}

mnozina sjednoceni(mnozina A, mnozina B)
{
	mnozina X;
	int i = 0, j = 0;
	X.prvky = (int *)malloc((A.pocet + B.pocet) * sizeof(int));
	for (i; i < A.pocet; i++)
	{
		X.prvky[i] = A.prvky[i];
	}
	for (j; j < B.pocet; j++)
	{
		X.prvky[i + 1] = B.prvky[j];
		i++;
	}
	X.pocet = (A.pocet + B.pocet) * sizeof(int)* 8;

	return X;

}

mnozina rozdil(mnozina A, mnozina B)
{
	/* DOPLNTE */
}

Neformátovaný

Přidáno: 28.4.2014
Expirace: Neuvedeno

Avatar
Autor: hurvajs
Aktivity