Задача 2
Задача 3
Задача 4
Задача 5
Здравейте,
Тези задачи с чертането са ми били винаги забавни.
Ето и впечатленията ми.
Условието на задачата може да изтеглите от тук: 4. Fire.doc
Когато имаме такива задачи предпочитам следния подход: Използвам 2 вложени цикъла за обхождане на правоъгълника в който изчертаваме от вида:
for (int y = 0; y < ySize; y++)
{
for (int x = 0; x < xSize; x++)
{
...
}
...
}
Координатната система е малко различна от математическата, и разликата е в това че Y координатата се увеличава надолу за разлика от математиката, където е нагоре.
След това използвам един if за проверка на математическа формула на графика и се получава точното изчертаване. Например ако искаме да изчертаем:
x... .x.. ..x. ...xИзползвам следния код:
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 4; x++)
{
if(x == y)
{
Console.Write("x");
}
else
{
Console.Write(".");
}
}
Console.WriteLine();
}
Аналогично за:...x ..x. .x.. x...Се получава с:
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 4; x++)
{
if(x + y == 4 - 1)
{
Console.Write("x");
}
else
{
Console.Write(".");
}
}
Console.WriteLine();
}
Умишлено написах 4 - 1 в проверката, понеже при динамични размери се получава точно по тази формула.Горните 2 варианта се използват за чертане на прави или част от прави, и ги използвах при пламъците.
Има възможност да се изчертае и цяла област в страни от права. Например за:
...x ..xx .xxx xxxxСе използва следната проверка:
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 4; x++)
{
if(x + y >= 4 - 1)
{
Console.Write("x");
}
else
{
Console.Write(".");
}
}
Console.WriteLine();
}
Този подход използвах при дръжката, като я разделих визуално на ляв правоъгълник и десен.Където ключовите проверки са x < half и x >= half.
В този дух използвайки координатна система и формули си нарисувах факлата на 3 части.
1. Огъня горната му част.
2. Огъня долната част.
3. Линията с тиретата (тук използвах създаване на string от char и брой.
4. Дръжката
Ето и кода:
using System;
class FireInTheMatrix
{
static void Main()
{
int n = int.Parse(Console.ReadLine());
int half = n / 2;
int quoter = n / 4;
for (int y = 0; y < half; y++)
{
for (int x = 0; x < n; x++)
{
if ((x + y == half - 1) ||
(x - half == y))
{
Console.Write("#");
}
else
{
Console.Write(".");
}
}
Console.WriteLine();
}
for (int y = 0; y < quoter; y++)
{
for (int x = 0; x < n; x++)
{
if ((x == y) ||
(x + y == n - 1))
{
Console.Write("#");
}
else
{
Console.Write(".");
}
}
Console.WriteLine();
}
Console.WriteLine(new string('-', n));
for (int y = 0; y < half; y++)
{
for (int x = 0; x < n; x++)
{
if (x >= y && x < half)
{
Console.Write("\\");
}
else if (x + y < n && x >= half)
{
Console.Write("/");
}
else
{
Console.Write(".");
}
}
Console.WriteLine();
}
}
}
Няма коментари:
Публикуване на коментар