Škôlka jazyka C

Fórum o programovaní v jazyku C založené 3. januára 2012

Aktuálny čas je 20 Apr 2024, 13:52

Všetky časy sú v GMT + 1 hodina




Vytvoriť novú tému Odpovedať na tému  [ Príspevok: 1 ] 
Autor Správa
PoslaťNapísal: 14 Mar 2015, 11:34 
Offline
Stredoškolák
Stredoškolák
Obrázok užívateľa

Registrovaný: 06 Jan 2012, 19:26
Príspevky: 458
Bydlisko: pod Pátrovom
Udelené body: 228 bodov
Získané body: 21 bodov
Program je rozdelený do tried kalkulacka, menu, parsing, vypocet, opakovat.
Dám sem samotné súbory:
menu.h
Kód:
#ifndef _MENU_H
#define   _MENU_H

#include <iostream>
#include <cstdarg>
#include <cstdlib>

using namespace std;

/* Vytvorí menu */
class menu {
public:
     /** Vytvorí menu na základe počtu položiek menu a samotných položek
      *  @param počet položiek, položky typu string
      *  @return void
      */
    void mojeMenu(const int pocetArgumentov, ...);
     /** Vyberie číslo položky a vráti ho
      *  @param počet položiek
      *  @return číslo položky
      */
    int vyberZMenu(const int pocetPoloziek);
    menu();
    ~menu();
private:
};

#endif   /* _MENU_H */

menu.cpp
Kód:
#include "menu.h"

menu::menu() {}
menu::~menu() {}
void menu::mojeMenu(const int pocetArgumentov, ...)
{
    int i = -1;
    char *polozka;
    va_list argumenty;

    polozka = (char *) malloc(50);
    va_start(argumenty, pocetArgumentov);
    while((++i) ^ pocetArgumentov) {
        polozka = va_arg(argumenty, char*);
        cout << i + 1 << ". " << polozka << endl;
    }
    va_end(argumenty);
}

int menu::vyberZMenu(const int pocetPoloziek)
{
    int volba;
    bool spravne = true;

    while (spravne) {
        cout << endl << "Vaša vožba: ";
        cin >> volba;
        spravne = (volba > 0 && volba <= pocetPoloziek) ? false : true;
        if (spravne)
            cout << "Výber mimo rozsah!" << endl;
    }
    return volba;
}

parsing.h
Kód:
#ifndef PARSING_H
#define PARSING_H

#include <iostream>
#include <sstream>
#include <cassert>
//#define TESTY // pri zakomentovaní budú testy odstavené

using namespace std;

class prevody
{
    public:
    /** Zmení zadaný string na float a vráti ho
     * @param číslo zadané ako string
     * @return float
     */
    float stringToFloat(string cislo);
        prevody();
        ~prevody();
    protected:
    private:
};

#endif // PARSING_H

parsing.cpp
Kód:
#include "parsing.h"

prevody::prevody() {}
prevody::~prevody() {}

float prevody::stringToFloat(string cislo)
{
    float a;
    stringstream *stream = 0;
    char c;
    do {
        delete stream;
        stream = new stringstream(cislo);
        *stream >> a;
    } while(stream->fail() || stream->get(c));
    delete stream;
    return a;
}

#ifdef TESTY
#define TESTY
int main(void)
{
    prevody _prevody;
    string cislo = "1235456";
    //cislo = "123";
    assert(_prevody.stringToFloat("123654.1526"));
    assert(_prevody.stringToFloat(cislo));
    cout << "Testy presli\n";

    return 0;
}
#endif // TESTY

vypocet.h
Kód:
#ifndef _VYPOCET_H
#define   _VYPOCET_H

#include <iostream>

using namespace std;

/** vypočíta matematickú oparácie */
class vypocet {
public:
     /** Vypočíta zadanú matematickú operáciu a vráti výsledok
     * @param poradové číslo oparácie
     * @param dve čísla typu float na výpočet
     * @retrn float
     */
    float vypocitaj(const int operacia, const float a, const float b);
    vypocet();
    ~vypocet();
private:
};

#endif   /* _VYPOCET_H */

vypocet.cpp
Kód:
#include "vypocet.h"

vypocet::vypocet() {}
vypocet::~vypocet() {}

float vypocet::vypocitaj(const int operacia, const float a, const float b)
{
    float vysledok = 0;

    switch (operacia) {
        case 1:
            vysledok = a + b;
            break;
        case 2:
            vysledok = a - b;
            break;
        case 3:
            vysledok = a * b;
            break;
        case 4:
            vysledok = a / b;
            break;
    }
    return vysledok;
}

opakovat.h
Kód:
#ifndef _OPAKOVAT_H
#define   _OPAKOVAT_H

#include <iostream>
#include <cstdio>
#include <cstdlib>

/** Zabezpečí opakovanie podža vožby užívateža */
class opakovat {
public:
    /** Vyzve užívateža či chce opakova, vráti 1 ak chce, inakšie 0
     * @param void
     * @return 1 alebo 0
     */
    int znova(void);
    opakovat();
    ~opakovat();
private:
};

#endif   /* _OPAKOVAT_H */

opakovat.cpp
Kód:
#include "opakovat.h"

opakovat::opakovat() {}
opakovat::~opakovat() {}
int opakovat::znova(void)
{
    char c;
    int i = 0;
    bool platnaVolba = false;
    while (!platnaVolba) {
        std::cout << "Ďalší príklad? [a/n]" << std::endl;
        while (getchar() != '\n') ;
        c = getchar();
        while (getchar() != '\n') ;
        switch (tolower(c)) {
            case 'a':
                platnaVolba = true;
                i = 0;
                break;
            case 'n':
                std::cout << "Ďakujeme za použitie kalkulačky." << std::endl;
                platnaVolba = true;
                i = 1;
                break;
            default:
                std::cout << "Neplatná vožba!" << std::endl;
                i = 0;
                break;
        }
    }
    return i;
}

kalkulacka.h
Kód:
#ifndef _KALKULACKA_H
#define   _KALKULACKA_H

#include "menu.h"
#include "opakovat.h"
#include "vypocet.h"
#include "parsing.h"

/** Spojí všetky postupy do celku */
class kalkulacka {
public:
    /** Spojí všetky postupy do celku
     * @param void
     * @return void
     */
    void pocitanie();
    kalkulacka();
    ~kalkulacka();
private:
};

#endif   /* _KALKULACKA_H */

kalkulacka.cpp
Kód:
#include "kalkulacka.h"

kalkulacka::kalkulacka() {}
kalkulacka::~kalkulacka() {}
void kalkulacka::pocitanie()
{
    menu _menu;
    opakovat _opakovat;
    vypocet _vypocet;
    prevody _prevody;

    float prveCislo, druheCislo;
    string str;
    while (true) {
        _menu.mojeMenu(4, "Sčítanie", "Odčítanie", "Násobenie", "Delenie");
        int vyber = _menu.vyberZMenu(4);
        cout << "Zadajte prve cislo: ";
        cin >> str;
        prveCislo = _prevody.stringToFloat(str);
        cout << "Zadajte druhe cislo: ";
        cin >> str;
        druheCislo = _prevody.stringToFloat(str);
        cout << "výsledok je " << _vypocet.vypocitaj(vyber, prveCislo, druheCislo) << '.' << endl;
        if (_opakovat.znova() == 1)
            break;
    }
}

a nakoniec main.cpp
Kód:
#include "kalkulacka.h"

int main(void)
{
    cout << "Vitajte v kalkulačke" << endl << endl;
    kalkulacka _kalkulacka;
    _kalkulacka.pocitanie();

    return 0;
}

_________________
kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor),
Skype: libcokamo, ICQ: 56312279
Ak treba, napíš mi na libcosenior@gmail.com. To mám v mobile a stále po ruke.


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
Zobraziť príspevky z predchádzajúceho:  Zoradiť podľa  
Vytvoriť novú tému Odpovedať na tému  [ Príspevok: 1 ] 

Všetky časy sú v GMT + 1 hodina


Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 2 hostia


Rýchla úprava:
Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete zasielať súbory v tomto fóre

Hľadať:
Skočiť na:  
cron
Powered by phpBB® Forum Software © phpBB Group

Hosted by FreeSpace SK