Witam. Oto program, który ma na celu porównać plik tekstowy z 3 innymi i ustalić w jakim języku został on napisany.
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <cmath>
#include <algorithm>
using namespace std;
void PokazTablice(int *tab,int rozmiar=26)
{
for(int i=0;i<rozmiar;i++)
{
cout<<(char)(i+97)<<": "<<tab[i]<<"\t";
}
}
float *ParametryzujPlik(string plikWyjscia, string nazwaPliku , float *parametry , int rozmiar=26)
{
string linijka;
fstream myfile;
fstream yourfile;
int licznik_liter=0;
float przechowalnia=0.0;
myfile.open(nazwaPliku.c_str(), ios_base::in);
for(int i=0;i<rozmiar;i++)
{
parametry[i]=0;
}
if (myfile.good())
{
while ( getline(myfile,linijka) )
{
transform(linijka.begin(), linijka.end(), linijka.begin(), ::tolower);
for(unsigned int i=0;i<linijka.length();i++)
{
parametry[linijka[i]-97]++;
if(linijka[i] > 96 && linijka[i] < 123){
licznik_liter++;
}
}
for(int i=0;i < 26; i++){
przechowalnia = parametry[i];
parametry[i] = przechowalnia/licznik_liter;
cout << setprecision(5) << (char)(i+97) << ": " << parametry[i] <<"\n";
}
}
myfile.close();
}
else cout << "Unable to open file";
yourfile.open(plikWyjscia.c_str(), ios_base::trunc | ios_base::out);
if(!yourfile.good()){
cout << "Cos sie popsulo!!!\n";
}
for(int i=0; i < 26; i++){
yourfile << setprecision(5) << (char)(i+97) << ": " << parametry[i] <<"\n";
}
yourfile.close();
licznik_liter=0;
przechowalnia=0.0;
return parametry;
}
int *LiczbaWystapienLitery(string tekst,int rozmiar=26)
{
int *liczebnosci;
liczebnosci = new int[rozmiar];
for(int i=0;i<rozmiar;i++)
{
liczebnosci[i]=0;
}
for(unsigned int i=0;i<tekst.length();i++)
{
liczebnosci[tekst[i]-97]++;
}
return liczebnosci;
}
double PorownywanieTekstow(float *parametry1, float *parametrySzukane){
double sum = 0;
double wynik=0.0;
for(int i = 0; i < 26; i++){
sum += pow((parametrySzukane[i]-parametry1[i]), 2);
cout << sum << endl;
}
wynik = sqrt(sum);
return wynik;
}
int main()
{
float *parametry1, *parametry2, *parametry3, *parametrySzukane;
double wynik1, wynik2, wynik3;
parametry1 = new float[26];
parametry2 = new float[26];
parametry3 = new float[26];
parametrySzukane = new float[26];
string plik, plik2, plik3;
cin >> plik;
parametry1 = ParametryzujPlik(plik.c_str() + (string)"_wynik.txt", plik.c_str() + (string)".txt", parametry1);
cin >> plik2;
parametry2 = ParametryzujPlik(plik2.c_str() + (string)"_wynik.txt", plik2.c_str() + (string)".txt", parametry2);
cin >> plik3;
parametry3 = ParametryzujPlik(plik3.c_str() + (string)"_wynik.txt", plik3.c_str() + (string)".txt", parametry3);
parametrySzukane = ParametryzujPlik("losowy_wynik.txt", "losowy.txt", parametrySzukane);
wynik1 = PorownywanieTekstow(parametry1, parametrySzukane);
wynik2 = PorownywanieTekstow(parametry2, parametrySzukane);
wynik3 = PorownywanieTekstow(parametry3, parametrySzukane);
if(wynik1 <= wynik2 && wynik1 <= wynik3){
cout << "Jezyk " << plik << endl;
}
else if (wynik2 <= wynik1 && wynik2 <= wynik3){
cout << "Jezyk " << plik2 << endl;
}
else if(wynik3 <= wynik1 && wynik3 <= wynik2){
cout << "Jezyk " << plik3 << endl;
}
else{
cout << "Nie mozna ustalic wyniku!\n";
}
cout << plik << ": " << wynik1 << endl;
cout << plik2 << ": " << wynik2 << endl;
cout << plik3 << ": " << wynik3 << endl;
delete[] parametry1;
delete[] parametry2;
delete[] parametry3;
delete[] parametrySzukane;
return 0;
}
Program dochodzi do samiutkiego końca, jednak po wykonaniu wszysktiego zawiesza się i wyświetlana jest windowsowa informacja "Program przestał działać" oraz zwraca ogromną ujemną liczbę całkowitą zamiast 0.
P.S. int *LiczbaWystapienLitery i void PokazTablice są nieużywane w tym programie. Usunięcie ich nic nie zmienia. Funkcje po prostu zostały z poprzedniego programu (wiem , mój błąd)