Untitled
unknown
c_cpp
4 years ago
4.4 kB
5
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...