Zadanie - czy można to zrobić prościej?

0

Witam

Treść zadania:

Napisz program rysujący na ekranie za pomocą podanego znaku trójkąt o zadanej przez 
użytkownika długości podstawy. 

Efet ma wyglądać tak: także nie trójkąt prostokątny tylko równoboczny.
user image

Oficialnie na pierwszych 2 wykładach nie było słowa o obiektach, klasach, metodach tym bardziej statycznych - ani o polach. Oficialnie do tej pory zostały wprowadzone tylko operatory, pętle, warunki i wywołanie rekurencyjne. (słowo kluczowe static, void, Main na razie istnieje bo istnieje bo "to bedzie pozniej")

Rozwiązać to zadanie umiem tylko z wykorzystaniem pola statycznego, czy istnieje rozwiązanie nie używające pola statycznego?

Moje roziązanie poniżej.

class Program
    {
        static int licznikRekurencji = 0;

        static void RysowanieLinii(int dlugosc, char znak)
        {
            licznikRekurencji++;
            int liczbaSpacji = licznikRekurencji;
            

            if ((dlugosc - 2)>0)
            {
                RysowanieLinii(dlugosc - 2, znak);
            }

            while (liczbaSpacji > 0)
            {
                Console.Write(" ");
                liczbaSpacji--;
            }

            for (int i = 0; i < dlugosc; i++)
            {                
                Console.Write(znak);
            }
            Console.Write("\n");        
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Podaj jeden znak z jakiego ma być rysowany trójkąt,");
            Console.WriteLine("wybór zatwierdź enterem.");
            char znak = char.Parse(Console.ReadLine());

            Console.WriteLine("Podaj długość podstawy trojkata: ");
            int dlugoscPodstawy = int.Parse(Console.ReadLine());

            RysowanieLinii(dlugoscPodstawy, znak);

            Console.ReadLine();
        }
    }
 
0

Wywal rekurencję ;)

0

Faktycznie, da się :)

 
static void Main(string[] args)
        {
            Console.WriteLine("Podaj jeden znak z jakiego ma być rysowany trójkąt,");
            Console.WriteLine("wybór zatwierdź enterem.");
            char znak = char.Parse(Console.ReadLine());

            Console.WriteLine("Podaj długość podstawy trojkata: ");
            int dlugoscPodstawy = int.Parse(Console.ReadLine());

            int iloscNaWierzcholku;
            int warstwa = dlugoscPodstawy / 2;

            if (dlugoscPodstawy % 2 == 0)
            {
                iloscNaWierzcholku = 2;
            }
            else
            {
                iloscNaWierzcholku = 1;
            }

            while (iloscNaWierzcholku <= dlugoscPodstawy)
            {
                for (int i = 0; i < warstwa; i++)
                {
                    Console.Write(" ");
                }
                for (int i = 0; i < iloscNaWierzcholku; i++)
                {
                    Console.Write(znak);
                }
                Console.Write("\n");
                iloscNaWierzcholku = iloscNaWierzcholku + 2;
                warstwa--;
            }

            Console.ReadLine();
         }

Czy to jest najprostsze rozwiązanie?

0

Znak możesz odczytać też tak: char znak = Console.ReadKey().KeyChar;, z tymże wówczas tracisz możliwość jego zmiany po wpisaniu. Brakuje walidacji danych wejściowych, ale to pewno wiesz.
iloscNaWierzcholku można wyznaczyć w jednej linijce operatorem trójargumentowym

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