C# i prostokąt z gwiazdek.

0

Od niedawna uczę się C# i wiem, że jest już dużo takich postów. Dostałem zadanie: Napisz program drukujący na ekranie prostokąt z gwiazdek. Wysokość i szerokość prostokąta wczytujemy z klawiatury. Czy ktoś naprowadzi mnie od czego zacząć?
Mam tyle aczkolwiek rysuje mi tylko jedną pionową kreskę :/
screenshot-20210228133417.png

1

popatrz na warunek pierwszej petli, masz tam od 0 do 1 wiec wykona sie tylko raz. (powinno byc do a, nie do 1)

wklejaj kod a nie obrazki z kodem ;)

0

@fasadin: czyli powinno być tak?

        int a;
        Console.WriteLine("Podaj dlugosc boku prostokąta \n");
        a = Convert.ToInt32(Console.ReadLine());
        for(int i = 0; i <= a; i++)
        {
            for (int j=0; j < a; j++)
            {
                Console.WriteLine("*");
            }
            
        }
0
  1. Uruchom i sprawdz
  2. w programowaniu liczymy od zera, wiec jezeli uzytkownik pisze Ci o dlugosci boku 4 u Ciebie to powinno wygladac tak
    0, 1, 2, 3
    wiec zamiast <= powinno byc <
0

@fasadin: okej, poprawiłem, rysuje poprawnie lewą krawędź.

Console.WriteLine("Podaj dlugosc boku prostokąta \n");
a = Convert.ToInt32(Console.ReadLine());
for(int i = 0; i < a; i++)
{
Console.WriteLine("*");

        }
2

a gdzie druga petla? musisz rysowac tak jak pisze sie na komputerze, od lewej do prawej

skoro zrobiles w dol (lewa krawedz) to znaczy ze wystarczy ze dodac tyle gwiazdek ile potrzebujesz przy kazdym takim obiegu petli
(w sensie zamiast jednej kropki jak bedziesz miec ich a ilosc to juz masz gotowe)

0

Rysuje kreskę. Wytłumacz mi teraz jak mam np. narysować górną krawędź. Co trzeba zmienić wtedy w pętli żeby gwiazdki zamiast iść w dół poszły w bok?

 class Program
    {
        static void Main(string[] args)
        {
            int a;
            int b;
            Console.WriteLine("Podaj dlugosc boku prostokąta \n");
            a = Convert.ToInt32(Console.ReadLine());
        
            for(int i = 0; i < a; i++)
            {
                for (int j = 0; j<1; j++)
                {
                    Console.WriteLine("*");
                }
               

            }
            Console.ReadLine();
        }
        
    }
1
            for (int j = 0; j<1; j++)
            {
                Console.WriteLine("*");
            }

drukuje raz (bo masz do 1) w nowej lini *

wiec poki mimo, ze kod troche inny rezultat masz ten sam

potrzebujesz narysowac a gwiazdek w prawo czyli musisz uzyc
Console.Write("*");
a razy czyli gdy a jest 3 to ta instrukcja powinna byc wykonana 3 razy jezeli jest 100 to powinna 100 razy

nastepnie musisz zrobic nowa linie

powtarzasz to wszystko a razy jako ze to kwadrat

I w sumie tyle

0

@fasadin: Tylko własnie ja tutaj :
for (int j = 0; j<1; j++)
zrobiłem j<1 bo to ma być prostokąt i chciałem żeby podczas wpisywania wartości A np. 4 rysowało mi krawędź lewą mająca tylko 4 gwiazdki.
Bo zmienna A = długość, zmienna B = szerokość. Natomiast nie mam pojęcia jak zrobić pętle odwołującą się do zmiennej B tak żeby mi rysowało identyczną krawędź tylko, że w bok.

0

pisane z palca, moga byc bledy ale cos na zasadzie takiej.

for (int index = 0; index < a; index++) 
{
  Console.Write("*");
}
Console.WriteLine("");
for (int vertical = 1; vertical < a-1; vertical++)
{
  for (int index = 0; index < a; index++ )
  { 
    if (index == 1 || index == a-1)
      Console.Write("*");
    else
      Console.Write(" ");  
  }
Console.WriteLine("")
}
for (int index = 0; index < a; index++) 
{
  Console.Write("*");
}

edit chwila chwila

Zle przeczytalem polecenie, to nie ma byc kwadrat tylko prostokat

Wiec zmien odpowiedznio warunki powyzej by stworzyc prostokat

1

@fasadin: Dobra chyba mam!
screenshot-20210228153427.png

1

@Fak3r: ale zostaw kod do którego doszedłeś, w końcu w forum o to chodzi żeby rozwiązania zostawały w postach dla innych ;)

Sam również zabrałem się za to zadanie w ramach "odrdzewiania się" po dłuższym czasie nieprogramowania i właśnie zostawiam kod może się komuś przyda.

class Program
    {
        static void Main(string[] args)
        {
            int szerokosc;
            int wysokosc;

            Console.WriteLine("Podaj szerokość prostokąta: ");
            szerokosc = Int32.Parse(Console.ReadLine());
            Console.WriteLine("Podaj wysokość prostokąta: ");
            wysokosc = Int32.Parse(Console.ReadLine());

            GwiezdnyProstokat prostokat = new GwiezdnyProstokat(szerokosc, wysokosc);

            prostokat.WyrysujMnieNaKonsoli();
            Console.ReadLine();
        }
    }

    class GwiezdnyProstokat
    {
        private List<string> WierszeTekstu;

        public GwiezdnyProstokat(int szerokosc, int wysokosc)
        {
            WierszeTekstu = new List<string>();

            for (int i = 0; i < wysokosc; i++)
            {
                if (i == 0 || i == (wysokosc - 1))
                {
                    WierszeTekstu.Add(new String('*', szerokosc));
                }
                else
                {
                    string tymczasowy = new String(' ', szerokosc - 2);
                    tymczasowy = tymczasowy.Insert(0, "*");
                    tymczasowy = tymczasowy.Insert(tymczasowy.Length, "*");
                    WierszeTekstu.Add(tymczasowy);
                }
            }
        }

        public void WyrysujMnieNaKonsoli()
        {
            foreach (var item in WierszeTekstu)
            {
                Console.WriteLine(item);
            }
        }
    }

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