• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Drukowanie obrazka w konsoli c++

Object Storage Arubacloud
0 głosów
1,256 wizyt
pytanie zadane 29 marca 2017 w C i C++ przez Jedyn Obywatel (1,200 p.)
Witam, tak jak w temacie. Muszę wydrukować obrazek na podstawie jednego parametru(liczby). Dajmy na to mam liczbę 5 to drukuje mi coś takiego

00X00
0XXX0
XXXXX
0XXX0
00X00

 

Dla 6
00XX00
0XXXX0
XXXXXX

XXXXXX
0XXXX0
00XX00

Dla 7
000X000 itd

Nie za bardzo wiem jak się za to zabrać. Kombinowałem coś z liczba%2==0 i pętlami ale nie za bardzo mi to wychodziło.

3 odpowiedzi

0 głosów
odpowiedź 29 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
wybrane 29 marca 2017 przez Jedyn
 
Najlepsza

Ze niby tak to ma dzialac ?

#include <iostream>
void zera(const int lx,int x)
{
    int temp;
    (x-lx)%2==0 ? temp=(x-lx)/2 : temp=(x-lx)/2+1;
    for(int a=temp; a>0; --a)
        std::cout<<'0';
}
void liczbaNieParzysta(int x)
{
    int srodek=x/2+1,l_x=1;
    for(int i=0; i<x; ++i)
    {
        zera(l_x,x);
        for(int a=l_x; a>0; --a)
            std::cout<<'X';
        zera(l_x,x);
        i<srodek-1 ? l_x+=2 : l_x-=2;
        std::cout<<std::endl;
    }
}
void liczbaParzysta(int x)
{
    int srodek=x/2,l_x=2;
    for(int i=0; i<x; ++i)
    {
        zera(l_x,x);
        for(int a=l_x; a>0; --a)
            std::cout<<'X';
        zera(l_x,x);
        if(i==srodek-1)std::cout<<std::endl;
        else i<srodek-1 ? l_x+=2 : l_x-=2;
        std::cout<<std::endl;
    }
}
int main()
{
    int x;
    std::cin>>x;
    if(x%2!=0)liczbaNieParzysta(x);
    else liczbaParzysta(x);
}

Az mi wstyd wrzucac taki brzydki kod ;/

komentarz 29 marca 2017 przez Jedyn Obywatel (1,200 p.)
Zgadza się tak właśnie ma to działać, strasznie słabo mi coś idzie formatowanie wyświetlanego w ten sposób tekstu. Macie jakieś patenty jak to rozkminiać?
komentarz 29 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
pomyslec i znalezc jakas regule, w jaki sposob sie to powtarza
komentarz 5 kwietnia 2017 przez Jedyn Obywatel (1,200 p.)
Mam jeszcze jeden problem z Twoim kodem. Przy podaniu np 6,12,16,26 itd . dodaje mi dodatkowy pusty wiersz. Wiesz jak to naprawić?
komentarz 5 kwietnia 2017 przez 10kw10 Pasjonat (22,880 p.)

Zrobilem tak jak w przykladzie.

Zamien tamta funkcje na ta:

void liczbaParzysta(int x)
{
    int srodek=x/2,l_x=2;
    for(int i=0; i<x-1; ++i)
    {
        zera(l_x,x);
        for(int a=l_x; a>0; --a)
            std::cout<<'X';
        zera(l_x,x);
        i<srodek-1 ? l_x+=2 : l_x-=2;
        std::cout<<std::endl;
    }
}
komentarz 5 kwietnia 2017 przez Jedyn Obywatel (1,200 p.)
Dla 4 metoda wyświetla wysokość 3 zamiast 4, szerokość się zgadza.
komentarz 5 kwietnia 2017 przez 10kw10 Pasjonat (22,880 p.)
void liczbaParzysta(int x)
{
    int srodek=x/2,l_x=2;
    for(int i=0; i<x; ++i)
    {
        zera(l_x,x);
        for(int a=l_x; a>0; --a)
            std::cout<<'X';
        zera(l_x,x);
        if(i==srodek-1);
        else i<srodek-1 ? l_x+=2 : l_x-=2;
        std::cout<<std::endl;
    }
}

?

komentarz 5 kwietnia 2017 przez Jedyn Obywatel (1,200 p.)
Idealnie, dziękuje :).
+1 głos
odpowiedź 29 marca 2017 przez Knayder Nałogowiec (37,640 p.)

Napisałem kod, z komentarzami żebyś mógł wszystko zrozumieć.
Przeanalizuj go :)
 

#include <iostream>

using namespace std;

void display(char img[5][5]) {
	for (int y = 0; y < 5; y++) {
		for (int x = 0; x < 5; x++) 
			cout << img[y][x];
		cout << '\n';
	}
}

int main() {
	/*
	img[x][y][z]

	x - liczba obrazków
	y - wysokość każdego obrazka
	z - szerokość każdego obrazka

	*/
	char img[3][5][5] = { //Zdefiniowanie trójwymiarowej tablicy przechowującej obrazki. 
		{
			{ 'X', '0', 'X', '0', 'X' },
			{ 'X', 'X', 'X', 'X', 'X' },
			{ 'X', '0', 'X', '0', 'X' },
			{ 'X', 'X', 'X', 'X', 'X' },
			{ 'X', '0', 'X', '0', 'X' }
		},
		{
			{ '&', '0', '&', '0', '&' },
			{ '&', '&', '&', '&', '&' },
			{ '&', '0', '&', '0', '&' },
			{ '&', '&', '&', '&', '&' },
			{ '&', '0', '&', '0', '&' }
		},
		{
			{ '0', '*', '0', '*', '0' },
			{ '0', '0', '0', '0', '0' },
			{ '0', '*', '0', '*', '0' },
			{ '0', '0', '0', '0', '0' },
			{ '0', '*', '0', '*', '0' }
		}
	};

	for (int i = 0; i < 3; i++) { //Wyświetlenie wszystkich trzech rysunków.
		display(img[i]);
		cout << '\n';
	}

	cin.ignore(); //Te dwie linie, sa po to, aby konsola nie wyłączyłą się od razu.
	cin.get();

	return 0;
}

 

komentarz 29 marca 2017 przez Jedyn Obywatel (1,200 p.)
Zgadza się tylko ten parametr musimy wczytać od użytkownika. Tzn jeżeli poda 5 to rysujemy dla 5, jeżeli 10 to dla 10 itd a tutaj podałeś gotowe rozwiązanie dla 3 zdarzeń. Ale i tak wielkie dzięki za pomoc ;)
Wydaje mi się ,że tutaj trzeba przykombinować coś z if(liczba%2==0) oraz else if(liczba%!=0) żeby było to uniwersalne
komentarz 29 marca 2017 przez Knayder Nałogowiec (37,640 p.)
int a;
cin >> a;
display(img[a]);

????

komentarz 29 marca 2017 przez 10kw10 Pasjonat (22,880 p.)
tylko ze wczesniej sam te image musisz zrobic
komentarz 29 marca 2017 przez Knayder Nałogowiec (37,640 p.)
Czyli chcesz żeby użytkownik mógł wpisać własny wygląd obrazka, tak?
komentarz 29 marca 2017 przez Jedyn Obywatel (1,200 p.)
Tak zgadza się, już kolega niżej wstawił poprawne rozwiązanie ;)
0 głosów
odpowiedź 29 marca 2017 przez mokrowski Mędrzec (155,700 p.)
edycja 29 marca 2017 przez mokrowski

#include <iostream>
#include <string>

std::string picture(int width) {
    using std::string;

    string answer;
    string line;

    int parity = width % 2 ? 0 : 1;
    int i = 1 + parity;
    int increment = 2;
    do {
        line = string((width - i ) / 2, 'O') +
            string(i, 'X') + string((width - i ) / 2, 'O') +
            string(1,'\n');
        if(i == width) { // Middle line
            increment = -increment;
            if(parity == 1) answer += line;
        }
        i += increment;
        answer += line;
    } while(i > 0);

    return answer;
}

int main() {
    for(int i = 1; i < 8; ++i) {
        std::cout << picture(i) << std::endl;
        std::cout << "=============\n";
    }
}

Podobne pytania

0 głosów
0 odpowiedzi 502 wizyt
pytanie zadane 3 maja 2020 w C i C++ przez kupson3697 Użytkownik (610 p.)
0 głosów
2 odpowiedzi 1,067 wizyt
pytanie zadane 24 marca 2018 w C i C++ przez Nimplex Początkujący (460 p.)
–1 głos
1 odpowiedź 1,207 wizyt
pytanie zadane 1 września 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,628 zapytań

141,490 odpowiedzi

319,859 komentarzy

62,010 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...