You are on page 1of 7

მასივი

წინა გაკვეთილებში ჩვენ ვისწავლეთ თუ როგორ შეიძლებოდა აღგვეწერა


რაიმე დეტალი, მაგალითად led ნათურა, გლობალურ ან ლოკალურ ცვლადად. წინა
გაკვეთილზე თუ გვექნებოდა დავალება, რომ აგვენთო 15 ცალი ნათურა, უნდა
შეგვექმნა 15ცალი ცვლადი, დაგვერქმია სახელები და შემდეგ სათითაოდ აგვენთო.
სინამდვილეში არსებობს ხერხი, რომლის მიხედვითაც უფრო მარტივად შეგვიძლია
გადავჭრათ ეს პრობლემა. სწორედ ასეთი ხერხია მასივი.

მასივი, როგორც სიტყვიდან ჩანს, არის მასიური გროვა ცვლადებისა.


წარმოიდგინეთ დიდი გრძელი ლურჯი კარადა, რომელსაც დავარქმევთ სახელს და
მას ექნება ბევრი უჯრა ჰორიზონტალურად. ჩვენ ამ უჯრებში ვალაგებთ ტანსაცმელს.
როდესაც გვინდა ამოვიღოთ ლურჯი მაისური, რომელიც დევს მესამე უჯრაში,
უბრალოდ ვამბობთ, რომ მე უნდა მივიდე ჩემს ლურჯ კარადასთან გამოვაღო მესამე
უჯრა და ჩავიცვა მაისური. ზუსტად ანალოგიურ პრინციპზეა C++ ში აგებული მასივი.

მასივი აღიწერება ზუსტად ისე როგორც ცვლადები აღიწერებიან. შეგვიძლია


აღვწეროთლოკალურადაც და გლობალურადაც. პირველ რიგში ვუთიბთ ტიპს (string-
ების მასივი, int-ების, char-ების და ა.შ.) მაგალითად გვინდა String_ების მასივი. ვწერთ
String masivi[მასივის ზომა]; კვადრატულ ფრჩხილებში ჩვენ ვუთითებთ მასივის ზომას.
ვთქვათ გვინდა შევქმნათ ტანსაცმლის კარადა, რომელსაც 7 უჯრა ექნება. ვწერთ String
masivi[7];

მოდით შევქმნათ ასეთი ტიპის მასივი და ჩავწეროთ მასში სიტყვები.

ჩვენ შევქმენით 7 უჯრიანი კარადა გლობალურ ცვლადად და შემდეგ მის


პირველ 3 უჯრაში ჩავწერეთ რაღაც სიტყვები.

როდესაც ჩვენ დაგვჭირდება გავიგოთ თუ რა წერია მე-2 კარადაში ვწერთ


შემდეგი ტიპის კოდს.

1
ჩვენ ვქმნით იგივე ტიპის ცვლადს, რა ტიპისაცაა მასივი და ვანიჭებთ მას მასივის
რომელიმე უჯრაში არსებულ მნიშვნელობას. ამ შემთხვევაში String ტიპის ცვლადს
meorekarada-ს მიენიჭება მასივში მე-2 ადგილას არსებული მნიშვნელობა.

კითხვა: რას დაბეჭდავს პროგრამა?

დავალება: ჩაწერეთ მასივის ბოლო უჯრაში რაიმე ინფორმაცია.

გასათვალისწინებელია ის ფაქტი, რომ თუ ჩვენ მასივის ისეთ უჯრას


დავბეჭდავთ, რომელშიც ინფორმაცია არ ჩაგვიწერია პროგრამა გამოიტანს გაუგებარ
შედეგს.
წინა ლექციაზე ჩვენ განვიხილეთ for ციკლი. for ციკლის მუშაობის პრინციპს თუ
გაიხსენებთ ის აღწერს რაიმე ცვლადს და შემდეგ ყოველ იტერაციაზე ანუ ყოველ
წრეზე უმატებს 1-ს ამ ცვლადს, მანამ სანამ ის არ გაუტოლდება რაღაც კონკრეტულ
რიცხვს.
მაგალითად : for(int a = 0; a < 5; a++){}

მოდით შევავსოთ ჩვენი მასივი მთლიანად და შემდეგ დავბეჭდოთ მისი


მნიშვნელობა for ციკლის გამოყენებით.

გავარჩიოთ კოდი:

გადავხედავთ ჩვენ კოდს თითქოსდა ყველაფერი რიგზეა. მაინც რაში უნდა იყოს
პრობლემა? თუ კარგად დააკვირდებით, შენიშნავთ, რომ ჩვენ 4 ზომის მასივი
შევქმენით ანუ 4 უჯრიანი მასივი, შესაბამისად მასივის ბოლო უჯრის გამოღება ხდება
array[3]-ით, რადგან პირველ უჯრად array[0] ითვლება. შესაბამისად კოდი
ჩასასწორებელია.

დავალება: შექმენით char-ების მასივი 15 ზომის და ყოველ უჯრაში შეამოწმეთ წერია თუ


არა მასში ასო ‘h’. თუ წერია დაბეჭდეთ “weria”.

ისმის კითხვა თუ რაში შეიძლება გამოვიყენოთ მასივი? ამის კარგი მაგალითი


იქნება მორბენალი ნათურის კოდის დაწერა. შევაერთოთ LED ნათურები, პინები
ჩავწეროთ მასივში და for ციკლით გადავუყვეთ.

დავალება: დაწერეთ კოდი.

2
3
ფუნქციის წერა

ალგებრული მაგალითები, რომლებიც ბევრ მოქმედებებს შეიცავენ უმჯობესია


ცალ-ცალკე მოქმედებებად დავწეროთ ხოლმე. ჯერ ერთი ნაწილი ამოვხსნათ შემდეგ
მეორე, მესამე და ა.შ. ბოლოს კი ყველა ერთად შევკრიბოთ და პასუხსაც მივიღებთ.

წარმოიდგინეთ ძალიან დიდი ამოცანა, რომელიც უნდა გადავჭრათ პროგრამის


მეშვეობით. რა უფრო უკეთესი იქნება, მისი პატარ-პატარა ნაწილებად დაყოფა და ისე
ამოხსნა თუ ერთიანად მიდგომა? ☺. ცხადია, პასუხი პატარ-პატარა ნაწილებად
დაყოფაა. ურთულესი ამოცანა ყოველთვის იყოფა მარტივ პატარ-პატარა ამოცანებად.

რეალურად, ჩვენ გვაქვს ორი მთავარი ფუნქცია void loop() და void setup(). ზუსტად
იგივენაირად იწერება ახალიფუნქციაც. void და ფუნქციის სახელი. კოდის წერისას
ძალიან მნიშვნელოვანია დავიცვათ წერის სტილი. ფუნქციის სახელი ყოველთვის
დაწერეთ შემდეგნაირად პირველი სიტყვა პატარა ასოთი იწყებოდეს, ხოლო ყოველი
შემდეგი სიტყვა დიდით, მაგალითად. void thisFunctionMakesThat(). ასეთი წერის დროს
კოდი უფრო მარტივად წაკითხვადია.

მოდით დავწეროთ 2 ფუნქცია. ერთი ფუნქცია ასრულებდეს შემოწმებას თუ


მერამდენე ადგილზეა ასო ‘h’ მასივში(წინა ამოცანა), ხოლო მეორე ფუნქცია
ამოწმებდეს თუ მერამდენე ადგილზეა ასო ‘b’.

4
როდესაც ფუნქციები უკვე დავწერეთ ჩვენ შეგვიძლია გამოვიყენოთ ისინი. ჩვენ
უკვე კარგად გვაქვს ნასწავლი თუ რას შვრება setup() ფუნქცია და რას შვრება loop()
ფუნქცია(კარგად დარწმუნდით რომ გესმით მათი დანიშნულებები). მოდით
გამოვიყენოთ ჩვენი დაწერილი ფუქნციები setup()-ში.

როგორც ხედავთ setup-ში ჩვენ უბრალოდ ვწერთ ფუნქციის სახელს და ()-ს.


როდესაც პროგრამა მიადგება ხაზს, რომელზეც წერია searchingCharH() ის აიხედავს

5
მაღლა და დაინახავს, რომ ეს ფუნქცია დაწერილი გვაქვს და შეასრულებს იმას რაც
მასში წერია.

თუ კარგად დააკვირდებით, დაინახავთ რომ ეს ორი ფუნქცია searchingCharH და


searchingCharB ერთმანეთს ძალიან ჰგავს. ჩვენ შეგვიძლია დავწეროთ ერთი ფუნქცია
და მისი მეშვეობით ნებისმიერი ასო მოვძებნოთ. ამაში დაგვეხმარება ფუნქციისთვის
პარამეტრის გადაცემა. void ფუნქციის სახელი (ცვლადის ტიპი და სახელი);
მაგალითად: void searchingChar(char ch); მოდით დავწეროთ ეს ფუნქცია და უფრო უკეთ
დაინახავთ.

როდესაც ფუნქცია დავწერეთ ჩვენ მივუთითეთ რომ ეს ფუნქცია იმუშავებს


მხოლოდ და მხოლოდ მაშინ თუ გადავცემთ პარამეტრს, რომელიც არის char ტიპის.

ქვემოთ ჩვენ დავწერეთ searchingChar(‘h’); რაც ნიშნავს იმას, რომ ამ მეთოდს


გადავეცით ასო ‘h’, ესეიგი ის შეამოწმებს თუ რომელ ადგილზეა ეს ასო და დაბეჭდავს
მის რიგობრივ ნომერს.

განვიხილოთ სხვა მაგალითი ფუნქციისთვის პარამეტრის გადაცემისა.

6
გამოტანილ პასუხებს თუ დავაკვირდებით ისინი აშკარად არასწორია .

კითხვა: რატომ?

პასუხი: ჩვენ int-ს, ანუ მთელ რიცხვს, ვუმატებთ double_ს ანუ არამთელ რიცხვს,
რაც ჯამში არამთელი გამოდის, ხოლო არამთელ რიცხვებს int ყუთში თუ შევინახავთ
ის დამრგვალდება, ამიტომ შესანახად უნდა გამოვიყენოთ double ყუთი.

სწორი კოდი გამოიყურება შემდეგნაირად:

ყურადღება გაამახვილეთ იმ ფაქტზეც, რომ როდესაც ჩვენ ფუნქციას აღვწერთ


და ვუთითებთ თუ რა ტიპის პარამეტრები გადაეცემა, ამ ფუნქციის გამოძახებისასაც
ზუსტად იგივე ტიპის პარამეტრები უნდა გადავცეთ, წინააღმდეგ შემთხვევაში არასწორ
შედეგს მივიღებთ.

You might also like