Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Statyski Tekstu

Ostatnio zmodyfikowano 2011-01-20 17:16
Autor Wiadomość
Tymek
Temat założony przez niniejszego użytkownika
Statyski Tekstu
» 2011-01-16 21:48:55
C/C++
#include <iostream>     // podstawowe funkcje we/wy na konsole
#include <fstream>      // funkcje we/wy dla plików
#include <string>       // obsluga typu danych: string(tekstowych)
#include <conio.h>      // wykorzystana funkcja getch() w celu oczekiwania reakcji uzydkownika

using namespace std; // standardowa  przestrzeń nazw

int chars; // iterator znakow
int words; // iterator slow
int sentences; // iterator zdan
int letters; // iterator liter
int numbers; // iterator cyfr
int lines; // iterator linii
int indention; // iterator akapitow

bool goOn = true; // okresla trwanie petli glownej
int option = - 1; // okresla aktualnie wybrana opcje menu
ifstream file; // stworzenie obiektu typu input file stream
string fileName; // przechowuje nazwę pliku

bool isPunctuationMark( char c ) { // funkcja zwraca true albo false jezeli znak jest znakiem interpunkcyjnym
    return( c == '.' || c == '?' || c == '!' ); // jezli c jest rowne . albo , albo ? albo !
}

bool isLetter( char c ) { // funkcja zwraca true albo false jezeli znak jest literą
    return(( c >= 'a' && c <= 'z' ) ||( c >= 'A' && c <= 'Z' ) ||(( unsigned char ) c >= 0xC0 ) ); // jeżeli c jest z przedzialo od a do z albo od A do Z albo więkdze od 0xC0, czyli jest znakiem nietypowym np ą, ć bądź typowymi dla innego języka, znalazlem na googlach
}

void title() { // funkcja wyswietla naglowek aplikacji
    cout << " ##  #       #           #      #    #       #      #        #" << endl;
    cout << "#   ###  ## ### # #  ## ### # # # #         ### ### # #  ## ### # #" << endl;
    cout << " #   #  # #  #  ###  #   #  ### ##   #       #  ##  ##   #   #  # #" << endl;
    cout << "  #  ## ###  ##   # ##   ##   # # #  ##      ## ### # # ##   ## ###" << endl;
    cout << "##              ###         ###            Autor: xxxx" << endl;
    cout << "___________________________________________________________________" << endl;
    cout << endl;
}

void menu() { // funkcja wyswietla menu oraz wczytuje opcje z menu
    cout << "1. Wczytaj plik";
    if( file.is_open() ) cout << "                      Wczytany plik: " << fileName; //jeżeli plik jest otwarty wyswietl nazwe pliku
   
    cout << endl;
    cout << "2. Wyswietl zawartosc pliku" << endl;
    cout << "3. Pokaz statystyki" << endl;
    cout << "4. Koniec" << endl;
    cout << "Wybierz opcje: ";
    cin >> option; //  wczytanie opcji dla menu
}

void openFile() { // funkcje sluzaca do otwarcia pliku
    system( "cls" ); // czyszczenie ekranu         
    title(); // wyswietlenie naglowka
    cout << "Podaj nazwe pliku (0 aby wyjsc): ";
    cin >> fileName; // wczytanie nazwy pliku do wczytania
    if( fileName == "0" ) // jezeli poda się 0 wtedy ustawia opcje na -1 i konczy funckje
         option = - 1;
    else { // jezeli poda sie cos innego niz 0
        if( file.is_open() ) file.close(); // sprawdzamy czy wczesniej zostal otwarty plitk, jezeli tak zamykamy odczyt
       
        file.open( fileName.c_str(), ifstream::in ); // otwarcie pliku
        if( !file.is_open() ) { // jezeli sie nie otworzyl
            system( "cls" ); // czyszczenie ekranu
            title(); // wyswietlenie naslowka
            cout << "Blad otwaria pliku (nacisnij dowolny klawisz aby kontynuowac)"; // wyswietlenie informacji o bledzie
            getch(); // wykorzystanie funkcji getch() jak oczekiwanie na reakcje
        } else { // w innym wypadku plik zostal otwary prawidlowo i wychodzimy do glownego menu ustawiajac opcje na -1
            option = - 1;
        }
    }
}

void display() { // funkcja wyswietlajaca zawartosc pliku
    system( "cls" ); // czyszczenie ekranu
    title(); // wyswietlenie naglowka
    if( file.is_open() ) { // jezeli plik jest otwarty
        while( !file.eof() ) { // dopuki nie napotka konca pliku
            char c = file.get(); // zczytuje znak i przesuwa kursor o jeden do przodu
            if( file.good() ) // jezeli nie wystapil blad, czyli nie nastapilo koniec pliku
                 cout << c; // wypisuje znak
           
        }
        file.clear(); // czysci funkcje eof, tez to wygooglowalem
        file.seekg( 0, ios::beg ); // przesuwa kursor na poczatek
       
        cout << endl << endl << "Nacisnij dowolny klawisz aby kontynuowac";
    } else { // jezeli plik nie jest otwarty wypisuje stosowna informacje
        cout << "Nie wczytano zadnego pliku (nacisnij dowolny klawisz aby kontynuowac)";
    }
    option = - 1; // ustawia opcje na -1
    getch(); // oczekiwanie na reakcje
}

void statistics() { // wyswietla statystyki
    system( "cls" ); // czyszczeni ekranu
    title(); // wyswietlenie naglowka
    if( file.is_open() ) { // jezeli plik jest otwarty
        chars = words = sentences = letters = numbers = lines = indention = 0; // zeruje iteratory
        char prev_c = ' '; // zmienna prev_c wykorzystywana do zapmietywania poprzedniego znaku        while (!file.eof()){
        while( !file.eof() ) { // dopuki niekoniec pliku
            char c = file.get(); // pobranie znaku
            if( file.good() ) { // dopuki plik sie nie skonczy
                if( !isspace( c ) ) // jezeli nie jest znakiem bialym
                     chars++; // wieksz iterator
               
                if( isspace( prev_c ) && !isspace( c ) ) // jezeli poprzedni znak byl znakiem bialym
                     words++; // zwieksz iterator
               
                if( isPunctuationMark( c ) && !isPunctuationMark( prev_c ) ) // jezeli jest znakiem interpuncujnym oraz jezeli poprzedni znak nie jest znakiem interpunkcujnym, np jezeli uzywa sie na koniec znania 3kropek albo cos podobnego                   //
                     sentences++; // zwieksz iterator
               
                if( isLetter( c ) ) letters++; // jezeli jest litera zwieksz iterator
               
                if( isdigit( c ) ) numbers++; // jezeli jest cyfra zwieksz iterator
               
                if( c == '\n' ) lines++; // jezeli nowa liniia zwieksz iterator
               
                if( c == '\t' && prev_c != '\t' ) // jezeli tabulator i poprzedni znak nie tabulator
                     indention++;
               
                prev_c = c; // ustawienie
            }
        }
        file.clear(); // znow ustawienie kursora na poczatek pliku
        file.seekg( 0, ios::beg );
       
        cout << "Statystyki: " << endl; // wyswietlenie statystyk
        cout << "-znaki: " << chars << endl;
        cout << "-wyrazy: " << words << endl;
        cout << "-zdania: " << sentences << endl;
        cout << "-litery: " << letters << endl;
        cout << "-cyfry: " << numbers << endl;
        cout << "-linie: " << lines << endl;
        cout << "-akapity: " << indention << endl;
       
        cout << endl << endl << "Nacisnij dowolny klawisz aby kontynuowac";
    } else { // jezeli plik nie jest otwarty wyswietlenie informacji
        cout << "Nie wczytano zadnego pliku (nacisnij dowolny klawisz aby kontynuowac)";
    }
    option = - 1; // ustawienie opcji an -1
    getch(); // czekanie na reakcje
}

void close() { // funkcja do wychdozenia z programu
    system( "cls" ); // czyszczcenie ekranu
    title(); // wyswietlenie naglowka
    cout << "Czy napewno chcesz wyjsc? (t/n): "; // pytanie o wyjdzie
    char quit; // zmienna przechowujaca opowiedz
    cin >> quit; // pobranie odpowiedzi
    if( quit == 't' || quit == 'T' ) { // jezeli wybrane t lub T
        if( file.is_open() ) file.close(); // jezeli plik wyl otwarty zamykamy go
       
        goOn = false; // ustawiamy ciaglasc glownej petli na false
    } else if( quit == 'n' || quit == 'N' ) { // jezeli wybrane n lub N
        option = - 1; // ustawienie opcji na -1
    } else { // w innym wypadku wyswietlenie informacji o zlym wyborze
        system( "cls" );
        title();
        cout << "Wybrano niewlasciwa opcje (nacisnij dowolny klawisz aby kontynuowac)";
        getch();
    }
}




int main() {
    while( goOn ) { // petla glowna
        if( option == - 1 ) { // jezeli opcja jest na -1 wyswietla menu
            system( "cls" );
            title();
            menu();
        } else { // w innym wypadku
            switch( option ) { // switch zaleznie od zmiennej option wykonuje cos
            case 1: //jezeli opcja = 1 wywolanie funkcji otwarcia pliku
                openFile();
                break;
            case 2: // jezeli 2 wywowanie funckji wyswietlajacej zawartosc pliku
                display();
                break;
            case 3: // jezeli 3 wyswietlenie statystyk
                statistics();
                break;
            case 4: // jezeli 4 wyjscie z progrmau
                close();
                break;
                default: // jezeli wybrane cos innego wyswietlenie stosownej informacji
                system( "cls" );
                title();
                cout << "Wybrano niewlasciwa opcje (nacisnij dowolny klawisz aby kontynuowac)";
                getch();
                break;
            }
        }
    }
    return 0;
}

Projekt wczytuje plik tekstowy i ma za zadanie zliczyć ilość znaków w tekście (oprócz białych) ilość wyrazów zdań liter cyfr wierszy

w tym samym folderze znajdywać  się musi plik tekst.txt

przykładowy tekst
II wojna światowa – największy konflikt zbrojny w historii świata, trwający od 1 września 1939 do 2 września 1945 (w Europie do 8 maja 1945), obejmujący zasięgiem działań wojennych prawie całą Europę, wschodnią i południowo-wschodnią Azję, północną Afrykę, część Bliskiego Wschodu i wszystkie oceany. Niektóre epizody wojny rozgrywały się nawet w Arktyce i Ameryce Północnej. Poza większością państw europejskich i ich koloniami, brały w niej udział


---------------------
co o tym sądzicie , poprawić coś , ulepszyć , upiększyć?:D
mam go jutro oddać bądź za tydzień i sam nie wiem czy jeszcze mu czegoś nie dodać ;d
P-26633
ison
» 2011-01-16 22:06:57
oddajesz sam plik wykonywalny czy kod również? Wypadałoby się zastosować do const-correctness
do krótkich funkcji w Twoim kodzie możesz zastosować inline (chociaż i tak pewnie kompilator sam to zrobi)

masz literówkę w kodzie
strandardowa
P-26635
malan
» 2011-01-16 23:01:57
co o tym sądzicie(...)
WTF?!

(...)poprawić coś
Napisać od nowa :)

(...)ulepszyć(...)
Zapoznać się z funkcjami i zmiennymi lokalnymi! Globale na stos!

upiększyć?:D
Lepiej może nie... :)

mam go jutro oddać bądź za tydzień i sam nie wiem czy jeszcze mu czegoś nie dodać ;d
Za tydzień.
P-26644
dmx81
» 2011-01-19 21:36:17
w funkcji display w komentarzu zmień "dopuki" na dopóki:P znasz c++ a nie znasz polskiego ?? ;)

a poza tym to zalezy co bedzie oceniane?
ma poprostu dzialac? (czyli jak kolega wyzej pisal -  nie oddajesz kodu zrodlowego)
czy ma byc napisane w optymalny sposob (nie liczac optymalizacji jaka zapeni kompilator lecz)
a moze uzyc jakiegos okreslonego mechanizmu/stylu pisania

bo tak to nikt nie wie jak ma odpowiedziec, jeden napisze zeby przepisac i obiektowo napisac, kto inny innych funkcji by uzyl itd - jesli dziala to juz masz plus, jesli przygladales sie uwaznie kilka razy analizujac kod i nie znalazles lepszego wyjscia - to poprostu napisales na takim poziomie, na jakim potrafisz no i to zostanie ocenione, bo chyba o to w tym chodzi :)
a jak pytasz o upiekszanie, to tez nie wiadomo co chcesz zrobic, wiecej podkreslen lub krzaczkowych napisow? a moze biblioteke newcurses i kolorowo w konsoli ;)

to jest twoj kod i niech taki zostanie jesli dziala:) to jest moje zdanie, jesli nie podejmowales sie pisania klas, to pewnie nie za bardzo masz "wpojone" programowanie obiektowe, wiec na za tydzien raczej nie przerobisz kodu, wiec jesli nie bylo to wymogiem, to zostaw :) bo widac ze dajesz rade sobie z funkcjami bibliotecznymi i robieniem swoich .... ale sie rozpisalem
P-26728
Tymek
Temat założony przez niniejszego użytkownika
» 2011-01-20 00:53:11
nie miałem jeszcze programowania obiektowego , a sprawdzenie wygląda tak ze oglądany jest kod , zadawane pytania , czy się kompiluje , czy spełnia wymogi xd
P-26734
jsc
» 2011-01-20 02:12:28
Co do wyglądu kodu to prostu przeładowałeś go komentarzami, zastanów się, które są pomocne, a które nic nie wnoszą do wiedzy o przeciętnej wiedzy o języku C++.
P-26737
dmx81
» 2011-01-20 17:16:40
chociaz z drugiej strony nie wiadomo, jak bedzie na to patrzyl sprawdzajacy - dla niektorych - im wiecej wypisane (o ile z sensem) to lepiej - w sensie, ze wszytsko ma objasnione. oczywiscie na codzien chyba nikt nie opisuje praktycznie kazdej linijki, tylko np do czego bedzie sluzyla funkcja i jakies elementy kodu wymagajace wyjasnienia, bo reszta jak np: static_cast u ciebie byloby opisane - rzutowanie na cos tam - na codzien tego sie nie pisze, bo to oczywiste, z kolei prowadzacy zajecia moze byc z tego zadowolony - bo swiadomie uzywasz rzutowania, a nie bo przepisales to np z przykladu z ksiazki. dlatego trudno wyczuc - sam wiesz najlepiej, na pewno najwiekszym wyznacznikiem bedzie sprawnie dzialajacy kod, po drugie umiejenosc objasnienia kodu, a reszta to juz w tym przypadku chyba sprawy kosmetyczne (tak mi sie wydaje)
P-26749
« 1 »
  Strona 1 z 1