Интерполация (от упражненията)
Здравейте!
В упражненията беше даден този цикъл, който извършва същинската интерполция:
double step = dataSize / (double) numSamples;
int posInResult = 0;
for (double pos = 0; pos < dataSize; pos += step) {
int actualPos = (int) pos;
result [posInResult] = data [actualPos];
posInResult++;
}
Също така ставаше дума и за добра четимост. Искам да предложа още един вариант със съвсем познат вид на цикъла:
double step = dataSize / (double) numSamples;
double posInResult = 0;
for (int i = 0; i < numSamples; i++) {
result [i] = (int) posInResult;
posInResult = posInResult + step;
}
Благодаря за бързия отговор!
Все пак въпросът е какво точно искаме да получим чрез интерполацията: индексите в testData[] (моят вариант) или направо стойностите (лекцията). Всичко си работи, но изходът трябва да се оправи:
for(int i = 0; i < 10; i++) {
cout << samples[i] << endl; cout << testData [ samples[i] ] << endl;}
Поздрави и на теб!
А, да, сега разбирам, да - ако го ползваш така, ще работи както трябва. Още една причина, поради която трябваше да кръстя по време на упражнението резултата на функцията sampledData (и тогава ти щеше да кръстиш твоя вариант sampledIndices, или нещо такова), за да е по-ясно
result [i] = (int) posInResult;result [i] = data [ (int) posInData ];ето това май е най-доброто за копиране на стойности...
Ама аз имам друг въпрос. По време на упражненията до мен седеше едно момче от Сърбия и ме попита защо функцията е със звезда: int *getSamples(int data[], int dataSize, int numSamples).... Тръгнах да му обяснявам, че не можем да върнем пойнтер, ако функцията е от друг вид, т.е. всяка функция връща точно и само типа, в който е декларирана. Обаче се запънах, защото в мен се породи съмнение за въпросния нов масив, който създаваме в нея. Мислех си няма ли да стане същото, ако го направим като обикновен масив и запазим само пойнтера към него? Бях му обещал да направя тема във форума - и ето я Досега се мъчих, обаче ако направим масив по обикновения начин, то в него не остават нито индекси, нито стойности пренесени от testData []. Ако някой иска да пробва (или има друга идея - нека я предложи), ето какво опитвах:
int* result = new int[numSamples]; // работещ вариант
int indexData[numSamples]; //неработещ
int* result = indexData; //вариант. След излизане от функцията всичко се губи.