Upload
david-academy
View
356
Download
10
Embed Size (px)
DESCRIPTION
Училищен курс по програмиране на C# (2013/2014) Занятие №2: Конзолен вход и изход. Условни преходи. Цикли
Citation preview
2013Copyright © 2013 DAVID Holding Company
Курс по програмиране на C#
Занятие №2Конзолен вход и изход. Условни преходи. Цикли
Copyright © 2013 DAVID Holding Company
Съдържание
• Конзолни приложения• Въвеждане на данни от конзолата• Извеждане на данни на конзолата• Условия• Условни преходи• Цикли
Copyright © 2013 DAVID Holding Company
Конзолни приложения
• Какво е „конзола“?– Съвкупността от физически устройства за въвеждане и
визуализиране на информация– Историческо начало и наследство– Конзола в Microsoft Windows
Copyright © 2013 DAVID Holding Company
Конзолни приложения
• Какво е „конзолно приложение“?– Взаимодействието с потребителя се осъществява през
конзолата– Удобни за автоматизирани операции– Прости програми – удобни за навлизане в разработката на
съответния език– Неудобни за употреба от потребители (в общия случай)
Copyright © 2013 DAVID Holding Company
Конзолни приложения
• Конзолни приложения в .NET– Проектен шаблон Console Application– Класът System.Console
Copyright © 2013 DAVID Holding Company
Въвеждане на данни от конзолата
// прочитане на един символint i = Console.Read();char c = Convert.ToChar(i);// прочитане на цял редstring line = Console.ReadLine();// прочитане на клавишConsoleKeyInfo key = Console.ReadKey();// изчакване до натискане на// произволен клавишConsole.ReadKey();// изчакване до натискане на EnterConsole.ReadLine();
• Прочитане на един символ• Прочитане на цял ред• Прочитане на клавиш или
комбинация от клавиши• Изчакване до натискане на
клавиш
Copyright © 2013 DAVID Holding Company
Въвеждане на данни от конзолата - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Въвеждане на данни от конзолата
// въвеждане на цяло числоint integer = int.Parse(Console.ReadLine());// въвеждане на дробно числоdouble real = double.Parse(Console.ReadLine());// въвеждане на датаDateTime date = DateTime.Parse( Console.ReadLine());// въвеждане на булева стойностbool boolean = bool.Parse(Console.ReadLine());
• Въвеждане на цяло число• Въвеждане на дробно число• Въвеждане на дата• Въвеждане на булева стойност
Copyright © 2013 DAVID Holding Company
Въвеждане на данни от конзолата - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Извеждане на данни на конзолата
// извеждане на низConsole.Write("Hello World!");// извеждане на числоConsole.Write(3.14159265359d);// извеждане на булева стойностConsole.Write(true);// извежане на произволен обектobject obj = DateTime.Now;Console.Write(obj);// преминаване на нов редConsole.WriteLine();// нов ред след извеждане на стойностConsole.WriteLine(42);
• Извеждане на низ• Извеждане на число• Извеждане на други примитивни
типове данни• Извеждане на произволен обект• Преминаване на нов ред
Copyright © 2013 DAVID Holding Company
Извеждане на данни на конзолата - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Извеждане на данни на конзолата
// извеждане с форматиращ низstring name = "Peter";Console.WriteLine("Hello, {0}", name);// подравняванеConsole.WriteLine("Views: {0,5}", 335);Console.WriteLine("Users: {0,5}", 13);// форматиране на цяло числоConsole.WriteLine("Number: {0:d5}", 3);// форматиране на дробно числоConsole.WriteLine("Pi: {0:f4}", Math.PI);// форматиране на датaConsole.WriteLine( "Date: {0:dd-MM-yyyy}", DateTime.Now);
• Извеждане на една или повече стойности с помощта на форматиращ низ
• Подравняване• Форматиране на числа• Форматиране на дати
Copyright © 2013 DAVID Holding Company
Извеждане на данни на конзолата - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Условия
• Какво е „условие“?– Израз с булев резултат– Булеви променливи, константи и литерали– Сравнения– Логически операции
Copyright © 2013 DAVID Holding Company
Условия
// равенствоbool b1 = (s == "Hello");// неравенствоbool b2 = (s != "World");// по-малкоbool b3 = (x < 14);// по-малко или равноbool b4 = (y <= 0);// по-голямоbool b5 = (x > 5);// по-голямо или равноbool b6 = (y >= 20);
• Сравнения– Равенство– Неравенство– По-малко– По-малко или равно– По-голямо– По-голямо или равно
Copyright © 2013 DAVID Holding Company
Условия
// отрицание ("не")bool b7 = !b2;// конюнкция ("и")bool b8 = (b3 && b5);// дизюнкция ("или")bool b9 = (b4 || b6);// изключваща дизюнкция// (изключващо "или")bool b10 = (b8 ^ b9);
• Логически операции– Отрицание (логическо „не“)
– Конюнкция (логическо „и“)– Дизюнкция (логическо „или“)– Изключваща дизюнкция (изключващо
„или“)
Copyright © 2013 DAVID Holding Company
Условия
// закон за двойното отрицание!(!b1) == b1// закон за отрицание на конюнкцията!(b3 && b5) == (!b3 || !b5)// закон за отрицание на дизюнкцията!(b4 || b6) == (!b4 && !b6)// "мързеливо" пресмятане(false && b3 /* && ... */) == false(true || b4 /* || ... */) == true
• Закони на Де Морган– Двойно отрицание– Отрицание на конюнкцията– Отрицание на дизюнкцията
• „Мързеливо“ пресмятане на условията
Copyright © 2013 DAVID Holding Company
Условия - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Условни преходи
• Какво е „условен преход“?– Конструкция на езика за програмиране– Позволява изпълнението или неизпълнението на операции в
зависимост от условие– Необходими за реално приложими програми
Copyright © 2013 DAVID Holding Company
Условни преходи
// условен преход с едноредов блокstring line = Console.ReadLine();if (line == "hi") Console.WriteLine("Hello!");// условен преход с многоредов блокConsole.WriteLine("What's your name?");line = Console.ReadLine();if (line != string.Empty){ Console.WriteLine( "Hello, {0}!", line); Console.WriteLine( "Nice to meet you!");}
• Конструкция за условен преход if– Условие– Блок от операции– Ако условието е изпълнено, се
изпълняват съжденията в блока след if
– В противен случай не се изпълнява нищо
Copyright © 2013 DAVID Holding Company
Конструкция за условен преход if - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Условни преходи
// условен преход с elseConsole.Write("Are you a girl (y/n)?");string line = Console.ReadLine();if (line == "y"){ Console.WriteLine( "You probably have long hair.");}else{ Console.WriteLine( "Let's watch football.");}
• Конструкция за условен преход if…else– Условие– Блок от операции при вярно условие– Блок от операции при грешно
условие– Ако условието е изпълнено, се
изпълняват съжденията в блока след if
– В противен случай се изпълняват съжденията в блока след else
Copyright © 2013 DAVID Holding Company
Конструкция за условен преход if…else - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Условни преходи
// вложени условни преходиConsole.WriteLine("Tell me an integer.");int n = int.Parse(Console.ReadLine());if (n > 0){ if (n % 2 == 0) Console.WriteLine("It's even."); else Console.WriteLine("It's odd.");}else{ Console.WriteLine( "It's not positive.");}
• Вложени конструкции за условен преход– Блокът с операции на конструкция за
условен преход може да съдържа друга конструкция за условен преход
Copyright © 2013 DAVID Holding Company
Условни преходи
// Поредица от if...else if...Console.WriteLine( "Tell me another integer.");int x = int.Parse(Console.ReadLine());if (x > 0) Console.WriteLine("It is positive.");else if (x < 0) Console.WriteLine("It is negative.");else Console.WriteLine("It is zero.");
• Вложени конструкции за условен преход– Често прилаган подход: if…else if…
else if…else if…
Copyright © 2013 DAVID Holding Company
Вложени конструкции за условен преход - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Условни преходи
• Конструкция switch-case– Сравнение на израз с няколко различни константи– Прави кода по-четим и по-лесен за поддръжка
Copyright © 2013 DAVID Holding Company
Условни преходи
// Конструкция switch-caseConsole.Write( "Do you like programming (y/n)?");string line = Console.ReadLine();switch (line){ case "y": Console.WriteLine("Great!"); break; case "n": case "N": Console.WriteLine("Awww. :("); break; default: Console.WriteLine( "Make up your mind!"); break;}
• Конструкция switch-case– Израз, който се сравнява– Поредица от секции с константа и
съждения, които да бъдат изпълнени при съвпадение
– Задължително прекратяване на изпълнението във всяка секция – break
– Секции с повече от една константа– Секция по подразбиране – при липса
на съвпадение с никоя от константите
Copyright © 2013 DAVID Holding Company
Конструкция switch-case - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Условни преходи
• Условен тернарен оператор– Резултат: една от две възможни стойности според това дали е
изпълнено условие– Прави кода по-кратък, четим и лесен за поддръжка
Copyright © 2013 DAVID Holding Company
Условни преходи
// условен тернарен операторConsole.WriteLine( "What's your surname?");string surname = Console.ReadLine();Console.WriteLine( "What's your gender (m/f)?");string line = Console.ReadLine();string title = (line == "m" ? "Mr" : "Ms");Console.WriteLine( "Greetings, {0} {1}.", title, surname);
• Условен тернарен оператор– Условие– Стойност ако условието е изпълнено– Стойност ако условието не е
изпълнено
Copyright © 2013 DAVID Holding Company
Условен тернарен оператор - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
• Какво е „цикъл“?– Конструкция на езика за програмиране– Позволява многократното изпълнение на една и съща поредица
от операции– Итерация – еднократно изпълнение на операциите в цикъла– Условие за преустановяване на цикъла– Необходими за реално приложими програми
Copyright © 2013 DAVID Holding Company
Цикли
• Видове цикли– Цикли с предусловие– Цикли с постусловие– Крайни цикли– Безкрайни цикли
Copyright © 2013 DAVID Holding Company
Цикли
// цикъл с предусловие whileConsole.WriteLine( "Commencing countdown.");int counter = 10;while (counter > 0){ Console.WriteLine( "{0}!", counter); counter--;}Console.WriteLine("Launch!");
• Цикъл с предусловие while– Условие– Блок от операции– Условието се проверява преди
изпълнението на итерацията– Нула или повече итерации
Copyright © 2013 DAVID Holding Company
Цикъл с предусловие while - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
// цикъл с постусловие do...whileint age;do{ Console.WriteLine( "How old are you?"); age = int.Parse( Console.ReadLine());}while (age <= 0);
• Цикъл с постусловие do…while– Блок от операции– Условие– Условието се проверява след
изпълнението на итерацията– Една или повече итерации
Copyright © 2013 DAVID Holding Company
Цикъл с постусловие do…while - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
// цикъл forConsole.WriteLine( "Tell me a positive integer.");int top = int.Parse(Console.ReadLine());Console.WriteLine( "The integers from 1 to {0} are:", top);for (int i = 1; i <= top; i++){ Console.WriteLine(i);}
• Цикъл for– Инициализация на брояча– Условие– Инкрементиране на брояча– Блок с операции– Условието се проверява преди
изпълнението на итерацията– Инкрементирането се изпълнява
след изпълнението на итерацията– Нула или повече итерации
Copyright © 2013 DAVID Holding Company
Цикъл for - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
// цикъл foreachConsole.WriteLine("Tell me a word.");string word = Console.ReadLine();Console.WriteLine( "The word split into characters:");foreach (char c in word){ Console.WriteLine(c);}
• Цикъл foreach– Променлива за елемент– Изброима колекция от елементи– Блок с операции– Цикълът продължава докато има
неизброени елементи в колекцията– Нула или повече итерации
Copyright © 2013 DAVID Holding Company
Цикъл foreach - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
// управление на циклитеfor (int i = 0; i < 100; i++){ if (i % 3 == 0) continue; Console.WriteLine(i); if (i == 10) break;}
• Управление на циклите– Прекратяване на текущата итерация
– continue– Прекратяване на цикъла – break
Copyright © 2013 DAVID Holding Company
Управление на циклите - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
// "безкраен" цикълwhile (true){ Console.WriteLine( "The current time is {0}", DateTime.Now.TimeOfDay); Console.WriteLine( "Type 'exit' to exit."); string line = Console.ReadLine(); if (line == "exit") break;}
• Безкрайни цикли– Условие, което винаги е истина– Разчита се на прекратяване на
цикъла чрез break– Опасност от „зацикляне“ на
програмата– Могат да се реализират като крайни
цикли– Понякога правят кода по-прост
Copyright © 2013 DAVID Holding Company
Безкрайни цикли - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Цикли
// вложени циклиfor (int i = 1; i < 10; i++){ for (int j = i; j < 10; j++) { Console.Write("{0,2}", j); } Console.WriteLine();}
• Вложени цикли– Блокът с операции на цикъл може да
съдържа друг цикъл– Във всяка итерация на външния
цикъл се изпълнява целият вътрешен цикъл
Copyright © 2013 DAVID Holding Company
Вложени цикли - демо
// Демонстрация
Copyright © 2013 DAVID Holding Company
Задачи за упражнение
• Създайте програма, в която се въвежда година (цяло положително число) и се извежда съобщение дали тя е високосна или не.
• Създайте програма, в която се въвежда дробно число и след това то се извежда с избран от потребителя брой знаци след десетичната запетая.
• Създайте програма, в която въвежда се цяло положително число и се извежда съобщение дали то е просто или не.
• Създайте програма, в която се въвежда цяло положително число и се извеждат всички прости числа, по-малки или равни на него.
Copyright © 2013 DAVID Holding Company
Задачи за упражнение
• Създайте програма, в която се въвежда цяло неотрицателно число n и се извежда факториелът му (n!).
• Създайте програма, в която се въвежда цяло положително число n и се извежда n-тото по ред число от редицата на Фибоначи.
• Създайте програма, в която се въвеждат коефициентите на квадратно уравнение и се намират неговите решения, като се разгледат всички случаи.
• Създайте програма, в която се въвежда поредица от оценки (дробни числа между 2 и 6) на ученици и се извежда средният успех на класа.
Copyright © 2013 DAVID Holding Company
Задачи за упражнение
• Създайте конзолно приложение-калкулатор, в което потребителят избира аритметична операция (събиране, изваждане, умножение, деление), въвежда двата операнда (дробни числа) и получава резултата; изпълнението да продължи до избиране на опция за изход вместо аритметична операция.
• Създайте проста текстово-базирана приключенска игра, в която потребителят въвежда текстови команди и след всяка команда получава описание на резултата от нея.
Copyright © 2013 DAVID Holding Company
Въпроси?
Copyright © 2013 DAVID Holding Company
Благодаря!
• Александър Далемски– [email protected]– Skype: musasho– https://facebook.com/adalemski
• ДАВИД академия– [email protected]– http://acad.david.bg/– @david_academy– https://facebook.com/DavidAcademy