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

Pytanie do rozwiązania zadania domowego rozdział 44

Ostatnio zmodyfikowano 2019-02-21 21:18
Autor Wiadomość
wirusomaniak
Temat założony przez niniejszego użytkownika
Pytanie do rozwiązania zadania domowego rozdział 44
» 2019-02-21 19:29:01
C/C++
#include <iostream>
/*Zmodyfikuj przykładowy kod tak, aby nowa tablica nie była tworzona za każdym razem, gdy dodawany jest nowy element.*/

int main()
{
    bool pf;
    int x;
    int * tablica = nullptr, rozmiar = 2;
    tablica = new int[ 2 ];
    std::cout << "Podawaj liczby, 0 konczy wczytywanie.\n";
   
    while( true ) //nieskonczona petla
    {
        x = 0;
        pf = false;
        int liczba[ 2 ];
        for( int i = 0; i < 2; i++ )
        {
            std::cin >> liczba[ i ];
            // Dodaj now¹ wartoœæ
            if( liczba[ i ] == 0 )
            {
                if( x == 1 )
                     rozmiar--;
               
                if( x == 0 )
                     rozmiar -= 2;
               
                pf = true;
                break;
            }
            tablica[ rozmiar -( 2 - i ) ] = liczba[ i ];
            x++;
        }
        if( pf )
             break;
       
        if( x == 2 )
        {
            // Brakuje miejsca, utwórz wiêksz¹ tablicê
            int * nowa = new int[ rozmiar + 2 ];
           
            // Skopiuj dane
            for( int i = 0; i < rozmiar; ++i )
                 nowa[ i ] = tablica[ i ];
           
            // Usuñ star¹ tablicê
            delete[] tablica;
           
            // Zakutalizuj zmienne
            tablica = nowa; //zmiana nazwy pamiec caly czas na nowa
            rozmiar += 2;
        }
    }
   
    std::cout << "Te same liczby, ale odwrotnie!\n";
   
    for( int i = rozmiar - 1; i >= 0; --i )
         std::cout << tablica[ i ] << ' ';
   
    delete[] tablica;
}
Poproszę o stwierdzenie czy mój kod spełnia założenia postawione w pracy domowej.
P-174029
pekfos
» 2019-02-21 19:37:18
Przekombinowane, mnóstwo kodu, w ogóle nie o to chodziło.. Ale wciąż, nowa tablica nie jest tworzona za każdym razem, gdy dodawany jest nowy element. Teoretycznie spełnia założenia.
P-174030
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2019-02-21 20:04:13
Rozumiem. Dziękuję za analizę. Mógłbyś mnie w takim razie naprowadzić o co chodziło?
P-174031
pekfos
» 2019-02-21 20:22:38
Dodałeś nową tablicę, by mieć więcej miejsca na liczby, a do tego nie trzeba dodatkowej tablicy. Wystarczy być bardziej sprytnym z użyciem tablicy, która już jest.
P-174032
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2019-02-21 20:43:39
Dziękuję.
P-174033
wirusomaniak
Temat założony przez niniejszego użytkownika
» 2019-02-21 21:07:48
C/C++
#include <iostream>
/*Zmodyfikuj przykładowy kod tak, aby nowa tablica nie była tworzona za każdym razem, gdy dodawany jest nowy element.*/

int main()
{
    int x = 0;
    int * tablica = nullptr, rozmiar = 2;
    tablica = new int[ 2 ];
    std::cout << "Podawaj liczby, 0 konczy wczytywanie.\n";
   
    while( true ) //nieskonczona petla
    {
        if( x == 2 )
             x = 0;
       
        int liczba;
        std::cin >> liczba;
        // Dodaj now¹ wartoœæ
        if( liczba == 0 )
        {
            if( x == 1 )
                 rozmiar--;
           
            if( x == 0 )
                 rozmiar -= 2;
           
            break;
        }
        tablica[ rozmiar -( 2 - x ) ] = liczba;
        x++;
       
        if( x == 2 )
        {
            // Brakuje miejsca, utwórz wiêksz¹ tablicê
            int * nowa = new int[ rozmiar + 2 ];
           
            // Skopiuj dane
            for( int i = 0; i < rozmiar; ++i )
                 nowa[ i ] = tablica[ i ];
           
            // Usuñ star¹ tablicê
            delete[] tablica;
           
            // Zakutalizuj zmienne
            tablica = nowa; //zmiana nazwy pamiec caly czas na nowa
            rozmiar += 2;
        }
    }
   
    std::cout << "Te same liczby, ale odwrotnie!\n";
   
    for( int i = rozmiar - 1; i >= 0; --i )
         std::cout << tablica[ i ] << ' ';
   
    delete[] tablica;
    std::cin.get();
    std::cin.get();
}
Teraz lepiej?
P-174034
pekfos
» 2019-02-21 21:18:17
Wyeliminowałeś niepotrzebną tablicę, ale kod jest wciąż przekombinowany. Taką tablicę opisują 2 wielkości, dla których logika kodu będzie prostsza. rozmiar jest jedną z nich, a x nie jest tą drugą.
P-174035
« 1 »
  Strona 1 z 1