From c0a6c7851ff2482aac861c4bcff3c73a72ee7c39 Mon Sep 17 00:00:00 2001 From: ekuryatenko Date: Sat, 29 Aug 2015 15:16:14 +0300 Subject: [PATCH 1/2] First commit --- 1-ConsecutiveHeads/src/ConsecutiveHeads.cpp | 59 ++++- 2-Obenglobish/src/Obenglobish.cpp | 87 ++++++- 3-NumericConversion/src/NumericConversion.cpp | 106 ++++++++- 4-Flesch-Kincaid/src/FleschKincaid.cpp | 218 +++++++++++++++++- 4 files changed, 464 insertions(+), 6 deletions(-) diff --git a/1-ConsecutiveHeads/src/ConsecutiveHeads.cpp b/1-ConsecutiveHeads/src/ConsecutiveHeads.cpp index 4b7f6b3..4d23d8e 100644 --- a/1-ConsecutiveHeads/src/ConsecutiveHeads.cpp +++ b/1-ConsecutiveHeads/src/ConsecutiveHeads.cpp @@ -2,9 +2,66 @@ #include #include "console.h" #include "random.h" +#include using namespace std; +/* Sets console output */ +void consoleSettings(); +/* Lunch proces program */ +void consequtiveHeads(); +/* Main process loop */ +void dropCoin(int heads, int flips); +/* Sets chances parametr */ +const double chance = 0.5; +/* Program window title */ +const string programTitle = "Consequtive heads"; +/* Disable console dupplication */ +const bool consoleEcho = false; + int main() { - // TODO: fill in the code + /*Adjust console window features*/ + consoleSettings(); + /* Programms starts and coins game begins + * "heads" getting is monitored, and at 3-d consequtive head programm drops + * message and stops */ + consequtiveHeads(); + return 0; } +/* Lunch game and main counters */ +void consequtiveHeads(){ + int flipsCnt = 0; + int headsCnt = 0; + /* Coin is droped until game isn't finished */ + dropCoin(headsCnt, flipsCnt); +} + +/* Recursion loop + * After 3 consequtive heads print end message */ +void dropCoin (int heads, int flips){ + bool head = false; + + if(heads > 2){ + /* End game message */ + cout << "It took " << flips << " flips to get 3 consecutive heads."; + }else{ + /* Coin random result */ + head = randomChance(chance); + flips++; + + if(head){ + cout << "heads" << endl; + heads++; + }else{ + cout << "tails" << endl; + heads = 0; + } + /* Recursion loop */ + dropCoin(heads, flips); + } +} + +void consoleSettings(){ + setConsoleWindowTitle(programTitle); + setConsoleEcho(consoleEcho); +} diff --git a/2-Obenglobish/src/Obenglobish.cpp b/2-Obenglobish/src/Obenglobish.cpp index f9e31cb..438d40d 100644 --- a/2-Obenglobish/src/Obenglobish.cpp +++ b/2-Obenglobish/src/Obenglobish.cpp @@ -5,7 +5,92 @@ #include "strlib.h" using namespace std; +/* Return obenglobish word */ +string obenglobish(string word); +/* Main obenglobish process */ +string wordProcess(int index, string word, string result, int vowelsSum); +/* Check if this char is vowel */ +bool isVowel (char letter); +/* Sets console output */ +void consoleSettings(); +/* Program window title */ +const string programTitle = "Obenglobish"; +/* Disable console dupplication */ +const bool consoleEcho = false; + int main() { - // TODO: fill in the code + consoleSettings(); + + /* Program asks user to enter words infinitely */ + while(true){ + string word = getLine("Enter a word: "); + /* Empty string input isn't processing */ + if(word == ""){ + break; + } + /* Obenglobish translation */ + string translation = obenglobish(word); + cout << word << " -> " << translation << endl; + } + return 0; } + +/*Obenglobish translator: + *syllable 'ob' add before all vowels - a,e,i,o,u,y - only if not: + * - before this vowel is another vowel + * - this vowel is e at end of word */ +string obenglobish(string word){ + string result = ""; + int startAnalizeIndex = 0; + int vowelsSum = 0; + result = wordProcess(startAnalizeIndex, word, result, vowelsSum); + + return result; +} + +/* Recursive loop word process */ +string wordProcess(int index, string word, string result, int vowelsSum){ + bool lastLetterIndex = (index == (word.length() - 1)); + bool noVowelBefore = !isVowel(word[index-1]); + bool endECase = ((word[index] == 'e') && (lastLetterIndex)); + + if(index > (word.length() - 1)){ + /* If function analized all letters it returns result */ + return result; + }else{ + if(isVowel(word[index])){ + /* If current char is vowel */ + if(noVowelBefore){ + /* And no vowels before */ + if(!endECase){ + /* And this isn't "e" at the end */ + result += "OB"; + vowelsSum++; + }else{ + /* End "e" case - for "be" word example */ + if(vowelsSum == 0){ + result += "OB"; + } + } + } + } + result += word[index]; + index++; + /* Recursive loop */ + return wordProcess(index, word, result, vowelsSum); + } +} + +/* Checks if current char is vowel */ +bool isVowel (char letter){ + letter = tolower(letter); + string alphabetVowels = "aeiouy"; + bool isVowel = (alphabetVowels.find(letter) != std::string::npos); + return isVowel; +} + +void consoleSettings(){ + setConsoleWindowTitle(programTitle); + setConsoleEcho(consoleEcho); +} diff --git a/3-NumericConversion/src/NumericConversion.cpp b/3-NumericConversion/src/NumericConversion.cpp index d66d654..17671d8 100644 --- a/3-NumericConversion/src/NumericConversion.cpp +++ b/3-NumericConversion/src/NumericConversion.cpp @@ -1,14 +1,114 @@ #include #include #include "console.h" + using namespace std; -// Function prototypes +/* Task functions prototypes + * */ string intToString(int n); int stringToInt(string str); - +// Service functions prototypes +string recursiveIntToString(int n, string result); +int recursiveStrToInt(int index, string str, int result); +int rise10ToPower(int power); +// Console settings +void consoleSettings(); +const double chance = 0.5; +const string programTitle = "NumericConversion"; +const bool consoleEcho = false; int main() { - // TODO: fill in the code + consoleSettings(); + + cout << "Process STRING TO INT" << endl; + cout << stringToInt("2505") << endl; + cout << stringToInt("2") << endl; + cout << stringToInt("-252") << endl; + cout << stringToInt("0") << endl; + + cout << endl; + + cout << "Process INT TO STRING" << endl; + cout << intToString(-3956) << endl; + cout << intToString(-0) << endl; + cout << intToString(826) << endl; + return 0; } + +/* Converts integer to string */ +string intToString(int n){ + string result = ""; + if(n < 0){ + /* Solve negative values */ + return string("-") + recursiveIntToString(-1 * n, result); + }else{ + /* Main recursive loop */ + return recursiveIntToString(n, result); + } +} + +/* Recursive loop process */ +string recursiveIntToString(int intValue, string result){ + /* Divide input value in two parts - n/10 and n%10 */ + int nextValue = intValue/10; + if(nextValue == 0){ + /* Returns string value of integer */ + return ((char)(intValue + '0') + result); + }else{ + /* finds remain of n%10 process and concantenate it to result */ + int remain = intValue % 10; + char remainChar = (char)(remain + '0'); + result = remainChar + result; + return recursiveIntToString(nextValue, result); + } +} + +/* Converts string to integer + * Only if str is not object of integer (no comas or wrong input chars) */ +int stringToInt(string str){ + int startIndex = (str.length() - 1); + int result = 0; + /* Main conversion loop */ + return recursiveStrToInt(startIndex, str, result); +} + +/* Main conversion process */ +int recursiveStrToInt(int index, string str, int result){ + if(index < 0){ + /* If function processed all chars in str */ + return result; + } + else{ + /* If str stores negative value */ + if((index == 0) && (str[index] == '-')){ + return -1* result; + }else{ + /* Converts each char into integer */ + int digit = str[index] - '0'; + /* Defines decamical capacity of such integer value */ + int power = (str.length() - 1) - index; + /* Sums result with current integer decamical value */ + result += digit * rise10ToPower(power); + /* Prepares to get next char in string */ + index--; + /* Recursive loop */ + return recursiveStrToInt(index, str, result); + } + } +} + +/* Rise 10 to power */ +int rise10ToPower(int power){ + if(power <= 0){ + return 1; + }else{ + return 10 * rise10ToPower(power - 1); + } +} + +void consoleSettings(){ + setConsoleWindowTitle(programTitle); + setConsoleEcho(consoleEcho); +} diff --git a/4-Flesch-Kincaid/src/FleschKincaid.cpp b/4-Flesch-Kincaid/src/FleschKincaid.cpp index 0b16ad2..af63831 100644 --- a/4-Flesch-Kincaid/src/FleschKincaid.cpp +++ b/4-Flesch-Kincaid/src/FleschKincaid.cpp @@ -1,8 +1,224 @@ #include +#include +#include "simpio.h" +#include "filelib.h" #include "console.h" +#include "tokenscanner.h" + + using namespace std; +//Functions prototypes +string fileInput(string line); +void readFileProcess(istream & infile); +void scanCPlusPlusTokens(TokenScanner & scanner); +bool isEndSentenceCharacter(string word); +void simpleTokenProcess(string word, int & syllablesCounter, + int & wordsCounter, + int & sentencesCounter); +int syllablesCountProcess(int index, string word, int result); +bool isVowel (char letter); +//FleschKincaid equation constatnts +const double C0 = -15.59; +const double C1 = 0.39; +const double C2 = 11.8; +// Console settings +void consoleSettings(); +const double chance = 0.5; +const string programTitle = "FleschKincaid"; +const bool consoleEcho = false; + int main() { - // TODO: fill in the code + /* Adjust concole settings for programm */ + consoleSettings(); + /* User enters name of file */ + //string fileName = fileInput("Enter file name: "); + string fileName = "US-Constitution.txt"; + /* Prepare main input stream object */ + ifstream infile; + /* Lunch stream of file reading */ + infile.open(fileName.c_str()); + /* Main program process */ + readFileProcess(infile); + /* If whole file is read program closes stream */ + infile.close(); + return 0; } + +void readFileProcess(istream & infile){ + if (infile.fail()){ + cout << "FAIL" << endl; + }else{ + TokenScanner scanner; + scanner.setInput(infile); + scanCPlusPlusTokens(scanner); + + int syllablesCnt = 0; + int wordsCnt = 0; + int sentencesCnt = 0; + + while (scanner.hasMoreTokens()) { + string token = scanner.nextToken(); + simpleTokenProcess(token, syllablesCnt, wordsCnt, sentencesCnt); + } + + if(infile.fail()){ + if(infile.eof()){ + /* Case of empty file */ + if(sentencesCnt == 0){ + sentencesCnt++; + } + if(wordsCnt == 0){ + wordsCnt++; + } + cout << "END OF FILE" << endl; + } + } + cout << "====================================" << endl; + cout << "TOTAL SYLLABLES " << syllablesCnt << endl; + cout << "TOTAL WORDS " << wordsCnt << endl; + cout << "TOTAL SENTENCES " << sentencesCnt << endl; + + double result = 0; + result += C0; + cout << result << endl; + result += (C1*(wordsCnt/sentencesCnt)); + cout << (C1*(wordsCnt/sentencesCnt)) << endl; + result += (C2*(syllablesCnt/wordsCnt)); + cout << (C2*(syllablesCnt/wordsCnt)) << endl; + cout << "RESULT = " << result; + + } +} + +/* Shows this word syllables + * @word is recognized as valid word yet */ +int syllablesCountProcess(int index, string word, int result){ + bool lastLetterIndex = (index == (word.length() - 1)); + bool noVowelsBefore = !isVowel(word[index-1]); + bool endECase = ((word[index] == 'e') && (lastLetterIndex)); + + if(index > (word.length() - 1)){ + return result; + }else{ + if(isVowel(word[index])){ + if(noVowelsBefore){ + if(!endECase){ + result++; + }else{ + /* For cases like "me", "be" words - approve 1 syllable */ + if(result == 0){ + result++; + } + } + } + }else{ + /* For cases like "txt", "str" words - approve 1 syllable */ + if(lastLetterIndex && (result == 0)){ + result++; + } + } + /* Turn function to next letter to analize */ + index++; + /* Recursive loop of function */ + return syllablesCountProcess(index, word, result); + } +} + +/* Defines if current char is vowel */ +bool isVowel (char letter){ + letter = tolower(letter); + string alphabetVowels = "aeiouy"; + bool isVowel = (alphabetVowels.find(letter) != std::string::npos); + return isVowel; +} + +/* Sort tokens and count program parameters - + * syllables, words, sentences. + * Supose that every token which starts from letter is word + * Supose that every symbol like "." "!" or "?" is end of sentencse marker */ +void simpleTokenProcess(string token, int & syllablesCounter, + int & wordsCounter, + int & sentencesCounter){ + /* Tokens sorting */ + if(isalpha(token[0])){ + /* Words detection */ + int syllables = syllablesCountProcess(0, token, 0); + syllablesCounter += syllables; + wordsCounter++; + //cout << wordsCounter << " " << token << " = " << syllables << endl; + } + else if ((token.length() > 1) && (token[0] == '\'') && (isalpha(token[1]))){ + //cout << token << endl; + int syllables = syllablesCountProcess(1, token, 0); + syllablesCounter += syllables; + wordsCounter++; + } + else if ((token.length() > 2) && (token[0] == '-') && (isalpha(token[2]))){ + //cout << token << endl; + int syllables = syllablesCountProcess(1, token, 0); + syllablesCounter += syllables; + wordsCounter++; + } + else if (isEndSentenceCharacter(token)){ + /* Sentences detection */ + sentencesCounter++; + //cout << token << " ---------- end symbol " << sentencesCounter << endl; + }else{ + if(!(ispunct(token[0]))){ + cout << token << " --------------------------- SOMETHING " << endl; + } + } +} + +/* Recognize if this token is end of sentence symbol */ +bool isEndSentenceCharacter(string token){ + if(token == "..."){ + return true; + }else if(token == "."){ + return true; + }else if(token == "!"){ + return true; + }else if(token == "?"){ + return true; + }else{ + return false; + } +} + +/* Sets token scanner features */ +void scanCPlusPlusTokens(TokenScanner & scanner) { + scanner.ignoreWhitespace(); + /* To recognize words like "isn't" */ + scanner.addWordCharacters("'"); + /* To recognize words like "two-way" */ + scanner.addWordCharacters("-"); + /* To recognize symbol "..." like end of sentence */ + scanner.addOperator("..."); + + /* Don't return strings with quotations */ + //scanner.scanStrings(); + /* Don't return numbers */ + //scanner.scanNumbers(); +} + +/* User input function + * Defines if this file exist in project directory */ +string fileInput(string enterText){ + while(true){ + string result = getLine(enterText); + if(fileExists(result)){ + return result; + break; + }else{ + cout << "Unfortunately your input is failed" << endl; + } + } +} + +/* Make console output window more convenient */ +void consoleSettings(){ + setConsoleWindowTitle(programTitle); + setConsoleEcho(consoleEcho); +} From 4f9afcdbd3dd142ea12172e2e6b00ed326a1f49c Mon Sep 17 00:00:00 2001 From: ekuryatenko Date: Sun, 30 Aug 2015 12:10:46 +0300 Subject: [PATCH 2/2] Changed Flesh-Kincaid input and output --- 1-ConsecutiveHeads/ConsecutiveHeads.pro | 2 +- .../ConsecutiveHeads.pro.user.54c8766 | 257 ++++++++++++++++++ 2-Obenglobish/Obenglobish.pro | 2 +- 2-Obenglobish/Obenglobish.pro.user.54c8766 | 257 ++++++++++++++++++ 3-NumericConversion/NumericConversion.pro | 2 +- 4-Flesch-Kincaid/FleschKincaid.pro | 2 +- .../FleschKincaid.pro.user.7e1b340 | 257 ++++++++++++++++++ 4-Flesch-Kincaid/res/Test file.txt | 1 + 4-Flesch-Kincaid/res/Test0.txt | 1 + 4-Flesch-Kincaid/res/TestFile.txt | 8 + 4-Flesch-Kincaid/src/FleschKincaid.cpp | 90 +++--- 11 files changed, 840 insertions(+), 39 deletions(-) create mode 100644 1-ConsecutiveHeads/ConsecutiveHeads.pro.user.54c8766 create mode 100644 2-Obenglobish/Obenglobish.pro.user.54c8766 create mode 100644 4-Flesch-Kincaid/FleschKincaid.pro.user.7e1b340 create mode 100644 4-Flesch-Kincaid/res/Test file.txt create mode 100644 4-Flesch-Kincaid/res/Test0.txt create mode 100644 4-Flesch-Kincaid/res/TestFile.txt diff --git a/1-ConsecutiveHeads/ConsecutiveHeads.pro b/1-ConsecutiveHeads/ConsecutiveHeads.pro index 85bdbce..35adfaf 100644 --- a/1-ConsecutiveHeads/ConsecutiveHeads.pro +++ b/1-ConsecutiveHeads/ConsecutiveHeads.pro @@ -110,7 +110,7 @@ win32 { QMAKE_LFLAGS += -Wl,--stack,536870912 LIBS += -lDbghelp LIBS += -lbfd - LIBS += -liberty + #LIBS += -liberty LIBS += -limagehlp } macx { diff --git a/1-ConsecutiveHeads/ConsecutiveHeads.pro.user.54c8766 b/1-ConsecutiveHeads/ConsecutiveHeads.pro.user.54c8766 new file mode 100644 index 0000000..dfab652 --- /dev/null +++ b/1-ConsecutiveHeads/ConsecutiveHeads.pro.user.54c8766 @@ -0,0 +1,257 @@ + + + + + + EnvironmentId + {54c87661-e3ed-4006-ade7-6bdf739d1ebd} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.4.1 MinGW 32bit + Desktop Qt 5.4.1 MinGW 32bit + qt.54.win32_mingw491_kit + 0 + 0 + 0 + + C:/Users/user/QT PROJECTS/cs-b-assignment1-master/cs-b-assignment1-master/build-ConsecutiveHeads-Desktop_Qt_5_4_1_MinGW_32bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + + + true + Сборка + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Сборка + + ProjectExplorer.BuildSteps.Build + + + + true + Сборка + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Очистка + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Отладка + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/Users/user/QT PROJECTS/cs-b-assignment1-master/cs-b-assignment1-master/build-ConsecutiveHeads-Desktop_Qt_5_4_1_MinGW_32bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + + + true + Сборка + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Сборка + + ProjectExplorer.BuildSteps.Build + + + + true + Сборка + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Очистка + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + Установка + + ProjectExplorer.BuildSteps.Deploy + + 1 + Локальная установка + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + ConsecutiveHeads + ConsecutiveHeads2 + Qt4ProjectManager.Qt4RunConfiguration:C:/QT PROJECTS/cs-b-assignment1-master/cs-b-assignment1-master/1-ConsecutiveHeads/ConsecutiveHeads.pro + + ConsecutiveHeads.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/2-Obenglobish/Obenglobish.pro b/2-Obenglobish/Obenglobish.pro index 85bdbce..35adfaf 100644 --- a/2-Obenglobish/Obenglobish.pro +++ b/2-Obenglobish/Obenglobish.pro @@ -110,7 +110,7 @@ win32 { QMAKE_LFLAGS += -Wl,--stack,536870912 LIBS += -lDbghelp LIBS += -lbfd - LIBS += -liberty + #LIBS += -liberty LIBS += -limagehlp } macx { diff --git a/2-Obenglobish/Obenglobish.pro.user.54c8766 b/2-Obenglobish/Obenglobish.pro.user.54c8766 new file mode 100644 index 0000000..0907c01 --- /dev/null +++ b/2-Obenglobish/Obenglobish.pro.user.54c8766 @@ -0,0 +1,257 @@ + + + + + + EnvironmentId + {54c87661-e3ed-4006-ade7-6bdf739d1ebd} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.4.1 MinGW 32bit + Desktop Qt 5.4.1 MinGW 32bit + qt.54.win32_mingw491_kit + 0 + 0 + 0 + + C:/QT PROJECTS/cs-b-assignment1-master/cs-b-assignment1-master/build-Obenglobish-Desktop_Qt_5_4_1_MinGW_32bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + + + true + Сборка + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Сборка + + ProjectExplorer.BuildSteps.Build + + + + true + Сборка + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Очистка + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Отладка + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/QT PROJECTS/cs-b-assignment1-master/cs-b-assignment1-master/build-Obenglobish-Desktop_Qt_5_4_1_MinGW_32bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + + + true + Сборка + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Сборка + + ProjectExplorer.BuildSteps.Build + + + + true + Сборка + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Очистка + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + Установка + + ProjectExplorer.BuildSteps.Deploy + + 1 + Локальная установка + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Obenglobish + + Qt4ProjectManager.Qt4RunConfiguration:C:/QT PROJECTS/cs-b-assignment1-master/cs-b-assignment1-master/2-Obenglobish/Obenglobish.pro + + Obenglobish.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/3-NumericConversion/NumericConversion.pro b/3-NumericConversion/NumericConversion.pro index 85bdbce..35adfaf 100644 --- a/3-NumericConversion/NumericConversion.pro +++ b/3-NumericConversion/NumericConversion.pro @@ -110,7 +110,7 @@ win32 { QMAKE_LFLAGS += -Wl,--stack,536870912 LIBS += -lDbghelp LIBS += -lbfd - LIBS += -liberty + #LIBS += -liberty LIBS += -limagehlp } macx { diff --git a/4-Flesch-Kincaid/FleschKincaid.pro b/4-Flesch-Kincaid/FleschKincaid.pro index 85bdbce..35adfaf 100644 --- a/4-Flesch-Kincaid/FleschKincaid.pro +++ b/4-Flesch-Kincaid/FleschKincaid.pro @@ -110,7 +110,7 @@ win32 { QMAKE_LFLAGS += -Wl,--stack,536870912 LIBS += -lDbghelp LIBS += -lbfd - LIBS += -liberty + #LIBS += -liberty LIBS += -limagehlp } macx { diff --git a/4-Flesch-Kincaid/FleschKincaid.pro.user.7e1b340 b/4-Flesch-Kincaid/FleschKincaid.pro.user.7e1b340 new file mode 100644 index 0000000..9277c84 --- /dev/null +++ b/4-Flesch-Kincaid/FleschKincaid.pro.user.7e1b340 @@ -0,0 +1,257 @@ + + + + + + EnvironmentId + {7e1b340a-b4f8-4d4b-9a18-be64bacf8d5c} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.4.1 MinGW 32bit + Desktop Qt 5.4.1 MinGW 32bit + qt.54.win32_mingw491_kit + 0 + 0 + 0 + + C:/QT PROJECTS/cs-b-assignment1-master/build-FleschKincaid-Desktop_Qt_5_4_1_MinGW_32bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + + + true + Сборка + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Сборка + + ProjectExplorer.BuildSteps.Build + + + + true + Сборка + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Очистка + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Отладка + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + C:/QT PROJECTS/cs-b-assignment1-master/build-FleschKincaid-Desktop_Qt_5_4_1_MinGW_32bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + true + + false + false + + + true + Сборка + + Qt4ProjectManager.MakeStep + + false + + + + 2 + Сборка + + ProjectExplorer.BuildSteps.Build + + + + true + Сборка + + Qt4ProjectManager.MakeStep + + true + clean + + + 1 + Очистка + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Выпуск + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 2 + + + 0 + Установка + + ProjectExplorer.BuildSteps.Deploy + + 1 + Локальная установка + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + FleschKincaid + + Qt4ProjectManager.Qt4RunConfiguration:C:/QT PROJECTS/cs-b-assignment1-master/4-Flesch-Kincaid/FleschKincaid.pro + + FleschKincaid.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/4-Flesch-Kincaid/res/Test file.txt b/4-Flesch-Kincaid/res/Test file.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/4-Flesch-Kincaid/res/Test file.txt @@ -0,0 +1 @@ + diff --git a/4-Flesch-Kincaid/res/Test0.txt b/4-Flesch-Kincaid/res/Test0.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/4-Flesch-Kincaid/res/Test0.txt @@ -0,0 +1 @@ + diff --git a/4-Flesch-Kincaid/res/TestFile.txt b/4-Flesch-Kincaid/res/TestFile.txt new file mode 100644 index 0000000..c2d8ff0 --- /dev/null +++ b/4-Flesch-Kincaid/res/TestFile.txt @@ -0,0 +1,8 @@ +CHAPTER I + +In the low-ceili'nged cant'een, deep.... F-1 "Best" underground, the 1984 350 +lunch queue jerked slowly forward. The + +There was no possibility of taking a walk that day. We had been +wandering, indeed, in the leafless shrubbery an hour in the morning; but +since d diff --git a/4-Flesch-Kincaid/src/FleschKincaid.cpp b/4-Flesch-Kincaid/src/FleschKincaid.cpp index af63831..b5fd03b 100644 --- a/4-Flesch-Kincaid/src/FleschKincaid.cpp +++ b/4-Flesch-Kincaid/src/FleschKincaid.cpp @@ -8,21 +8,22 @@ using namespace std; -//Functions prototypes +/* Functions prototypes */ string fileInput(string line); -void readFileProcess(istream & infile); +void readFileProcess(istream & infile, string fileName); void scanCPlusPlusTokens(TokenScanner & scanner); bool isEndSentenceCharacter(string word); void simpleTokenProcess(string word, int & syllablesCounter, - int & wordsCounter, - int & sentencesCounter); + int & wordsCounter, + int & sentencesCounter); int syllablesCountProcess(int index, string word, int result); bool isVowel (char letter); -//FleschKincaid equation constatnts +const bool showDebug = false; +/* FleschKincaid equation constatnts */ const double C0 = -15.59; const double C1 = 0.39; const double C2 = 11.8; -// Console settings +/* Console settings */ void consoleSettings(); const double chance = 0.5; const string programTitle = "FleschKincaid"; @@ -31,64 +32,68 @@ const bool consoleEcho = false; int main() { /* Adjust concole settings for programm */ consoleSettings(); - /* User enters name of file */ - //string fileName = fileInput("Enter file name: "); - string fileName = "US-Constitution.txt"; + /* User enters name of file from project directory */ + string fileName = fileInput("Enter file name: "); + /* Prepare main input stream object */ ifstream infile; /* Lunch stream of file reading */ infile.open(fileName.c_str()); /* Main program process */ - readFileProcess(infile); + readFileProcess(infile, fileName); /* If whole file is read program closes stream */ infile.close(); return 0; } -void readFileProcess(istream & infile){ +/* Makes file reading and shows results of process */ +void readFileProcess(istream & infile, string fileName){ if (infile.fail()){ + /* Informs about problems at start of file reading */ cout << "FAIL" << endl; }else{ + /* Main process + * Scans input stream by TokenScanner object */ TokenScanner scanner; scanner.setInput(infile); + /* Settings of scanner */ scanCPlusPlusTokens(scanner); - + /* Main results counters */ int syllablesCnt = 0; int wordsCnt = 0; int sentencesCnt = 0; - + /* Main process loop */ while (scanner.hasMoreTokens()) { + /* Take next token from scanner */ string token = scanner.nextToken(); + /* Main sorting and counters incrementing */ simpleTokenProcess(token, syllablesCnt, wordsCnt, sentencesCnt); } - + /* End of file detection */ if(infile.fail()){ if(infile.eof()){ - /* Case of empty file */ + /* Case of empty file have return some results */ if(sentencesCnt == 0){ sentencesCnt++; } if(wordsCnt == 0){ wordsCnt++; } - cout << "END OF FILE" << endl; } } - cout << "====================================" << endl; - cout << "TOTAL SYLLABLES " << syllablesCnt << endl; - cout << "TOTAL WORDS " << wordsCnt << endl; - cout << "TOTAL SENTENCES " << sentencesCnt << endl; - + /* Process results printing to user */ + cout << "IN FILE: " << fileName << endl; + cout << "WORDS = " << wordsCnt << endl; + cout << "SYLLABLES = " << syllablesCnt << endl; + cout << "SENTENCES = " << sentencesCnt << endl; + /* Result equation */ double result = 0; result += C0; - cout << result << endl; - result += (C1*(wordsCnt/sentencesCnt)); - cout << (C1*(wordsCnt/sentencesCnt)) << endl; - result += (C2*(syllablesCnt/wordsCnt)); - cout << (C2*(syllablesCnt/wordsCnt)) << endl; - cout << "RESULT = " << result; - + result += (C1* wordsCnt/ sentencesCnt); + result += (C2* syllablesCnt / wordsCnt); + /* Result printing */ + cout << "GRADE LEVEL = " << result; } } @@ -147,16 +152,24 @@ void simpleTokenProcess(string token, int & syllablesCounter, int syllables = syllablesCountProcess(0, token, 0); syllablesCounter += syllables; wordsCounter++; - //cout << wordsCounter << " " << token << " = " << syllables << endl; + if(showDebug){ + cout << wordsCounter << " " << token << " = " << syllables << endl; + } } else if ((token.length() > 1) && (token[0] == '\'') && (isalpha(token[1]))){ - //cout << token << endl; + /* Case of quotes "'word" tokens counts as word */ + if(showDebug){ + cout << token << endl; + } int syllables = syllablesCountProcess(1, token, 0); syllablesCounter += syllables; wordsCounter++; } else if ((token.length() > 2) && (token[0] == '-') && (isalpha(token[2]))){ - //cout << token << endl; + /* Case of "--ab" tokens counts as word */ + if(showDebug){ + cout << token << endl; + } int syllables = syllablesCountProcess(1, token, 0); syllablesCounter += syllables; wordsCounter++; @@ -164,10 +177,17 @@ void simpleTokenProcess(string token, int & syllablesCounter, else if (isEndSentenceCharacter(token)){ /* Sentences detection */ sentencesCounter++; - //cout << token << " ---------- end symbol " << sentencesCounter << endl; + if(showDebug){ + cout << token << " ---------- end symbol " << sentencesCounter << endl; + } }else{ if(!(ispunct(token[0]))){ - cout << token << " --------------------------- SOMETHING " << endl; + if(showDebug){ + cout << token << " --------------------------- SOMETHING " << endl; + } + if(isdigit(token[0])){ + wordsCounter++; + } } } } @@ -192,8 +212,8 @@ void scanCPlusPlusTokens(TokenScanner & scanner) { scanner.ignoreWhitespace(); /* To recognize words like "isn't" */ scanner.addWordCharacters("'"); - /* To recognize words like "two-way" */ - scanner.addWordCharacters("-"); + /* Don't recognize words like "two-way" */ + //scanner.addWordCharacters("-"); /* To recognize symbol "..." like end of sentence */ scanner.addOperator("...");