Loading...
zzerro avatar zzerro 16 Точки

Интерполация (от упражненията)

Здравейте!

В упражненията беше даден този цикъл, който извършва същинската интерполция:

    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;
    }

0
C++ Programming 15/03/2017 12:32:05
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Искаш да кажеш:

double step = dataSize / (double) numSamples;

double posInResult = 0; double posInData = 0;

for (int i = 0; i < numSamples; i++) {
    result [i] = (int) posInResult; result[i] = data[(int)posInData];
    posInResult = posInResult + step; posInData = posInData + step;
}

предполагам ;) Ние на ръка тествахме с числа, които съвпадаха с индексите, но ако са други числата, твоето няма да работи. Но предполагам е просто недоглеждане.

Иначе да, това също е добър вариант на кода за тази задача :)

Поздрави,

Жоро

0
zzerro avatar zzerro 16 Точки

Благодаря за бързия отговор!

Все пак въпросът е какво точно искаме да получим чрез интерполацията: индексите в testData[] (моят вариант) или направо стойностите (лекцията). Всичко си работи, но изходът трябва да се оправи:

    for(int i = 0; i < 10; i++) {
        cout << samples[i] << endl;     cout << testData [ samples[i] ] << endl;
    }

Поздрави и на теб!

0
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

А, да, сега разбирам, да - ако го ползваш така, ще работи както трябва. Още една причина, поради която трябваше да кръстя по време на упражнението резултата на функцията sampledData (и тогава ти щеше да кръстиш твоя вариант sampledIndices, или нещо такова), за да е по-ясно

0
zzerro avatar zzerro 16 Точки

result [i] = (int) posInResult; result [i] = data [ (int) posInData ];

ето това май е най-доброто за копиране на стойности...

Ама аз имам друг въпрос. По време на упражненията до мен седеше едно момче от Сърбия и ме попита защо функцията е със звезда: int *getSamples(int data[], int dataSize, int numSamples).... Тръгнах да му обяснявам, че не можем да върнем пойнтер, ако функцията е от друг вид, т.е. всяка функция връща точно и само типа, в който е декларирана. Обаче се запънах, защото в мен се породи съмнение за въпросния нов масив, който създаваме в нея. Мислех си няма ли да стане същото, ако го направим като обикновен масив и запазим само пойнтера към него? Бях му обещал да направя тема във форума - и ето я laugh Досега се мъчих, обаче ако направим масив по обикновения начин, то в него не остават нито индекси, нито стойности пренесени от testData []. Ако някой иска да пробва (или има друга идея - нека я предложи), ето какво опитвах:


    int* result = new int[numSamples]; // работещ вариант

    int indexData[numSamples]; //неработещ
    int* result = indexData;        //вариант. След излизане от функцията всичко се губи.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.