Помогни ни да направим Uroci.net по - богат! Добави урок
Категории Други уроци Adobe Photoshop Adobe Illustrator Adobe Flash Adobe Fireworks DreamWeaver CSS и HTML Corel Draw Image Ready PHP SEO CMS Microsoft Windows Microsoft Word Microsoft Excel PowerPoint Microsoft Access Microsoft Publisher Linux Visual basic JavaScript Ajax 3ds Max Maya 3D C++
C++
Sound Forge Gimp SWiSH

С++ част.2 (Типове данни)

C++ » C++
fix3d   трудност:    видян: 7546



2.2. Променливи

Представете си, че Ви е дадена задача да изчислите 2 на степен 10. Нашият първи опит би могъл да изглежда така:

#include <striam.h>

main() {
// a first solution
cout << 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2;
cout << "n";
return 0;
}

Написаното работи, въпреки че ще ни се наложи да преброим два или три пъти дали сме записали константата 2 точно 10 пъти. Само тогава ще бъдем доволни. Нашата програма правилно дава отговор 1024.

Сега обаче, ни се налага да изчислим 2, повдигнато на 17 степен, а след това на 23. Неприятно е да променяме програмата си всеки път. Още по-лошо, изглежда поразително лесно да се направи грешка като се постави една двойка в повече или по-малко. Обаче, понеже сме внимателни, ние избягваме грешките.

Накрая ни се налага да направим таблица, която да съдържа степените на двойката от 0 до 31. Ако използуваме литерални константи в директни кодови последователности ще ни бъдат необходими 64 реда от следния вид:

cout << "2 raised to the power of Xt";
cout << 2 * ... * 2;

където Х ще се увеличава с единица за всяка кодова двойка.

В този момент, а може би и по-рано, ние осъзнаваме, че трябва да има по-добър начин. Както и наистина има. Решението изисква въвеждането на две понятия, които все още не са формално дефинирани:

1. Променливи, които позволяват да се съхраняват и възстановяват стойности.

2. Съвкупност от управляващи оператори, които позволяват многократното изпълнение на част от програмния код. Например, ето един втори начин за изчисляване на 2 на 10 степен:

#include <stream.h>

main() {
// a second more general solution
int value = 2;
int pow = 10;
cout << value<< " raised to the power of "
<< pow << ": t";
for ( int i = 1, res = 1; i <= pow; ++i )
{ res = res * value;}
cout << res << "n";
return 0;
}

Операторът, започващ с for, се нарича оператор за цикъл: докато i е по-малко или равно на pow, се изпълнява тялото на for, затворено във фигурни скоби. Цикълът for се нарича поточно управляващ оператор.

value, pow, res и i са променливи, които позволяват да се съхраняват, променят и възстановяват стойности. Те са тема на следващите подглави. Първо, обаче, нека приложим друго ниво на обобщаване на програмата като отделим част от програмата, която изчислява степента на величината и да я дефинираме като отделна функция.

Всяка задача, която изисква изчисляването на някаква степен на дадена стойност, сега може просто да извика pow() с подходящо множество аргументи. Исканата таблица от степени на двойката сега може да бъде получена по следния начин:

Таблица 1.1 представя резултата от изпълнението на тази програма.
Степени на 2

0: 1
1: 2
2: 4
3: 8
4: 16

5: 32
6: 64
7: 128
8: 256
9: 512

10: 1024
11: 2048
12: 4096
13: 8192
14: 16384

Степени на 2

Тази реализация на pow() не проверява онези особени случаи, когато имаме повдигане на отрицателна степен или стойността - резултат е много голяма.

Упражнение 1-1. Какво ще стане ако pow() бъде извикана с отрицателен втори аргумент? Как може да бъде променена pow() за да обработва това?

Упражнение 1-2. Всеки тип данни има долна и горна граница за стойностите, които може да поддържа, определени от броя на битовете, отделени за представянето му. Как това може да се отрази на pow()? Как да бъде променена функцията pow() за да обработва повиквания като pow( 2, 48 )?

Какво е променлива?
Всяка променлива се идентифицира от име, дефинирано от потребителя. Тя има и съответен тип. Например, следващият оператор дефинира променлива ch от тип char:

char ch;

char спецификатор на тип. short, int, long, float и double също представят типови спецификации. Изобщо, всяка декларация трябва да започва с типов спецификатор. Типовете на данните определят количеството памет, отделено за променливата, както и набора от операции, които могат да бъдат прилагани над този тип данни. (За нашите предположения char ще има размер в битове 8).

Както променливите, така и константите се съхраняват в паметта и са свързани с определен тип. Разликата се състои в това, че променливите са адресируеми. Т.е., има две стойности, свързани с дадена променлива:

1. Нейната стойност, съхранена на някакво място в паметта. Това поянкога се нарича нейна rvalue (произнася се “are-value”).

2. Стойността, определяща местоположението й; т.е., адреса в паметта, където е записана величината. Това понякога се нарича нейна lvalue (произнася се “ell-value”).

В израза

ch = ch - ‘0’;

променливата ch се намира както от ляво така и отдясно на оператора за присвояване. Написана от ляво, тя трябва да бъде прочетена. Стойността й се извлича от местоположението й в паметта. След това символният литерал се изважда от тази стойност. Терминът rvalue произлиза от местоположението на променливата в дясно на оператора за присвояване. Тя може да бъде четена, но не и променяна. За нея може да се мисли като за стойност за четене.

Написана от дясно, променливата ch ще бъде записвана. Резултатът от операцията изваждане се записва на мястото за стойност на ch върху предходната стойност. Терминът lvalue произлиза от разположението на променливата от лявата страна на оператора за присвояване. За нея може да се мисли като за стойност на местоположение. ch се означава като обект. Всеки обект представя някаква област от паметта. ch представя област от паметта с размер 1 байт.

Дефиницията на една променлива указва как тя да бъде съхранена. Дефиницията определя името на променливата и нейния тип. Съответно, би могла да бъде добавена и начална стойност за променливата. Трябва да има една и само една дефиниция на дадена променлива в програма.

Декларацията на променливата обявява, че променливата съществува и е дефинирана някъде. Тя се състои от името на променливата, типа й и ключовата дума extern. (За повече информация, вж. раздел 4.9 Програмен обхват). Декларацията не е дефиниция. Тя не предизвиква заделяне на място в памет. По-скоро тя едно твърдение, че дефиницията на променливата съществува някъде в текста на програмата. Една променлива може да бъде декларирана неколкократно в програмата.

В С++ всяка променлива трябва да бъде дефинирана или декларирана в програмата преди да може да бъде използувана.

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

В С++ има набор от думи, предназначени за използуване от езика като ключови думи. Предварително дефинираните типови спецификатори, например, са запазени думи. Идентификаторите, които са ключови думи, не могат да бъдат използувани като програмни идентификатори. Таблица 1.2 дава списък на запазените ключови думи в С++.

Съществуват множество общоприети споразумения за именуване на идентификатори, подпомагащи читаемостта на програмата:

- Обикновено идентификаторът се записва с малки букви.
- Идентификаторът има мнемонично име; т.е., име, което пояснява неговото използуване в програмата.
- Идентификаторите, които се състоят от няколко думи, се записват или с разделящо подчертаващо тире или като се използуват главни букви за всяка включена дума. Например, може да се напише is_empty или isEmpty, но не isempty.

Забележете, че template е предполагаема ключова дума за възможно бъдещо разширение на С++ за поддържане на параме-тризирани типове.

Таблица 1.2 Ключови думи в С++

asmdelete
If
register
template
auto
do

Inline
Return
try
break
double
default

Int
Short
typedef
case
else
this

Long
Signed
union
goto
catch
enum

New
Sizeof
unsigned
char
extern
protected

Operator
Static
virtual
class
float
public

Overload
Struct
void
while
const
for

Private
Switch
volatile
continue
friend


Страници: «1 2 3 4 5 »

Регистрирайте се, за да добавите коментар

реклама

© Всички права запазени. 2006-2008. Created by: Site.bg
Препоръчваме: IT Новини | Кино и игри | Диплома.бг | Paparak.bg | Тунинг Портал | uchenik.com | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | AnimeS-bg.com | Фото Форум | Запознанства | Мрежа от приятели | IT Light | Spodeli.net | Фото-Култ | IDG.BG | Teenproblem.net | Блог - Образование | Fresh-BG.com | Hanovete.com | Bulfleet.com | Mythlands.com | Ohoboho.com | Казанлък.Com | News24 | Setcom.bg | Atol.bg | Elmaz.com | MobileBulgaria.com