Witam :) mam problem z zadaniem z podręcznika Prata, ktore polega m.in na tym, żeby utworzyć funkcje obsługujące tablice , ale zamiast używać np. int funkcja( double tab[ ], int size) maja uzywac dwoch wskaznikow okreslajacych 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.
Chodzi o to, że gdy zwracam (wg mnie XD ) wskaźnik na przedostatni wypelniony element w funkcji wprowadzajacej dane do tablicy to cos sie psuje gdy podam znak inny niz liczbe ( podanie innego znaku niz cyfra albo liczby ujemnej mialo konczyc wprowadzanie danych do tablicy), pewnie cos zepsulam ze wskaznikami, nawet nie mam pewnosci, czy faktycznie zwracam wskaznik na przedostatni element ...
#include<iostream>
using namespace std;
const int SIZE = 6;
/*
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.
*/
int fill( int *beg, int *end);
void show(int *beg, int *end);
//void revaluate(double tab[], int *size);
int main(){
int wartosci[SIZE];
int ile = fill(wartosci, wartosci + SIZE);
//cout << ile;
show(wartosci, wartosci + ile );
return 0;
}
int fill(int *beg, int *end){
int *i=0;
int n=0;
for (i=beg; i != end; i++){
cout << n+1 << ". ";
cin >> *i;
if(!cin){
cin.clear();
while(cin.get() != '\n')
continue;
cout << "Bledne dane!" << endl;
break;
}
else if(*i < 0)
break;
n++;
}
return (*beg + *i ); // TU NA PEWNO JEST BLAD, ale nie wiem jak to zrobic inaczej
}
void show(int *beg, int *end){
int *i=0;
int n=0;
for (i=beg; i != end; i++){
cout << n+1 << ". " << *i << endl;
n++;
}
}
/*void revaluate(double r; double tab, int size){
for ( int i=0; i < size; i++)
tab[i] += r;
}*/
ment