nanoant20 |
» 2019-04-18 20:47:08 @rottingham na początku sorki wprowadziłem cię w błąd ale nie zrobiłem tego rozmyslnie Ten Twój kod jest poprawny przetestuj go sobie dodając cout #include <iostream>
using namespace std;
int main() { int iloscElementow = 1, rozmiar = 0; int * tablica = new int[ iloscElementow ]; cout << "iloscElementow: " << iloscElementow << ", rozmiar: " << rozmiar << endl; cout << "Podawaj liczby, 0 konczy wczytywanie.\n"; while( true ) { int liczba; cin >> liczba; if( liczba == 0 ) break; if( rozmiar < iloscElementow ) { tablica[ rozmiar ] = liczba; rozmiar++; cout << "iloscElementow: " << iloscElementow << ", rozmiar: " << rozmiar << endl; continue; } if( iloscElementow >= rozmiar ) { iloscElementow += 3; int * nowa = new int[ iloscElementow ]; for( int i = 0; i < rozmiar; ++i ) nowa[ i ] = tablica[ i ]; nowa[ rozmiar ] = liczba; delete[] tablica; tablica = nowa; rozmiar++; cout << "iloscElementow: " << iloscElementow << ", rozmiar: " << rozmiar << endl; } } cout << "iloscElementow: " << iloscElementow << ", 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; }
|
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-04-18 20:51:52 @nanoant20 - ok, rozumiem. No i w tym przypadku - popraw mnie jeśli się mylę - śmiało możemy usunąć drugiego ifa? |
|
nanoant20 |
» 2019-04-18 20:56:59 tego if( iloscElementow >= rozmiar ) możesz zakomentować lub usuń, jak chcesz #include <iostream>
using namespace std;
int main() { int wTab = 1, rozmiar = 0; signed int * tablica = new int[ wTab ]; cout << "wTab: " << wTab << ", rozmiar: " << rozmiar << endl; cout << "Podawaj liczby, 0 konczy wczytywanie.\n"; while( true ) { int liczba; cin >> liczba; if( liczba == 0 ) break; if( rozmiar < wTab ) { tablica[ rozmiar ] = liczba; rozmiar++; cout << "wTab: " << wTab << ", rozmiar: " << rozmiar << endl; continue; } { wTab += 3; int * nowa = new int[ wTab ]; for( int i = 0; i < rozmiar; ++i ) nowa[ i ] = tablica[ i ]; nowa[ rozmiar ] = liczba; delete[] tablica; tablica = nowa; rozmiar++; cout << "wTab: " << wTab << ", rozmiar: " << rozmiar << endl; } } cout << "wTab: " << wTab << ", 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; }
i dlatego jeszcze raz Cię przepraszam, za swoje niefrasobliwe podejście i proszę Cię, żebyś doszlifował ten kod, chodzi o pozamienianie tych nazw zmiennych - wTab to pojemność tablicy (capacity) - rozmiar pokazuje ilość elementów (size) jeszcze raz mea culpa, mea maxima culpa, mea faux pas |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-04-18 21:22:06 Znaczy - chodzi Ci tylko o kwestie nazewnictwa? Żeby zmienić wTab na pojemnosc ? Ja nazywając zmienną wTab - miałem na myśli właśnie, że jest to wielkośćTablicy. |
|
nanoant20 |
» 2019-04-18 21:28:52 zamień w tych cout cout << "Pojemnosć: " << wTab << ", IloscElementow: " << rozmiar << endl; żeby było widomo co program robi CONGRATULATIONS napisałeś program na 6+p.s. zawsze trzeba kontrolować zachowanie programu, ja to robie za pomocą cout, debagger'a, watches później możesz sobie takiego cout zakomentować //edit @rottingham jeszcze w cout tak jak piszesz dla przejrzystości i po to, że jak kiedyś do tego wrócisz, zeby było wszystko klarowne, żeby nie trzeba było się domyslać. cout << "pojemnosc: " << pojemnosc << ", Ilosc Elementow: " << rozmiar << endl; |
|
rottingham Temat założony przez niniejszego użytkownika |
» 2019-04-18 21:39:09 @nanoant20 - nie no luz, rozumiem. Nazwy zmieniłem dla przejrzystości. Rzeczywiście nazwa pojemność jest bardziej oczywista niż wTab. @pekfos Po co tam if else? Jeśli jest miejsce, dodajesz element, jeśli nie ma miejsca, robisz miejsce i dodajesz element. |
Chodzi Ci o to, żeby zamiast if else był jeden if? Tak jak w poniższym kodzie? #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 ) { tablica[ rozmiar ] = liczba; rozmiar++; cout << "pojemnosc: " << pojemnosc << ", rozmiar: " << rozmiar << endl; continue; } { 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 << "Te same liczby, ale odwrotnie!\n"; cout << "pojemnosc: " << pojemnosc << ", rozmiar: " << rozmiar << endl; for( int i = rozmiar - 1; i >= 0; --i ) cout << *( tablica + i ) << ' '; delete[] tablica; cout << endl; cin.get(); cin.get(); return 0; }
//edit dzięki za rady. Zawsze staram się w miarę możliwości używać cout do testowania i z reguły pokazywało mi to wiele błędów. Przy tym kodzie jakoś te testy mi specjalnie nie wychodziły. A poza tym dziwna sprawa, że dwa razy wrzucałem kod, który się kompilował u mnie. Wrzucałem na forum i w odpowiedzi dostawałem info, że nie działa. Włączałem na nowo C::B i tym razem kod... nawet się nie chciał skompilować (ten sam kod, który się parę minut wcześniej kompilował!).. |
|
nanoant20 |
» 2019-04-18 21:59:34 very good |
|
pekfos |
» 2019-04-19 12:03:26 Chodzi Ci o to, żeby zamiast if else był jeden if? Tak jak w poniższym kodzie? |
Nie. Zrobiłeś workaround na uwagę o if else, a nie na sens mojej uwagi, czyli niepotrzebną redundancję w kodzie. Jeśli jest miejsce, dodajesz element, jeśli nie ma miejsca, robisz miejsce i dodajesz element. |
a więc robisz if( jest miejsce ) dodaj element; else { zrob miejsce; dodaj element; } zamiast prostszego if( nie ma miejsca ) zrob miejsce;
dodaj element; |
|
1 2 3 « 4 » 5 |