Funkcja, tablice statyczne, notacja wskaźnikowa

0

Hejka,
Mam wykonać taki program

Napisz funkcję, która dokonuje przesunięcia elementów danej tablicy o 2 w lewo (trzeci
staje się pierwszym, czwarty drugim itd.), po czym wypisuje zmodyfikowaną tablicę.
Tablica powinna być przekazywana do funkcji z użyciem parametrów. Operacje na tablicy
należy wykonywać z użyciem notacji wskaźnikowej. Napisz program, który wczyta dwie
tablice statyczne o różnych rozmiarach i dokona ich przesunięcia z użyciem napisanej
funkcji.

Niestety, tyle udało mi się zrobić i nie wiem co dalej z tym uczynić.
Ktoś ma jakiś pomysł może? Wskazówkę?
(I czy to co jest napisane ma jakiś sens?
a jeśli tak to czy jak stworzę drugą taką tablicę to czy będzie dobrze?
i czy w ogóle o takie coś chodzi w tym zadaniu? )
Dzięki!

#include <stdio.h>
#include<mem.h>
using namespace std;



void funkcja( double tab[50])

{
 int n=50;
	double tab1[50];
	
for(int i=0; i<n; i++)
{
	tab[i]=i;
	printf("Tab[%d] = ", i);
	printf("%g\n", *(tab+i));
	
}
for(int i=0; i<n; i++)
{
	*(tab1+(i))=*(tab+(i+2));
	*(tab1+(i-2))=*(tab+(i));
	
	
}


printf("\nTablica przesunieta o dwie pozycje w lewo:\n\n");

for(int i=0; i<n; i++)
{
	printf("Tab1[%d]= ", i);
	printf("%g\n", *(tab1+i));

}

memcpy( tab1, tab , sizeof( tab1 ) ) ;

}



int main()
{
	
	double tab[50];
	
	funkcja (tab);
	
	
	
	
	
	
	return 0;
}



0

Co drukuje i co z elementami pierwszym i drugim?

0

no właśnie ten pierwszy i drugi 'ginie'
A w miejscu tab1[48] i tab1[49] drukują sie dziwne liczby

0

A co ma się dziać, maja przechodzić cyklicznie?

0

no właśnie tego nie wiem,czy tak jak sie teraz to dzieje jest w porządku?

0

Te dziwne liczby to efekt wyjścia poza tablicę.
Popraw ten fragment:

for(int i=0; i<n; i++)
{
    *(tab1+(i))=*(tab+(i+2));
    *(tab1+(i-2))=*(tab+(i));

}

Edit:
Dodatkowo nie inicjalizujesz wartości w tab1 a nadpisujesz tylko część. Na końcu zostają śmieci.

Aby spełnić warunki zadania funkcja musi mieć możliwość pracy z różnymi długościami tablic więc deklaracja powinna przyjmować dodatkowy parametr:
void funkcja( double tab[], size_t n)

0
it234 napisał(a):

memcpy( tab1, tab , sizeof( tab1 ) ) ;

Nie da się w en sposób określić rozmiaru przekazanej tablicy, przekaż ilość elementów jako osobny parametr size_t size
Po czym: memcpy( tab1, tab , size*sizeof(*tab1) ) ;

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