Witam, mam problem nie tyle co z niedziałającym program to tyle z zrozumieniem jak on działa.(dokładniej ze wskaźnikami ogólnie)
Przerabiam książkę Język C++ Szkoła Programowania, jestem obecnie w ćwiczeniach programistycznych rozdziału 7 zadanie 7. Treść:
Zmodyfikuj program z listingu 7.7, zamieniając trzy funkcje obsługujące tablice tak, aby
każda z nich używała dwóch wskaźników określających zakres. Funkcja f i l l _ a r r a y ( ) ,
zamiast zwracać aktualną liczbę elementów, ma zwrócić wskaźnik elementu znajdującego
się za ostatnim wypełnionym elementem. Inne funkcje mają używać tego wskaźnika jako
drugiego parametru pozwalającego wykryć koniec danych. Oto mój kod, prosiłbym bym o wytłumaczenie jak to tam działa zwłaszcza wskaźnik funkcji fill_array(? czy jak to nazwać) oraz ogólną ocenę poprawności, bo robi się coraz trudniej, więc więcej błędów się zdarza.
#include <iostream>
const int Max=5;
using namespace std;
double * fill_array(double * begining, double * end_tab);
void show_array(const double * begining,const double * end_tab);
void revalue(double r, double * begining, double * end_tab);
int main()
{
double properties[Max];
double * last_piece=fill_array(properties,properties+Max);
show_array(properties, last_piece);
if(properties!=last_piece)
{
cout<<"podaj czynnik zmiany wartosci: ";
double factor;
while(!(cin>>factor))
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"niepoprawna wartosc; podaj liczbe: ";
}
revalue(factor, properties, last_piece );
show_array(properties, last_piece);
}
cout<<"gotowe"<<endl;
cin.get();
cin.get();
return 0;
}
double * fill_array(double * begining, double * end_tab)
{
double temp;
double * pt;
int i=0;
for(pt=begining; pt!=end_tab; pt++)
{
cout<<"podaj wartosc nr. "<<(i+1)<<": ";
i++;
cin>>temp;
if(!cin)
{
cin.clear();
while(cin.get()!='\n')
continue;
cout<<"bledne dane koniec wczytywanaia"<<endl;
break;
}
else if(temp <0)
break;
//ar[i]=temp;
*pt=temp;
}
return pt;
}
void show_array(const double * begining,const double * end_tab)
{
int i=0;
const double *pt;
for(pt=begining; pt!=end_tab; pt++)
{
cout<<"nieruchomosc nr "<<(i+1)<<": ";
cout<<*pt<<endl;
i++;
}
}
void revalue(double r,double * begining, double * end_tab)
{
double * pt;
for(pt=begining; pt!=end_tab; pt++)
{
(*pt)*=r;
}
}