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 29. 02. 2012 19:58

lukasklhufek
Příspěvky: 49
Reputace:   
 

kalkulacka - funkce scitani pomoci ukazatele (C++)

Zdravim, chtel bych poprosit o radu s funkci scitani. Mel bych ji mit pomoci ukazatele. Jenze si moc nejsem jisty, jak na to...

Code:

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

 

#2 29. 02. 2012 20:19

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: kalkulacka - funkce scitani pomoci ukazatele (C++)

V principu to máš správně, ale máš rozpor v tomto

Code:

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:

Code:

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áš :)


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#3 29. 02. 2012 21:41

lukasklhufek
Příspěvky: 49
Reputace:   
 

Re: kalkulacka - funkce scitani pomoci ukazatele (C++)

↑ frank_horrigan:

aha, tak to chápu myslel jsem že v tom bude větší věda:-)  díky

Offline

 

#4 01. 03. 2012 16:28 — Editoval RePRO (01. 03. 2012 18:39)

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

Re: kalkulacka - funkce scitani pomoci ukazatele (C++)

Zdravím,
trošku selského rozumu:

Code:

#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é. ;-)


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

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson