Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 27. 02. 2012 13:40

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

C++ problém s integerem

ahoj, učím se C++ a narazil jsem na problém se kterým si nevím rady, v následujícím programu jsem si vytvořil jednoduchou třídu Obdelnik, když chci použít šířku a výšku k vykreslení obdelníku na obrazovku tak ni to hodí chybu: error: argument of type 'int (Obdelnik::)()' does not match 'int'
co to znamená? int je int ať je kde chce ne?

Code:

#include <iostream>

using namespace std;
//třída obdelníku
class Obdelnik {
    private:
        int sirka;
        int vyska;
    public:
        int vratVysku(void) const;
        int vratSirku(void) const;
        void nastavStrany(int a, int b);
};
//implementace funkcí třídy
void Obdelnik::nastavStrany(int a, int b) {
    if((a < 1 || a > 15) || (b < 1 || b > 15))
        cout << "Chyba, strany nesmi byt mensi nez 1 nebo vetsi nez 15" << endl;
    else {
        sirka = a;
        vyska = b;
    }
}

int Obdelnik::vratSirku(void) const {
    return sirka;
}

int Obdelnik::vratVysku(void) const {
    return vyska;
}

//menu programu
void nabidka(void) {
    cout << "|~~~~~ Nabidka ~~~~~|" << endl;
    cout << "Vykreslit obdelnik - 1" << endl;
    cout << "Zmenit velikost - 2" << endl;
    cout << "Konec - 3" << endl;
    cout << endl;
}

//vykreslení obrazce
void vykresli(int a, int b) {
    int i, j;
    for(i = 0; i < a; i++) {
        for(j = 0; j < b; j++) {
            cout << "*";
        }
        cout << endl;
    }
}

int main() {
    bool ukoncitProgram = false;
    int vstup, a, b;
    Obdelnik obdl;
    obdl.nastavStrany(4, 4);

    while(ukoncitProgram != true) {
        nabidka();
        cin >> vstup;
        switch(vstup) {
            case 1:
                vykresli(obdl.vratVysku, obdl.vratSirku);
                cout << endl;
                break;
            case 2:
                cout << "Zadej stranu a: ";
                cin >> a;
                cout << "Zadej stranu b: ";
                cin >> b;
                cout << endl;
                obdl.nastavStrany(a, b);
                break;
            case 3:
                ukoncitProgram = true;
                break;
            default:
                cout << "Neznamy operator." << endl;
                cout << endl;
        }
    }
    return 0;
}

http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

  • (téma jako vyřešené označil(a) ReVolt)

#2 27. 02. 2012 13:49

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ problém s integerem

Zdravím,
int vratVysku(void) const a int vratSirku(void) const jsou metody (vlastnosti), zapomněl si tedy u tohoto řádku závorky:

Code:

vykresli(obdl.vratVysku(), obdl.vratSirku());

Vyřešeno?


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 27. 02. 2012 13:57

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Re: C++ problém s integerem

↑ RePRO:
jééé, až tak triviální?? to jsem si vůbec neuvědomil :D


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

 

#4 27. 02. 2012 14:13

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ problém s integerem

Jinak jestli mohu (trošku) poradit, tak bych ze zvyku změnil dvě věci:
1) nastavení stran rovnou do konstruktoru
2) metodu vykresli bychom mohli použít rovnou do třídy Obdelnik (ve skutečnosti se tyhle věci ještě řeší abstraktní třídou Obrazec). Metoda vykresli teda nebude mít parametry a využijeme tedy zapouzdření (jeden z rysů OOP).


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#5 27. 02. 2012 14:50 — Editoval RePRO (27. 02. 2012 14:52)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: C++ problém s integerem

Tady jenom ukazuji řešení, kde je ještě nadtřída Obrazec, která uchovává datové položky: ID, pozice x, pozice y někde ve 2D prostoru. Dává se to do třídy Obrazec, jelikož tyto položky budou pro všechny objekty stejné.

Rozdílné se naopak budou jevit implementace obsahů a obvodů, které musíme implementovat v daných třídách konkrétního objektu.

Ukázka, jak by to mohlo asi vypadat.
soubor Obrazec.h

Code:

    
    #include <iostream>

    using namespace std;

    class Obrazec {
          protected: 
          int x, y, id;
          int static pocet;
          
          public:
          Obrazec(int x, int y) {
                      this->id = ++pocet;
                      this->x = x; 
                      this->y = y;
          };
          
          virtual void vypis (){
                  cout << "id: " << id << " x: " << x << " y: " << y << endl; 
          };
          
          virtual int obsah() = 0; 
          virtual int obvod() = 0;
          int getId() {
              return id;
          };
    };

    int Obrazec::pocet = 0;

    class Obdelnik : public Obrazec {
          private: 
                   int a, b;
          public:
                   Obdelnik(int a, int b, int x, int y) : Obrazec(x,y) {
                                this->a = a;
                                this->b = b;
                   }
                   
                   virtual int obsah() {
                               return a*b;
                   }
                   
                   virtual int obvod() {
                               return 2*(a+b);
                   }
                   
                   virtual void vypis () {
                                Obrazec::vypis();
                                cout << "a: " << a << " b: " << b << " Obvod: " << obvod() << " Obsah: " << obsah() << endl;
                   }
    };

    class Kruh : public Obrazec {
          private:
                  int r;
          public:
                 Kruh(int r, int x, int y) : Obrazec(x,y) {
                          this->r=r;
                 }
                 
                 virtual int obsah() {
                         return 3*r*r;
                 }
                 
                 virtual int obvod() {
                         return 2*3*r;
                 }
                 
                 virtual void vypis () {
                         Obrazec::vypis();
                         cout << "r: " << r << " Obvod: " << obvod() << " Obsah: " << obsah() << endl;
                 }
    };

    class Sestiuhelnik: public Obrazec {
          private:
                  int r, s;
          public:
                 Sestiuhelnik(int r, int s, int x, int y) : Obrazec(x,y){
                                  this->r = r;
                                  this->s = s;
                 }
                 
                 virtual int obsah() {
                         return (s*(r*r))/2; 
                 }
                 
                 virtual int obvod() {
                         return 6*s;
                 }
                 
                 virtual void vypis () {
                         Obrazec::vypis();
                         cout << "r: " << r << "strana: " << s << " Obvod: " << obvod() << " Obsah: " << obsah() << endl;
                 }
    };

soubor main.cpp

Code:

#include "Obrazec.h"

int main() {
    
    Obdelnik o1(1,1,3,4);
    Obdelnik o2(3,2,8,4);
    Kruh k1(1,3,4);
    Kruh k2(2,8,4);
    Sestiuhelnik s1(2,3,2,4);
    
    o1.vypis();
    o2.vypis();
    k1.vypis();
    k2.vypis();
    s1.vypis();
        
    system("PAUSE");
    return EXIT_SUCCESS;
}

Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#6 27. 02. 2012 17:10

ReVolt
Příspěvky: 99
Škola: UPOL
Pozice: Student
Reputace:   
Web
 

Re: C++ problém s integerem

↑ RePRO:
díky, každá rada se hodí, když člověk začíná, tvůj kód prostuduji

ještě jednou díky


http://www.turistickyraj.cz - napsal jsem a spravuji

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson