nanoant20 |
» 2019-04-19 20:10:04 czy ten poniższy kod spełnia #include <iostream>
using namespace std;
int main() { int pojemnosc = 1, rozmiar = 0; int * tablica = new int[ pojemnosc ]; cout << "pojemnosc: " << pojemnosc << ", rozmiar: " << rozmiar << endl; cout << "Podawaj liczby, 0 konczy wczytywanie.\n"; while( true ) { int liczba; cin >> liczba; if( liczba == 0 ) break; if( rozmiar < pojemnosc ) { cout << "Is a lot of memory. Add elements." << endl; tablica[ rozmiar ] = liczba; rozmiar++; cout << "pojemnosc: " << pojemnosc << ", rozmiar: " << rozmiar << endl; } else { cout << "Out of memory. Reserve memory and add elements." << endl; pojemnosc += 3; int * nowa = new int[ pojemnosc ]; for( int i = 0; i < rozmiar; ++i ) nowa[ i ] = tablica[ i ]; nowa[ rozmiar ] = liczba; delete[] tablica; tablica = nowa; rozmiar++; cout << "pojemnosc: " << pojemnosc << ", rozmiar: " << rozmiar << endl; } } cout << "pojemnosc: " << pojemnosc << ", rozmiar: " << rozmiar << endl; cout << "Te same liczby, ale odwrotnie!\n"; for( int i = rozmiar - 1; i >= 0; --i ) cout << *( tablica + i ) << ' '; delete[] tablica; cout << endl; cin.get(); cin.get(); return 0; }
te założenia?
if( jest miejsce ) dodaj element; else { zrob miejsce; dodaj element; }
|
Chodzi o usunięcię tego continue; ? |
|
pekfos |
» 2019-04-19 20:43:12 Chodzi o usunięcię tego continue; ? |
Chodzi o usunięcie tego oczywistego powtórzenia "dodaj element". Dlatego napisałem by zrobić prościej, tak: if( nie ma miejsca ) zrob miejsce;
dodaj element; |
|
nanoant20 |
» 2019-04-19 22:17:55 Dlatego napisałem by zrobić prościej |
Czytelniejsze rozwiązanie jest @rottingham, ale proszę prościej #include <iostream>
using namespace std;
int main() { int * tablica = nullptr, rozmiar = 0, liczba, ilosc_liczb = 0; cout << "Podawaj liczby, 0 konczy wczytywanie.\n"; while( true ) { cout << "\nIlosc Liczb: " << ilosc_liczb << ", Rozmiar tablicy: " << rozmiar << endl; cin >> liczba; if( liczba == 0 ) break; ilosc_liczb++; if( rozmiar < ilosc_liczb ) { if( rozmiar == 0 ) rozmiar++; else rozmiar += 3; int * nowa = new int[ rozmiar ]; for( int i = 0; i < ilosc_liczb - 1; i++ ) { nowa[ i ] = tablica[ i ]; } delete[] tablica; tablica = nowa; } tablica[ ilosc_liczb - 1 ] = liczba; } cout << endl; cout << "Te same liczby, ale odwrotnie!\n"; for( int i = ilosc_liczb - 1; i >= 0; --i ) cout << *( tablica + i ) << ' '; delete[] tablica; cout << endl; cin.get(); cin.get(); return 0; }
//edit poprawiłem jedno i drugie rozwiązania spełniają założenia zadania Zmodyfikuj przykładowy kod tak, aby nowa tablica nie była tworzona za każdym razem, gdy dodawany jest nowy element. |
|
|
pekfos |
» 2019-04-19 22:24:35 #include <iostream>
int main() { int * tablica = nullptr, rozmiar = 0, pojemnosc = 0; std::cout << "Podawaj liczby, 0 konczy wczytywanie.\n"; while( true ) { int liczba; std::cin >> liczba; if( liczba == 0 ) break; if( rozmiar == pojemnosc ) { pojemnosc += 3; int * nowa = new int[ pojemnosc ]; for( int i = 0; i < rozmiar; ++i ) nowa[ i ] = tablica[ i ]; delete[] tablica; tablica = nowa; } tablica[ rozmiar ] = liczba; rozmiar++; } std::cout << "Te same liczby, ale odwrotnie!\n"; for( int i = rozmiar - 1; i >= 0; --i ) std::cout << tablica[ i ] << ' '; delete[] tablica; } ? jedno i drugie rozwiązania spełniają założenia zadania |
Od drugiej strony tematu pytanie brzmi Czy da się to zrobić krócej na tym etapie? |
|
|
nanoant20 |
» 2019-04-19 23:01:28 << removed - "zrobić krócej na tym etapie" >> |
|
nanoant20 |
» 2019-04-19 23:23:49 @pekfos dlaczego usunąłeś mój post z moim rozwiązaniem ? zostawiłeś swój post z moim omyłkowo wklejonym kodem, mimo, że Cię poprosiłem o edycje lub usunięcie bądź konsekwentny w swoich działaniachi zostaw post z clasą vector, które napisałem Od drugiej strony tematu pytanie brzmi Czy da się to zrobić krócej na tym etapie? |
Jak się da, to się da. #include <iostream> #include <vector> #include <iterator>
using namespace std;
int main() { int liczba; vector < int > wektor; cout << "Rozmiar: " << wektor.size() << " Pojemnosc: " << wektor.capacity() << endl; std::cout << "Podawaj liczby, 0 konczy wczytywanie.\n"; while(( std::cin >> liczba ) && liczba ) { wektor.push_back( liczba ); cout << "Rozmiar: " << wektor.size() << " Pojemnosc: " << wektor.capacity() << endl; } cout << endl; cout << "Rozmiar: " << wektor.size() << " Pojemnosc: " << wektor.capacity() << endl; cout << "Te same liczby, ale odwrotnie!\n"; std::reverse( std::begin( wektor ), std::end( wektor ) ); for( auto i: wektor ) std::cout << i << ' '; std::cout << '\n'; cout << endl; cin.get(); cin.get(); return 0; }
|
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-04-20 12:20:01 Doszliśmy do rozwiązania, o które pytałem, więc uznaję temat za zamknięty. Dzięki za pomoc @pekfos. Gdy zrobiłem ostatecznie to rozwiązanie if( nie ma miejsca ) zrob miejsce;
dodaj element;
|
to sam zacząłem się sobie dziwić dlaczego wcześniej nie widziałem tak prostego wyjścia z sytuacji. Dzięki za pomoc @nanoant20. Jakiś spór tutaj wyniknął chyba z tego, że nie do końca zrozumiałeś moją intencję, gdy pytałem @pekfos o jeszcze krótsze (ale mieszczące się w ramach kursu) rozwiązanie. Zdarza się. Zła komunikacja to czasem najgorsza bariera. Pozdrawiam i życzę udanego wypoczynku w święta! |
|
1 2 3 4 « 5 » |