Дарси 3. Идентификатор, тағйирёбанда ва доимӣ дар C++ - Технологияи иттилоотӣ — синфи 11
Идентификатор
Номи объекти барномавӣ (тағйирёбанда, доимӣ, зербарнома)-ро дар C++ идентификатор мегӯянд. Он аз ҳарфҳои лотинӣ, рақамҳо ва аломати _ сохта мешавад. Масалан, kty, Kty, KTY, kty1, kt1y, k1ty, k_ty, k_T_y – идентификаторҳои гуногун.
Компилятор хатои номро бо матни худ мегӯяд:
Лаборатория чунин менависад:
Номи дуруст ё нодуруст? санҷида бин! Аз нав
навбатӣ Дарси 4. Амалҳои арифметикӣ ва функсияҳои математикӣ дар C++ 1 соат
Тағйирёбанда ва хотира Тағйирёбанда – бузургиест, ки бо ном (идентификатор) ва қимат тавсиф мешавад ва ҳангоми кори барнома қиматҳои гуногун мегирад. Қимати он дар як қисми хотираи компютер нигоҳ дошта мешавад, ки бо номи тағйирёбанда пайваст аст. Ба ном муроҷиат кунем – ба ҳамон қисми хотира муроҷиат мекунем.
Хотираи компютер ва тағйирёбанда санҷида бин! Аз нав Пеш аз истифода тағйирёбанда эълон мешавад:
Мисолҳо: int a = 5;, double x = 2.5, y;, const double PI = 3.14159;.
Ба тағйирёбандаи const қимати нав додан мумкин нест:
Лаборатория чунин менависад:
Навъҳои тағйирёбанда Навъ ҳаҷми хотира ва доираи қиматҳоро муайян мекунад. Агар барои қимат n n n бит ҷудо шавад, 2 n 2^n 2 n қимати гуногун мумкин аст. Навъҳои ишорадор (signed) аз − 2 n − 1 -2^{n-1} − 2 n − 1 то 2 n − 1 − 1 2^{n-1}-1 2 n − 1 − 1 , бе ишора (unsigned) аз 0 0 0 то 2 n − 1 2^n-1 2 n − 1 мешаванд.
Навъ Бит Қиматҳо char8 − 128 … 127 -128 \ldots 127 − 128 … 127 unsigned char8 0 … 255 0 \ldots 255 0 … 255 short16 − 32 768 … 32 767 -32\,768 \ldots 32\,767 − 32 768 … 32 767 unsigned short16 0 … 65 535 0 \ldots 65\,535 0 … 65 535 int32 − 2 31 … 2 31 − 1 -2^{31} \ldots 2^{31}-1 − 2 31 … 2 31 − 1 unsigned int32 0 … 2 32 − 1 0 \ldots 2^{32}-1 0 … 2 32 − 1 long long64 − 2 63 … 2 63 − 1 -2^{63} \ldots 2^{63}-1 − 2 63 … 2 63 − 1 unsigned long long64 0 … 2 64 − 1 0 \ldots 2^{64}-1 0 … 2 64 − 1
Навъ Бит Қиматҳо float32 аз ≈ 1,2 ⋅ 10 − 38 \approx 1{,}2\cdot 10^{-38} ≈ 1 , 2 ⋅ 1 0 − 38 то ≈ 3,4 ⋅ 10 38 \approx 3{,}4\cdot 10^{38} ≈ 3 , 4 ⋅ 1 0 38 (аз рӯи модул) double64 аз ≈ 2,2 ⋅ 10 − 308 \approx 2{,}2\cdot 10^{-308} ≈ 2 , 2 ⋅ 1 0 − 308 то ≈ 1,8 ⋅ 10 308 \approx 1{,}8\cdot 10^{308} ≈ 1 , 8 ⋅ 1 0 308 bool8 true ё false
Навъҳои long, long double ва wchar_t дар компиляторҳои гуногун ҳаҷми гуногун доранд. Дар Dev-C++ дар Windows long – 32 бит аст, лекин дар g++ дар Linux ва дар лабораторияи ин курс – 64 бит. Барои 64 бит ҳама ҷо long long-ро истифода баред.
Ҳаҷми навъро худи барнома мегӯяд: sizeof(навъ) ҳаҷмро дар байт медиҳад (1 байт = 8 бит). Дар ин барнома endl истифода шудааст: он ҳам мисли \n ба сатри нав мегузаронад.
Ин натиҷаи лабораторияи курс аст. Дар Dev-C++ дар Windows long 4 мешуд. Бо <climits> ва <cfloat> худи канорҳоро чоп кардан мумкин аст:
Ин ҷо 1.17549e-38 – ин 1,17549 ⋅ 10 − 38 1{,}17549\cdot 10^{-38} 1 , 17549 ⋅ 1 0 − 38 аст: C++ ададҳои хеле хурд ва хеле калонро бо e менависад.
Тағйирёбандаи локалӣ ва глобалӣ Агар тағйирёбанда дар дохили блок (байни { ва }) тавсиф шуда бошад, он локалӣ (маҳаллӣ) аст: он танҳо дар ҳамон блок амал мекунад ва берун аз он дида намешавад. Агар тағйирёбанда берун аз блок тавсиф шуда бошад, нисбат ба он блок глобалӣ (умумӣ) аст. Ҷойи амалкарди он ё як гурӯҳи блокҳо, ё тамоми барнома мешавад. Ин ҷойро майдони амалиёт меноманд.
Дар блоки дохилӣ x дубора эълон шуд (локалӣ). Дар дохили блок ном ба тағйирёбандаи локалӣ ишора мекунад ва глобалиро «пинҳон» мекунад. Баъд аз } боз глобалӣ дида мешавад.
Доимиҳо Доимиҳо дар C++ чор навъ доранд: бутун, ҳақиқӣ, рамзӣ ва сатрӣ.
'A' ва "A" фарқ доранд: якум – як аломат (дар хотира адад, рамзи ҳарфи A, яъне 65), дуюм – сатри якаломата.
Агар доимии сатрӣ дар як сатр наёяд, онро ба сатри дигар мегузаронанд: дар охири сатр хати моили чаппа \ мегузоранд. Ин ду шакл як маъно доранд:
Escape-пайдарпайиҳо Пайдарпайии аломатҳое, ки бо хати моили чаппа \ оғоз мешаванд, escape-пайдарпайӣ ном доранд.
Навишт Натиҷа \aсигнали овозӣ \bяк қадам ба қафо \fгузариш ба саҳифаи дигар \nгузариш ба сатри нав \rбозгашт ба аввали сатр \tтабулятсияи уфуқӣ \vтабулятсияи амудӣ \\хати моили чаппа \'апостроф \"нохунак \?аломати савол \dddаломат бо рамзи ҳаштӣ (то се рақам) \xhhаломат бо рамзи шонздаҳӣ
Дар охирин сатр ҳарфи A ду маротиба чоп шуд: якум бо рамзи шонздаҳӣ (\x41), дуюм бо рамзи ҳаштӣ (\101).
Кор дар синф
Лаборатория Ду барномаи аввал – барои озмоиш: онҳоро иҷро кунед ва тағйир диҳед. Баъд чор супориш.
Лабораторияи C++: тағйирёбанда ва навъҳо санҷида бин! Аз нав
Машқҳо Саволҳо. Шифоҳӣ ҷавоб гӯед.
1. Идентификатор дар C++ чист? Тағйирёбанда ва доимӣ чӣ?
2. Тағйирёбандаи локалӣ аз глобалӣ чӣ фарқ дорад?
3. Майдони амалиёти тағйирёбандаи локалӣ чӣ тавр муайян карда мешавад? Аз тағйирёбандаи глобалӣ чӣ?
4. Кадом навъҳои тағйирёбандаҳо ва доимиҳоро медонед?
5. Вазифаи хати моили чаппа \ аз чӣ иборат аст?
6. Escape-пайдарпайӣ чист?
Супоришҳо. Мустақилона иҷро кунед.
7. Матни мавзӯъро бодиққат хонед ва онро нақл кунед.
8. Доир ба ҳамаи навъҳои тағйирёбандаҳо ва доимиҳои C++ мисолҳо биёред.
9. Конструксияи «[синфи хотира] [const] навъ ном [инитсиализатор]»-ро шарҳ диҳед.
Вазифаи хонагӣ
Саволҳои 1–6-ро барои ҷавоби шифоҳӣ омода кунед.
Супоришҳои 8 ва 9-ро дар дафтар иҷро кунед; мисолҳои супориши 8-ро дар лаборатория санҷед.
Вазифаи хонагии онлайнро («ТИ 11 · Вазифаи хонагӣ · Дарси 3») дар саҳифаи «Супоришҳо» иҷро кунед, агар омӯзгор таъин карда бошад.
Хулоса
Идентификатор: ҳарфҳои лотинӣ, рақамҳо, _; бо рақам оғоз намешавад; ҳарфҳои калон ва хурд гуногунанд; калимаи хидматӣ нест.
Эълон: [синфи хотира] [const] навъ ном [= қимат];.
Навъ ҳаҷм ва доираи қиматро муайян мекунад; sizeof ҳаҷмро мегӯяд; long дар Windows 32 бит, дар Linux 64 бит; 64 бит – long long.
Тағйирёбандаи локалӣ дар блок амал мекунад; глобалӣ – берун аз блок.
Доимиҳо: бутун (даҳӣ, 017 ҳаштӣ, 0x1F шонздаҳӣ), ҳақиқӣ (2.5, 1.5e3), рамзӣ ('A'), сатрӣ ("A"); escape-пайдарпайӣ бо \ оғоз мешавад.
Дар ин дарс
номи дурусти идентификаторро аз рӯи қоидаҳо месозед;
тағйирёбандаро эълон мекунед ва шакли умумии эълонро шарҳ медиҳед;
навъҳои асосиро бо ҳаҷм ва доираи қиматҳо медонед ва ҳаҷмро бо sizeof меёбед;
тағйирёбандаи локалиро аз глобалӣ фарқ мекунед;
доимиҳои бутун, ҳақиқӣ, рамзӣ ва сатрӣ ва escape-пайдарпайиҳоро менависед.
Такрор (2 дақиқа)
Дастури #include <iostream> чӣ мекунад?
Ҳар оператор дар C++ бо чӣ тамом мешавад?
\n чӣ мекунад?
Ҷавоб
Препротсессор матни парвандаи iostream-ро ворид мекунад. 2. Бо нуқтавергул ;. 3. Ба сатри нав мегузаронад.
Вазъият барои андешаронӣ Шумо мехоҳед адади 5-ро дар барнома нигоҳ доред ва баъд онро тағйир диҳед. Компютер ин ададро дар хотира ҷое мегузорад. Чӣ тавр барномаро чунон нависем, ки бо суроғаи дуӣ кор накунем? Ном лозим аст – вале номҳо ҳам қоидаҳо доранд.
Қоида
Ҳарфҳои калон ва хурди лотинӣ аломатҳои гуногунанд : kty ва KTY – ду ном.
Номро бо рақам оғоз кардан мумкин нест.
Дар ном фосила, калимаҳои хидматӣ (int, for, return) ва номҳои объектҳои стандартии забон (cout, main) намешаванд.
Хатои тарҷума: «2a»: ном бо рақам сар шуда наметавонад, адад ҳам чунин навишта намешавад.
Қисмҳои эълон
синфи хотира яке аз калимаҳои auto, extern, static, register.
const нишони доимӣ будани қимат.
навъ нишон медиҳад, ки барои қимат чӣ қадар хотира лозим аст.
ном идентификатори тағйирёбанда.
инитсиализатор қимати аввала, масалан, = 5.
Имрӯз Синфи хотира auto дар C++11 маънои нав гирифт: auto k = 10; – компилятор худаш навъи k-ро аз қимат муайян мекунад. Калимаи register дар C++17 аз забон бароварда шуд. static ва extern-ро баъдтар, бо функсияҳо, мефаҳмем.
Чор навъи доимӣ
Бутуни даҳӣ бо рақамҳои 0–9, бо сифр оғоз намешавад: 25, 0.
Бутуни ҳаштӣ бо рақамҳои 0–7, бо сифр оғоз мешавад: 017 (дар даҳӣ 15).
Бутуни шонздаҳӣ бо 0x ё 0X оғоз мешавад: 0x1F (дар даҳӣ 31).
Ҳақиқӣ бо нуқта: 2.5; экспонентӣ: 1.5e3 (= 1500 =1500 = 1500 ); сифрро партофтан мумкин: .5, 5..
Рамзӣ як аломат дар апостроф: 'A'.
Сатрӣ пайдарпайии аломатҳо дар нохунак: "A", "Salom".
Калимаҳои калидӣ идентификатор тағйирёбанда доимӣ навъ инитсиализатор локалӣ глобалӣ майдони амалиёт escape-пайдарпайӣ
Ман дар ин дарс чӣ омӯхтам? Кадомашро аллакай метавонед ва кадомашро боз машқ мекунед?
✓ Ман номи дурусти тағйирёбандаро месозам.
✓ Ман тағйирёбандаро эълон мекунам ва навъи мувофиқро интихоб мекунам.
✓ Ман фарқи локалӣ ва глобалиро мефаҳмонам.
✓ Ман доимиҳо ва escape-пайдарпайиҳоро менависам.
✗ Ман ҳоло боз ба машқ ниёз дорам: ____________
Нависед: чаро ҳаҷми long дар Windows ва Linux фарқ мекунад ва чӣ кор кардан лозим?
# include <iostream>
using namespace std ;
int main ( ) {
int 2 a = 1 ;
cout < < 2 a < < endl ;
return 0 ;
}
Як ҷавобро интихоб кунед A 7 B 12 C 5 D Хато
Кадом номҳо дар C++ дурустанд? (Якчанд ҷавоб)
Ҳамаи мувофиқро интихоб кунед A Int B x1 C 2x D total-sum E my var F _sum
Фарқи 'A' ва "A" дар чист?
Як ҷавобро интихоб кунед A 'A' – як аломат (рамзӣ), "A" – сатр
B 'A' – сатр, "A" – як аломат
C Ҳеҷ фарқ надорад D 'A' – адади 1, "A" – ҳарф
Ҳар навъро ба доираи қиматҳояш мувофиқ гузоред.
Ҳар як унсури чапро бо яке аз рост мувофиқ кунед char
→ … аз −32 768 то 32 767 аз −128 то 127 аз 0 то 255 аз 0 то 65 535 unsigned char
→ … аз −32 768 то 32 767 аз −128 то 127 аз 0 то 255 аз 0 то 65 535 short
→ … аз −32 768 то 32 767 аз −128 то 127 аз 0 то 255 аз 0 то 65 535 unsigned short
→ … аз −32 768 то 32 767 аз −128 то 127 аз 0 то 255 аз 0 то 65 535 [синфи хотира] [const] навъ ном [инитсиализатор];
Хатои тарҷума: n доимӣ (const) аст: қиматашро иваз кардан мумкин нест.
char: 1
short: 2
int: 4
long: 8
long long: 8
float: 4
double: 8
long double: 16
bool: 1
wchar_t: 4
-2147483648 2147483647
4294967295
-9223372036854775808
9223372036854775807
1.17549e-38 3.40282e+38
2.22507e-308 1.79769e+308
15 31
2.5 1500 0.5
A A
65
Barnomasozi dar C++ in mahorat ast
Tab: X
Quote: "salom"
Slash: \
Letter A: A A
# include <iostream>
using namespace std ;
int main ( ) {
const int n = 5 ;
n = 6 ;
cout < < n < < endl ;
return 0 ;
}
# include <iostream>
using namespace std ;
int main ( ) {
cout < < "char: "
< < sizeof ( char ) < < endl ;
cout < < "short: "
< < sizeof ( short ) < < endl ;
cout < < "int: "
< < sizeof ( int ) < < endl ;
cout < < "long: "
< < sizeof ( long ) < < endl ;
cout < < "long long: "
< < sizeof ( long long ) < < endl ;
cout < < "float: "
< < sizeof ( float ) < < endl ;
cout < < "double: "
< < sizeof ( double ) < < endl ;
cout < < "long double: "
< < sizeof ( long double ) < < endl ;
cout < < "bool: "
< < sizeof ( bool ) < < endl ;
cout < < "wchar_t: "
< < sizeof ( wchar_t ) < < endl ;
return 0 ;
}
# include <iostream>
# include <climits>
# include <cfloat>
using namespace std ;
int main ( ) {
cout < < INT_MIN < < " "
< < INT_MAX < < endl ;
cout < < UINT_MAX < < endl ;
cout < < LLONG_MIN < < endl ;
cout < < LLONG_MAX < < endl ;
cout < < FLT_MIN < < " "
< < FLT_MAX < < endl ;
cout < < DBL_MIN < < " "
< < DBL_MAX < < endl ;
return 0 ;
}
# include <iostream>
using namespace std ;
int x = 10 ; // глобалӣ
int main ( ) {
cout < < x < < endl ; // 10
{
int x = 20 ; // локалӣ
cout < < x < < endl ; // 20
}
cout < < x < < endl ; // 10
return 0 ;
}
# include <iostream>
using namespace std ;
int main ( ) {
cout < < 0 17 < < " " < < 0x 1F < < endl ;
cout < < 2.5 < < " " < < 1.5 e 3 ;
cout < < " " < < .5 < < endl ;
cout < < 'A' < < " " < < "A" < < endl ;
int k = 'A' ;
cout < < k < < endl ;
return 0 ;
}
# include <iostream>
using namespace std ;
int main ( ) {
cout < < "Barnomasozi dar C++ \
in mahorat ast" < < endl ;
return 0 ;
}
# include <iostream>
using namespace std ;
int main ( ) {
cout < < "Tab: \t X \n " ;
cout < < "Quote: \" salom \"\n " ;
cout < < "Slash: \\ \n " ;
cout < < "Letter A: \x41 \101\n " ;
return 0 ;
}
cout < < "A \n " ;
cout < < "B \t C \n " ;
cout < < "D \n " ;
int n = 5 ;
int main ( ) {
int n = 7 ;
cout < < n ;
}