Zwracanie wskaźnika przez funkcję

2018-09-06 09:55
0

Jeśli post jest w złym miejscu, poproszę o przeniesienie w razie potrzeby.
Mam kolejne zadanie dla 'zielonych' i niestety nie wiem co robić dalej, ponieważ wszystkie błędy są poprawione, kompiluje się do końca pierwszej funkcji i wysiada. Dlatego nie mam możliwości sprawdzenia, co jest źle i proszę o pomoc gdyby ktoś miał chwilkę czasu i zerknął :)
W programie trzy funkcje mają obsługiwać tablicę i każda ma używać dwóch wskaźników określających zakres.
Funkcja fill_array() ma zwrócić wskaźnik elementu znajdującego się za ostatnim elementem tablicy, inne funkcje mają go używać jako drugiego parametru wskazującego koniec danych.
W rozdziale nie ma niestety przykładu na to, jak napisać funkcję która zwraca wskaźnik :/

 #include <iostream>
const int Max=5;

double fill_array (double *begin, double *ar_end);
void show_array (double *begin, double *end);
void revalue (double r, double *begin, double *end);

int main ()
{
    using namespace std;
    double properties [Max];

    double *koniec;
    *koniec = fill_array(properties, properties+Max);
    show_array(properties, koniec);
    if (*koniec>0)
    {
        cout<<"Podaj czynnik zmiany wartosci: ";
        double factor;
        while (!(cin>>factor)) //nieliczbowa wartosc na wejsciu
        {
            cin.clear();
            while (cin.get()!='\n')
                continue;
            cout<<"Niepoprawna wartosc. Podaj liczbe: ";
        }
        revalue(factor, properties, koniec);
        show_array(properties, koniec);
    }
    cout<<"Gotowe";
  cin.get();
  cin.get();

  return 0;
}

double fill_array (double *begin, double *ar_end)
{
    using namespace std;
    double temp;
    int i;
    double *pt;
    for (pt=begin,i=0; pt!=ar_end; pt++,i++)
    {
        cout<<"Podaj wartosc nr "<<(i+1)<<": ";
        cin>>temp;
        if(!cin) //bledne dane
        {
            cin.clear();
            while (cin.get()!='\n')
                continue;
            cout<<"Bledne dane, wprowadzanie danych przerwane.\n";
            break;
        }
        else if (temp<0)
            break;
        *pt=temp;
    }
    return *ar_end; //**tutaj funkcja powinna zwracać wskaźnik**
}

void show_array (double *begin, double *end)
{
    using namespace std;
    double *pt;
    int i;
    for (pt=begin, i=0; pt!=end; pt++, i++)
    {
        cout<<"Nieruchomosc nr "<<(i+1)<<": ";
        cout<<*pt<<endl;
    }
}

void revalue (double r, double *begin, double *end)
{
    double *pt;

    for (pt=begin;pt!=end;pt++)
        (*pt)*=r;

}
edytowany 1x, ostatnio: furious programming, 2018-09-07 01:39

Pozostało 580 znaków

2018-09-06 10:01
1
double* fill_array (double *begin, double *ar_end)
{
    ...

    return ar_end; 
}

Pozostało 580 znaków

2018-09-06 14:54
0
0x666 napisał(a):
double* fill_array (double *begin, double *ar_end)
{
  ...

  return ar_end; 
}

error : cannot convert 'double*' to 'double' in return.
Chyba coś jeszcze trzeba zmienić...

edytowany 2x, ostatnio: furious programming, 2018-09-07 01:39

Pozostało 580 znaków

2018-09-06 15:33
kq
0

Chyba nie pokazałeś kodu.


Pozostało 580 znaków

2018-09-06 16:34

Zmieniles typ funkcji to musisz zmienic tez typ zmiennej, do ktorej przypisujesz wartosc zwracana przez funkcje.

  *koniec = fill_array(properties, properties+Max);

na

  koniec = fill_array(properties, properties+Max);

Brak polskich znakow :(
edytowany 3x, ostatnio: qblacksheep, 2018-09-06 16:38

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0