Professional Documents
Culture Documents
&j
ნახაზზე j-ის მონაკვეთი გაყოფილია ოთხ ნაწილად იმის მისათითებლად, რომ მთელი
რიცხვების წარმოდგენისთვის გამოყენებულია 32-ბიტი. თუმცა ეს დამოკიდებულია სისტემაზე.
ზოგადად, ცვლადისთვის საჭირო მეხსიერების სიდიდეს გავიგებთ C++ -ის ოპერატორ sizeof
-ის საშუალებით. მაგალითად, თუ დავბეჭდავთ sizeof(j) სიდიდეს, დაიბეჭდება სისტემის
მიერ j ცვლადისთვის გამოყოფილი ბაიტების რაოდენობა. იგივე ოპერატორი შეგვიძლია
გამოვიყენოთ უშუალოდ ტიპებისთვის. მაგალითად, დავბეჭდოთ და ვნახოთ რისი ტოლია
sizeof(int), sizeof(double) და ა.შ.. თუ ვიცით რამდენი ბაიტია გამოყოფილი
ცვლადისთვის, შეგვიძლია გამოვთვალოთ რა დიაპაზონის და რა სიზუსტის მიღწევა შეიძლება
ამ ტიპის საშუალებით. მაგალითად, თუ int ტიპის ცვლადისთვის ოთხი ბაიტია გამოყოფილი,
მაშინ ყველაზე დიდი მთელი (int) რიცხვი არის 231 1 (გავიხსენოთ რიცხვების წარმოდგენის
two’s complement სისტემა). მაგრამ ამის ანგარიშის ან დამახსოვრების აუცილებლობა არ
არის, რადგან
#include <climits>
დირექტივა საშუალებას გვაძლევს გამოვიყენოთ ამ ბიბლიოთეკაში აღწერილი მუდმივი
სიდიდეები. მაგალითად, თუ ჩართულია ეს ბიბლიოთეკა, კომპილერისთვის INT_MAX
მუდმივი არის ზუსტად უდიდესი int მთელი რიცხვი, რომლის წარმოდგენაც შესაძლებელია
sizeof(int) რაოდენობა ბაიტებში. ანგარიში ჩვენ არ გვჭირდება. თუ რამდენიმე წლის შემდეგ
sizeof(int) გაიზრდება, შესაბამისად გაიზრდება INT_MAX-იც.
Page 3 of 10
double x = 12.563;
double height(x); //როდესაც x ცვლადი უკვე არის ინიციალიზებული
ერთგვაროვანი ინიციალიზება შედარებით დაცულ კოდს ქმნის. კერძოდ, იგი არ იძლევა ე.წ.
narrowing initializations-ის (ანუ უფრო ვრცელი ტიპის მნიშვნელობის მინიჭება უფრო ვიწრო
ტიპის ცვლადის ან ობიექტისთვის) საშუალებას. მაგალითად, შესაძლებელია
int x(5.3); // x გახდება 5
int x = 5.3; // x გახდება 5
მაგრამ შეცდომაა
int x{5.3};
ან
char c{9999}; // 9999 სიმბოლოთა დიაპაზონიდან გადის
Page 4 of 10
ზოგჯერ საჭირო ხდება ისეთი ცვლადების გამოყენება, რომლის მნიშვნელობები არ უნდა
შეიცვალოს პროგრამის განხორციელების პროცესში. იმისათვის რომ თავი დავიზღვიოთ
უნებლიე შეცდომისგან, ვიქცევით შემდეგნაირად. ვთქვათ, ხშირად გვჭირდება პროგრამაში
მუდმივის გამოვყენება, რომლის მნიშვნელობაც არის დაახლოებით 3.14. შემოვიტანოთ
ცვლადი, გავაკეთოთ განაცხადი და მოვახდინოთ ინიციალიზება:
const double PI(3.14);
ამის შემდეგ PI ცვლადს ჩვეულებრივ ვიყენებთ პროგრამაში და მისი მნიშვნელობა ყოველთვის
არის 3.14. თუ ჩვენ შეგვეშალა და სადმე დავწერეთ
PI = 55.17;
კომპილერი მიგვითითებს შეცდომაზე. ამგვარად, რეზერვირებული სიტყვა const არის თავის
დაზღვევის საშუალება როდესაც ვმუშაობთ მუდმივ სიდიდეებთან. მისი გამოყენება აგრეთვე
შეიძლება სხვა საბაზო ტიპებისთვის, რომლებსაც ენა გვთავაზობს გამზადებული სახით.
თუ მივაქციეთ ყურადღება, მუდმივი (კონსტანტური) ცვლადის სახელი ჩვენ მთავრული
(დიდი) ასოებით ავკრიფეთ. ესაც პროგრამირების კარგი სტილის რეკომენდაციაა:
პროგრამისტი, რომელიც კითხულობს სხვის დაწერილ პროგრამას მისი გადაკეთების მიზნით,
მთავრული ასოებით აკრეფილი ცვლადის სახელის დანახვისას ხვდება, რომ ეს მუდმივი
ცვლადია და მისი მნიშვნელობა ერთხელ და სამუდამოდ არის განსაზღვრული. თუ მისი
მნიშვნელობის შეცვლაა საჭირო, უნდა მოიძებნოს ინიციალიზების სტრიქონი და იქ გაკეთდეს
ცვლილება.
ზოგიერთი მუდმივისთვის C++ - ის მათემატიკურ ბიბლიოთეკაში შემოღებულია სიმბოლური
სახელები. მაგალითად, იგივე მუდმივის სახელია M_PI, ხოლო მისი მნიშვნელობა
განისაზღვრება როგორც 3.14159265358979323846. უფრო მეტიც, სახელები აქვთ
მუდმივებსაც / 2 , / 4 , 1 / და 2 / - M_PI_2, M_PI_4, M_1_PI და M_2_PI
შესაბამისად - მათი ხშირად გამოყენების გამო მათემატიკურ გამოთვლებში. დაწვრილებითი
ინფორმაცია ე.წ. დასახელებული მუდმივების შესახებ შეგიძლიათ მოიძიოთ მისამართზე
http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx
ცხადია, რომ ამ სახელებით სარგებლობისათვის პროგრამაში საჭიროა #include <math.h>
დირექტივის ჩართვა.
მინიჭების შეტყობინების ზოგადი სახეა:
ცვლადი = გამოსახულება;
ოპერატორი ” = ” გამოიყენება მინიჭებისთვის. ეს შეტყობინება ამბობს: გამოთვალე
გამოსახულება და მიანიჭე ცვლადს ამ გამოსახულების მნიშვნელობა.
ვიდრე ვისაუბრებთ გამოსახულებების შესახებ, რაც აუცილებელია მინიჭების შეტყობინების
ზოგადი სახის გამო, კიდევ ერთხელ გავამახვილოთ ყურადღება ” = ” ოპერატორის ერთ
სახასიათო თავისებურებაზე. შემდეგ ფრაგმენტში
int counter; // მთვლელი
int value = 44; // სიდიდე მთვლელის საწყისი მნიშვნელობისთვის
counter = value;
გვაქვს ორი მინიჭება. პირველი კეთდება განაცხადის გაკეთების მომენტში, ანუ სხვა სიტყვებით
ცვლადი value ინიციალიზდება მნიშვნელობით 44. მეორე მინიჭება ცვლადს counter
ანიჭებს იგივე მნიშვნელობას, რაც ჰქონდა ცვლადს value, თანაც ამ უკანასკნელის
მნიშვნელობა არ იცვლება. სხვა სიტყვებით, ამ შემთხვევაში ” = ” ოპერატორი აკეთებს მარჯვენა
Page 5 of 10
მხარეში მდგომი ცვლადის ასლს მარცხენა მხარეში მდგომ ცვლადში. ეს ანალოგია ასლის
გადაღებასთან დაგვეხმარება რომ გავიგოთ ე.წ. მინიჭების კონსტრუქტორის შინაარსი ისეთი
ტიპის ცვლადებისთვის, რომლებსაც არა აქვთ რიცხვითი მნიშვნელობები (მაგალითად,
სხვადასხვა კლასის ობიექტები).
Page 6 of 10
უნდა შეხვდეს ეს ცვლადი, კომპილერმა იცის რომელი ოპერაცია როგორ უნდა შეასრულოს,
რომ შედეგი კორექტულად და სწრაფად მიიღოს.
ბულის ტიპის ცვლადმა ან მუდმივმა შესაძლოა მიიღოს მხოლოდ ორი მნიშვნელობა: 0 (იგივე
false) და 1 (იგივე true). ამ რიცხვებისთვის გადატვირთულია არითმეტიკული ოპერატორები
ისე, რომ შედეგი არ გავიდეს ბულის სიმრავლიდან, მაგალითად შეკრება. მაგრამ გამოყენებებში
ბევრად უფრო ხშირად გამოიყენება ლოგიკური ოპერატორები “!=” უარყოფა, “&&” -და, “||”-
ან:
a b a || b
true true true
true false true
false true true
სხვა ფუნქციები, რაც ვახსენეთ ზემოთ (sizeof(), false false false &) აგრეთვე
გადატვირთულია ამ ტიპზე.
თითოეული ტიპი უნიკალურია, ამიტომ თითოეულ ტიპთან დაკავშირებულია სპეციფიკური
ფუნქციები (ოპერატორები). განვიხილოთ ბულის ტიპის სპეციფიკა.
C++ ენაში ნებისმიერი გამოსახულება (შედარების, ლოგიკური, არითმეტიკული) მოისაზრება
როგორც bool ტიპის მნიშვნელობა. ნებისმიერი ჭეშმარიტი შედარების გამოსახულება
(მაგალითად 8 <= 124 ) C++ –ში გაიგივებულია 1-იანთან, ხოლო მცდარი (მაგალითად 453 <
-3 ) გაიგივებულია ნულთან. იგივე ეხება ლოგიკურ გამოსახულებასაც. მაგალითად, 5 > 3 &&
123 <= 3736 გამოსახულების მნიშვნელობაა 1 (true), ხოლო 5 > 3 && 123 > 3736
გამოსახულების შედეგია 0 (false). არითმეტიკული გამოსახულების გამოთვლის
არანულოვანი შედეგი (–100, 2.456, 9) გაიგივდება bool ტიპის მნიშვნელობასთან 1 (true),
ხოლო ნულოვანი შედეგი – მნიშვნელობასთან 0 (false).
ეს ფაქტი ძალიან მნიშვნელოვანია პროგრამის შემადგენელი ინსტრუქციების მიმდევრობის
მართვისთვის. ისეთი ფუნდამენტური კონსტრუქციები, როგორიცაა if-else და განმეორების
შეტყობინებები (ციკლები), არგუმენტებად ღებულობენ ბულის ტიპის გამოსახულებებს.
ამჟამად განვიხილოთ პირველი მათგანი, რომლისთვისაც ბულის ტიპის ცვლადების ცოდნა
საკმარისია.
if Sეტყობინების ზოგადი ფორმა ასეთია:
if (პირობა)
შეტყობინება;
თუ პირობა ჭეშმარიტია (ნულისაგან განსხვავებულია), მაშინ შეტყობინება სრულდება, ხოლო
თუ მცდარია (0-ის ტოლია) - არ სრულდება. მაგალითად
# programis fragmenti Sedegi
cout << "AAA\n"; AAA
1 if( 5 > 3 ) cout << "BBB\n"; BBB
cout << "EEE\n"; EEE
cout << "AAA\n"; AAA
2 if( 15 <= 3 ) cout << "BBB\n"; EEE
cout << "EEE\n";
3 if( 5 > 333 || 123 > 3736 ) cout << "1111\n"; 2222
else cout << "2222\n";
Page 9 of 10
cout << "მესამე მეოთხედი\n";
ზოგადად, ფრჩხილების გამოყენება ყოველთვის უფრო უსაფრთხოა.
Page 10 of 10