Tworzenie tabeli

0

Jak z tablicy stworzyć tabelę i określoną jej część pokolorować na dany kolor??

2

Jaką tabelę? O czym mowa? Jakie kolorowanie?

0
kq napisał(a):

Jaką tabelę? O czym mowa? Jakie kolorowanie?

Chodzi mi o to, że w C np. można stworzyć tablicę 6 na 6 i uzupełnić wartościami losowymi. A ja się pytam jak do tej tablicy dodać w C jeszcze obramowania wewnętrzne i zewnętrzne, żeby wyglądało to jak klasyczna tabela (taka jak np. w programie Word czy Excel).

Co do kolorowania - pytanie brzmi raczej, czy w C wykonalne jest, aby np. górną część tabeli pokolorować na niebiesko a dolną na zielono. Albo.. Jak do kolejnych komórek (w pierwszej części polecenia idąc po wierszach, w drugiej po kolumnach) wpisać dane (nieważne, czy liczby, czy słowa), które wprowadzi użytkownik?

2

Musisz nauczyć się odróżniać dane od ich reprezentacji w konsoli lub gdzie indziej. To, w jaki sposób wyświetlasz tablicę nie jest bezpośrednio powiązane z nią samą.

0
kq napisał(a):

Musisz nauczyć się odróżniać dane od ich reprezentacji w konsoli lub gdzie indziej. To, w jaki sposób wyświetlasz tablicę nie jest bezpośrednio powiązane z nią samą.

Znaczy? Może jakiś przykład i/lub przydatne strony?

1

To zależy też od terminala na którym będzie wyświetlana tabelka.

  • najprościej to ramki rysować stosując jedynie znak - , + i |
  • wersja piękniejsza to używać specjalne znaki, których jest kilka w górnej połówce bajta, czyli gdzieś pomiędzy 128 a 255. Jeżeli da się użyć unicode to tu masz listę http://www.alanwood.net/unicode/box_drawing.html jednak bądź świadom, że to zależy od terminala i fontów
  • do kolorów i w ogóle okienek w terminalu jest biblioteka ncurses
  • pod terminalami xterm, vt100, można używać ansi codes escape https://en.wikipedia.org/wiki/ANSI_escape_code czyli sekwencje znaków które modyfikują działanie terminala (czyszczenie ekranu, ustawianie koloru, przemieszczanie kursora/etc). przykład:
//  sekwencja  \033[31;1;4m  ustawia kolor czerwony, pogrubiony i podkreślony
//             Hello         wyświetlany napis
//             \033[0m       przywraca domyślne ustawienia terminala   
printf("\033[31;1;4mHello\033[0m");
  • jedna z opcji to na wyjście wypluwać kod html z twoimi danymi opatrzonymi w odpowiednie znaczniki. Tak możesz generować ładnie wyglądające w oknie przeglądarki raporty
0
jvoytech napisał(a):

To zależy też od terminala na którym będzie wyświetlana tabelka.

  • najprościej to ramki rysować stosując jedynie znak - , + i |
  • wersja piękniejsza to używać specjalne znaki, których jest kilka w górnej połówce bajta, czyli gdzieś pomiędzy 128 a 255. Jeżeli da się użyć unicode to tu masz listę http://www.alanwood.net/unicode/box_drawing.html jednak bądź świadom, że to zależy od terminala i fontów
  • do kolorów i w ogóle okienek w terminalu jest biblioteka ncurses
  • pod terminalami xterm, vt100, można używać ansi codes escape https://en.wikipedia.org/wiki/ANSI_escape_code czyli sekwencje znaków które modyfikują działanie terminala (czyszczenie ekranu, ustawianie koloru, przemieszczanie kursora/etc). przykład:
//  sekwencja  \033[31;1;4m  ustawia kolor czerwony, pogrubiony i podkreślony
//             Hello         wyświetlany napis
//             \033[0m       przywraca domyślne ustawienia terminala   
printf("\033[31;1;4mHello\033[0m");
  • jedna z opcji to na wyjście wypluwać kod html z twoimi danymi opatrzonymi w odpowiednie znaczniki. Tak możesz generować ładnie wyglądające w oknie przeglądarki raporty

Dobra, średnio to rozumiem, więc pozostaje mi liczyć na to, że na matematyce na egzaminie z programowania nie każą nam tego używać...

1

no to może mała prezentacja:

#include <stdio.h>

#define NROWS 2
#define NCOLS 3

const char* const ANSI_RED    = "\033[31m";
const char* const ANSI_GREEN  = "\033[32m";
const char* const ANSI_YELLOW = "\033[33m";
const char* const ANSI_RESET  = "\033[0m";

void print_sep() { printf("+-----------+-----------+-----------+\n"); }
void print_head() { printf("|  Ocena 1  |  Ocena 2  |  Ocena 3  |\n"); }

void print_ocena(float ocena) {
    const char* color = NULL;

    if (ocena < 3.0) {
        color = ANSI_RED;
    } else if (ocena < 5.0) {
        color = ANSI_YELLOW;
    } else {
        color = ANSI_GREEN;
    }

    printf("%s%10f%s |", color, ocena, ANSI_RESET);
}

int main() {
    float tab[NROWS][NCOLS] = {{3.1, 4.2, 3.3}, {5.2, 2.5, 3}};

    print_sep();
    print_head();
    print_sep();

    for (size_t r = 0; r < NROWS; ++r) {
        printf("|");
        for (size_t c = 0; c < NCOLS; ++c) {
            print_ocena(tab[r][c]);
        }
        putchar('\n');
    }
    print_sep();
}

wynik:
screenshot-20200610170255.png

po lewej program uruchomiony w PowerShell, a po prawej terminalu Msys2(czyli mintty). Różnica w kolorach wynika z tego, że na nie wpływa też zastosowanie motywu w terminalu, w którym można niektóre kolory modyfikować.

0
jvoytech napisał(a):

no to może mała prezentacja:

#include <stdio.h>

#define NROWS 2
#define NCOLS 3

const char* const ANSI_RED    = "\033[31m";
const char* const ANSI_GREEN  = "\033[32m";
const char* const ANSI_YELLOW = "\033[33m";
const char* const ANSI_RESET  = "\033[0m";

void print_sep() { printf("+-----------+-----------+-----------+\n"); }
void print_head() { printf("|  Ocena 1  |  Ocena 2  |  Ocena 3  |\n"); }

void print_ocena(float ocena) {
    const char* color = NULL;

    if (ocena < 3.0) {
        color = ANSI_RED;
    } else if (ocena < 5.0) {
        color = ANSI_YELLOW;
    } else {
        color = ANSI_GREEN;
    }

    printf("%s%10f%s |", color, ocena, ANSI_RESET);
}

int main() {
    float tab[NROWS][NCOLS] = {{3.1, 4.2, 3.3}, {5.2, 2.5, 3}};

    print_sep();
    print_head();
    print_sep();

    for (size_t r = 0; r < NROWS; ++r) {
        printf("|");
        for (size_t c = 0; c < NCOLS; ++c) {
            print_ocena(tab[r][c]);
        }
        putchar('\n');
    }
    print_sep();
}

wynik:
screenshot-20200610170255.png

po lewej program uruchomiony w PowerShell, a po prawej terminalu Msys2(czyli mintty). Różnica w kolorach wynika z tego, że na nie wpływa też zastosowanie motywu w terminalu, w którym można niektóre kolory modyfikować.

Okej. Bardziej chodziło mi o wypełnienie komórki kolorem a nie tekstu, ale już nieważne.

2

na stronie którą wcześniej podałem masz kody ansi do ustawiania koloru tła:

const char* const ANSI_BG_RED    = "\033[48;5;1m"; // bialy tekst na czerwonym tle
printf("%s%10f %s|", ANSI_BG_RED, ocena, ANSI_RESET);

screenshot-20200610172551.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1