Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pomoc przy funkcjach

Ostatnio zmodyfikowano 2010-11-28 22:52
Autor Wiadomość
Marys
Temat założony przez niniejszego użytkownika
Pomoc przy funkcjach
» 2010-11-27 04:36:16
Witam,
jest nowicjuszem w programowanie (programuje od paru miesięcy) i mam problem z funkcjami, chyba ogólnie ze zrozumieniem tych funkcji.
Wiem, że funkcje definiujemy przed główną funkcją, lecz nie wiem co należy wpisywać w nawiasach np. double funkcja (?); tam gdzie znak zapytania co by należało wpisać?
Później dodaje swoją funkcję to głównej funkcji i też za bardzo nie wiem co wpisać w te nawiasy :/
Napisanie instrukcji, to chyba kumam, no może jeszcze jakiś przykład z return.
Jeżeli można to proszę o mówienie na tym przykładzie:

C/C++
#include <iostream>
#include <conio>
#include <math>
using namespace std;

duble f( double x )
{
    return exp( - 1.5 * x ) - 0.3 *( x * x );
}


int main()
{
    double a =, b = 1, x0, fa, fb, f0, eps;
    cout << "Podaj eps: ";
    cin >> eps;
    fa = f( a );
    fb = f( b );
    if( fa * fb > 0 )
         cout << "Error\n";
   
    while( fabs( a - b ) > eps )
    {
        x0 =( a + b ) / 2;
        f0 = f( x0 );
        if( fabs( f0 ) < eps ) break;
       
        if( fa * f0 < 0 )
             b = x0;
        else
        {
            fa = x0;
            fa = f0;
        }
    }
    cout << "x0=" << x0 << endl;
    return 0;
}

To teraz jak można prosić, to proszę o przerobienie tego na program z funkcjami i wytłumaczenie tego co się robi, zmienia.

Z góry dziękuje za pomoc!
P-24534
Pirotechnik
» 2010-11-27 08:18:30
w nawiasach wpisujesz argumenty tzn. takie dane które chcesz użyć we funkcji.
np:
C/C++
int Main()
{
    int y;
    cin >> y;
    int x = 4 - y;
    cout << "teraz x wynosi: " << x << endl;
   
    x = /*  tutaj operacja wywołania funkcji(nie pamiętam jaka tam była bo dawno nie robiłem nic w C++) ale chyba tak to szło:*/ funkcja( 32 );
   
    cout << "teraz x wynosi: " << x << endl;
    return 0;
}

int funkcja( int zmienna )
{
    int x -= zmienna;
    return x;
}

Możliwe że kod ma błędy bo pisałem go na szybkiego.
P-24535
ison
» 2010-11-27 12:00:23
Pirotechnik, u Ciebie funkcja zwróci losową wartość

Marys
w nawiasach podajesz argumenty czyli zmienne jakie chcesz przekazać do funkcji
przykłady powinny Ci wszystko wyjaśnić
C/C++
#include <iostream>

void funkcja( int zmienna ) //void oznacza że funkcja nic nie zwróci, w nawiasach podaje się wszystkie argumenty jakie chcesz aby Twoje funkcja przyjmowała
{
    std::cout << "Zmienna wynosi: " << zmienna << std::endl; //zadaniem tej funkcji jest wypisywanie liczby jaką dostanie w argumencie
}

int main()
{
    funkcja( 50 ); //wywołanie funkcji z argumentem 50
    funkcja( 10 ); //jak wyżej tylko że tym razem przekazana została wartość 10
    int x = 2;
    funkcja( x ); //przekazanie zmiennej która wynosi 2
    funkcja( 500 - 100 ); //przekazanie liczby 400
}
C/C++
#include <iostream>

int funkcja( int zmienna ) //int oznacza że funkcja zwróci int, w nawiasach podaje się wszystkie argumenty jakie chcesz aby Twoje funkcja przyjmowała
{
    return zmienna - 5; //funkcja zwróci liczbę o 5 mniejszą niż ta którą dostała w argumencie
}

int main()
{
    int x = 100;
    x = funkcja( x ); //pod x podstawiamy to co zwróci funkcja z argumentem x, w efekcie x będzie wynosiło 95
    x = funkcja( x ); //ponownie pod x(czyli 95) podstawiamy to co zwroci funkcja z argumentem x(czyli 95), x teraz wynosi 90
    std::cout << funkcja( x ) << std::endl; //wypisujemy to co zwróci funkcja z argumentem x, w efekcie na standardowe wyjście wypisana zostanie liczba 85
}
P-24538
Pirotechnik
» 2010-11-27 13:01:09
Ison, faktycznie!! Zapomniałem przypisać początkową wartość zmiennej 'x' we funkcji
P-24539
Marys
Temat założony przez niniejszego użytkownika
» 2010-11-27 13:47:39
To teraz chce zrobić funkcję z tej pętli while, będzie to wyglądać tak?:

C/C++
//...
double petla( double a = 0, duble b = 1, double fa, double fb, double f0, double eps );
//...
int mai {
   
    //...
    petla( x0 );
    //...
}
double petla( double a = 0, duble b = 1, double fa, double fb, double f0, double eps )
{
    while( fabs( a + b ) > eps )
    {
        x0 =( a + b ) / 2;
        f0 = f( x0 );
        if( fabs( f0 ) < eps ) break;
       
        if( fa * f0 < 0 )
             b = x0;
        else
        {
            fa = x0;
            fa = f0;
        }
    }
}
chce żeby mi wypisało x0 do int main
P-24547
DejaVu
» 2010-11-27 14:18:28
Ja widzę, że Ty nie wiesz w ogóle co się dzieje w tym kodzie, który przedstawiłeś. Proponuję poczytać książkę lub kurs od podstaw. Z pewnością rozdział poświęcony funkcjom będzie nieocenioną pomocą naukową.
P-24548
ison
» 2010-11-27 14:18:29
przeanalizuj dokładnie kod który ci podałem, jeśli to nie pomoże to powtórz sobie podstawy
C/C++
petla( x0 );
...
}
double petla( double a = 0, duble b = 1, double fa, double fb, double f0, double eps )
{
do funkcji musisz przekazać tyle elementów ile ona oczekuje... a Ty przekazujesz tylko jeden

chce żeby mi wypisało x0 do int main
więc Twoja funkcja musi coś zwracać...
to co zwróci funkcja możesz wypisać na standardowe wyjście:
C/C++
std::cout << funkcja( argumenty ) << std::endl;
P-24549
Marys
Temat założony przez niniejszego użytkownika
» 2010-11-28 22:19:12
Dobra poczytałem trochę i teraz proszę o komentarz czy dobrze to zrozumiałem. Na przykładzie mojego programy:
W głównej funkcji na początku definiuje sobie a, b oraz eps -> na podstawie tych elementów jest obliczane x0. Czyli zdefiniuje sobie tą funkcję tak:
double petla(double a, double b, double eps);
W programie główny wywołam ją tak samo np. zmienna=double petla(double a, double b, double eps);
fa, fb i te inne zdefiniuje sobie wewnątrz tej mojej funkcji "petla".
Teraz jeszcze jak to zrobić, żeby zwróciło mi x0?
1. Na końcu funkcji pisze return x0?
2. Czy całą pętle w sadzam w return?
3. A może oba przypadki są poprawne?
P-24638
« 1 » 2
  Strona 1 z 2 Następna strona