Упражнения, Глава 1, Въведение в програмирането със C#


2

Здравейте,

Казвам се Вълкан Павлов. Не съм записвал никакви курсове, но свалих книгата и реших да се позанимая с нея. Незнам дали ще я изкарам цялата, но ще пробвам пък докъдето стигна...

Публикувам тук решенията, които изискват програмиране. Надявам се на помощ или коментари.

Задачи 5&6: Да се модифицира примерната програма, така че да изписва различно поздравление, например "Добър ден!".// Да се модифицира примерната програма, така че да изписва различно поздравление, например "Добър ден!".

Решение:

namespace IntroToCSharp
{
    class IntroToCSharp
    {
        static void Main(string[] args)
        {
       
            System.Console.WriteLine("Добър ден, Аз съм програма, написана от Вълкан Павлов!");
        }
    }
}

Задача 7: Напишете програма, която извежда на конзолата числата 1, 101, 1001 на нов ред.

Решение:

namespace Zadacha7
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("1\n101\n1001\n");
        }
    }
}

Задача 8: Напишете програма, която извежда на конзолата текущата дата и час.

Решение:

namespace Zad_8_Date_time
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime localDate = DateTime.Now;
         
            System.Console.WriteLine(localDate.ToString("g",
               CultureInfo.CreateSpecificCulture("fr-BE")));
        }
    }
}

Задача 9: Напишете програма, която извежда корен квадратен от числото 12345.

Решение:

namespace Zadacha9
{
    class Zadacha9
    {
    
        static void Main(string[] args)
        {
        
            var usl = Math.Sqrt(12345);
        
            System.Console.Title = "Задача 9";
            System.Console.WriteLine("Корен квадратен от 12345 е:\t"+ usl);
            
                        
        
        }
    }
}

Задача 10: Напишете програма, която извежда първите 100 члена на редицата 2, -3, 4, -5, 6, -7, 8.

Решение:

namespace Zadacha10
{
    class Zadacha10
    {
        static void Main(string[] args)
        {
        
            for (int i = 2; i <= 102; i++)
            {
                if (i % 2 == 0)
                {
                    Console.WriteLine(i);
                }

                else
                {
                    int b = i*-1;
                    Console.WriteLine(b);
                }
            }
                      
  
        }
    }
}

Задача 11: Направете програма, която прочита от конзолата вашата възраст и изписва (също на конзолата) каква ще бъде вашата възраст след 10 години.

Решение:

namespace Zadacha11
{
    class Zadacha11
    {
        static void Main(string[] args)
        {
            //Заглавие на програмата
            System.Console.Title = "Оракул";
            string line;
            //Въвеждане на възразт
            System.Console.WriteLine("Моля въведете Вашата възраст (използвайте само цифри):");
           // Прочитане на възраст и запазване в променлива line
            line = System.Console.ReadLine();

            // Дефиниране на променлива godini
            int godini;
//Проверка на входните данни
            if (Int32.TryParse(line, out godini))
            {
                //Добавяне на 10 години, към настоящата възраст
                godini = godini + 10;
                //Отбелязване на настоящата година и запазването й в променливата "дата"
                DateTime data = DateTime.Now;
                //Добавяне на 10 години, към настоящата година
                var nowagod = data.AddYears(10);
                //Изписване на предсказанието (.Year се използва за да се изпише само годината от датата)
                System.Console.WriteLine("През " + nowagod.Year + "-та година Вие ще бъдете на " + godini + " години.");
            }
            else
            {
                System.Console.WriteLine("Въведените данни не са цифри!");
            }
        
        
        }
    }
}

Последното доста ме затрудни. Не можах да го измисля, как след проверката, програмата да не прекъсва работа, а да се върне отново на въвеждането.




Отговори



2

Домашното ти е добро. Имам малко съвети, които мога да ти дам.

Първо, като пишеш във форума има бутон Insert code snippet. Така домашните ти ще се четат много по-лесно. Ще има оцветяване и всичко, което иначе един код си има...

Второ, за да не пишеш навсякъде System.Console.... е достатъчно само да напишеш using System; над namespace-а или веднага под него. Visual studio слага автоматично юзингите над неймспейса, но нас са ни учили, че е по-добре да бъдат местени непосредствено след него и ще е добре, ако свикнеш да го правиш от рано. Ениуей, ако сложиш този using System; най-отгоре ще може да напишеш само Console.WriteLine..., няма да е нужно всеки път да бъде System.Console...

Трето, като подаваш данните ето така: 

System.Console.WriteLine("През " + nowagod.Year + "-та година Вие ще бъдете на " + godini + " години.");

Ще ти е по-лесно да напишеш:

System.Console.WriteLine("През {0}-та година Вие ще бъдете на {1} години.", nowagod.Year, godini);

Където искаш да замениш стойността с параметър слагаш големи скоби и индекс в тях, като започваш от 0 и накрая изреждаш параметрите със запетайки след затварящата кавичка.
Има и още един начин за писане на стрингове, но той може да ти се стори малко объркващ. Отскоро е, от C#6. Можеш да сложиш доларче пред стринга и да заместиш данните направо в скобите:

System.Console.WriteLine($"През {nowagod.Year}-та година Вие ще бъдете на {godini} години.");

Не искам да те обезкуражавам, домашното ти е добро, тепърва ще се учиш на други по-добри или по-лесни начини да напишеш същите задачи. Продължавай в същия дух, всички от тук сме започнали...


от emil.nik (307 точки)


0

На последната задача, за да не ти прекъсва програмата можеш да вкараш логиката в цикъл. While или по-добре do-while

int godini = 0; //Проверка на входните данни while (godini == 0) { var line = Console.ReadLine(); if (Int32.TryParse(line, out godini)) { //Добавяне на 10 години, към настоящата възраст godini = godini + 10; //Отбелязване на настоящата година и запазването й в променливата "дата" DateTime data = DateTime.Now; //Добавяне на 10 години, към настоящата година var nowagod = data.AddYears(10); //Изписване на предсказанието (.Year се използва за да се изпише само годината от датата) System.Console.WriteLine("През " + nowagod.Year + "-та година Вие ще бъдете на " + godini + " години."); } else { System.Console.WriteLine("Въведените данни не са цифри!"); } }


от vladko_sz (195 точки)


0
Едно съветче: опитвай се да си именуваш променливите на английски. Така ще можеш да търсиш помощ и от хора, които не говорят български(stackoverflow например). Освен това, когато започнеш да работиш по проекти, всички най-вероятно ще пишат на англисйки(по ред причини, които в момента ме мързи да изброявам). Успех!

от kon.simeonov (5238 точки)


1

Здравейте отново и благодаря за съветите и насърченията.

Emil.nik -> За първото абсолютно да, видях го този бутон още при публикуването и първоначално пейстнах кодовете в него. За съжаление нещо форматирането се прецака и показаните кодове въобще не бяха четливи, както в поста на vladko_sz например. Затова редактирах и поставих кодовете, като текст. Ще се позанимая повече следващия път, дано стане както трябва.

За второто ще го имам пред вид. Значи вместо System.Console.WriteLine примерно, пиша само Console.Write.Line, като преди това добавя using System; непосредствено под namespace. Малко съм лаик в нещата и не съм сигурен дали трябва да е извън или вътре в къдравите скоби на namespace, но ще пробвам и както стане. Между другото вчера докато се занимавах със задачите по случайност пропуснах System на някои места и работеше. Та изникна ми този въпрос - каква е разликата, но съвсем го забравих покрай последната задача. Сега виждам и че using System; всъщност се добавя по подразбиране при нов проект, във Visual C# Express.

За третото беше ми зор, докато разбера как се изреждат тези параметри. Ще го изпробвам с къдравите скоби, второто даже ми се вижда по-лесно, защото няма нужда накрая отново да се описват стойностите. Само незнам коя версия на C# имам. Иначе Visual C# e 2010, но сигурно не е същото.

И накрая отново благодаря за оценката и съветите. Въобще не беше обезкуражаващо.

vladko_sz -> Благодарско, снощи един програмист ме подсети за подобно. Успях да го подкарам, по малко по-различен начин.

kon.simeonov -> Ще ги пиша на английски език.


от v.pavlov (15 точки)


1
Здравей В. Павлов, поздравления за начинанието. Преди година бях абсолютно като теб. Моят съвет е, ако си се регистрирал в системата на Telerik, да отидеш на Архив и да гледаш лекциите от тази година, като започнеш отначало. Първо на видео, ще ти е по лесно да разбереш нещата и второ можеш да видиш и домашните и да се тренираш. С  времето, ще видиш, че тази програма която ти се е струвала най-трудна, ще можеш да я направиш по-няколко начина. А колкото по нагоре отиваш става все по-трудно, но това е предизвикателството, което трябва да пребориш. Тук във форума всеки ще е готов да ти помогни. Така, че не се притеснявай да питаш. И както ти е отбелязал колегата слагай имена на английски 'godini' -> "years", "nowagod"  по правилно ще е да се казва "afterTenYears" или нещо подобно, не се притеснявай, че имената на променливите са дълги, важното е да ти говорят за какво са. Вижуъл студиото има Intelisense, който ти подсказва след това. Промени си променливите на английски и ще видиш, че програмата, ще изглежда по добре. Успех.

от venelingp (1371 точки)