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ę :/
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 ;)
@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("*");
}
}
- Uruchom i sprawdz
- 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 <
@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("*");
}
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)
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();
}
}
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
@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.
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
@fasadin: Dobra chyba mam!
@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);
}
}
}