Program z wskaznikami

0

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

W cpp oczywiście.
Mogł by ktoś taki zrobić ? Z góry dziękuje.

2

Pomyliłeś działy: http://4programmers.net/Forum/Og%C5%82oszenia_drobne

50 zł i gotowe.

0

Za 50 zł, hah no nieźle ? Gdybym miał godzinę sam bym, go napisał to są podstawy programowania. Programista z zawodu zrobił by go w 3 minuty.

3

Chodzi o to że przychodzisz tu i mówisz że coś chcesz, z jakiej racji ktoś ma odwalać robote za Ciebie?
Gdybyś powiedział z czym masz problem (a nie prosił o gotowca), z pewnością ktoś by Ci pomógł.

0

Np. może dlatego, że ktoś to lubi i czerpie z tego przyjemność a ja niekoniecznie. Skoro nie ma tu takiej osoby to znajdę ją gdzie indziej świat jest duży. Ale zawsze warto spróbować.

13

Dobra, przekonałeś mnie, masz:

template<typename T = int, typename Alloc = std::allocator<T>>
T* copyAllocNIf(T* first, int n){
    auto pred = std::bind(std::logical_not<void>{}, std::bind(std::equal_to<void>{}, 0, std::placeholders::_1));
	auto s = std::count_if(first, first+n, pred);
	Alloc alloc{};
	T* ret = alloc.allocate(s);
	std::copy_if(first, first+n, ret, pred);
	return ret;
}

http://melpon.org/wandbox/permlink/HK7YPR3hzrKwj2Tv

0

Hmmm to moze jednak zagrajmy w te pytania, bo z tego programu nic nie rozumiem, a chce rozumieć.
Moje pytanie brzmi jak zrobić if-a, który bedzie sprawdzał warunek.
Póki co mam tyle.Załącznik>>

if (tab1[i]!=0) i co dalej ?

0

Ooo... kolejna perełka się szykuje!
Jakiś wesoły rok się trafił.

eqsin napisał(a):

Np. może dlatego, że ktoś to lubi i czerpie z tego przyjemność a ja niekoniecznie. Skoro nie ma tu takiej osoby to znajdę ją gdzie indziej świat jest duży. Ale zawsze warto spróbować.

Dobre.
Naprawdę bardzo dużo ludzi ma hobby, polegajce na klepaniu dziecinnego kodu dla gimnazjalistów...

0
eqsin napisał(a):

Hmmm to moze jednak zagrajmy w te pytania, bo z tego programu nic nie rozumiem, a chce rozumieć.

Zacznij od poprawnej deklaracji funkcji:

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

Jak zadeklarujesz funkcję, wtedy będziemy się martwić co robić dalej.

0

No dobra mam tyle. W sumie myślałem, ze mi łatwiej pójdzie.

0
#include<iostream>
using namespace std;

int *spra_czy_zero(int n,int tab1[],int tab2[])
{
for (int i=0; i<n; i++)
{
	if (tab1[i]!=0)
	{
	for (int i=0; i<n; i++)
	{
		tab2[i]=tab1[i];
	}
	}
		else  ;
}	
return tab2;	
}


main ()
{
int n;
cout <<"Podaj n=";
cin >>n;
int tab1[n], tab2[n];

for (int i=0; i<n; i++)
{
	cout <<"Podaj "<< i+1 <<" element talbicy:  ";
	cin >>tab1[i];
}
spra_czy_zero(n,tab1,tab2);

for (int i=0; i<n; i++)
cout<<tab2[i]<<" ";
}
0

jak @kq pokazał w swoim poście, musisz zaimplementować 2 pętle:

pierwsza ustali rozmiar Twojego tab2, a druga zapisze do niej elementy, poczytaj o new T[]

0

Doszedłem do tego, nie wiem czy w ogóle w dobry kierunku idę.

#include <iostream>
using namespace std;

void pobierz_n(int *n)
{
	 cout << "Podaj n= ";
 	 cin>>*n;
}

int *zwroc(int tab[],int n)
{
		for (int i=0;i<n;i++)
	{
		cout <<"Podaj "<<i+1<< " element tablicy: ";
		cin >> tab [i];
	}
	return tab;	
}

int sprawdz_ile(int tab[],int n)
{
int k=0;
		for (int i=0;i<n;i++)
		if(tab[i]!=0)
		{
			k+=1;
		}
		return k;
} 

int *przep_elem(int tab[],int tab2[], int n, int k)
{
	for (int i=0;i<n;i++)
	{
		if(tab[i]!=0)
		for (int i=0;i<n;i++)
		tab2[i]=tab[i];
	}
	for (int i=0;i<n;i++)
	cout<<tab2[i]<<" ";
	
return tab2;		
}
main ()

{
	int n,k=1;
	pobierz_n(&n);
	int tab1[n];
	int *tab=zwroc(tab1,n);
	k=sprawdz_ile(tab1,n);
	int tab2[k];
	*przep_elem(tab,tab2,n,k);	
} 
2

Doszedłem do tego, nie wiem czy w ogóle w dobry kierunku idę.

Nie, zły kierunek. Lepszym byłaby filozofia albo budownictwo.

0

Odnosząc sie do wszystkich aroganckich komentarzy. Jak bym takowe pojęcie miał to bym nie siedział na tym forum w poszukiwaniu, pomocy która jest tak niechętnie udzielana przez cześć społeczeństwa zgorzkniałego i pozbawionego jakichkolwiek odruchów ludzkich.

1

Nie ma potrzeby się frustrować.

Funkcja sprawdz_ile jest ok.

sygnatura funkcji zwroc (poza nazwą) jest ok, ale jej definicja już nie - Twoim zadaniem jest utworzenie nowej tablicy o zadanej wielkości.

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