Witam!
Mam problem z takim o to zadaniem:
"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 fill_array(), 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.
Kod z ksiazki:
#include <iostream>
const int Max = 5;
int fill_array(double ar[],int limit);
void show_array(const double ar[],int n);
void revalue(double r, double ar[], int n);
int main()
{
double properties[Max];
int size =fill_array(properties, Max);
show_array(properties,size);
if (size>0)
{
std::cout<<"Podaj czynnik zmiany wartosci: ";
double factor;
while (!(std::cin>>factor))
{
std::cin.clear();
while (std::cin.get() != 'n')
continue;
std::cout<<"Niepoprawna wartosc; podaj liczbe: ";
}
revalue(factor, properties, size);
show_array(properties, size);
}
std::cout<<"Gotowe.n";
std::cin.get();
std::cin.get();
return 0;
}
int fill_array(double ar[],int limit)
{
double temp;
int i;
for (i=0; i<limit; i++)
{
std::cout<<"Podaj wartosc nr "<<(i+1)<<": ";
std::cin>>temp;
if (!std::cin)
{
std::cin.clear();
while (std::cin.get() != 'n')
continue;
std::cout<<"Bledne dane, wprowadzenie danych przerwane.n";
break;
}
else if (temp<0)
break;
ar[i]=temp;
}
return i;
}
void show_array(const double ar[], int n)
{
for(int i=0; i<n; i++)
{
std::cout<<"Nieruchomosc nr "<<(i+1)<<": ";
std::cout<<ar[i]<<std::endl;
}
}
void revalue(double r, double ar[], int n)
{
for(int i=0; i<n; i++)
ar[i] *= r;
}
Moj kod ktory przerobilem:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
const int Max=5;
//prototypy funkcji
void fill_array(double *begin,double *end, double *newResoult);
void show_array(double *begin, double *end); //nie zmienia danych
void revalue(double r, double *begin, double *end);
int main()
{
double properties [Max];
double *beg=&properties[0];
double *happyEnd=&properties[Max-1];
double newSize;
fill_array(beg,happyEnd,&newSize);
cout<<newSize<<" <--newSize"<<endl;
show_array(beg,&newSize);
cout<<newSize<<" <--newSize"<<endl;
if(sizeof(properties)>0)
{
cout<<"Podaj czynnik zmiany wartosci: ";
double factor;
while(!(cin>>factor)) //Jesli factor nie jest liczba to wykonuje sie petla while
{
//Jesli factor jest liczba to petla sie nie wykonuje i przehcodzi do nastenej instrukcji za petla
cin.clear();
while (cin.get()!='\n')
continue;
cout<<"Niepoprawna wartosc, podaj liczbe: ";
}
revalue(factor, beg,&newSize);
cout<<newSize<<" <--newSize"<<endl;
show_array(beg,&newSize);
}
cout<<"Gotowe.\n";
cin.get();
cin.get();
return 0;
}
void fill_array(double *begin,double *end, double *newResoult)
{
double propertyValue;
double *i;
int licznik=1;
for (i =begin; i<=end; i++)
{
cout<<"Podaj wartosc nr " <<licznik<< ": ";
licznik++;
cin>>propertyValue;
if(!cin) //bledne dane
{
cin.clear();
while(cin.get() !='\n')//do momentu napotkania znaku nowego wiersza petla wykonuje sie bez zadnego dzialania.
continue;
cout<<"Bledne dane, wprowadzanie danych przerwane.\n";
break;
\
}
else if (propertyValue<0) //nakaz zakonczenia
break;
*i=propertyValue; //przypisuje danej nieruchomosci wprowadzona wartosc przez uzytkownika.
}
}
void show_array(double *begin, double *end)
{
int licznik=1;
cout<<"SHOW ARRAY\n";
for(double *i=begin; i<=end; i++)
{
cout<<"Nieruchomosc nr " <<licznik<< ": ";
licznik++;
cout<<*i<<endl;
}
}
void revalue(double r, double *begin, double *end)
{
cout<<"Revalue!\n";
for(double *i=begin; i<end; i++)
*i*=r;
}
To zadnie bylo juz przerabiane na tym forum jednak nikt go nie rozwiazal poprawnie ani nie wytlumaczyl dokaldnie tego zadania.
Probwalem to rozwiazac na kilka sposobow ale zawsze cos nie tak. Tutaj probwalem zwrocic wskaznik z funkcji fill_array tak zeby go przekazac do show_array ale nie dziala poprawnie. JAk odpalam program z tym kodem to nie wiem czemu ale funkcja show_array wyswietla mi az 7 Nieruchomosci mimo tego za sam podaje tylko 5, i do tego dwa ostatnie z jakimis dziwnymi liczbami. wartosc wyswietlana przez newSize tez nie mam pojecia skad sie wziela;/
Nie zalezy mi na podaniu pelnego rozwiazania tylko bardzo prosze o jakas wskazowke. Z gory wielkie dzieki!
(wyswietlenia "SHOW ARRAY", cout<<newSize<<" <--newSize"<<endl; i cout<<"Revalue!\n"; sa tylko zebym mogl sie bardziej polapac w kodzie.)