190.38K
Category: programmingprogramming

C++-ის ისტორია. ანბანი

1.

C++-ის ისტორია. ანბანი.
იდენტიფიკატორი. ცვლადი.
ცვლადთა ტიპები.
არითმეტიკული ოპერაციები.
შეტანის ოპერატორი cin.
გამოტანის ოპერატორი cout.
მინიჭების ოპერატორი.
ამოცანები.

2.

C++-მდე არსებობდა C. C შემუშავებული იქნა 1972 წელს დენის რიჩის მიერ Bell
Telephone Laboratories-ში, როგორც ენა, რომელზეც უნდა დაწერილიყო ოპერაციული
სისტემები, ანუ ის ჩაფიქრებული იყო, როგორც დაბალი დონის ენა, რომელსაც ექნებოდა
ეფექტური წვდომა მეხსიერებაზე, სწრაფად შესრულდებოდა და მასზე შესაძლებელი
იქნებოდა ეფექტური კოდის შექმნა. ერთადერთი, რითაც ის განსხვავებული უნდა
ყოფილიყო დაბალი დონის ენებისგან, უნდა ემუშავა ნებისმიერ პლატფორმაზე.
1973 წელს რიჩიმ კენ ტომპსონთან ერთად C-ზე გადაწერა იმ დროისათვის ძალზე
პოპულარული ოპერაციული სისტემის UNIX-ის კოდი, რომელიც მანამდე ასემბლერზე იყო
დაწერილი. ამან საშუალება UNIX-ს დაკომპილირებულიყო სხვადასხვა ტიპის
კომპიუტერებზე, რაც გახდა C-ის პოპულარობის ერთ-ერთი მთავარი მიზეზი. 1978 წელს
ბრაიან კერნიგანმა და დენის რიჩიმ გამოაქვეყნეს წიგნი „პროგრამირების ენა С“, რომელიც
იქცა С-ის უმთავრეს სახელმძღვანელოდ. 1983 წელს ამერიკული სტანდარტების
ნაციონალურმა ინსტიტუტმა (American National Standarts Institute – ANSI) შეიმუშავა
ოფიციალური სტანდარტი C ენისათვის. 1989 წელს მათ დაამტკიცეს სტანდარტი C89
(იგივე ANSI C). 1990 წელს უკვე სტანდარტების საერთაშორისო ორგანიზაციამ
(«International Organization for Standardization» — ISO) მიიღო სტანდარტი C90.
C++ შემუშავებული იქნა ბიორნ სტრაუსტრუპის მიერ 1979 წელს Bell Labs-ში. მან ბევრი
სიახლე შემოიტანა ენაში. განსაკუთრებით პოპულარული კი გახდა ობიექტზე
ორიენტირებული პროგრამირების შემოტანით.
C++ რატიფიცირებულ იქნა ISO-ს კომიტეტის მიერ 1998 წელს. მისი სტანდარტი
განახლდა 2003 წელს (სახელი C++03). მას შემდეგ განხორციელდა კიდევ ოთხი განახლება
(C++11, C++14, C++17 და C++20, რომელთა რატიფიცირება მოხდა შესაბამისად 2011, 2014,
2017 და 2020 წლებში).
1993 C++-ს დაემატა შაბლონების სტანდარტული ბიბლიოთეკა STL, რომელმაც მკვეთრად
გააიოლა რთულ ალგორითმულ ამოცანებთან მუშაობა.

3.

ნებისმიერი პროგრამული ენის საფუძველს წარმოადგენს ანბანი, რომელიც შეიცავს
ასოებს, ციფრებს და სპეციალურ სიმბოლოებს. ანბანში შემავალი სიმბოლოების
განსაზღვრული სინტაქსური წესებით შეერთების შედეგად ვღებულობთ
ინსტრუქციებს. C++ ენის ანბანში გამოყენებული სიმბოლოების სიმრავლე
შესაძლებელია 5 ფუნქციონალურ ჯგუფად დავყოთ.
1. იდენტიფიკატორებისა და გასაღები სიტყვების შესაქმნელად გამოყენებული
სიმბოლოები. მასში შედის ლათინური ანბანის დიდი და პატარა სიმბოლოები,
ასევე ხაზგასმის სიმბოლო (ე.წ. ქვედა ტირე);
2. არაბული ციფრები;
3. პუნქტუაციის ნიშნები;
4. უხილავი სიმბოლოები.
1. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z _
2. 0 1 2 3 4 5 6 7 8 9
3. ? { } , ¦ [ ] ( ) + — / % * . \ ‘ : ? < = > ! & # ~ — ; ^
4. ჰარი(space), ტაბულაციის ნიშანი, ახალი სტრიქონი(enter)

4.

იდენტიფიკატორი გამოიყენება პროგრამული ობიექტებისათვის (ცვლადი, კონსტანტა,
ფუნქცია) სახელების დასარქმევად. იგი წარმოადგენს ლათინური ანბანის სიმბოლოებისაგან,
ციფრებისაგან და ხაზგასმის სიმბოლოსაგან (ქვედა ტირე) შედგენილ მიმდევრობას. ზედა და
ქვედა რეგისტრის სიმბოლოები განსხვავდებიან. მაგალითად, MARS, mars, MarS, mArS
სხვადასხვა სახელებია. იდენტიფიკატორის პირველ სიმბოლოდ არ შეიძლება ციფრის
გამოყენება, ხოლო სახელის შიგნით არ შეიძლება ჰარის გამოყენება.
იდენტიფიკატორის სიგრძე სტანდარტის მიხედვით შეზღუდული არ არის, თუმცა ზოგიერთი
კომპილატორი მაინც აწესებს გარკვეულ ზღვარს. იდენტიფიკატორი იქმნება ცვლადების,
კონსტანტების და ფუნქციების გამოცხადების დროს და შემდეგ ისინი გამოიყენება პროგრამის
ოპერატორებში. იდენტიფიკატორის შერჩევისას უნდა გაითვალისწინოთ, რომ:
ა) იდენტიფიკატორი არ უნდა ემთხვეოდეს ენის რეზერვირებული სიტყვებს და ენაში
გამოყენებული სტანდარტული ობიექტების სახელებს;
ბ) რეკომენდირებული არ არის იდენტიფიკატორის დაწყება ხაზგასმის სიმბოლოთი (ქვედა
ტირე), რადგან ამ შემთხვევაში ის შეიძლება დაემთხვეს სისტემური ცვლადების ან ფუნქციების
სახელს.
სწორი სახელები
a, b, ab, x5, h2h4, Boeing777, aBBa, numb_of_cars
რეზერვირებული სიტყვა
არასწორი სახელები
# სიმბოლოს გამოყენება
არ შეიძლება
777Boeing, friend, numb of cars, a#
ციფრით დაწყება არ შეიძლება
ჰარის გამოყენება არ შეიძლება

5.

asm
else
new
this
auto
enum
operator
throw
bool
explicit
private
true
break
export
protected
try
case
extern
public
typedef
catch
false
register
typeid
char
float
reinterpret_cast
typename
class
for
return
union
const
friend
short
unsigned
const_cast
goto
signed
using
continue
if
sizeof
virtual
default
inline
static
void
delete
int
static__cast
volatile
do
long
struct
wchar_t
double
mutable
switch
while
dynamic_cast
namespace
template

6.

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

7.

ტიპი
აღნიშვნა
აღწერა
მაგალითი
მთელი რიცხვები
int, short, long
long
რიცხვი ათწილადი
ნაწილის გარეშე
129, 0, -37,
234683783748
მოძრავმძიმიანი
რიცხვები
float, double
რიცხვი ათწილადი
ნაწილით
-34.8334547,
0.000001, 34536.21
სიმბოლოები
char
მხოლოდ ცალკეული
სიმბოლოები
‘H, ‘a’, ‘7’, ‘#’
სტრიქონები
string
სიტყვები,
წინადადებები
“good morning”,
“abracadabra”
ლოგიკური
bool
ჭეშმარიტი ან მცდარი
true, false

8.

ტიპის სახელი
ზომა ბაიტებში
დიაპაზონი
char
1
-27.. 27-1 (-128..127)
unsigned char
1
0.. 28-1 (0..255)
short
2
-215.. 215-1 (-32768..32767)
unsigned short
2
0.. 216-1 (0..65535)
int (long)
4
-231.. 231-1
(-2147483648.. 2147483647)
unsigned int
(unsigned long)
4
0.. 232-1
long long
8
-263.. 263-1
(-9,223,372,036,854,775,808..
9,223,372,036,854,775,807)
unsigned long long
8
0.. 264-1
(0..4294967295)
(0.. 18,446,744,073,709,551,616)

9.

აღნიშვნა
ოპერაცია
შენიშვნა
+
შეკრება
-
გამოკლება
*
გამრავლება
/
გაყოფა
თუ ოპერაცია ტარდება მთელ რიცხვებზე,
ხორციელდება ე.წ. მთელი გაყოფა
(ათწილადი ნაწილის იგნორირებით).
მაგალითად, 19/5=3, 13/16=0
%
ნაშთის
გამოთვლა
25%7=4,
29%31=29
=
მინიჭების
ოპერაცია

10.

მათემატიკისგან განსხვავებით, მინიჭების ოპერაცია სრულდება
მხოლოდ მარჯვნიდან მარცხნივ, ანუ ტოლობის ნიშნის მარჯვენა
ნაწილში არსებული ცვლადის, მუდმივის, გამოსახულების ან ფუნქციის
მნიშვნელობა ენიჭება მარცხენა მხარეში მყოფ ერთადერთ ცვლადს.
სწორი ჩანაწერი
a=5, b=12+9, ab=a+b*(c+d), a=b=c=16, k=sin(x), a=a+b.
გამოსახულებას არ შეიძლება რამე მიენიჭოს,
მისი მნიშვნელობა უნდა იქნეს გამოთვლილი
არასწორი ჩანაწერი
728=n, d+n=m, d+n=7, a=b=16=c
728 რიცხვია, მას არ შეიძლება რაიმე მიენიჭოს.

11.

ოპერატორი cin იძლევა საშუალებას, პროგრამას მივაწოდოთ
დასამუშავებელი
მონაცემები
კლავიატურიდან,
ფაილიდან
ან
სერვერიდან
(სერვერიდანაც, როგორც წესი, ფაილების სახით
მიეწოდება). ის არის std სახელთა სივრცის ობიექტი და გამოყენებისას
უნდა მიუთითოთ ან std::cin ან პროგრამის დასაწყისში უნდა ჩართოთ
რეჟიმი using namespace std;
cin „ინტელექტუალური“ ოპერატორია და ცვლადის მითითებული
ტიპის მიხედვით, თავად განსაზღვრავს თუ როგორ წაიკითხოს საჭირო
მონაცემი.
ხშირად დაშვებული შეცდომები:
ავიწყდებათ using namespace std;-ის მითითება.
cin<<n; მეტობის ნიშნები უნდა იყოს. სწორია: cin>>n;
cin>>n,a,b; cin-ში მძიმე არ გამოიყენება. სწორია: cin>>n>>a>>b;

12.

ოპერატორი
cout
იძლევა
საშუალებას,
მიღებული
პასუხი
გამოვიტანოთ კონსოლის ეკრანზე ან ფაილში. ის არის std სახელთა
სივრცის ობიექტი და გამოყენებისას უნდა მიუთითოთ ან std::cout ან
პროგრამის დასაწყისში უნდა ჩართოთ რეჟიმი using namespace std;
cout-ს უცვლელად გამოაქვს ბრჭყალებში მითითებული ტექსტი.
ხშირად დაშვებული შეცდომები:
ავიწყდებათ using namespace std;-ის მითითება.
cout>>n; ნაკლებობის ნიშნები უნდა იყოს. სწორია: cout<<n;
cout<<n,a,b; cout-ში მძიმე არ გამოიყენება და ამასთან მონაცემები
ერთმანეთს უნდა დაშორდნენ. სწორია: cout<<n<<“ “<<a<<“ “<<b;

13.

https://basecamp.eolymp.com/en/problems/8800 - Hello, Python
ამოცანა. დაბეჭდეთ რიცხვები „Hello, Python!“.
შესატანი მონაცემები: არ არის.
გამოსატანი მონაცემები: ერთ სტრიქონში: „Hello, Python!“.
#include <bits/stdc++.h>
using namespace std;
main() {
cout<<"Hello, Python!"<<endl;
}

14.

https://basecamp.eolymp.com/en/problems/990 - ხუთი რიცხვის ბეჭდვა
ამოცანა. დაბეჭდეთ რიცხვები 1,2,3,4,5.
შესატანი მონაცემები: არ არის.
გამოსატანი მონაცემები: რიცხვები - 1,2,3,4,5. თითო სტრიქონში თითო რიცხვი.
#include <bits/stdc++.h>
using namespace std;
main() {
cout<<"1"<<endl<<"2"<<endl<<"3"<<endl<<"4"<<endl<<"5";
}
შესაძლოა ასეთი ამოხსნაც:
#include <bits/stdc++.h>
using namespace std;
main() {
cout<<"1"<<endl;
cout<<"2"<<endl;
cout<<"3"<<endl
cout<<"4"<<endl;
cout<<"5"<<endl;
}

15.

https://basecamp.eolymp.com/en/problems/9914 - Welcome, Linux
ამოცანა. თქვენს პროგრამას მიეწოდება რაიმე ტექსტი. მაგალითად, Linux.
პროგრამამ უნდა გამოიტანოს „Welcome, Linux!“.
შესატანი მონაცემები: ლათინური სიმბოლოებისაგან შედგენილი ერთი სიტყვა.
გამოსატანი მონაცემები: შესაბამისი მნიშვნელობა.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
Linux
Welcome, Linux!
#include <bits/stdc++.h>
using namespace std;
string s;
int main() {
cin>>s;
cout<<"Welcome, "<<s<<"!";
}

16.

https://basecamp.eolymp.com/en/problems/8801 - მომდევნო რიცხვი
ამოცანა. მოცემულია რიცხვი n. დაბეჭდეთ მისი მომდევნო რიცხვი.
შესატანი მონაცემები: მთელი რიცხვი n, რომელიც მოდულით არ აღემატება 10^18-ს).
გამოსატანი მონაცემები: ერთი მთელი რიცხვი - n-ის მომდევნო.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
27
28
#include <bits/stdc++.h>
using namespace std;
long long n;
int main(){
cin>>n;
cout<<n+1;
}

17.

https://basecamp.eolymp.com/en/problems/11482 - შეავსეთ 9-მდე
ამოცანა. მოცემულია სამნიშნა რიცხვი n. რა რიცხვი უნდა დავუმატოთ მას, რომ
მისი თითოეული რიცხვი შეივსოს 9-მდე? მაგალითად, თუ n=105, მას უნდა
დავუმატოთ 894.
შესატანი მონაცემები: ერთი მთელი რიცხვი n (100 <= n <1000).
გამოსატანი მონაცემები: ერთი მთელი რიცხვი, რაც უნდა დავუმატოთ n-ს, რომ
მისი ყველა ციფრი 9-მდე შეივსოს.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
105
894
#include <bits/stdc++.h>
using namespace std;
int n;
main(){
cin>>n;
cout<<999-n;
}

18.

https://basecamp.eolymp.com/en/problems/4716 - ვაშლების გაყოფა
ამოცანა. n მოსწავლე თანაბრად იყოფს k ვაშლს. ვაშლის გაჭრა არ შეიძლება.
დარჩენილი ნაშთი რჩება კალათაში. რამდენი ვაშლი შეხვდება თითო მოსწავლეს.
შესატანი მონაცემები: ერთ სტრიქონში ორი მთელი რიცხვი n და k (1< n, k<1500).
გამოსატანი მონაცემები: ერთი მთელი რიცხვი - რამდენი ვაშლი შეხვდა ერთ
მოსწავლეს.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
3 14
4
10 100
10
#include <bits/stdc++.h>
using namespace std;
int n,k;
int main(){
cin>>n>>k;
cout<<k/n;
}

19.

https://basecamp.eolymp.com/en/problems/7336 - ნამცხვარი
ამოცანა. ერთი ნამცხვარი ღირს a გრივნა და b კაპიკი. რამდენი უნდა
გადავიხადოთ n ნამცხვარში?
შესატანი მონაცემები: სამი მთელი რიცხვი a, b და n (0 <= a, b, n <100).
გამოსატანი მონაცემები: ორი მთელი რიცხვი - გადასახდელი თანხა გრივნებსა და
კაპიკებში.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
1 25
2 50
#include <bits/stdc++.h>
using namespace std;
int n,b,a,x;
main(){
cin>>a>>b>>n;
x=n*a+b*n/100;
cout<<x<<" "<<(b*n)%100;
}

20.

https://basecamp.eolymp.com/en/problems/5175 - ბოლო ციფრი
ამოცანა. გამოიტანეთ მოცემული რიცხვის ბოლო ციფრი.
შესატანი მონაცემები: ერთი მთელი რიცხვი n (0 <= n <10^9).
გამოსატანი მონაცემები: n-ის ბოლო ციფრი
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
123
3
6578
8
#include <bits/stdc++.h>
using namespace std;
int n,m,a,x;
main(){
cin>>n;
cout<<n%10;
}

21.

https://basecamp.eolymp.com/en/problems/1 - მარტივი ამოცანა
ამოცანა. დაწერეთ პროგრამა, რომელიც მოცემული ორნიშნა რიცხვების ციფრებს
გამოიტანოს ცალ-ცალკე, სპეისით დაშორებულს.
შესატანი მონაცემები: ერთი მთელი რიცხვი n (10 <= n <100).
გამოსატანი მონაცემები: სპეისით (ჰარით) დაშორებული ორი ციფრი.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
23
23
#include <bits/stdc++.h>
using namespace std;
int n;
main(){
cin>>n;
cout<<n/10<<" "<<n%10;
}
#include <bits/stdc++.h>
using namespace std;
int n,x,y;
main(){
cin>>n;
x=n/10;
y=n%10;
cout<<x<<" "<<y;
}

22.

https://basecamp.eolymp.com/en/problems/8603 - ჯამი და ნამრავლი 3
ამოცანა. დაწერეთ პროგრამა, რომელიც იპოვის მოცემული სამნიშნა რიცხვის
ციფრების ჯამსა და ნამრავლს.
შესატანი მონაცემები: ერთი მთელი რიცხვი n (100 <= n <1000).
გამოსატანი მონაცემები: ერთადერთ სტრიქონში სპეისით (ჰარით) დაშორებული
ორი რიცხვი - n-ის ციფრთა ჯამი და ნამრავლი .
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
234
9 24
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,a1,a2,a3;
cin >> n;
a1=n%10;
a3=n/100;
a2=(n/10)%10;
cout<<a1+a2+a3<<" "<<a1*a2*a3;
}

23.

https://basecamp.eolymp.com/en/problems/67 - ყველი ანფისასათვის 2
ამოცანა. მოცემულია მართკუთხა პარალელეპიპედის ფორმის ყველი, რომლის
ზომებია a b c. დიასახლისმა ის უნდა დაჭრას 1 1 1 ზომის ნაჭრებად ისე, რომ
ყოველ გაჭრაზე მხოლოდ ერთი ნაჭერი გაიყოს ორ ნაწილად. რამდენი გაჭრის
გაკეთება მოუწევს დიასახლისს?
შესატანი მონაცემები: სამი მთელი რიცხვი a,b,c (1 <= n <2*10^9).
გამოსატანი მონაცემები: ერთი მთელი რიცხვი - გაჭრების საერთო რაოდენობა.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
234
23
#include <bits/stdc++.h>
using namespace std;
long long a,b,c;
int main() {
cin>>a>>b>>c;
cout<<a-1+(b-1)*a+(c-1)*a*b;
}

24.

https://codeforces.com/problemset/problem/617/A- სპილო
ამოცანა. სპილო მიდის სტუმრად მეგობართან. სპილოს და მისი მეგობრის
სახლები განლაგებულნი არიან ერთ სწორ ხაზზე. სპილოს სახლის კოორდინატია
0, ხოლო მეგობრის სახლის კოორდინატია - x. ერთი ნაბიჯით სპილოს შეუძლია
გადაადგილდეს 1, 2, 3, 4 ან 5 პოზიციით წინ. ნაბიჯების რა მინიმალური
რაოდენობა დასჭირდება სპილოს მეგობრის სახლამდე მისასვლელად.
შესატანი მონაცემები: ერთი მთელი რიცხვი x (1 <= x <=1000000) - მეგობრის სახლის
კოორდინატი.
გამოსატანი მონაცემები: ერთი მთელი რიცხვი - ნაბიჯების მინიმალური
რაოდენობა, რომელიც დასჭირდება სპილოს x კოორდინატამდე მისასვლელად.
შესატანი მონაცემების მაგალითი
შესაბამისი გამოტანის მაგალითი
5
1
12
3
#include <bits/stdc++.h>
using namespace std;
int x;
main(){
cin>>x;
cout<<(x+4)/5;
}

25.

https://basecamp.eolymp.com/en/problems/ 8599
https://basecamp.eolymp.com/en/problems/ 8802
https://basecamp.eolymp.com/en/problems/ 125
https://basecamp.eolymp.com/en/problems/ 8600
https://basecamp.eolymp.com/en/problems/ 906
https://basecamp.eolymp.com/en/problems/ 939
https://basecamp.eolymp.com/en/problems/ 11481
https://basecamp.eolymp.com/en/problems/ 133
https://basecamp.eolymp.com/en/problems/ 9905
https://basecamp.eolymp.com/en/problems/ 63
https://basecamp.eolymp.com/en/problems/ 4715
https://basecamp.eolymp.com/en/problems/ 949
https://basecamp.eolymp.com/en/problems/ 945
https://codeforces.com/problemset/problem/ 50/A
English     Русский Rules