DL1MP1K | Date: ხუთშაბათი, 2012-02-09, 7:43 PM | Message # 1 |
Lieutenant colonel
Group: VIP
Messages: 77
Awards: 0
Reputation: 1
Status: გასული
| მასივები ერთ-ერთი ფუნდამენტალური მცნებაა პროგრამირების სამყაროში, ეს არის მეხსიერების ბლოკების(ბაიტების) თანმიმდევრული გამოყოფა. როგორც ვიცით (და თუ არ ვიცით ეხლა გავიგებთ) წინა თემებიდან ოპერატორის მეშვეობით შეგვიძლია გამოვაცხადოთ ცვლადი რომელიც მეხსიერებაში რაღაც ადგილს დაიკავებს, ყოველი შემდგომი ცვლადის გამოცხადებისას ჩვენ არა გვაქვს გარანტია რომ ცვლადები რომლებიც გამოვაცხადეთ, ერთმანეთის მიყოლებით განლაგდებიან მეხსიერებაში, და თუკი დაგვჭირდება მეხსიერებიდან ამ ცვლადების წაკითხვა ჩვენ უნდა სახელებით მივმართოთ მათ, სხვანაირად მათი მოძებნა შეუძლებელია. მასივი ამ მხრივ უნიკალურია რადგანაც ყოველი ცვლადი რომელიც მასივში იქნება, გარანტირებულად ერთმანეთის მიყოლებით იქნება მეხსიერებაში ჩაწერილი და მეხსიერებიდან შეიძლება ასევე მიმდევრობით წაკითხვა; მასივი შეიძლება არსებობდეს ნებისმიერი ტიპის; მაგ int masivi [10]; // int არის ოპერატორი რომელიც განსაზღვრავს რომ მასივი რომელიც გამოიყოფა და ჩვენს შემთხვევაში მასივს ქვია masivi მის თითოეულ წევრს ექნება 4 ბაიტის სიდიდე. აქ გამოყოფილი არის 10 წევრიანი მასივი(ანუ 10 არის მასივის სიგრძე) და თითოეული წევრის სიდიდე ოთხი ბაიტია; ჩვენ შეგვიძლია მის თითოეულ წევრს ცალცალკე მივანიჭოთ მნიშვნელობა მაგ: masivi[2] = 18;
masivi[0]=100;
masivi [5]=20;
masivi [9]=43;
masivi [10]=234; //EROR!!!
საგულისხმოა ერთი რამ რომ , თუმცა მასივის სიგრძე 10 ის ტოლია ჩვენ არშეგვიძლია მივმართოთ მასივის მე 10 ელემენტს, რადგანაც მასივის ათვლა იწყება 0 დან და ამიტომაც მისი ბოლო წევრი არის მეათ ელემენტი ინდექსით 9; თუმცა მასივის გამოცხადებისას რიცხვი 10 განსაზღვრავს მასივის სიგრძეს მინიჭებისას ოთხკუთხედ ფრჩხილებში მოთავსებული რიცხვები უკვე მიუთითებენ არა სიგრძეს არამედ ინდექსს თუ მასივის რომელ წევრთან ხდება მოქმედება; განვიხილოთ ტექსტური მასივი; char TeMas[20]; // char არის ოპერატორი რომელიც განსაზღვრავს რომ მასივი რომელიც გამოიყოფა და ჩვენს შემთხვევაში მასივს ქვია TeMas მის თითოეულ წევრს ექნება 1 ბაიტის სიდიდე. აქ გამოყოფილი არის 20 წევრიანი მასივი(ანუ 20 არის მასივის სიგრძე) და თითოეული წევრის სიდიდე ერთი ბაიტია; განსხვავებით სხვა მასივებისა, რომლებიც რიცხვებთან სამუშაოთაა განკუთვნილი, char მასივების ინიციალიზაცია (ანუ მნიშვნელობის მინიჭება) გამოცხადებისთანავეა შესაძლებელი; გამოვიყენებ იგივე მასივს; char TeMas[20]="Hello C++"; //მართალია მასივი 20 ბაიტიანია მაგრამ ჩვენ მხოლოდ 9 ბაიტი შევავსეთ, თითოეული ასო მეხსიერებაში იკავებს 1 ბაიტს. ცხრა ბაიტის შემდეგ ისე რომ ჩვენ არც ვიცით თავისთავად ეწერება დასასრულის აღმნიშვნელი \0. ეს ხდება იმ მიზეზით რომ წაკითხვისას წაკითხული იქნეს მხოლოდ მეხსიერების ის ნაწილი რომელიც შევსებულია და დანარჩენი იგნორირებული იქნება. აუცილებელი პირობაა ტექსტის ბრჭყალებში მოთავსება, სხვანაირად ტრანსლიატორისთვის გაუგებარი ხდება მინიჭების მოქმედება. ისევე როგორც სხვა მასივებში აქაც არის საშუალება რომ ცალცალკე მივანიჭოთ მნიშვნელობა მასივის წევრებს TeMas[0] = "H";
TeMas[1]="e";
TeMas[2]="l";
TeMas[3]="l";
TeMas[4]="o";
TeMas[5]=" "; და ასე შემდეგ. მართალია ჩვენი მასივი თავიდანვე 20 ბაიტი გამოვყავით და აქედან მხოლოდ 9 ბაიტი შევავსეთ, სინამდვილეში 10 ბაიტია შევსებული. მეათე არის დასასრულის ნიშანი "\0". თუკი ჩვენ გამოვყოფდით აი ასე ; char TeMas[9]="Hello C++"; // თითქოს გამართლებულია რომ გვაქვს 9 სიმბოლო და ამიტომაც 9 ბაიტი მოვითხოვეთ, მაგრამ ტრანსლიატორი შეცდომას აფიქსირებს რადგანაც არ რჩება ადგილი დასასრულის აღმნიშვნელი სიმბოლოსათვის:
ისეთი შემთხვევებისათვის როცა არა აქვს მნიშვნელობა მასივის სიგრძეს, შეგვიძლია გამოვაცხადოთ მასივი წინასწარ განსაზღვრული სიდიდით, რომელიც ტრანსლიაციის დროს შემოწმდება და გამოიყოფა იმხელა მეხსიერება რამდენი სიმბოლოც არის ტოლობის შემდეგ. ამ სახის მასივი გამოცხადებისთანავე უნდა იქნეს ინიცირებული, მისი დინამიური ინიციალიზაცია არ მოხდება. მაგ: char TeMas[ ] ="gamarjoba Cemo Tbilis qalaqo"; როდესაც არანაირი მანიპულაციების ჩატარება არ იგეგმება ტექსტურ მასივთან და უბრალოდ ეკრანზე გამოსაყვანად გვჭირდება მასივი, მაშნ მიზანშეწონილია ამ სახით მასივის გამოცხადება, თუმცა არც ეს მასივია ურიგო მანიპულაციებისთვის, რასაც შემდეგ თავებში გავარკვევთ; ტექსტური მასივების გარდა ყველა სხვა დანარჩენი მასივები შეიძლება განხილულ იქნას ერთ ჯგუფში, ამიტომ ყველაზე ცალ ცალკე აღარ შევჩერდები; არაფრის შეცვლა არ არის საჭირო, ბოლო ხაზის შემდეგ დავწეროთ ეს კოდი cout < <"/////////////////////////////////////////////////////////////////////////////////////////////////////////////////"< < endl;
int array[10];
double darray[5];
char TextMas[20];
char Text2[]="ganusazgvreli sididis masivi";
array[0]=10;
array[1]= 15;
array[8]=25;
darray[2]=9.27;
darray[1]=23.5;
darray[4]=22.87;
flomas[2]=22.987;
flomas[8]=12.55;
flomas[0]=10;
TextMas[0]='I';
TextMas[1]='L';
TextMas[2]='I';
TextMas[3]='A';
cout < < "1.int masivis pirveli elementi = "< < array[0 ] < < endl;
cout < < "2.int masivis meore elementi = " << array[1 ]< < endl;
cout < < "3.int masivis meSvide elementi = " < < array[8] < < endl;
array[2]=array[0] + array[8] *array[1];
cout < < "4.int masivis mesame elementi = " < < array[2] < < endl;
cout < < "5.double masivis mesame elementi = " < < darray[2] < < endl;
cout < < "6.double masivis meore elementi = " < < darray[1] < < endl;
cout < < "7.double masivis mexuTe elementi = " < < darray[4] < < endl;
darray[0]=(darray[2] + darray[4] )/(darray[1] + 30.76);
cout < < "8.double masivis pirveli elementi = " < < darray[0] < < endl;
cout < < "9.char masivis pirveli elementi = " < < TextMas [0] < < endl;
cout < < "10.char masivis meore elementi = " < < TextMas [1] < < endl;
cout < < "11.char masivis mesame elementi = " < < TextMas [2] < < endl;
cout < < "12.char masivis meotxe elementi = " < < TextMas [3] < < endl;
cout < < "13.ganusazgvreli masivi = "< < Text2 < < endl;
მიზანი ამართლებას საშუალებას ! ვინც ეძებს ის პოულობს : http://therealgta.ucoz.com ითამაშე ფლეშ თამაშები : http://gamesforboys.in
|
|
| |