Untitled
unknown
c_cpp
4 years ago
4.4 kB
7
Indexable
#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);
}Editor is loading...