Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Wskaźniki, referencje, przekazywanie przez wartość


Rekomendowane odpowiedzi

Opublikowano

Siema, napisałem program liczący równanie liniowe, jednak muszę użyć przekazywania przez wartość, wskaźników, referencji oraz przeładowania funkcji, a nie za bardzo wiem jak to zrobić, czy mógłbym liczyć na Waszą pomoc oraz wytknięcie mi błędów (wiem, że takowe są) Przesyłam niżej kod.

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
using namespace std; 	

void row_lin(int moja )
{
	switch(moja)
		{
			case 1: cout<<"Rownanie Tozsamosciowe"<<endl; break;
			case 2: cout<<"Rownanie Sprzeczne"<<endl; break;
			case 3: cout<<"x= "<<endl; break;
		}
}


int main ()
{
	int a,b,x;
	cout<<"Podaj a"<<endl;
	cin>>a;
	cout<<"Podaj b"<<endl;
	cin>>b;
	if (a==0)
		if(b==0)
			cout<<"Rownanie Tozsamosciowe"<<endl;
		else
			cout<<"Rownanie sprzeczne"<<endl;
	else
		{
			x=-b/a;
			cout<<"x= "<<x<<endl;
		}
	return(0);
}
Opublikowano

po co Ci tyle dodatkowych bibliotek skoro korzystasz tylko z <iostream> ?

 

po drugie formatowanie, kodu, masz tutaj sformatowany:

 

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iomanip>
using namespace std;

void row_lin(int moja )
{
    switch(moja)
    {
    case 1:
        cout<<"Rownanie Tozsamosciowe"<<endl;
        break;
    case 2:
        cout<<"Rownanie Sprzeczne"<<endl;
        break;
    case 3:
        cout<<"x= "<<endl;
        break;
    }
}


int main ()
{
    int a,b,x;
    cout<<"Podaj a"<<endl;
    cin>>a;
    cout<<"Podaj b"<<endl;
    cin>>b;
    if (a==0)
        if(b==0)
            cout<<"Rownanie Tozsamosciowe"<<endl;
        else
            cout<<"Rownanie sprzeczne"<<endl;
    else
    {
        x=-b/a;
        cout<<"x= "<<x<<endl;
    }
    return(0);
}

po kolejne, przekazywanie przez referencje:

http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Przekazywanie-argumentow-funkcji-przez-referencje/356

 

przekazywanie przez wskaźnik (przez referencje też opisane):

http://www.p-programowanie.pl/cpp/przekazywanie-argumentow-do-funkcji-c/

 

W C++ można tworzyć wiele funkcji o takiej samej nazwie, które przyjmują różne argumenty i taką sytuację nazywa się przeładowaniem funkcji. Prosty przykład, w takiej sytuacji:

 

 

#include <iostream>

using namespace std;

int dodaj(int a, int 
{
    return a + b;
}


int main ()
{
   cout << dodaj(5, 7);
}

Wszystko działa dobrze, dopóki podawane liczby są całkowite. Jeżeli chcielibyśmy dodać liczby zmiennoprzecinkowe to zwróci niedokładny wynik, więc można stworzyć drugą funkcję:

 

 

#include <iostream>

using namespace std;

int dodaj(int a, int 
{
    return a + b;
}

double dodaj(double a, double 
{
    return a+b;
}

int main ()
{
   cout << dodaj(5.3, 7.2);
}
 

 

która zwróci poprawny wynik

Opublikowano

Jedyne z tych 4

przekazywania przez wartość, wskaźników, referencji oraz przeładowania funkcji

 

co miałoby sens to

przekazywania przez wartość

 

Jeśli więcej jest wymagane to ja bym się kłócił z tym kto tego wymaga, bo wpychanie tego na siłę tutaj mija się z celem (powiedziałbym, że nawet jest niemożliwe bez dodawania jakiejś niepotrzebnej funkcjonalności).

Opublikowano

w dodatku, poprzez referencje i poprzez wartość jednocześnie przeładowywać nie ma sensu, bo podstawiając zmienne musisz castować by się skompilowało, taki przykład:

#include <iostream>

using namespace std;

int dodaj(int a, int 
{
    return a + b;
}

int dodaj(int& a, int& 
{
    return a + b;
}
 
int main ()
{
    int a = 5;
    int b = 7;
    cout << dodaj(5, 7); //skompiluje się
    cout << dodaj(a, ; //błąd

   return 0;
}

żeby zadziałało musiał byś zrobić:

int dodaj(int& a, int& 
{
    return a + b;
}
 
//.. reszta kodu
 
int a = 5;
int b = 7;
cout << dodaj(static_cast<const int&>(a), static_cast<const int&>(); //kompiluje się
Opublikowano

To ma na celu "sprawdzenie" czy dobrze pojęliśmy wszystkie pojęcia, niestety trafiła mi się ta nieszczęsna funkcja... Z figurą bym sobie poradził. 

Mógłbym jedynie zrobić układ równań liniowych, z którym nie wiem czy sobie poradzę korzystając z tych wszystkich funkcji.

Opublikowano

Z utworzeniem przeładowania, nie wiem co mógłbym tam zawrzeć, tak zrobiłem to dla stożka:

#include <iostream>
#include <cmath>

using namespace std;

void pole(double r)
{
  double pp=M_PI*pow(r,2);
  cout<<"Pole podstawy stozka wynosi: "<<pp<<endl;
}

void pole(double r, double l)
{
  double pb=M_PI*r*l;
  cout<<"Pole boczne stozka wynosi: "<<pb<<endl;
}

void pole(double r, double h, double l, double *pc)
{
  *pc=M_PI*pow(r,2)+M_PI*r*l;
}

void objetosc(double r, double h, double &v)
{
  v=(M_PI*pow(r,2)*h)/3;
}

Jednak nie wiem jak mógłbym to zrobić z równaniem. (To nie jest cały kod programu, który podałem)

Opublikowano

Twoja funkcja by musiała przyjmować argumenty różnych typów:

 

int oblicz(int &a, int & //poprzez referencje
{
    return a + b;
}
 
int oblicz(int *a, int * //przeez wsakźnik
{
    return *a + *b;
}
 
int main()
{
    int a,b;
    std::cin >> a >> b;
    oblicz(a, ; //wywołujesz poprzez referencje
    oblicz(&a, &; //wywolujesz poprzez funkcje z wskaźnikami
return 0;
}
Opublikowano

to się nie skompiluje

int main()
{
    int a,b;
    std::cin >> a >> b;
    oblicz(a, ; //wywołujesz poprzez referencje
    oblicz(&a, &; //wywolujesz poprzez funkcje z wskaźnikami
return 0;
}

sypnie błędem...

BanerekIshyas.jpg

Opublikowano

to się nie skompiluje

int main()
{
    int a,b;
    std::cin >> a >> b;
    oblicz(a, ; //wywołujesz poprzez referencje
    oblicz(&a, &; //wywolujesz poprzez funkcje z wskaźnikami
return 0;
}

sypnie błędem...

 

http://ideone.com/ZejJsi

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...