Tworzenie nowej tablicy na podstawie poprzedniej tablicy - funkcja (dziwny output)

0

Witam serdecznie,

Mój wykładowca zadał mi dość głupią pracę domową. Polega ona na stworzeniu funkcji o takim prototypie:

int yo (int *source, int ns, int *counter, int *result);

gdzie source to tablica wyjściowa składająca się z liczb, ns to liczba elementów owej tablicy, counter1 to tablica składająca się z liczb, które mówią o tym, ile razy element o tym samym indeksie z tablicy source ma pojawić się w tablicy końcowej - result.

Mój program wygląda tak (przykładowe dane):

#include <stdio.h>
#include <conio.h>
#include <string.h>

int yo (int *source, int ns, int *counter, int *result);

int main() { 

	int tab[] = {1, 2, 3, 4, 7, 9};
	int n = 6;
	int counter1[] = {0, 3, 1, 0, 4, 2};
	int final_result[100]; 

	int i;
	int k;

	k = yo(tab, n, counter1, final_result);

	for (i=0; i<k; i++) {
		printf("%d\n", final_result[i]);
	}

	getch();
	return 0;

}

int yo (int *source, int ns, int *counter, int *result) {

	int i, j;
	int k = 0;

	/*
	for (i=0; i<ns; i++) {
		printf("%d\n", *(source+i));
	}
	*/

	for (i=0; i<ns; i++) {

		for (j=0; j<counter[i]; j++) {

			result[k+j+1] = source[i];
			k++;

		}

	}

	return k;

}

Niestety w outpucie pojawiają się poza normalnymi dziwne liczby (np -858993460) zamiast tych, które powinny się tam pojawić (w tym wypadku to 2,2,2,3,7,7,7,7,9,9). Co robię źle? Proszę o pomoc.

Pozdrawiam

0

'k' i 'j' zwiększasz za każdym przejściem wewnętrznego for o 1, więc nie wstawiasz elementów po kolei
j = 0, k = 0
k + j + 1 = 1;
j = 1, k = 1
k + j + 1 = 3;
j = 2, k = 2
k + j + 1 = 5;

wynika z tego, że wstawiasz co dwa miejsca w tablicy wynikowej.
A gdyby tak wstawiać w miejsce k?

result[k] = source[i];

No i jeszcze skąd tam to +1 w result[k+j+1]. W c tablice mają elementy od 0. Tak zresztą wyświetlasz wyniki. Pierwsza liczba zawsze była z kosmosu mam rację?

0

Bardzo dziękuję za pomoc. Nie wiem skąd w ogóle wytrzasnąłem to k+j+1. Straszna głupota :) Teraz oczywiście śmiga! Dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1