Program obliczający entropie

0

Cześć, mam na jutro ogarnąć program obliczający entropie i dodatkowo wyświetlać różne statystyki m.in. prawdopodobieństwo wystąpienia liter w zdaniu itp. Mam problem gdyż po zliczeniu ile jest wystąpień danych liter w podanym zdaniu oprócz liter które faktycznie tam się znajdują w wyniku pokazuje mi dodatkowe dwie litery. Z czego może wynikać ten błąd?

Kod:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <conio.h>
#include <iomanip>

using namespace std;

int main() {
	string tekst;
	int licznik[6];
	string nazwaPliku = "text.txt";
	int iloscZnakow;
	
	ifstream plik(nazwaPliku.c_str());
	
	if(plik.is_open()){
		while(plik.good()){
			getline(plik, tekst);
		}
	}
	
	for(int l = 0; l < tekst.length(); l++) {
		if(tekst[l] != ' ') {
			iloscZnakow++;
		}
	}
	
	for(int i = 0; i < tekst.length(); i++) {
		if(tekst[i] != ' ') {
			licznik[tekst[i]]++;
		}
	}
    
    cout << "Analizowany plik: " << nazwaPliku << endl << endl; 
    cout << "Alfabet wiadomosci: ";
    for (int i = 97;i < 123; i ++){
        if (licznik[i] != 0)  {
            cout << char(i) << " ";
        }
    }
    
    cout << endl <<endl;
    cout << "Ilosc wystapien znakow alfabetu w wiadomosci: " << endl;
    
	for (int i = 97;i < 123; i ++){
        if (licznik[i] != 0)  {
            cout << char(i) << " " << "(" << licznik[i] << ")" << "  ";
        }
    }	
    
    cout << endl <<endl;
    cout << "Prawdopodobienstwo wystapienia znaku: " << endl;
    
	for (int i = 97;i < 123; i ++){
        if (licznik[i] != 0)  {
            cout << char(i) << " " << "(" << setprecision(1) << (double)licznik[i]/(double)iloscZnakow << ")" << "  ";
        }
    }
    
    cout << endl <<endl;
    cout << "Liczba znakow wiadomosci (wraz ze spacjami): " << tekst.length() << endl;
    
    cin.ignore();
    getchar();
    getch();
    system("pause");
    
	return 0;
}
1

Tworzysz tablicę licznik składającą się z sześciu elementów o indeksach 0, 1, 2 ... 5, lecz potem próbujesz się odwołać do elementu o indeksie 97:

for (int i = 97;i < 123; i ++){
  if (licznik[i] != 0)  {
0

Uuu ten kawałek wziąłem z jakiejś strony bo nie wiedziałem jak to ogarnąć. Tylko teraz jak to zrobić żeby ładnie wypisać te liczby wraz z liczbą wystąpień?

0

Dobra ogarnąłem, dzięki kolego za pomoc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1