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 01. 03. 2012 13:22

bazal46
Zelenáč
Příspěvky: 24
Reputace:   
 

Kalkulacka pomocí ukazatele (C++)

Zdravím,

mame mít kalkulačku přes ukazatele, něco sem vymyslel ale když to spustím tak mi to háže chybu, prosím o radu.

Předem díky...



#include<iostream.h>
using namespace std;

float vynasob(float *a,float *b)
{
      float *x;
      *x=(*a)-(*b);
    return *x;
}
main()
{
      float a,b;
      char o;
      cin>>a;
      cin>>o;
      cin>>b;
      if(o=='*'){
               cout<<"vysledek je:"<<vynasob(&a,&b)<<endl;   
               }
      system("pause");
}

Offline

 

#2 01. 03. 2012 16:30 — Editoval RePRO (01. 03. 2012 18:38)

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

Re: Kalkulacka pomocí ukazatele (C++)

Zdravím,
třeba takto (4 způsoby - 1. způsob je netradiční):

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;
}

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

Offline

 

#3 04. 03. 2012 12:03 — Editoval ReVolt (04. 03. 2012 12:04)

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

Re: Kalkulacka pomocí ukazatele (C++)

↑ bazal46:

Code:

#include <iostream>
#include <cstdlib>

using namespace std;

float vynasob(float *a,float *b)
{
      float *x;
      *x=(*a)-(*b);
    return *x;
}
int main()
{
      float a,b;
      char o;
      cin>>a;
      cin>>o;
      cin>>b;
      if(o=='*'){
               cout<<"vysledek je:"<<vynasob(&a,&b)<<endl;
               }
      system("pause");
}

...bez errorů

v c++ moc dlouho neprogramuju, ale neměla by ta funkce vynasob vpadat takhle: float * vynasob(..) když vrací ukazatel


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

Offline

 

#4 04. 03. 2012 13:56 — Editoval RePRO (04. 03. 2012 14:00)

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

Re: Kalkulacka pomocí ukazatele (C++)

Zdravím,
buď vrátíš klasicky výsledek, nebo ukazatel na výsledek (tím pádem je potřeba alokace):

Code:

int nasobeni1(int *ax, int *bx) {
    
    return (*ax * *bx);
};

int* nasobeni2(int *ax, int *bx) {
    
    return new int(*ax * *bx);
};

Revolt: Proč máš operátor odečítání u operace násobení? :-) Každopádně v těhlech případech je použití pointers zbytečné. Ale když to tak někdo chce...


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

Offline

 

#5 04. 03. 2012 15:20 — Editoval ReVolt (04. 03. 2012 15:20)

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

Re: Kalkulacka pomocí ukazatele (C++)

↑ RePRO: no já jsem jenom přepsal ten jeho kód, aby mu kompilátor neházel chyby, sémantickou stránku kódu jsem neřešil :-)


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

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson