Jak usprawnić rysowanie drzewka?

0

Hej, chce narysować drzewko z gwiazdek w zależności od wysokości.
np.

Wymiar: 5

OOOO*OOOO
OOO***OOO
OO*****OO
O*******O
*********

Niestety mam taki problem, że nie potrafię sprawić by a i b czyli zmienne pomocnicze rosły w odpowiednim tempie.
Roboczo, bez użycia zmiennych, kod wygląda tak (no i działa, ale wiadomo, że dla większych drzewek już nie bo odejmuję "ręcznie"):

#include <stdio.h>

int main() 
{
    int wymiar;
    printf("Wymiar:\n");
    scanf("%d",&wymiar);
    
    for(int i=1;i<=wymiar;i++)  //wysokosc
    {
        for(int j=1;j<=2*wymiar-1;j++) //szerokosc
        {
            if(i==wymiar||j==wymiar)
            {
                printf("*"); 
            }
            else if(i==wymiar-1 && j<=2*wymiar-2 && j>1)
            {
                printf("*"); 
            }
            else if(i==wymiar-2 && j<=2*wymiar-3 && j>2)
            {
                printf("*"); 
            }
            else if(i==wymiar-3 && j<=2*wymiar-4 && j>3)
            {
                printf("*"); 
            }
            else if(i==wymiar-4 && j<=2*wymiar-5 && j>4)
            {
                printf("*"); 
            }
            else if(i==wymiar- 5 && j<=2*wymiar-6 && j>5) //etc..
            {
                printf("*"); 
            }
            else
            {
                printf("O"); 
            }
        }
               
             printf("\n");
            
      
    }
    return 0;
}

Jako że warunki w ifach rosną co jeden, to zależało mi na podstawieniu za te liczby zmienne, niestety nie potrafię ich zainkremetnowac.

np:

#include <stdio.h>

int main() 
{
int wymiar;
 printf("Wymiar:\n");
 scanf("%d",&wymiar);
 int a=1; //zmienne pomocnicze 
 int b=2;

    
    for(int i=1;i<=wymiar;i++,a++,b++)  //wysokosc
    {
        for(int j=1;j<=2*wymiar-1;j++) //szerokosc
        {
            if(i==wymiar||j==wymiar)
            {
                printf("*"); 
            }
            else if(i==wymiar-a && j<=2*wymiar-b && j>a)
            {
                printf("*"); 
                
            }
            else
            {
                printf("O"); 
            }
        }
               
             printf("\n");
            
      
    }
    return 0;
}

Próbowane było na wiele sposobów, niestety nieskutecznie.
Także zwracam się z prośbą o pomoc : /

0
whatever__ napisał(a):

kod wygląda tak (no i działa,

Nie może działać. jeśli tak uważasz, to czegoś nie zauwazasz.

  1. Koniunkcję i alternatywę logiczną pisze sie inaczej, sprawdź w podreczniku. jeden z powodów, dlaczego kopie w pupę.
  2. nie chce mi sie czytać kodu, w którym nazwy zmiennych mi nic nie mówią
0
ZrobieDobrze napisał(a):
whatever__ napisał(a):

kod wygląda tak (no i działa,

Nie może działać. jeśli tak uważasz, to czegoś nie zauwazasz.

  1. Koniunkcję i alternatywę logiczną pisze sie inaczej, sprawdź w podreczniku. jeden z powodów, dlaczego kopie w pupę.

Ok, poprawiłam na &&.

  1. nie chce mi sie czytać kodu, w którym nazwy zmiennych mi nic nie mówią

Nazwałam zmienne jak się dało. A i b to zmienne pomocnicze, maja zastąpić rozbudowanie pierwszego kodu.

Dzięki.

W takim wypadku ten kod ma w ogóle prawo bytu?

1

A jaki ma być efekt działania?
Podaj ręcznie "narysowane" dla dwóch różnych rozmiarów.

0
_13th_Dragon napisał(a):

A jaki ma być efekt działania?
Podaj ręcznie "narysowane" dla dwóch różnych rozmiarów.

 Wymiar: 3
 OO*OO
 O***O
 *****
Wymiar: 7
OOOOOO*OOOOOO
OOOOO***OOOOO
OOOO*****OOOO
OOO*******OOO
OO*********OO
O***********O
*************

Domyślnie zamiast O będą spacje, ale żeby łatwiej znaleźć błędy dałam "O"

 Wymiar: 4
    *
   ***
  *****
 *******
1

Przeanalizuj, i zrób po swojemu.

#include <stdio.h>

int main()
{
	for(int size;(printf("Podaj rozmiar: "))&&(scanf("%d",&size)==1);printf("\n"))
	{
		for(int y=1;y<=size;++y,printf("\n")) for(int x=1-size;x<size;++x) printf("%c"," *"[(-y<x)&&(x<y)]);
	}	
	return 0;
}
0
_13th_Dragon napisał(a):

Przeanalizuj, i zrób po swojemu.

#include <stdio.h>

int main()
{
	for(int size;(printf("Podaj rozmiar: "))&&(scanf("%d",&size)==1);printf("\n"))
	{
		for(int y=1;y<=size;++y,printf("\n")) for(int x=1-size;x<size;++x) printf("%c"," *"[(-y<x)&&(x<y)]);
	}	
	return 0;
}

Woah, dziękuję ślicznie.
Czyli nie ma co próbować tamtym sposobem?
Mam to drzewko zrobione jeszcze inaczej, tez z pomocą internetu, jednak myślałam, że uda się dokończyć ten.
Dziękuję raz jeszcze, pewnie mi chwile zajmie zrozumienie Twojego:)

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