Untitled

mail@pastecode.io avatar
unknown
c_cpp
2 years ago
4.4 kB
2
Indexable
Never
#define _CRT_SECURE_NO_WARNINGS	

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

enum kolory { ZIELONY_B, NIEBIESKI_B, TLO, DOMYSLNY };

void ustawKolor(int k)
{
	HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);

	switch (k)
	{
	case ZIELONY_B:		SetConsoleTextAttribute(h, 0x00FA); break;  //zielony znak na białym tle
	case NIEBIESKI_B:	SetConsoleTextAttribute(h, 0x00F9); break;  //czarny znak na białym tle
	case TLO:			SetConsoleTextAttribute(h, 0x0077); break;  //szary znak na szarym tle
	case DOMYSLNY:		SetConsoleTextAttribute(h, 0x0007); break;	//domyślny (jasny szary na czarnym tle)
	}
}

typedef struct element { //element - kolorowy znak na kolorowym tle
	char z;			//znak wpisywany w tablicę
	int  kolor;		//kolory: CZERWONY_B, CZARNY_B, TLO, STANDARD
}element;

typedef struct tab_1D { //struktura reprezentująca 1-wymiarową tablicę dynamiczną
	element* t;	// dynamiczna tablica 1-wymiarowa zawierająca el-ementy
	int n;	// wymiary: n wierszy 
} tab_1D;

typedef struct tab_2D { //struktura reprezentująca 2-wymiarową tablicę dynamiczną
	element** t;	// dynamiczna tablica 2-wymiarowa
	int w;	// wymiary: w wierszy, k kolumn 
	int k;
} tab_2D;

tab_1D* init_1D(int n); //1p
void fill_1D(tab_1D* tab, char* napis, int rozmiar_napisu, int kolor);//1p
void print_1D(tab_1D* tab);//0,5p
void free_1D(tab_1D* tab);//0,5p
tab_2D* init_2D(int w, int k); //2p
void transpose_2D(tab_2D** tab);//1p
void print_2D(tab_2D* tab);//0,5p
void free_2D(tab_2D* tab);//0,5p

int main()
{
	tab_1D* T1;
	tab_2D* T2;
	int n, w, k, i, j;
	char napis[] = { 'Z','A','M','I','A','N','A' };
	n = 5;
	w = 7;
	k = 10;

	/*__________________ETAP 1__________________*/
	T1 = init_1D(n);
	if (!(T1)) return 1;
	T1->t[0].z = 'W'; T1->t[1].z = 'I'; T1->t[2].z = 'T'; T1->t[3].z = 'A'; T1->t[4].z = 'M';
	ustawKolor(ZIELONY_B);
	for (i = 0; i < n; i++) printf("%c", T1->t[i].z);
	printf("\n\n");
	ustawKolor(DOMYSLNY);
	fill_1D(T1, napis, 7, NIEBIESKI_B);
	print_1D(T1);
	printf("\n\n");
	T1->t[2].kolor = DOMYSLNY;
	print_1D(T1);
	free_1D(T1);
	printf("\n\n");
	ustawKolor(DOMYSLNY);
	/*__________________ETAP 2__________________*/
	T2 = init_2D(w, k);
	for (i = 0; i < T2->w; i++)	for (j = 0; j < T2->k; j++) { T2->t[i][j].z = ' '; T2->t[i][j].kolor = TLO; }	
	T2->t[0][0].z = '1'; T2->t[0][k - 1].z = '2'; T2->t[0][0].kolor = NIEBIESKI_B; T2->t[0][k - 1].kolor = ZIELONY_B;
	print_2D(T2);
	printf("\n\n");
	transpose_2D(&T2);
	print_2D(T2);
	free_2D(T2);
	printf("\n\n");
	ustawKolor(DOMYSLNY);

	system("pause");
	return 0;
}

tab_1D* init_1D(int n)
{
	tab_1D* objekt = (tab_1D*)malloc(sizeof(tab_1D));

	if (objekt)
	{
		objekt->t = (element*)malloc(sizeof(element) * n);
		objekt->n = n;

		return objekt;
	}
	else
	{
		return NULL;
	}
}

void fill_1D(tab_1D* tab, char* napis, int rozmiar_napisu, int kolor)
{
	tab_1D *tmp = realloc(tab, sizeof(tab) + sizeof(element) * (sizeof(*napis) / sizeof(char)));
	tab = tmp;
	if(tab)
		tab->n = rozmiar_napisu;

	for (int i = 0; i < rozmiar_napisu; i++)
	{
		if (tab)
		{
			tab->t[i].z = napis[i];
			tab->t[i].kolor = kolor;
		}
	}
}

void print_1D(tab_1D* tab)
{
	for (int i = 0; i < tab->n; i++)
	{
		ustawKolor(tab->t[i].kolor);
		printf("%c", tab->t[i].z);
	}

	ustawKolor(DOMYSLNY);
}

void free_1D(tab_1D* tab)
{
	free(tab);
}



tab_2D* init_2D(int w, int k)
{
	int i = 0;

	tab_2D* objekt = (tab_2D*)malloc(sizeof(tab_2D));

	if (objekt)
	{
		objekt->w = w;
		objekt->k = k;

		element** arr = (element**)malloc(w * sizeof(element*));
		if (arr)
		{
			for (int i = 0; i < w; i++)
			{
				arr[i] = (element*)malloc(k * sizeof(element));
			}
		}

		objekt->t = arr;

		return objekt;
	}
	else
	{
		return NULL;
	}
}

void transpose_2D(tab_2D** tab)
{
	tab_2D* pom = init_2D((*tab)->k, (*tab)->w);

	for (int i = 0; i < (*tab)->w; i++)
	{
		for (int j = 0; j < (*tab)->k; j++)
		{
			pom->t[j][i] = (*tab)->t[i][j];
		}
	}

	(*tab) = pom;
}

void free_2D(tab_2D* tab)
{
	free(tab);
}

void print_2D(tab_2D* tab)
{
	for (int i = 0; i < tab->w; i++)
	{
		for (int j = 0; j < tab->k; j++)
		{
			ustawKolor(tab->t[i][j].kolor);
			printf("%c", tab->t[i][j].z);
		}
		printf("\n");
	}

	ustawKolor(DOMYSLNY);
}