• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lern Words - ocena programu

Object Storage Arubacloud
+2 głosów
215 wizyt
pytanie zadane 7 lutego 2016 w Nasze projekty przez Franek_p Początkujący (430 p.)

Witam wszystkich pasjonatów!

Chcąc przećwiczyć podejście proceduralne (a także pomóc sobie w wkuwaniu słówek wink) napisałem program pomagający uczyć się angielskiego. Projekt nie ma żadnych błędów (tak mi się wydaje). Mam prośbę, by został on oceniony pod względem doboru nazw zmiennych, podziału na funkcję itd... Czyli z aspektu czysto programistycznego laugh. Jeszcze raz powtórzę, jest on napisany tylko na poziomie proceduralnym.

Działanie programu

Przed uruchomieniem należy przygotować listę słówek, które chcemy się nauczyć. W pierwszej linii podajemy słówko angielskie, w drugiej jego polski odpowiednik. W trzeciej znowu angielskie, czwartej jego polski odpowiednik itd...  Plik powinien mieć nazwę "slowka_nauka.txt" i powinien znajdować się w głównym katalogu projektu. Przykład: 

window

okno

house

dom

cat

kot

Po uruchomieniu wystarczy wpisać prawidłowy odpowiednik, a po zakończeniu sesji ukarze nam się podsumowanie.

A oto sam kod

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <time.h>

using namespace std;

//procedury
void introduction();
void openFileStream();
void getWords();
void compareWords();
void isEveryhthingGood();
void summation();

//funkcje
bool checkWordBeingUsed(int inex);

//zmienne
int numberOfAllWords;
int numberOfCompleteWords=0,numberOfWrongWords=0;
int indexOfCompleteWords[100],indexOfWrongWords[100];
int polishWordNumber;

string englishWords[100],polishWords[100];
string userWord;
fstream file;

int main()
{
        introduction();
        openFileStream();
        getWords();
        file.close();
        compareWords();

    return 0;
}

void introduction()
{
    cout<<"Witaj w programie Lern Words 1.0!"<<endl<<"Pamietaj, by wczesniej przygotowac liste slow do nauki."<<endl<<"Gotowy? Zaczynamy :)"<<endl<<endl;
}

void openFileStream()
{

    file.open("slowka_nauka.txt",ios::in);

    if(file.good() == false)
    {
        cout << "Plik nie istnieje!";
        exit(0);
    }
}

void getWords()
{
    string line;
    int actualLine = 1;
    int actualWordNumber = 0;

    while(getline(file,line))
    {
      switch(actualLine)
      {
          case 1: englishWords[actualWordNumber] = line; break;
          case 2: polishWords[actualWordNumber] = line; break;
      }
      if (actualLine > 1) actualWordNumber++;
      if (actualLine > 1) actualLine=1;
      else actualLine ++;

      numberOfAllWords++;
    }

    numberOfAllWords /= 2;
}


void compareWords()
{
    for(int i=1;i<=numberOfAllWords;i++)
    {
        do
        {
            srand (time(NULL));
            polishWordNumber = rand() % numberOfAllWords;
        } while(checkWordBeingUsed(polishWordNumber)==true);


        cout<<"Podaj po angielsku slowo "<<polishWords[polishWordNumber]<<": ";
        cin>>userWord;

        if(userWord == englishWords[polishWordNumber])
        {
            indexOfCompleteWords[numberOfCompleteWords] = polishWordNumber;
            numberOfCompleteWords++;
            cout<<"Dobrze! Podales poprawne slowo."<<endl;
        }
        else
        {
            indexOfWrongWords[numberOfWrongWords] = polishWordNumber;
            numberOfWrongWords++;
            cout<<"Niestety nie. Poprawne slowo to "<<englishWords[polishWordNumber]<<"."<<endl;
        }
    }
    summation();
}

bool checkWordBeingUsed(int index)
{
    int q=1;
    for (int i=1;i<=numberOfCompleteWords;i++)
    {
        if(index == indexOfCompleteWords[i-1])
        {
            q=2;
            return true;
        }
    }

    for (int i=1;i<=numberOfWrongWords;i++)
    {
        if(index == indexOfWrongWords[i-1])
        {
            q=2;
            return true;
        }
    }

    if(q=1) return false;

}

void summation()
{
    cout<<endl<<"Sesja zakonczona. Oto twoje wyniki: "<<endl<<endl;

    if(numberOfCompleteWords>0)
    {
        cout<<"Podales poprawnie: "<<endl;

        for (int i=0;i<numberOfCompleteWords;i++)
        {
            cout<<polishWords[indexOfCompleteWords[i]]<<" - "<<englishWords[indexOfCompleteWords[i]]<<endl;
        }
    }
    else cout<<"Nie podales poprawnie ani jednego slowa :("<<endl;

    cout<<endl;

    if(numberOfWrongWords>0)
    {
        cout<<"Podales niepoprawnie: "<<endl;

        for (int i=0;i<numberOfWrongWords;i++)
        {
            cout<<polishWords[indexOfWrongWords[i]]<<" - "<<englishWords[indexOfWrongWords[i]]<<endl;
        }
    }
    else cout<<"Gratulacje! Wszystkie słowa zostały podane poprawnie :)"<<endl;
}

Będę wdzięczny za wszystkie opinie. Dopiero zaczynam, więc proszę o wytknięcie wszystkiego co jest niepoprawne.

 

Już dziękuję, pozdrawiam.

 

1 odpowiedź

+1 głos
odpowiedź 7 lutego 2016 przez pietrzakacper Mądrala (7,480 p.)

No to tak:

  • Program jest ograniczony do 100 słówek, to nie jest dobre
  • Losowanie bez powtórzeń da się wykonać w dużo wydajniejszy sposób
  • Zmienna q w funkcji bool checkWordBeingUsed() jest bezużyteczna
  • srand (time(NULL));   wpisuje się na początku funkcji main()
  • "Podaj po angielsku słowo window: " jeżeli już to "Podaj po polsku słowo window"

Aby program działał dla nieograniczonej liczby słówek najlepiej by było zastosować std::vector , to samo tyczy się losowania słówek bez powtórzeń.

http://cpp0x.pl/dokumentacja/standard-C++/vector/819

Generalnie fajny pomysł, bo program jest użyteczny :)

komentarz 7 lutego 2016 przez Franek_p Początkujący (430 p.)
Dziękuję z opinię i pomoc!

Podobne pytania

0 głosów
2 odpowiedzi 1,838 wizyt
0 głosów
4 odpowiedzi 315 wizyt
0 głosów
1 odpowiedź 426 wizyt

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...