Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

R. 44 - zadanie domowe - czy o to chodziło?

Ostatnio zmodyfikowano 2019-04-20 12:20
Autor Wiadomość
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

C/C++
#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 )
        {
            // Brakuje miejsca, utwórz większą tablicę
            iloscElementow += 3;
            int * nowa = new int[ iloscElementow ];
           
            // Skopiuj dane
            for( int i = 0; i < rozmiar; ++i )
                 nowa[ i ] = tablica[ i ];
           
            // Dodaj nową wartość
            nowa[ rozmiar ] = liczba;
           
            // Usuń starą tablicę
            delete[] tablica;
           
            // Zakutalizuj zmienne
            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;
}
P-174459
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?
P-174460
nanoant20
» 2019-04-18 20:56:59
tego
if( iloscElementow >= rozmiar )
możesz zakomentować lub usuń, jak chcesz

C/C++
#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;
        }
        //if( wTab >= rozmiar ) //zakomentowac
        {
            // Brakuje miejsca, utwórz większą tablicę
            wTab += 3;
            int * nowa = new int[ wTab ];
           
            // Skopiuj dane
            for( int i = 0; i < rozmiar; ++i )
                 nowa[ i ] = tablica[ i ];
           
            // Dodaj nową wartość
            nowa[ rozmiar ] = liczba;
           
            // Usuń starą tablicę
            delete[] tablica;
           
            // Zakutalizuj zmienne
            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
P-174461
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.
P-174462
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;
P-174463
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?

C/C++
#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;
        }
        //if( pojemnosc >= rozmiar ) //zakomentowac
        {
            // Brakuje miejsca, utwórz większą tablicę
            pojemnosc += 3;
            int * nowa = new int[ pojemnosc ];
           
            // Skopiuj dane
            for( int i = 0; i < rozmiar; ++i )
                 nowa[ i ] = tablica[ i ];
           
            // Dodaj nową wartość
            nowa[ rozmiar ] = liczba;
           
            // Usuń starą tablicę
            delete[] tablica;
           
            // Zakutalizuj zmienne
            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ł!)..
P-174464
nanoant20
» 2019-04-18 21:59:34
very good
P-174465
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
C/C++
if( jest miejsce )
     dodaj element;
else
{
    zrob miejsce;
    dodaj element;
}
zamiast prostszego
C/C++
if( nie ma miejsca )
     zrob miejsce;

dodaj element;
P-174469
1 2 3 « 4 » 5
Poprzednia strona Strona 4 z 5 Następna strona