przepisywanie wartosci niezerowych miedzy tablicami

0

Jaki warunek wrzucić do else żeby funkcja po napotkaniu 0 w tab1 nie przypisywała tab2 losowej wartości?

Zadanie: Napisz funkcję, która dostaje w argumentach dodatnią liczbę całkowitą n oraz n-elementową tablicę liczb całkowitych tab1 o elementach typu int, i przepisuje do nowo utworzonej tablicy tab2 elementy tablicy tab1 o wartości różnej od zera. Rozmiar nowo tworzonej tablicy tab2 powinien być równy liczbie niezerowych elementów tablicy tab1. Jako wartość funkcja powinna zwrócić wskaźnik na pierwszy element tablicy tab2.

#include <iostream>
using namespace std;

int* f(int n, int *tab1) {

	int rozmiar_tab2 = 0;
	for (int i = 0; i < n; ++i) {
		if (tab1[i] != 0) {
			rozmiar_tab2++;
		}
	}

	int *tab2 = new int[rozmiar_tab2];

	for (int i = 0; i < rozmiar_tab2; ++i) {
		if (tab1[i] != 0) {
			tab2[i] = tab1[i];
		} else {
			//???????????
		}
	}

	cout << "tab2 po przepisaniu: " << endl;
	for (int i = 0; i < rozmiar_tab2; ++i)
		cout << tab2[i] << "\t";

	cout << endl;
	return tab2;
}

int main() {

	int n;
	cin >> n;
	int *tab1 = new int[n];
	for (int i = 0; i < n; ++i)
		cin >> tab1[i];
	cout << f(n, tab1);
	return 0;
}

1

Potrzebujesz w forze manipulować indeksami do obu tablic, nie tylko i:

for (int i1 = 0, i2 = 0; i1 < n && i2 < rozmiar_tab2; i1++) { 
    if (tab1[i1] != 0) { // Sprawdzasz, czy element w pierwszej tablicy jest różny od 0.
        tab2[i2] = tab1[i1]; // W drugiej tablicy pod i2 wpisujesz element spod i1 z pierwszej tablicy.
        i2++; // Zwiększasz indeks i2 tylko wtedy, gdy coś dopisałeś
    }
}

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