Advertisement
YankoZlatanov

Untitled

Feb 10th, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.57 KB | None | 0 0
  1. using System;
  2.  
  3. class NewHouse
  4. {
  5.     static void Main()
  6.     {
  7.         // въвеждаме височина на етажите на къщата
  8.         int input = int.Parse(Console.ReadLine());
  9.         // правиме си нов стринг които ще използваме за първият ред на покрива
  10.         // върхът на покрива се състои от символи '-' от едната страна , символ '*' в средата и пак символи '*'
  11.         // къщата е широка колкото е и висока(етажите без покрива) , затова използваме input/2 за да намериме
  12.         // средата(със закръгляне (-1) заради int). На мястото на това закръгляне ще сложиме символ '*'
  13.         string firstSpace = new string ('-', input/2);
  14.         // този стринг ще бъде върхът на къщата и ще компенсира загубата от -1 при горното деление
  15.         string roofFirstLine = "*";
  16.         // отпечатваме първия ред на къяата (покрива)
  17.         Console.WriteLine(firstSpace + roofFirstLine + firstSpace);
  18.         // for the roof
  19.         // сега отпечатваме останалата част от покрива като тои е висок 1/2 от етажите на къщата
  20.         // със закръгляне на +1 (7 / 2 = 3.5 = (4)). тъй като вече имаме отпечата порвият ред
  21.         // на покрива, искаме да отпечатиме -1 ред, затова "брояча" counter започва от 1 и спира докато се
  22.         // изравни с 1/2 от input (7 / 2 = 3, "1 <= 3, 2 <= 3, 3 <=3" резултата е 3 завъртаня при вход 7)
  23.         for (int counter = 1; counter <= input/2; counter++)
  24.         {
  25.             // със всяко завъртане на цикъла си правиме нов стринг за "празното" място около покрива с символа '-'
  26.             // а разтоянието на всеки ред намалява с по -1 от всяка страна. Тука използваме същия начин както при първия
  27.             // ред само че видиме стойността на counter която с всяко завъртане е с 1 по голяма
  28.             // (при вход от "7" >> 7/2 = 3 - counter = 2 >> 3 - counter = 1 >> 3 - counter = 0)
  29.             string space = new string('-',((input/2)-(counter)));
  30.             // по същия начин правиме нов стринг с всяко завъртане на цикъла за самия покрив, като
  31.             // трябва да увеличаваме ширината и от двете страни. С всяко завъртане на цикъла counter е с 1 по голям от
  32.             // преди, затова е удобно да се ползва при създаването на стринга където :
  33.             // (при вход 7 цикъла се изпълнява 3 пъти или >> (1*2)+1 = 3(***) >> (2*2)+1=5(*****) >> (3*2)+1 = 7(******))
  34.             string roof = new string('*', (counter*2)+1);
  35.             // със всяко завъртане печатаме следващия ред в кобинация растояния покрив растояния
  36.             Console.WriteLine(space + roof + space);
  37.         }
  38.         //for the body
  39.         // входа ни е височината на етажите затова искаме цикъла да се изпълни толкова пъти колкото е входа input
  40.         for (int counter = 1; counter <= input; counter++)
  41.         {
  42.             // етажите са широки колкото и високи, но започват и завършват с символ '|' затова си правиме
  43.             // нов стринг от входа - 2 символа (input 7 >> 7 - 2 = 5 (*****))
  44.             string body = new string('*', input - 2);
  45.  
  46.             // отпечатваме широчината на етажите с body стринга , като в началоъо и края печатаме '|'
  47.             // (вход 7 = 7 пъти отпечатано |*****| = 7 символа на ред)
  48.             Console.WriteLine("|" + body + "|");
  49.         }
  50.     }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement