Pomógłby ktoś? C++

0

Mam taki kod do napisania:
Napisz program, który pyta użytkownika o liczbę naturalną, maksymalnie 22. Na tej podstawie tworzy tablicę tej wielkości. Do tablicy wczytuje kolejno liczby podane przez użytkownika. Po podaniu wszystkich liczb do tablicy liczby ujemne należy zastąpić zerami, a następnie wydrukować wszystkie liczby na ekranie. Pamięć dla tablicy ma być przydzielona dynamicznie.
Na razie mój kod wygląda tak:
#include<iostream>
using namespace std;
int liczba;
int tablica[22];
int main()
{
cout<<"Podaj liczbe:"<<endl;
cin>>liczba;
if(liczba<=22)
{
int tablica[0];
int i=0;
while(cin>>tablica[i])i++;
cout<<tablica;
}
else
{
cout<<"Tablica nie moze byc taka duza"<<endl;
}
}

co jest tu jeszcze do zrobienia?

5

int tablica[22]; ← to Ci tworzy dwudziestodwu elementową tablicę, a w zadaniu masz stworzyć tablicę o rozmiarze podanym przez użytkownika. W zależności od tego, co autor zadania miał na myśli, użyj albo std::vector (lepsze rozwiązanie), albo new[] (bardziej dosłowne rozwiązanie).
int tablica[0]; ← to Ci tworzy zero elementową tablicę i przesłania główną tablicę. To błąd.
Nigdzie nie sprawdzasz, czy wartości w tablicy są ujemne, nie zastępujesz ich też zerami.

co jest tu jeszcze do zrobienia?

Program spełniający warunki zadania.

0

Brakuje też wyświetlenia tablicy po zamianie ujemnych liczb na zero.
Może taki overkill?

#include <iostream>
#include <iterator>
#include <algorithm>
#include <cmath>
using namespace std;

int main()
{
	cout<<"Podaj rozmiar tablicy: ";
	istream_iterator<int> iin(cin);
	int count=*iin;
	if(count<1) cout<<"Za maly rozmiar"<<endl;
	else if(count>22) cout<<"Za duzy rozmiar"<<endl;
	else
	{
		cout<<"Podaj "<<count<<" elementow tablicy: ";
		vector<int> tb(count);
		copy_n(++iin,count,begin(tb));
		transform(begin(tb),end(tb),begin(tb),[](int v){ return max(0,v); });
		ostream_iterator<int> iout(cout," ");
		copy_n(begin(tb),count,iout);
	}	
	return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.