Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. /**************************
  2.  * Anrijs Gedroics, ag18065
  3.  *Izveidot programmu valodā C++.  Ja programma darbojas ar failu, nedrīkst dublēt visa faila saturu operatīvajā atmiņā.
  4.  *Ar faila komponenti tiek saprasts fiksēta garuma ieraksts. Sīkākās prasības sk. Laboratorijas darbu noteikumos.
  5.  * H7. Uzrakstīt programmu, kas visus standarta C++ rezervētos vārdus ieliek  sakārtotā tabulā. Uzrakstīt funkciju, kas ar binārās meklēšanas
  6.  *palīdzību nosaka, vai dotā simbolu virkne (garums līdz 30) ir C++ rezervētais vārds vai nav. Tabulu realizēt kā tiešās pieejas failu. C++ rezervētie vārdi programmai jānolasa no teksta faila.
  7.  * Programma izveidota: 23/04/2019
  8.  */
  9. #include <iostream>
  10. #include <cstring>
  11. #include <fstream>
  12. #include <list>
  13. #include "lvfriendly.h"
  14.  
  15. using namespace std;
  16.  
  17. bool is_keyw(const string keyw, int Size) {
  18.     int low = 0;
  19.     char word[30];
  20.     string tmp;
  21.  
  22.     ifstream read_bin("keyw.bin", ios::binary);
  23.     int mid;
  24.     while(low < Size) {
  25.         tmp = "";
  26.         mid = (low + Size) / 2;
  27.         read_bin.seekg(mid * 30);
  28.  
  29.         read_bin.read(word, 30);
  30.  
  31.         for(int i=0; i<29; ++i) {
  32.             if(word[i] != '\0')
  33.                 tmp += word[i];
  34.             else
  35.                 break;
  36.         }
  37.  
  38.         if(tmp == keyw.c_str()) {
  39.             return true;
  40.         } else if(tmp < keyw.c_str()) {
  41.             low = mid + 1;
  42.         } else {
  43.             Size = mid;
  44.         }
  45.     }
  46.     read_bin.close();
  47.  
  48.     return false;
  49. }
  50.  
  51. int main() {
  52.     string rinda;
  53.     string d_rinda; // Dotā rinda
  54.     bool ok = false;
  55.     int Size = 0; // Atslēgvārdu daudzums
  56.     list<string> keyw;
  57.  
  58.     ifstream keyw_unsorted("reserved.txt");
  59.     getline(keyw_unsorted, rinda);
  60.     keyw.push_back(rinda);
  61.     while(!keyw_unsorted.eof()) {
  62.         getline(keyw_unsorted, rinda);
  63.         keyw.push_back(rinda);
  64.     }
  65.     keyw_unsorted.close();
  66.  
  67.     keyw.sort();
  68.  
  69.     cout << "Vai vēlaties izprintēt atslēgvārdus?" << endl;
  70.     cin >> ok;
  71.  
  72.     if(ok) {
  73.         for(auto i = keyw.begin(); i!=keyw.end(); ++i) {
  74.             cout << *i << endl;
  75.         }
  76.     }
  77.  
  78.     ofstream bin("keyw.bin", ios::binary);
  79.  
  80.     for(auto i = keyw.begin(); i!=keyw.end(); i++) {
  81.         bin.write((*i).c_str() + '\0', 30);
  82.         ++Size;
  83.     }
  84.  
  85.     bin.close();
  86.  
  87.     cout << "Ievadiet atslēgvārdu, kuru meklēt" << endl;
  88.     cin >> d_rinda;
  89.  
  90.     cout << is_keyw(d_rinda, Size);
  91. }
  92.  
  93. /* Testa plāns
  94.  *Ievads       Izvads
  95.  * if           1
  96.  * and          1
  97.  * g            0
  98.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement