Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Könyvazonosító számok ellenőrzése
- Az ISBN (International Standard Book Number) azonosítók olyan tízjegyű számok, amelyeket könyvek azonosítására használnak. A szám tizedik számjegye lehet X karakterrel leírt 10-es is. A könnyebb olvashatóság végett a szám leírásában kötőjelek és szóközök szerepelhetnek, lényegi jelentőségük nincsen.
- Valójában az első kilenc számjegy azonosítja a könyvet. A tizedik számjegy validálja, hogy az első kilenc számjegy helyes-e. Mivel a checksum algoritmus 11-gyel vett oszthatóságot vizsgál, szükséges lehet a 10-es ellenőrző számjegy, amit X jelöl az ISBN számban.
- Az ISBN számok ellenőrzésére az alábbi checksum algoritmus használható: két részletösszeg számítandó az ISBN számból: s1 és s2. Az s1 az ISBN számjegyeinek részletösszegei, míg s2 az s1 részletösszege. Az ISBN érvényes, ha az utolsó s2 részletösszeg osztható 11-gyel.
- Példa: 0-13-162959-X (Tanenbaum: Computer Networks)
- 0 1 3 1 6 2 9 5 9 10 (Az ISBN számjegyei)
- 0 1 4 5 11 13 22 27 36 46 (s1 részletösszegek)
- 0 1 5 10 21 34 56 83 119 165 (s2 részletösszegek)
- Mivel a 165 osztható 11-gyel, az azonosító érvényes.
- Feladat: a standard inputról beolvasott azonosítókról eldönteni, hogy a fenti algoritmus alapján érvényes azonosító-e. Minden sorban pontosan egy azonosító szerepel. A standard output-on "Valid" jelenti az érvényes azonosítót, "Invalid" jelenti az érvénytelen azonosítót. A standard input-on az eof jelzi, hogy nincs több ellenőrizendő azonosító.
- Példa Input:
- 0-13-162959-X
- 1-234-5678-90
- Példa Output:
- Valid
- Invalid*/
- #include <iostream>
- #include <fstream>
- #include <stdlib.h>
- #include <string>
- #include <vector>
- using namespace std;
- void print_result(bool is_valid)
- {
- if ( is_valid )
- {
- cout << "Valid" << endl;
- }
- else
- {
- cout << "Invalid" << endl;
- }
- }
- bool check_sum(vector<int> vector)
- {
- int s1 = 0;
- int s2 = 0;
- for ( int i=0; i < (int)vector.size(); i++ )
- {
- s1 = s1 + vector[i];
- vector[i] = s1;
- s2 = s2 + vector[i];
- cout << s2 << " ";
- }
- cout << endl;
- if ( (s2 % 11) == 0 )
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- bool ends_with_x(string line)
- {
- bool X = true;
- if ( 'X' == !line[line.size()-1] )
- {
- X = false;
- }
- return X;
- }
- void read_from_file()
- {
- string line;
- int number;
- ifstream file;
- vector<int> vector;
- file.open("data.txt");
- while( getline(file,line) )
- {
- for ( int i=0; i < (int)line.size()-1; i++)
- {
- string temp (line,i,1);
- if (isdigit(temp[0]))
- {
- number = atoi(&temp[0]);
- vector.push_back(number);
- }
- }
- if ( ends_with_x(line) )
- {
- vector.push_back(10);
- }
- bool is_valid = check_sum(vector);
- print_result(is_valid);
- vector.erase(vector.begin(),vector.end());
- }
- file.close();
- }
- int main()
- {
- read_from_file();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment