NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Problem s funckiou void()

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jakub Sobinovsky:30.5.2017 21:55

Čaute, mám taký problém ak si dám cele menu do funckie a následne ju vyvolám vo funckcií main() program mi to preloží bez problémov aj ju vyvolá vypýta si strany ale nakoniec mi nevyhodí výsledok či už trojuholníka alebo obdlzníka.Príkladám aj screen konzoli.

#include <iostream>
#include <string>
using namespace std;
//-----------------FUNCKIE-------------------//
float objem_Kvadra(float a, float b, float c)
{
        cout << "Zadajte stranu a: ";
        cin >> a;
        cout << "Zadajte stranu b: ";
        cin >> b;
        cout << "Zadajte stranu c: ";
        cin  >> c;
        float vysledok = a * b * c;
        return vysledok;
}

float obvod_Trojuholnika(float a, float b, float c)
{
        cout << "Zadajte stranu a: ";
        cin >> a;
        cout << "Zadajte stranu b: ";
        cin >> b;
        cout << "Zadajte stranu c: ";
        cin  >> c;
        float vysledok = a + b + c;
}

void menu()
{
        string odpoved;
        cout << "Zadajte co chcete pocitat(Obdlznik, Trojuholnik): ";
        cin >> odpoved;
}
//---------------------------------------------//


int main(void) {
        //-----------------//
        float a;
        float b;
        float c;
        string odpoved;
        menu();
        if(odpoved == "Obdlznik")
        {
        cout << "Objem Obdlznika je: " << objem_Kvadra(a, b, c);
    }
        else
        if(odpoved == "Trojuholnik")
        {
    cout << "Objem Obdlznika je: " << obvod_Trojuholnika(a, b, c);
        }
        return 0;
}
 
Odpovědět
30.5.2017 21:55
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jakub Sobinovsky
Martin Dráb:30.5.2017 22:05

Protože volbu v menu ukládáš do lokální proměnné odpoved, což se nedostane do proměnné odpoved (též lokální) definované ve funkci main. U objemových a obvodových funkcí nemusíš a, b, c definovat jako parametry, stačí lokální proměnné. Ty totiž jejich hodnotu do objemových a obvodových funkcí nepředáváš, ale načítáš ji přímo v těch funkcích.

Nahoru Odpovědět
30.5.2017 22:05
2 + 2 = 5 for extremely large values of 2
Avatar
Jakub Sobinovsky:30.5.2017 22:27

Takže som ju deklaroval ešte pred všetkými funckiami.To isté môžem spraviť so a,b,c ? A do parametru teda môžem napísať float obvod_Trojuhol­nika(float vysledok) ? Nevadí že tuto premenu už dávam do návratovej funckie ?

 
Nahoru Odpovědět
30.5.2017 22:27
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jakub Sobinovsky
Martin Dráb:30.5.2017 22:57

o isté môžem spraviť so a,b,c

Není potřeba. Používáš je jen ve funkcích, které počítají obvod/objem, takže je stačí (ty proměnné) deklarovat lokálně v těch funkcích.

float obvod_Trojuhol­nika(float vysledok)

Nevidím důvod, proč to takto dělat. Výsledek výpočtu vracíš skrz návratovou hodnotu funkce (příkaz return). Není třeba tam definovat další parametr.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.5.2017 22:57
2 + 2 = 5 for extremely large values of 2
Avatar
Jakub Sobinovsky:31.5.2017 18:06

A čo teda napíšem do parametru funckie ? Môžem to nechať prazdne ?

 
Nahoru Odpovědět
31.5.2017 18:06
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jakub Sobinovsky
Martin Dráb:31.5.2017 19:01

Ano, funkce parametry mít nemusí, pokud je nepotřebuje.

Nahoru Odpovědět
31.5.2017 19:01
2 + 2 = 5 for extremely large values of 2
Avatar
Jakub Sobinovsky:31.5.2017 20:45

Aha super dakujem za vysvetlenie :) ! Moc si mi pomohol.

 
Nahoru Odpovědět
31.5.2017 20:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.