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

C++ Program do organizowania dnia.

VPS Starter Arubacloud
0 głosów
448 wizyt
pytanie zadane 23 września 2018 w C i C++ przez XezolPL Obywatel (1,530 p.)

Witam mam problem, próbuję napisać program do organizowania czasu dnia. Coś jak timetune w ramach nauki i ćwiczenia. Nie potrafię przejść dalej, gdyż nie wiem jak mogę napisać voida wyświetlającgo wszystkie eventy a pozniej jeszcze zainkludować do niego mechanizm sortowania. Proszę o pomoc. 

#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <conio.h>

using namespace std;
int i=0;
void wyswietl()
{
    for (;i>=0; i--);
    cout << e[i];
}


class Event
{
    string nazwa;
    int godzina, minuta;
    public:
    void dodaj()
    {
        cout<< endl << "Podaj nazwe wydarzenia: ";
        cin >> nazwa;
        cout << endl << "Podaj godzine: ";
        cin >> godzina;
        cout << endl << "Podaj minute: ";
        cin>> minuta;

        if (godzina<0 || godzina>24 || minuta<0 || minuta>60 || nazwa=="") cout <<"ERROR!";
        else
        {
          /*  if(godzina<=9)
            if(minuta<=9)
                if(godzina==24) godzina =0 */
        }
    } //dodaj()
//Event(string n="brak",int g=0,int=0);
    void pokaz()
    {
        cout << "  " << nazwa << " - ";
        if (godzina<10) cout << " 0";
        cout << godzina << ":";
        if(minuta<10 ) cout << "0";
        cout << minuta;
    }


};
Event e[100];
int main()
{

    cout << "Organizator czasu" << endl<<endl<<endl;
    Sleep(1500);
    system("cls");
    char wybor;

 while (wybor!=4 )
 {

    cout << "Menu glowne" << endl;
    cout << "1.Dodawanie wydarzenia" << endl;
    cout << "2.Zrob cos xD" << endl;
    cout << "3.O twory" << endl;
    cout << "4.Zakoncz program" << endl<<endl;
    cout<< "Wybor: ";
    cin >> wybor;
    switch (wybor)
    {

        case '1':
            {
                char wybor2;


                cout<<"1. Dodaj"<<endl;
                cout<<"2. Menu glowne"<<endl;
                cout <<endl<< "Wybor: ";



                cin>>wybor2;
                switch (wybor2)
                {
                    case '1':
                        {

                            e[i].dodaj();
                            e[i].pokaz();
                            i++;

                        }
                    case '2': break;
                }

        break;
            }



    }//switch
    Sleep(300);
system("cls");
 }//while




    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 23 września 2018 przez PanRik Gaduła (4,510 p.)
wybrane 23 września 2018 przez XezolPL
 
Najlepsza

Powinieneś zrobić sobie zmienną klasy bolowską 

bool wasEventCreated

;
Ustawiasz ją sobie w konstruktorze na false, a po wywołaniu funkcji: dodaj() na true.
W funkcji pokaz() robisz sobie

if( true == wasEventCreated )

do całej funkcji.

W tym momencie jeżeli w forze wyświetliłbys wszystkie eventy to wyświetlą się tylko te utworzone.
 
Edit: Do tego jak wyświetlasz, to powinieneś zrobić sobie jednego std::string z godziną i minutą. W klasie tworzysz sobie zmienną

std::string whatTime

 W funkcji dodaj robisz:

whatTime = godzina+":"+minuta+":"+"00";

Oczywiście jeżeli godzina jest np. 9 to dodajesz:

whatTime="0"+godzina+":" itd.

to samo z minutą.
Co do sortowania to w jaki sposób chcesz to sortować? Nazwami? Godzinowo?

komentarz 23 września 2018 przez niezalogowany
Metoda push_back() dodając nowy element do tablicy, dba o to, aby tablica była odpowiedniego rozmiaru. Za każdym razem, gdy brakuje miejsca, tablica jest powiększana - rezerwowana jest nowa, większa przestrzeń, stare elementy są kopiowane, aby do większej tablicy móc dodać dany element. Z reguły rezerwowana jest pamięć dwa razy większa od poprzedniej. W skrajnej sytuacji, może się zdarzyć, że zarezerwowana pamięć jest prawie dwa razy większa niż ilość elementów znajdujących się w niej! 

Tak, lecz zwróć uwagę na to, że będzie max dwa razy zarezerwowanej pamięci. Czyli przy np. 24 obiektach zaoszczędzisz połowę pamięci. A jeśli wiesz około ile ich będzie, możesz stworzyć vector o danej wielkości, a jeśli będzie potrzeba więcej to można dodać.

komentarz 23 września 2018 przez PanRik Gaduła (4,510 p.)
A co się stanie jeżeli pamięci nie uda się zaalokować?
Nie wiem w sumie czemu rozmawiamy o tak podniosłych problemach w tak prostym programie. Naprawdę tablica 60 czy 30 w przypadku zwykłego int`a to jakaś różnica w programie do nauki? Używanie STL`a proponowałbym w momencie kiedy rozumiemy działanie tablic i lokowania pamięci na stosie, nawet sami sobie napiszmy taki vector.

Kolega nie chciał vectorów, więc zaproponowałem takie rozwiązanie.
komentarz 23 września 2018 przez XezolPL Obywatel (1,530 p.)
Nie rozumiem nawet o co się kłucicie jestem początkujący, chciałem ten programik napisać już od 3msc w końcu mniej więcej działa... Tak może poza tematem ale polecicie jakieś darmowe formy kształcenia w c++ oprócz kursów zelenta i już właśnie te kursy zeby były o już truniejszych rzeczach a nie znowu powtarzanie tego samgo co w tym kursie?
komentarz 23 września 2018 przez PanRik Gaduła (4,510 p.)

Polecam Ci książkę: symfonia C++ dwa tomy.
A jeśli chodzi o STL`a czyli vectory i takie inne to: 

https://www.pluralsight.com/paths/c-plus-plus
"Beautiful C++: STL Algorithms"

Można zakombinować membera na 3 miesiące za darmo, nie powiem Ci jak ale łatwo można znaleźć :D

komentarz 24 września 2018 przez niezalogowany
Ja polecam Ci wziąć się za jakieś projekty, ewentualnie SPOJ i uczyć sie w trakcie z internetu, z najróżniejszych tutoriali. Np. Robisz grę w której potrzebujesz przesuwania kursora w konsoli. W internecie znajdujesz ncurses i tutorial do niej, uczysz się z niego i umiejętność plus :)

A co do książek to jak kolega wyżej Symfonia, ewentualnie później Szkoła programowania, ale bardziej jako zbiór wiedzy, a nie do nauki, wiem z doświadczenia :)
0 głosów
odpowiedź 23 września 2018 przez niezalogowany

Ja bym nie tworzył od razu 100 eventów, ale stworzył vector obiektów klasy event i do niego je dodawał. Wypisywać wtedy można za pomocą for'a. A sortowanie to tak samo w pętli. Ja bym zrobił tak godz. * min. i posortować. Jak? Np tak:

https://www.p-programowanie.pl/matura-z-informatyki/sortowanie-babelkowe-c/

komentarz 23 września 2018 przez XezolPL Obywatel (1,530 p.)
Kurde nie uczyłem się jeszcze vectorów a wiedziałem że prędzej czy później bd musiał :/ a nie da sie jakoś inaczej? a godzina x minuta tez nie zawsze bo patrz np jest 2:50 =2*50=100 a np 3:11=3*11=33 :C
komentarz 23 września 2018 przez XezolPL Obywatel (1,530 p.)

@Leonardo63, ooo a jakby zrobic int wynik=godziny*1000+minuty ? wtedy chyba w kazdym przypaku sorting będzie dobry

 

komentarz 23 września 2018 przez niezalogowany

Vectory są proste, a warto. Przykładowy kod:

#include <vector> 

class Class
{
public:
Class();
}

int main()
{
std::vector<Class> objects;

...

Class c1;

...

objects.push_back(c1);

..

return 0;
}

A co do sortowania mój błąd. Godz. * 60 + Min.

Podobne pytania

+2 głosów
0 odpowiedzi 421 wizyt
+8 głosów
1 odpowiedź 641 wizyt
+7 głosów
0 odpowiedzi 345 wizyt

92,786 zapytań

141,716 odpowiedzi

320,653 komentarzy

62,115 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

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!

...