2017/2018 г. програмиране със C#

Въведение в програмирането на C#:

Програмна среда за C#: SharpDevelop
Прости пресмятания:

Визуално програмиране:

Практическа задача – визуално програмиране:

graphicApp

Величини и изрази. C++

  1. Величини:

а) Променливи

  • тип (допустими стойности);
  • име(идентификатор- започва с буква, съдържа лат. букви или цифри, не е запазена дума);
  • текуща стойност;

Пример за деклариране на променливи:  int a, b=2;

В случая за променлива b се задава и начална стойност. Задаването на начална стойност може да се осъществи и с въвеждане стойност от клавиатурата или с операция присвояване(конкретна стойност или израз) Например:

cin>>b;

b=2;

b=a+3;

б) Константи:

  • тип
  • име
  • конкретна стойност

Пр: const double a=3.12;

2. Изрази- типът на израза зависи от типа на аргументите и операциите. Костантите и променливите са аргументи в израз.

  • Най- простият израз е константа
  • Операциите са едноаргументи и двуаргументни
  • Функциите също са обръщения към аргументи

3. операции- приоритет:

  • едноаргументни – + !(логическа операция)
  • *  /  %
  • +  –
  • < > = <=  >=
  • &&(И), ||(ИЛИ)
  • == !=
  • Скобите могат да променят приоритета

Въвеждане и извеждане. C++

  1. За въвеждането на данни е необходимо да се знае: за кои величини ще се въвеждат стойности, какъв е типът им и съответно кои са допустимите стойности, от кое устройство се извършва въвеждането на данни.
  2. За извеждането на резултати е необходимо да се знае: кои са величините(изразите) чиито стойности ще се извеждат(те задължително трябва да имат стойности), какъв ще бъде форматът на извеждане, чрез кое устройство ще се извърши извеждането.

В езика С++ входно-изходни операции не са непосредствени команди и затова те не са включени в списъка на ключовите думи. По-скоро входно-изходните потоци и командите за управлението им са библиотечни функции. Биоблиотеките са iostream.h и stdio.h. Класът istream обслужва операциите по въвеждане на данни, а видът ostream – тези по извеждане на данни. Двата вида заедно образуват iostream. Този вид обединява в себе си функциите на гореспоменатите видове така, че обслужва входно-изходните операции.

iostream.h – поддържа входно-изходните операции с монитора и клавиатурата

I. Вход на данни: Входът от клавиатурата е буфериран. Това означава, че всяка редица от натиснати клавиши се разглежда като пакет, който се обработва чак след като се натисне клавиша ENTER.

1. Синтаксис:

cin >> <променлива>; където:

  • cin е обект (променлива) от клас (тип) istream, свързан с клавиатурата,
  • <променлива> е идентификатор, дефиниран, като променлива от “допустим тип”, преди оператора за въвеждане. (Типовете int, long, double са допустими).

2. Семантика- Извлича (въвежда) от cin (клавиатурата) поредната дума и я прехвърля в аргумента-приемник <променлива>. Конструкцията cin >> <променлива> е израз от тип istream със стойност левия му аргумент, т.е. резултатът от изпълнението на оператора >> е cin.

Това позволява няколко думи да бъдат извличани чрез верига от оператори >>. Следователно, допустим е следният по-общ синтаксис на >>:

cin >> <променлива> { >> <променлива>};

Операторът >> се изпълнява отляво надясно. Такива оператори се наричат ляво асоциативни. Така операторът cin >> променлива1 >> променлива2 >> … >> променливаn; е еквивалентен на редицата от оператори:

cin >> променлива1;

cin >> променлива2;

cin >> променливаn;

II. Оператор за изход <<

1. Синтаксис: cout << <израз>; където:

  • cout е обект (променлива) от клас (тип) ostream и предварително свързан с екрана на компютъра;
  • <израз> е израз от допустим тип. Представата за израз продължава да бъде тази от математиката. Допустими типове са bool, int, short, long, double, float и др.

2. Семантика- Операторът << изпраща (извежда) към (върху) cout (екрана на компютъра) стойността на <израз>. Конструкцията cout << <израз> е израз от тип ostream и има стойност първия му аргумент, т.е. резултатът от изпълнението на оператора << в горния случай е cout.

Това позвалява чрез верига от оператори << да бъдат изведени стойностите на повече от един <израз>, т.е. допустим е следният по-общ синтаксис:

cout << <израз> { << <израз>}; Операторът << се изпълнява отляво надясно (ляво асоциативен). Така операторът cout << израз1 << израз2 << … << изразn е еквивалентен на редицата от оператори:

cout << израз1;

cout << израз2;

cout << изразn;

3. Форматиран изход: Необходимо е използването на библиотека iomanip.h

При извеждане на реални числа е необходимо да се познават начините за форматиране на изход. Дробните числа се представят по 2 начина: Напр: 0.00000023 и 2.3-10е7- експоненциален вид на числото. С оператора cout<<1.234567 ще се изведе 1.23456, защото стандартно се извеждат 6 значещи цифри. Точността може да се управлява със следните манипулатори за извеждане:

a)      Setprecision(<цяло число>), където <цяло число> е броя на цифрите след десетичната точка:

cout << setprecision (6)<< 1.23456789;

изход на екрана: 1.234567

b)      setw (<цяло число>), където <цяло число> е ширината на полето(минимална стойност), в което се извежда променливата:

cout << setw (12) <<123456;

изход на екрана: ––123456

с)      други символи за форматиране на изхода:

*    \n- нов ред

*    \t- табулация

3.Пример- да се разпечата следната фигура:

1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
3 2 1 2 3
2 1 2
1

Програми. C++

Програмите реализират алгоритми. Алгоритмите от своя страна биват линейни, разклонени и циклични конструкции.

  1. Линейни контрукции- действията се изпълняват последователно. Обикновено този вод конструкции съдържат само оператор за въвеждане, оператор за присвояване и оператор за извеждане.

Операторът за присвояване се използва за присвояване на междинни и крайни стойности на променливи.

a)      Синтаксис- идентификатор= израз

b)      Семенатика- при изпълнение на оператора се изпълнява израза и след това се присвоява неговата стойност на идентификатора- променлива.

c)      В езика С++ за разлика от Pascal има допълнителни възможности за използване на оператора присвояване:

  • Верижно присвояване: а=в=с
  • х+=у <–>х=х+у
  • х-=у <–> х=х-у
  • х*=у <–> х=х*у
  • х/=у <–> х=х/у
  • х%=у <–> х=х%у
  • х=х+1<–> х++
  • х=х-1 <–> х—

*    Пример: Размяна стойностите на 2 променливи- осн. задача:

#include <iostream.h>

int main()

{

cin>>a>>b;

x=a;

a=b;

b=x;

cout<<”Новите стойности на a и b са:”<<а<<”,”<<b;

return 0;

}

*    Пример: Пресмятане на израз(без недопустими стойности)

*    Въвеждане на 3 цифрено число- извеждане на цифрите му.

2.  Разклонена конструкция- когато се изисква проверка на условие- избор на вариант. Оператор за избор:

a)      синтаксис:

if(<условие>)<оператор1>;   или

if(<условие>){<оператор1>;<оператор2>;…}   или

if(<условие>)<оператор1>;

else < оператор2>;    /*пълна форма*/

b)      семантика- Ако условието е изпълнено се изпълнява оператор1(или блока от оператори), ако не е изпълнено продължава със следващия оператор от програмата(при пълна форма- се изпълнява оператор2)

c)      Блок- когато е необходимо изпълнението на няколко оператора, те се заграждат в { }

d)     Демонстриране чрез блок- схема. Условните оператори могат да бъдат и вложени.

e)      Примери:

  • Изчисляване на S, P на квадрат, правоъгълник по зададени страни. Проверява се дали могат да са страни.
  • Намиране на най- малкото, най- голямото измежду 2,3 въведени числа.
  • Пресмятане на израз с допустими стойности(проверка за променливите, дали са допустими)
  • Решаване на квадратно уравнение, линейно уравнение, линейно неравенство.
  • Определяне дали т. от координатната система е от защрихована област.
  • Въвеждане на a,b,c, извеждане на 0, ако не могат да са страни на триъгълник или 1,2,3 в зависимост от вида на триъгълника.

3. Многовариантен избор

a)      Синтаксис:

Switch(<израз>)

{

case <израз1>:<оператор1>;<оператор2>;…[break;]

case <израз2>:<оператор1>;<оператор2>;…[break;]

……

[default: <оператор1>;<оператор2>;…]

}

b)      семантика- изчислява “израз” и го сравнява със стойностите на изброените изрази. Ако намери равенство изпълнява операторите след съответния израз. Ако е изписан break- прекъсва търсенето. Ако не е намерено съответствие на израза- изпълнява операторите след default.

  • Оператор break- предизвиква прекъсване на оператора switch(или в който участва) и продължава със следващия оператор.

c)      Пример- да се въведе число от 1 до 7 и да се изведе ден от седмицата:

Switch (a)

{

case 1:cout<<”Понеделник”;break;

case 2:cout<<”Вторник”;break;

….

Default:cout<<”Няма такъв ден”;

}

d)     Пример- да се въведат а и b и символ(+,-,*,/). Да се извърши въведената операция и да се изведе резултат.

4. Циклични конструкции- многократно повторение на 1 или няколко оператора(при повече от 1 оператор, то те прябва да се поставят в блок).

a)      Елементи на всеки цикъл: начални стойности, условие осигуряващо изход от цикъла, корекция(която влияе на условието за край), тяло на цикъла

b)      Видове цикли според броя на повторенията- с предварително известен брой повторения, с неизвестен брой повторения

c)      Видове цикли според условието- цикъл с предусловие, с постусловие, с управляваща променлива

d)     Описание:

  • С управляваща променлива- броя на повторенията е предварително известен:

*    Синтаксис:

for ([<тип на упр.пром.>]<упр.пром.>=<нач.стойност>;<условие за край>;<корекция >) <оператор>;

for(int i=1;i<=n;i++) cout>>i>>endl;

*    семантика- за упр.променлива от началната до крайната стойност повтори оператора

  • Цикъл с предусловие:

*    Синтаксис:

While(<условие>)<оператор>;

*    Семантика- докато условието има стойност True да се повтаря оператора

  • Цикъл с постусловие:

*    Синтаксис:

Do <оператор>While(<условие>);

*    Семантика- повтаряй оператора докато условието е със стойност True

  • Разлика между циклите с предусловие и с постусловие- мин. бр. изпълнения на цикъла с предусловие е 0, а на цикъла с постусловие-1. Възможно е броят на повторенията да не е предварително известен.

e)      Примери:

  • Да се въвежда число дотогава докато се въведе число >0 или друго условие. Да се намери сумата им, да се преброят четните измежду въведените. (със следусловие).
  • Да се сумират числата от 1 до n. Да се преброят тези от тях, които са >0. Да се преброят числата от 1 до n, които се делят на 3. Намиране на минимален/максимален елемент. (цикъл с упр. променлива)
  • Да се въведе N и да се изведат числата от редицата на Фибоначи < N.(всяко следващо се получава като суман от предходните 2: 1,1,2,3,5,8,13,21…)- неопределен брой повторения.
  • Да се въведе р и да се изведат всички числа- негови делители.
  • Намиране на НОК- алгоритъм на Евклид.
  • Вложени цикли- когато в тялото на един цикъл се съдържа друг цикъл.
  • Да се отпечата таблицата за умножение.
  • Да се пресметне S=1+1.2+1.2.3+1.2.3.4+…+1.2.3.4…N, където N се въвежда