Advertisement
Tavxela

C++ lab test (ამოცანა N1)

Nov 3rd, 2020
749
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <random>
  5. #include <ctime>
  6.  
  7. using namespace std;
  8.  
  9. /*
  10.     II - ე გზა random engine-ით
  11. */
  12. int giveMeRandom(){
  13.     // ეს დევაისი დაგჭირდებათ, თუ ერთ და იგივე რიცხვებს გაძლებთ
  14.     random_device dev;
  15.     //აი აქედან იწყება რანდომ რიცხვის შემნდა
  16.     default_random_engine generator(dev());
  17.     // აქ დაწერთ საიდან სადამდე
  18.     uniform_int_distribution<int> range(120000,1000000);
  19.  
  20.     //აქ დააბრუნებთ რანდომ რიცხვს
  21.     return range(generator);
  22. }
  23.  
  24. /* 
  25.     I - ლი გზა rand -ფუნქციის გამოყენებით
  26. */
  27.  
  28. /*
  29.     აქ ხიტრობა არის ის, რომ პრედიკატი ფუნქცია
  30.     არის უბრალოდ bool ტიპის ფუნქცია, მეტი არაფერი  
  31. */
  32. bool myBoolFunc(int num){
  33.     if(num % 3 == 0){
  34.         return true;
  35.     }
  36.     else {
  37.         return false;
  38.     }
  39.     /*
  40.         შემოკლებული ვარიანტი, ე.წ
  41.         terenary ოპერატორით
  42.         return num % 3 == 0 ? true : false;
  43.     */
  44. }
  45.  
  46. int main(){
  47.     /*
  48.         "seed rand" საჭიროა იმისათვის, რომ
  49.         rand ფუნქციამ ერთი და იგივე რიცხვები
  50.         არ დაგვიბეჭდოს!
  51.         time(NULL) - ამის მეშვეობით ვაძლებთ
  52.         ამ ჟამინდელ დროს რომ პროგრამის შემდგომი
  53.         გამოძახებისას სხვადასხვა რიცხვი მივიღოთ
  54.     */
  55.     srand(time(NULL));
  56.  
  57.     // შევქმენით მთელი რიცხვების ვექტორი
  58.     vector<int> vec;
  59.     // რიცხვების რაოდენობა ვექტორში
  60.     const int N = 150;
  61.     int randomNumber;
  62.  
  63.     for (unsigned i = 0; i < N; i++){
  64.         /*
  65.             unsigned - მა არ დაგაბნიოთ,
  66.             ჩათვალეთ ეს არის ნატურალური რიცხვები
  67.             [1, +უსასრულობამდე]
  68.             აქ ვავსებთ ვეტორს
  69.         */
  70.  
  71.         /*
  72.             rand() - ფუნქცია აბრუნებს
  73.             0-დან 1-მდე (1-ის გამოკლებით),
  74.             შესაბამისად ამ რიცხვს რომ გავყოფთ 1000000-ზე
  75.             მივიღებთ [0, 999999] შუალედში რიცხვს,
  76.             მაგრამ რადგანაც მინიმალური გვინდა, რომ იყოს 120000
  77.             ამიტომაც ვუმატებთ მას
  78.         */
  79.         randomNumber = rand() % 1000000 + 120000;
  80.         if(randomNumber > 1000000){
  81.             // იმ შემთხვევაში, თუ უფრო დიდი რიცხვი დაგვიგენერირდა
  82.             randomNumber %= 1000000;
  83.         }
  84.         vec.push_back(randomNumber);
  85.  
  86.         /*
  87.             random engine-თი დაგენერირებული რიცხვი
  88.         */
  89.         //vec.push_back(giveMeRandom());
  90.     }
  91.  
  92.     // count- ში შევინახოთ 3-ის ჯერადი რიცხვები
  93.     int count = count_if(vec.begin(), vec.end(), myBoolFunc);
  94.  
  95.     cout << "ვექტორში 3-ის ჯერადი რიცხვების რაოდენობა: " << count << endl;
  96.  
  97.     /*
  98.         lambda ფუნქციამ არ შეგაშინოთ, მეორე ნაირად, ინლაინ ფუნქციები ჰქვია, ამას იმიტომ ვიყენებთ, რომ ფუნქცია სხვაგან არ გვჭრდება და არ გვინდა, რომ კოდი დავამახინჯოთ,
  99.         სინტაქსი მარტივია
  100.         [ეს აღნიშნავს რომ ლაბდაა] (აქ პარამეტრები){ესეც თქვენი ტანი}
  101.     */
  102.     int countWithLambda = count_if(vec.begin(), vec.end(), [](int num){ return num % 3 == 0 ? true : false;});
  103.  
  104.     cout << "ესეც თქვენი ლამბდა: " << countWithLambda << endl;
  105. }
  106.  
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement