Задача - 06. Square of Stars
Здравейте,
намерих много кратко и удачно решение на задачата посочена в заглавието на въпроса ми, но
не мога да си я обясня. Тази задача е от лекцията First Steps in Coding r и e 6-та поредна. Решението
го намерих тук във форума, но не мога да го намеря отново и забравих името на създателя му, за което се извинявам. Моля менторите и тези които са по-напреднали да обяснят ред по ред логиката на сорскода по-долу, за да намаля простотията си по тая задача! :) Преварително Ви благодаря за съдействието:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace square_of_Stars
{
class Program
{
static void Main(string[] args)
{
var n = int.Parse(Console.ReadLine());
for (int i = 1; i <= n; i++)
{
if (i == 1 || i == n) Console.WriteLine(new string('*', n));
else Console.WriteLine("*{0}*", new string(' ', n - 2));
}
}
}
}
Благодаря много Зорница Сербезова!
Въпросите са ми вероятно банални, защото само от няколко дни се занимавам с програмиране.
Не съм наясно със синтактичната структура на If и за това не успях да си обясня какво всъщност прави компилатора (дали това беше правилната дума) като стигне до този ред. До колкото разбирам (поправи ме ако греша) ако i e идентично на 1(или това да е първо завъртане на цикъла mhm mhm), тогава конзолата трябва да изпише нов низ от звездички n пъти в случая 1 звездичка (или първоначално зададения брой *). (Двете успоредни прави за разделител на аргументите в скобите на if са просто разделител или притежават и др. функция в първа лекция не бе споменато, но ще намеря 2-ра от минал курс където сигурно споменават или ще гугълна.) Във всички останали случаи, когато n не е идентично на 1 (или не е първо и последно завъртане на циъла) конзолата трябва да изпише нов низ от празни места (вероятно 0 в скобите това означава), които празни места да са заобиколени от * в началото и * края, като броя на празните места да е равен на ръчно зададения брой * - 2 (който всъщност е сбора от звездичките в началото и края на реда) ?
Двете успоредни вертикални черти "||" означават логическа функция ИЛИ, т.е. "OR".
В изражението (i == 1 || i == n) това означава, че или i трябва да е равно 1 или да е равно на n. (т.е. да е първи или последен ред) за да разпечата стринга с пълният брой звездички.
В следващият ред:
Console.WriteLine("*{0}*", new string(' ', n - 2))
се разпечатва това, което е заградено в кавичките, т.е. *{0}*, където звездичките са ясни (първа и последна на реда), а {0} е нещо, което се нарича плейсхолдер (placeholder) и представлява място, където да се отпечата стойността на променлива или израз. Нулата означава, че това е първата променлива след затварящите кавички, т.е. в случая съдържанието на new string(' ', n - 2)). което е стринг от (n-2) броя празни интервали.
Още веднъж благодарст и признателност Pilgrimage за доуточняващия отговор.
С твоя помощ и на колежката ZornitsaSerbezova вече съм напълно наясно с логиката и детайлите на решение на тази задача.