• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

tablice o nieograniczonym rozmiarze

VPS Starter Arubacloud
0 głosów
588 wizyt
pytanie zadane 18 listopada 2017 w C i C++ przez Dordonmegazordon Początkujący (350 p.)
edycja 18 listopada 2017 przez Dordonmegazordon

Polecenie do zadania: Napisz program, który pozwala użytkownikom zapisywać, kiedy ostatnio rozmawiali ze swoimi znajomymi. Użytkownicy powinni mieć możliwość dodawania nowych znajomych(tylu, ile tylko chcą!) oraz przechowywania liczby dni, które upłynęły od czasu ostatniej rozmowy z danym znajomym nie zezwalaj na wprowadzanie nieprawidłowych danych wyswietl liste znajomych posortowaną według nazwisk lub liczby dni które upłynęły od rozmowy z kazdym z nich.

Zacząłem od stworzenia tablic do których będzie można dodawać nieograniczoną liczbę danych. Problem polega na tym ze dane zostają przypisane do pierwszego elementu tablicy a reszta elementów to kosmiczne liczby.

 

#include <iostream>

using namespace std;

int *zwiekszTablice ( int* w_dane, int  *rozmiar );
void drukujTablice (int* w_dane, int rozmiar, int zajete_pola);

int main()
{
    cout << "podawaj znajomych i daty ostatnich rozów" << endl;

    int nastepny_element = 0;
    //string *w_znajomi = new string [ rozmiar ];

    int rozmiar=10;
    int *w_data_dzien = new int [ rozmiar ];

    int *w_data_miesiac = new int [ rozmiar ];

    int *w_data_rok = new int [ rozmiar ];

    int *w_data_godzina = new int [ rozmiar ];

    int *w_data_minuta = new int [ rozmiar ];


    cout << "podaj dzien  ";

    while ( w_data_dzien >= 0 && w_data_miesiac >=0 && w_data_rok >=0 && w_data_godzina >=0 && w_data_minuta >=0 )
    {
        int i=0;
        cout << "podaj kolejno dzien, miesiac, rok, i godzine.";
        cin>>w_data_dzien[i];
        cin>>w_data_miesiac[i];
        cin>>w_data_rok[i];
        cin>>w_data_godzina[i];
        cin>>w_data_minuta[i];
        i++;


        if  ( rozmiar == nastepny_element + 1 )
        {
            w_data_dzien = zwiekszTablice( w_data_dzien, &rozmiar);
            w_data_miesiac = zwiekszTablice( w_data_miesiac, &rozmiar);
            w_data_rok = zwiekszTablice( w_data_rok, &rozmiar);
            w_data_godzina = zwiekszTablice( w_data_godzina, &rozmiar);
            w_data_minuta = zwiekszTablice( w_data_minuta, &rozmiar);

        }
        nastepny_element++;

        drukujTablice( w_data_dzien, rozmiar, nastepny_element);



    }
    delete [] w_data_dzien;

    return 0;
}

void drukujTablice(int  *w_dane, int rozmiar, int zajete_pola)
{
        cout   <<      " calkowity rozmiar tablicy w_data_dzien"           <<  rozmiar         << endl;
        cout   <<      " liczba zajetych pol w tablicy w_data_dzien"       <<  zajete_pola   << endl;
        cout   <<      " Wartosci w tablicy "                                                                         << endl;

            for ( int i = 0; i < zajete_pola; ++i)
            {
                cout << " w_data_dzien [" << i << "] = "<< w_dane[i]<< endl;
            }
}

int *zwiekszTablice(int* w_dane, int  *rozmiar)
{
    *rozmiar *= 2;
    int * w_nowe_wart = new int [ *rozmiar ];
    for ( int i = 0; i < *rozmiar; ++i)
    {
        w_nowe_wart [ i ] = w_dane [ i ];
    }
    delete [] w_dane;
    return w_nowe_wart;
}



1
komentarz 18 listopada 2017 przez the_danger Gaduła (4,800 p.)
1
komentarz 18 listopada 2017 przez Bondrusiek Maniak (61,370 p.)
Witam,

tak jak powiedział kolego wykorzystaj kontener, konkretnie std::vector.

Ogólnie przeczytaj sobie o STL

https://pl.wikipedia.org/wiki/Standard_Template_Library

Jest to jakby rozszerzenie języka C++ i posiada wiele wygodnych klas do przechowywana danych np std::vector, std::list.
1
komentarz 18 listopada 2017 przez criss Mędrzec (172,590 p.)

Jest to jakby rozszerzenie języka C++

?? STL zawiera się w bibliotece standardowej c++ i standard definiuje jej szczegóły implementacyjne.  To nie jest żadno rozszerzenie.

komentarz 18 listopada 2017 przez Bondrusiek Maniak (61,370 p.)
Tak masz racje źle się wyraziłem. Napisałem przy przykładowych kontenerach std::. Bardziej chodziło mi że rozszerza funkcjonalność, możliwości języka C++ poprzez wprowadzenie kontenerów, szablonów czy algorytmów. Jeśli kogoś wprowadziłem w błąd to przepraszam.
komentarz 28 stycznia 2018 przez silka nauka pasja Nowicjusz (190 p.)
przeniesione 28 stycznia 2018 przez silka nauka pasja

Siema wszystkim, chciałem się podpiąć pod temat gdyż aktualnie robię to zadanie, a pytanie moje brzmi.

Dlaczego tablica stringow nie chce pomnożyć swojego wymiaru *2 gdy zostaje zapełniona?? jak zmienię wszędzie string na char to literki ładnie zapełniają tablice bez końca, a gdy string dojdzie do ustalonego z góry rozmiaru (w tym przypadku 3) to wyskakuje "STRING.EXE"przestał działać.

Czytałem, że polecacie biblioteke STL, vektory itd. ale to mam za 2 rozdziały dopiero, chce to zrobić bez ich pomocy...Dziękuję z góry za odpowiedź, pozdrawiam i wstawiam kod !!!

#include <iostream>
#include <string>

using namespace std;

string *zwiekszTablice (string* w_family, char *rozmiar)
{
    *rozmiar *= 2;
    string *w_nowe_wartosci = new string[ *rozmiar ];

for ( int i = 0; i < *rozmiar; ++i )
{
    w_nowe_wartosci[ i ] = w_family[ i ];
}

delete [] w_family;

return w_nowe_wartosci;
}
void drukujTablice (string *w_family, int rozmiar, int zajete_pola)
{
    cout << "Calkowity rozmiar tablicy: " << rozmiar << endl;
    cout << "Liczba zajetych pol tablicy: " << zajete_pola<< endl;
    cout << "Wartosci w tablicy: " << endl;

for ( int i = 0; i < zajete_pola; ++i )
    {
        cout << "w_wartosci[" << i << "] = " << w_family[ i ] << endl;
    }

}


int main()
{

int nastepny_element=0;
string ksywa;
char rozmiar=3;
string *w_family = new string[rozmiar];

cout<<"podaj ksywe:"<<endl;
getline(cin,ksywa);


while(ksywa !="a")

{


     if ( rozmiar == nastepny_element + 1 )
    {

        w_family = zwiekszTablice( w_family, & rozmiar );
    }

        w_family[ nastepny_element ] = ksywa;
        nastepny_element++;

        cout << "Oto biezce parametry tablicy: " << endl;
        drukujTablice( w_family, rozmiar, nastepny_element );
        cout << "Podaj a (a - wyjscie z programu): ";
        cin >> ksywa;

}
delete [] w_family;


cin.ignore ();
cin.get ();
return 0;
}


 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
3 odpowiedzi 657 wizyt
0 głosów
1 odpowiedź 320 wizyt
pytanie zadane 27 stycznia 2017 w C i C++ przez vega Użytkownik (510 p.)
0 głosów
0 odpowiedzi 370 wizyt
pytanie zadane 11 listopada 2016 w C i C++ przez Wiciorny Ekspert (269,120 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...