Naprzemienne wypełnianie tablicy liczbami

0

Cześć, mam do napisania funkcję, która jako argumenty dostaje 3 tablice (o wielkości n, n, 2*n) oraz liczbę n. Dwie tablice są uzupełnione liczbami, trzecia tablica zawiera naprzemiennie liczby z poprzednich tablic.

 #include <stdio.h>

void funkcja(int tab1[],int tab2[],int tab3[],int n)
{
	int i;
 	for(i=0;i<n;i++) //uzupelnianie tablicy w petli
	{
	if (i%2 ==0) tab3[i]=tab1[i]; else tab3[i]=tab2[i];
	}
	
}
	int main()
{
	int i;
	int tablica[]={1,2,4,8,16};
	int tablica2[]={5,4,3,2,1};
	int tablica3[10];
	funkcja(tablica,tablica2,tablica3,10);
	for (i=0;i<10;i++) printf("%d\n", tablica3[i]); //test, wypisanie liczb
}

W tym kodzie powinienem dostać na wyjściu takie wyniki:

1
5
2
4
4
3
8
2
16
1

A dostaję:

1
4
4
2
16
0
1728111808 (???)
0
5
4

Coś jest nie tak w pętli w funkcji, to jest na pewno coś trywialnego ale nie mogę tego znaleźć :/. Czy ktoś mógłby mi pomóc

dodanie znaczników <code> i <code class="c"> dla wyjścia - furious programming

0

Wychodzisz poza zakresy tablic - tab1 oraz tab2 mają po pięć elementów, a Ty próbujesz czytać szósty, siódmy (...).

0

To żart? Rozumiesz że nie możesz się przesuwać po tych 3 tablicach jednym licznikiem? Bo dwie tablice mają PO 5 ELEMENTÓW a trzecia ma ich 10. A ty sobie wesoło indeksujesz wszystkie 3 tym samym i. Czego się spozdziewasz dla i=9 na przykład?
tab[9] = tab2[9];
? ;]

0
void f(size_t s, int arrA[s], int arrB[s], int arrC[2*s]) {
	size_t i, j;
	for(i = j = 0; i < 2*s; ++i) {
		arrC[i] = (i%2==0) ? arrA[j] : arrB[j++];
	}
}

abstrahując od samego zadania nie rozumiem działania tych "variable length array" skoro i tak jak podaje jako argument 4,arrA,arrB,arrC a arrA to int arrA[7]; to kompilator nic nie protestuje ;?

0

Ooops, zlamiłem z tymi tablicami, wybaczcie mi :/

#include <stdio.h>

void funkcja(int tab1[],int tab2[],int tab3[],int n)
{
	int i;
 	for(i=0;i<5;i++) tab3[i*2]=tab1[i];
	for(i=0;i<5;i++) tab3[i*2+1]=tab2[i];
	
}

int main()
{
	int i;
	int tablica[]={1,2,3,4,5};
	int tablica2[]={5,4,3,2,1};
	int tablica3[10];
	funkcja(tablica,tablica2,tablica3,10);
	for (i=0;i<10;i++) printf("%d\n", tablica3[i]); //test, wypisanie liczb
	return 0;
}

Działa :)

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