упражнение №3

Линейни алгоритми

 

Линейни алгоритми са тези, при които последователността от действия е една и съща за всички  входни данни.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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

 

1.    Множество от стойности на стандартните данни в С++

В символните данни в С++ се съхраняват единични символи. Те могат да се разглеждат и като целочислени данни, тъй като символите се записват в паметта на компютъра чрез техните ASCII кодове. Например, ако ch е от тип char, то резултатът от присвояванията ch='A' и ch=65 е един и същ. (Английската буква А има ASCII код 65.)

Целите числа се дефинират от тип int, а реалните, наречени още числа с плаваща запетая, – от тип float.

Дефинирането на данни в С++ се подчинява на следния синтаксис:

име на тип   списък от имена на променливи;                 .

Имената на променливите в списък от имена на променливи се разделт със запетая. Допуска се инициализиране на променливите (задаване на начална стойност на етапа на дефиниране. И така  списък от имена на променливи се създава съобразно следния синтаксис:

име на променлива  =стойност      , име на променлива  =стойност       ;

Примери:

char ch;

int x, y, z;

float Pi, Alfa;

float Pi=3.14, Alfa=90, S;мената на променливите могат да включват букви от английската азбука, цифри и знака долна черта.

G ВНИМАНИЕ! Не се допуска интервал в имената на променливите.

G ВНИМАНИЕ! C++ прави разлика между главни и малки букви. За него ALPHA, alpha и Alpha са три различни променливи.Като правило всички ключови думи на езика се изписват с малки букви.

Стандартните данни могат да бъдат модифицирани. При целите числа и символите могат да се приложат модификаторите signed и unsigned. Тези два модификатора не променят размера на разрядната решетка (фиг.1 и фиг.2), а само тълкуването на разрядите (битовете) в нея. Модификаторът signed означава, че най-старшият бит в разрядната решетка е знаков, а останалите – значещи. Модифицираните със signed данни могат да приемат положителни и отрицателни стойности. Модификаторът unsigned означава, че всички битове в разрядната решетка са значещи, включително и най-старшият, и данните могат да заемат само положителни стойности и 0. Модификаторът signed може да бъде пропуснат, тъй като това е модификаторът по подразбиране за данните от тип int и char. Когато се работи с данни от тип unsigned int, ключовата дума int може да бъде пропусната, тъй като се подразбира.

char = signed char

int = signed int

unsigned = unsigned int

 

 
 


G ВНИМАНИЕ!

 

 

 

 

 

 

 

 

 

 


При целите и реалните числа могат да се приложат модификаторите short и long. Тези два модификатора променят размера на разрядната решетка в зависимост от някои установени конвенции на конкретния компилатор. Модификаторът short задава два пъти по-къса разрядна решетка от long, а long - два пъти по-дълга разрядна решетка от short. Модификаторът short може да бъде пропуснат, тъй като това е модификаторът по подразбиране за данните от тип int и float. В С++ за типа long float е дефинирана и се използва специална ключова дума – double.

G ВНИМАНИЕ! double = long float .

 

Тип

Заемана памет

Множество от стойности

signed

unsigned

char

1 байт

-128 ¸ +127

0 ¸ 255

int

short int

(int)

2 байта

-32 768  ¸ +32 767

0 ¸ 65 535

long int

4 байта

-2Е9 ¸ +2Е9

 

 

float

short float

(float)

4 байта

610E-37 ¸610E37

-

long float (double)

8 байта

610E-307 ¸610E307

-

 

 

2.    Множество от операции над стандартните данни в С++

a)      Цели числа

 

Аритметични

 

Сравнение

+

събиране

 

> 

по-голямо

-

изваждане

 

< 

по-малко

*

умножение

 

>=

по-голямо или равно

/

целочислено деление

 

<=

по-малко или равно

%

остатък от целочислено деление

 

==

равно

 

 

 

!=

не равно

G ВНИМАНИЕ! В С++ няма дефиниран булев тип данни, но са дефинирани следните булеви операции:

·        логическо отрицание  - означава се със знака ! ;

·        логическо И - означава се със знака && ;

·        логическо ИЛИ - означава се със знака || .

Булевите операции могат да се прилагат върху челочислени данни и да връщат стойност 0, ако резултатът е лъжа, и стойност 1, ако резултатът е истина.

 

Булеви операции

Логическо И

X

Y

X && Y

0

0

0

0

1

0

1

0

0

1

1

1

 

 

Логическо отрицание

X

! X

0

1

1

0

 

 

Логическо ИЛИ

X

Y

X || Y

0

0

0

0

1

1

1

0

1

1

1

1

 

 
 

 

 

 

 

 

 

 


b)      Реални числа(числа с плаваща запетая)

 

Аритметични

 

Сравнение

+

събиране

 

> 

по-голямо

-

изваждане

 

< 

по-малко

*

умножение

 

>=

по-голямо или равно

/

деление

 

<=

по-малко или равно

 

 

 

==

равно

 

 

 

!=

не равно

 

 

 

 

 

G ВНИМАНИЕ! Знакът за целочислено деление и деление на реални числа е един и същ – наклонена черта ( / ). Компилаторът на С++ изпълнява целочислено деление или деление на реални числа в зависимост от операндите. Ако и двата операнда са цели числа се изпълнява целочислено деление. Ако поне единият операнд е реално число се изпълнява деление на реални числа. Например изразът 7/2 дава резултат 3, докато 7.0/2 дава резултат 3.5. Във вторият случай се изпълнява деление на реални числа, тъй като 7.0 е записано като реално число.

3.    Данни с изброени стойности в С++

Данните с изброени стойности могат да приемат стойности от крайно, предварително зададено множество от цели числа. Типът се декларира с ключовата дума enum, като се спазва следния синтаксис:

enum име на тип{списък на стойностите}[списък на променливи];

списък на стойностите  представлява подредено множество от имена, разделени със запетаи. Всяко име получава целочислена стойност взависимост от поредността на записване. Броенето започва от 0.

Пример:

enum Week{Mon,Tue,Wed,Thu,Fri,Sat,Sun};

Mon получава стойност 0, Tue - стойност 1, Wed - стойност 2 и така нататък.

Когато се налага промяна на тази естествена номерация, на съответното име се присвоява в явен вид неговата целочислена стойност.

Пример:

enum number{ Ivan, Elena, Svetla=10, Georgi, Vasil };

Ivan получава стойност 0, Elena - стойност 1, Svetla стойност 10, Georgi – стойност 11 и Vasilстойност 12.

Константите в С++ се дефинират като пред името на типа се запише ключовата дума const и се зададе стойност. Синтаксис:

const име на тип име на константа= стойност ,,,  ;

Ако не е задедно име на тип се подразбира int.

Примери

const float Pi=3.14;

const char ch=’*’;

 

Зад.1 Да се напише програма, която извежда на екрана съобщението "Здравейте! Това е маята първа задача." .

Решение

Rounded Rectangular Callout: Директива към предпроцесора, която изисква  включване на заглавния файл iostream.h
 


Rounded Rectangular Callout: Главна функция Ò

#include <iostream.h>

Rounded Rectangular Callout: Край на главната функция Rounded Rectangular Callout: Начало на главната функция main()

{

   cout<<"Здравейте! Това е маята първа задача."<< "\n";

}

 

#include е директива към предпроцесора, която изисква  включването към програмата на заглавния файл, записан в ъглови скоби или кавички непосредствено след  нея. В разглежданата програма  се включва заглавният файл iostream.h, в който са описани входно-изходните потоци  cin и cout. cin е обект от тип входен поток (прехвърля данни от клавиатурата към програмата). С един обект cin могат да се въведат стойности за няколко променливи, но всяка променлива трябва да е предшествана от поточния оператор >>. Въведените стойности се присвояват на променливите по реда на тяхното записване.

Пример:

cin>>x>>y>>z;

Първата въведена стойност се присвоява на x, втората – на y, третата  - на z. За край на въвеждането се счита въвеждането на някой от така наричините “бели пространства” – интервал, табулация или нов ред.

cout е обект от тип изходен поток (прехвърля данни от програмата към екрана). С един обект cout могат да се изведат множество данни (константи и променливи), но всяка от тях трябва да е предшествана от поточният оператор <<.

Примери:

cout<<"Здравейте! Това е маята първа задача."<<"\n";

cout<<”Стойността на x е ”<<x<<”\n”;

\n е символ, който предизвикво преместване на курсора на нов ред на екрана. Вместо него може да се запише ключовата дума endl. Резултатът ще бъде същия.

Примери:

cout<<"Здравейте! Това е маята първа задача."<<endl;

cout<<”Стойността на x е ”<<x<<endl;

G ВНИМАНИЕ! Текстът в кавичките излиза на екрана точно така, както сте го написали, а на мястото на променливата x на екрана се записва нейната стойност.

G ВНИМАНИЕ! Всяка програма, написана на C++ трябва да има точно една функция main(), наречена главна функция. Тялото на функцията се загражда във фигурни скоби. Изпълнението на програмата започва винаги от първия оператор на тази главна функция.

 

Зад.2 Да се напише програма, която намира сумата на две числа (х и у) и извежда резултата на екрана.

 

 

Зад.3 Да се напише програма, която намира и извежда на екрана дължината на окръжност и лицето на кръг с радиус R.

 

Зад.4 Даден е правоъгълен триъгълник с катети a и b и хипотенуза c. Да се напише програма, която по дадени дължина на хипотенузата c и ъгъл a (между b и c) намира и извежда на екрана дължината на катетите.

 

 

 

Зад.5 Даден е правоъгълен триъгълник с катети a и b и хипотенуза c. Да се напише програма, която по дадени a и b изчислява хипотенузата c.

 

 

Зад.6 Да се напише програма, която намира и извежда на екрана стойността на израза:

 

 

ЗАДАЧИ ЗА САМОСТОЯТЕЛНА РАБОТА

Œ      Да се напише програма, която намира и извежда на екрана обиколката и лицето на произволен правоъгълник.

      Да се напише програма, която намира и извежда на екрана обема на куб.

Ž        Да се напише програма, която намира и извежда на екрана обиколката и лицето на произволен триъгълник по зададени ъгъл a(Alpha) и прилежащите му страни b и c.

За намиране на лицето да се използва формулата:

 

 

 


                Да се напише програма, която въвежда стойности за две съпротивления R1 и R2 и изчислява еквивалентното им съпротивление при последователно и паралелно свързване.

За решаването на задачата да се използват известните формули:

Rs=R1+R2 за еквивалентното съпротивление при последователно свързване;

Rp=R1*R2/(R1+R2) за еквивалентното съпротивление при паралелно свързване.

 

                По дадена температура на въздуха по Фаренхайт, да се изчисли температурата по Целзий. Връзката между двете скали е следната:

 

 

 

където C е температурата по Целзий, а F - температурата по Фаренхайт.

               Да се намери средноаритметичната стойност на 4 зададени числа.

 

               Да се напише програма, която намира и извежда на екрана стойността на израза:

 

 

 

 

 


Забележка. Функцията, която повдига числото e на степен x е exp(x) и е описана в заглавния файл math.h.

 

                Да се напише програма, която намира и извежда на екрана стойността на израза:

 

 

 


Забележка. Функцията, която изчислява натурален логаритъм от x е ln(x) и е описана в заглавния файл math.h.

 

                Да се напише програма, която намира и извежда на екрана стойността на израза:

 

 

 


Забележка. Функцията, която изчислява arctg(x) е atan(x) и е описана в заглавния файл math.h.

 

Œ   Да се напише програма, която намира и извежда на екрана стойността на израза:

 

 

 

 

 

ŒŒ   Да се напише програма, която намира и извежда на екрана стойността на израза:

 

 

 

 

 

          à   Ä   Ç