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
Stránky: 1

Zdravim, chtel bych poprosit o radu s funkci scitani. Mel bych ji mit pomoci ukazatele. Jenze si moc nejsem jisty, jak na to...
include <iostream.h>
using namespace std;
/* definice funkce */
int scitani(int *a, int *b);
int nasobeni(int a, int b);
int odcitani(int a, int b);
int deleni(int a, int b);
int main() {
/* deklarace promennych */
int a, b;
char c;
cout << "Zadejte prvni cislo: "; // pouziva se pro formatovany zakladni vystup
cin >> a; // pouziva se pro formatovy zakladni vstup
cout << "\nZvolte operaci(+ - * /): ";
cin >> c;
cout << "\nZadejte druhe cislo: ";
cin >> b;
switch(c) { /* Do prikazu switch vstupuje vyraz, ktery musi vracet celociselnou hodnotu (int, char).
Prikaz switch vytvari telo prepinace, ktery musi byt ve slozenych zavorkach. Jednotlive vetve potom zacinaji příkazem case a hodnotou (int, char).
Prikaz case vybira vstupni hodnotu prikazu switch. Při shode zacne provadet prikazy za case. Prikazy jsou provadeny postupne, nez se narazi na prvni break.
Break oznamuje o konci vetve a predava rizeni prikazu, ktery lezi bezprostredne za prikazem switch. */
case '+': cout << "\Soucet cisel je: " << scitani(a, b); //volani funkce addition s parametry
break;
case '-': cout << "\nRozdil cisel je: " << odcitani(a, b);
break;
case '*': cout << "\nSoucin cisel je: " << nasobeni(a, b);
break;
case '/': cout << "\Podil cisel je: " << deleni(a, b);
break;
default: cout << "\nChybne zadani.";
break;
}
return 0;
}
int scitani(int a, int b) {
return a + b; //return zajisti predani parametru pri vystupu z volane funkce
}
int nasobeni(int a, int b) {
return a * b;
}
int odcitani(int a, int b) {
return a - b;
}
int deleni(int a, int b) {
if(b != 0) {
return a / b;
}
else {
cout << "Chyba deleni nulou.";
return 0;
}
}Offline

V principu to máš správně, ale máš rozpor v tomto
int scitani(int *a, int *b); // prototyp a int a, b; // proměnné int, nikoli pointer na int << scitani(a, b); // předáváš int, nikoli ukazatel na int
Nevím, proč u takto primitivních operací chceš využít ukazatelů, ale příslušný kód bych přepsal třeba takto:
int a,b; int *pa, *pb; //vstupni logika (cin/cout) *pa = a; *pb = b; //a predame funkci tedy ukazatele /*...*/... << scitani(pa, pb);
Je to jen ve zkratce, celé se mi to vypisovat nechce. Jinak opravdu mi přijde úkol dost primitivní na použití pointerů, je to jako použít kanón na vrabce, možná nechápu smysl, na co se ptáš :)
Offline

↑ frank_horrigan:
aha, tak to chápu myslel jsem že v tom bude větší věda:-) díky
Offline
Zdravím,
trošku selského rozumu:
#include <cstdlib>
#include <iostream>
using namespace std;
// První způsob - pomocné proměnné bez const (trošku netradiční způsob)
int scitani1(int ax, int bx) {
int *pom1 = &ax;
int *pom2 = &bx;
return *pom1 + *pom2;
};
// Druhý způsob - pomocné proměnné bez const
int scitani2(int *ax, int *bx) {
int *pom1 = ax;
int *pom2 = bx;
return *pom1 + *pom2;
};
// Třetí způsob - rovnou return a const
int scitani3(const int *ax, const int *bx) {
return *ax+ *bx;
};
// Čtvrtý způsob - vrátíme ukazatel na výsledek
int* scitani4(const int *ax, const int *bx) {
return new int(*ax + *bx);
};
// Použití
int main(int argc, char *argv[])
{
int a = 5;
int b = 2;
cout << scitani1(a, b);
cout << scitani2(&a, &b);
cout << scitani3(&a, &b);
int *c = scitani4(&a, &b);
cout << *c;
delete c;
system("PAUSE");
return 0;
}První alternativa není úplně OK, další jsou čisté. ;-)
Offline
Stránky: 1