Witam wszystkich, mam problem z niżej wymienionym zadaniem:
"Zmodyfikuj program z listungu 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.
Listing 7.7 z w/w treści zadania wygląda tak:
#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;
}
Będę szczery, nie potrafię jeszcze dobrze posługiwać się wskaźnikami w praktyce i to zadanie na dzień dzisiejszy wydaje mi się naprawdę trudne, może nawet zbyt trudne dla mnie. Oto kod (na brudno), który do tej pory napisałem, nie jest on kompletny w żadnym wypadku, w zasadzie to praktycznie przepisałem pierwszą funkcję z innego kodu, którego znalazłem w sieci:
#include <iostream>
const int Max = 5;
int* fill_array(short* a, short* b);
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(short* a,short* b)
{
int *i=0;
short n=0;
for (i=a; i!=b; i++,n++)
{
std::cout<<"Podaj wartosc nr "<<(n+1)<<": ";
std::cin>>*i;
if (!std::cin)
{
std::cin.clear();
while (std::cin.get() != '\n')
continue;
std::cout<<"Bledne dane, wprowadzenie danych przerwane.\n";
break;
}
else if (*i<0)
break;
}
return *b;
}
void show_array(short* a,short* b)
{
int *i=0;
short n=0;
for(int i=a; i!=b; i++,n++)
{
std::cout<<"Nieruchomosc nr "<<(n+1)<<": ";
std::cout<<*i<<std::endl;
}
}
void revalue(short* a,short* b)
{
for(int i=0; i<n; i++)
ar[i] *= r;
}
Samodzielnie nie jestem w stanie wykonać tego zadania, tak więc mam prośbę. Czy jakaś dobra osoba tutaj mogłaby mi rozwiązać to zadanie tak, aby wszystkie wymogi z treści były tutaj uwzględnione, a jednocześnie kod nie byłby zbyt długi/skomplikowany? Po prostu, żeby spełniał wymogi polecenia zadania. Myślę, że analiza takiego gotowego kodu da mi w tym przypadku o wiele więcej niż gdybym miał próbować godzinami przypadkowych kombinacji, których jeszcze do końca nie rozumiem.