mam zmodyfikowac program z listingu 7.7, zamieniając 3 funkcje obslugujące tablicę tak, aby każda z nich używała dwóch wskaźników określających zakres. Funkcja fill_array() zamiast zwracac aktualna liczbe elementow ma zwrocic wskaznik elementu znajdujacego sie za ostatnim wypelnionym elementem. Inne funkcje maja uzywac tego wskaznika jako drugiego parametru pozwalającego wykryć koniec danych. Proszę o pomoc bo mam problem ze zwróceniem odpowiedniej wartosci.
Oto listing 7.7:
#include<iostream>
const int Max = 5;
int fill_array(double ar[], int limit);
void show_array(const double ar[], int n); //nie zmienia danych
void revalue(double r,double ar[], int n);
int main()
{
using namespace std;
double properties[Max];
int size = fill_array(properties, Max);
show_array(properties, size);
if (size > 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,size);
show_array(properties,size);
}
cout << "Gotowe.\n";
cin.get();
cin.get();
return 0;
}
int fill_array(double ar[], int limit)
{
using namespace std;
double temp;
int i;
for (i = 0; i < limit; 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) // nakaz zakoczenia
break;
ar[i] = temp;
}
return i;
}
void show_array(const double ar[], int n)
{
using namespace std;
for (int i = 0; i < n; i++)
{
cout << "Nieruchomosc nr " << (i + 1) << ": ";
cout << ar[i] << endl;
}
}
void revalue(double r,double ar[], int n)
{
for (int i = 0; i < n; i++)
ar[i] *= r;
}
#include <iostream>
const int Max = 6;
int * fill_array(int *begin, int * end);
//void show_array(int * begin, int * end, int * wsk);
//void revalue(int * begin, int * end, int * wsk);
int main()
{
using namespace std;
int properties[Max];
int * wsk = fill_array(properties,properties + Max); // obejmuje cala tablice
cout << * wsk; // sprawdzenie wyniku
return 0;
}
int *fill_array(int *begin, int *end)
{
using namespace std;
int *temp = 0;
int n;
for(temp = begin, n = 0; temp != end; temp++,n++)
{
cout << "Podaj wartość nr " << (n+1) << ": ";
cin >> *temp;
if(!cin)
{
cin.clear();
while(cin.get() != '\n')
continue;
cout << "Błędne dane, wprowadzanie danych przerwane.\n";
return begin + n; //tutaj chyba cos namieszalem
break;
}
else if (temp < 0)
break;
}
return &n;
}