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

Lekcja 7 C++ - zadanie kontrolne

Ostatnio zmodyfikowano 2009-07-29 12:56
Autor Wiadomość
Kondziu
Temat założony przez niniejszego użytkownika
Lekcja 7 C++ - zadanie kontrolne
» 2009-07-28 22:26:03
Napiszę tak: to co udało mi się ułożyć jest beznadziejne. Naprawdę. Kompiluje się bez problemu (mam Dev-C++), ale poprawnie działa tylko do pewnego momentu. Co ciekawe to zależy od uruchomienia (raz będzie działał dłużej a raz krócej - jak mu się zachce). Za pierwszym razem dziwaczeje bardzo szybko a jak go po kompilacji uruchomię po raz drugi to wytrzymuje dłużej (ale nie można przewidzieć do kiedy wytrzyma). W każdym razie nigdy jeszcze się nie wykonał poprawnie.
Jeśli to co napisałem brzmi niepoważnie (a pewnie tak jest) to proszę - spróbujcie (najlepiej w Dev-C++).
Oto kod:

C/C++
// BAZA SAMOCHODÓW
#include <iostream>
#include <conio.h>

int main()
{
   
    using namespace std;
   
   
    //ZMIENNE
    char marka[ 2 ][ 5 ];
    char model[ 2 ][ 3 ];
    float silnik[ 2 ];
    float predkosc[ 2 ];
   
   
   
    cout << "Witaj w bazie danych nt. samochod˘w! Umoˆliwia ona przechowanie danych nt. 3 dowolnych samochod˘w oraz obliczenie pojemno˜ci wszystkich samochod˘w i ich        ˜redniej pr©dko˜ci maksymalnej." << endl << endl << "|||URUCHOM (Enter)|||" << endl << endl;
    getchar();
   
   
    // PO RAZ PIERWSZY  
    cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeˆniaj poniľsze dane:" << endl;
    cout << "Marka: ";
    cin.get( marka[ 0 ], 5 );
    cin.get();
    cout << endl;
   
    cout << "Model: ";
    cin.get( model[ 0 ], 5 );
    cin.get();
    cout << endl;
   
    cout << "Pojemno˜† silnika: ";
    cin >> silnik[ 0 ];
    cin.ignore();
    cout << endl;
   
    cout << "Maksymalna pr©dko˜†: ";
    cin >> predkosc[ 0 ];
    cin.ignore();
    cout << endl;
   
    cout << "Naci˜nij ENTER aby przej˜† do nowego samochodu.";
    getchar();
    cout << endl << endl;
   
   
    // PO RAZ DRUGI 
    cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeˆniaj poniľsze dane:" << endl;
    cout << "Marka: ";
    cin.get( marka[ 1 ], 5 );
    cin.get();
    cout << endl;
   
    cout << "Model: ";
    cin.get( model[ 1 ], 5 );
    cin.get();
    cout << endl;
   
    cout << "Pojemno˜† silnika: ";
    cin >> silnik[ 1 ];
    cin.ignore();
    cout << endl;
   
    cout << "Maksymalna pr©dko˜†: ";
    cin >> predkosc[ 1 ];
    cin.ignore();
    cout << endl;
   
    cout << "Naci˜nij ENTER aby przej˜† do nowego samochodu.";
    getchar();
    cout << endl << endl;
   
   
    // PO RAZ TRZECI 
    cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeˆniaj poniľsze dane:" << endl;
    cout << "Marka: ";
    cin.get( marka[ 2 ], 5 );
    cin.get();
    cout << endl;
   
    cout << "Model: ";
    cin.get( model[ 2 ], 5 );
    cin.get();
    cout << endl;
   
    cout << "Pojemno˜† silnika: ";
    cin >> silnik[ 2 ];
    cin.ignore();
    cout << endl;
   
    cout << "Maksymalna pr©dko˜†: ";
    cin >> predkosc[ 2 ];
    cin.ignore();
    cout << endl;
   
    cout << "Naci˜nij ENTER aby zakoäczy† i przej˜† do nat©pnego etapu (wy˜wietlania i wyliczania).";
    getchar();
    cout << endl << endl;
   
   
    // WYŚWIETLANIE I LICZENIE
    cout << "BAZA:" << endl;
    cout << "Marka - model - pojemno˜† silnika - maksymalna pr©dko˜†" << endl;
    cout << marka[ 0 ] << " - " << model[ 0 ] << " - " << silnik[ 0 ] << " - " << predkosc[ 0 ] << endl;
    cout << marka[ 1 ] << " - " << model[ 1 ] << " - " << silnik[ 1 ] << " - " << predkosc[ 1 ] << endl;
    cout << marka[ 2 ] << " - " << model[ 2 ] << " - " << silnik[ 2 ] << " - " << predkosc[ 2 ] << endl << endl;
   
    cout << "Suma pojemno˜ci silników: " << silnik[ 0 ] + silnik[ 1 ] + silnik[ 2 ] << endl;
    cout << "—rednia pr©dko˜† maksymalna pojazd˘w: " <<( silnik[ 0 ] + silnik[ 1 ] + silnik[ 2 ] ) / 3 << endl << endl;
    cout << "Naci˜nij dowolny klawisz, aby wyj˜† z programu.";
   
    getch();
    return 0;
   
}
//                                    K O N I E C

W ogóle to nie za bardzo rozumiem tych strumieni. Nie jest napisane co się stanie, gdy jest wczytany znak nowej lini albo nie. Tzn. jest, ale mogło by być przystępniej np. jak poradzić sobie z tym problemem i w ogóle co, jak, gdzie kiedy. Jak ktoś nie ma pojęcia o znaku nowej lini i tych funkcjach to to jest naprawdę dziwne.
Pozdrawiam.

PS Te znaczki to znaki polskich liter.
P-8868
Kondziu
Temat założony przez niniejszego użytkownika
Postęp
» 2009-07-28 22:37:03
Raz przy użyciu odpluskwiacza doszedł do końca :).
Ale tylko raz :(. Uruchamiany z pliku .exe nadal odmawia posłuszeństwa.
P-8870
DejaVu
» 2009-07-28 22:44:26
Nie wiem czy się to w ogóle kompiluje, ale to co wywala Ci aplikację to:

C/C++
cout << "Pojemno˜† silnika: ";
cin >> silnik[ 2 ];
cin.ignore();
cout << endl;
Tablica silnik ma 2 elementy, a Ty piszesz do trzeciego, czyli nadpisujesz jakieś fragmenty pamięci np. z kodem wykonywalnym.
P-8873
GoldWolf
» 2009-07-29 09:56:23
Program jest dobry, podobają mi się twoje rozwiązania.
Dodatkowo to, że program czasami kończy się wcześniej jest zależne od tego co wprowadzasz do strumienia cin, np. jęśli dla pojemności silnika wprowadzisz literkę to ci się sypnie. I jest to normalne ponieważ strumień oczekuje liczby, a dostaje literę.

W dalszej części kursy będzie opisane jak sobie z tym radzić.
P-8888
Kondziu
Temat założony przez niniejszego użytkownika
2 elementy
» 2009-07-29 12:25:56
Jak 2 elementy?
Liczymy od 0.
silnik[0], silnik[1], silnik[2]

EDIT:
Działa. Po prostu wzorowałem się na markach i modelach z lekcji i wpisałem jako maksymalne rozmiary nazw 5. Teraz jest 30:

C/C++
// BAZA SAMOCHODÓW
#include <iostream>
#include <conio.h>

int main()
{
   
    using namespace std;
   
   
    //ZMIENNE
    char marka[ 2 ][ 30 ];
    char model[ 2 ][ 30 ];
    float silnik[ 2 ];
    float predkosc[ 2 ];
   
   
   
    cout << "Witaj w bazie danych nt. samochod˘w! Umoˆliwia ona przechowanie danych nt. 3 dowolnych samochod˘w oraz obliczenie pojemno˜ci wszystkich samochod˘w i ich        ˜redniej pr©dko˜ci maksymalnej." << endl << endl << "|||URUCHOM (Enter)|||" << endl << endl;
    getchar();
   
   
    // PO RAZ PIERWSZY  
    cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeˆniaj poniľsze dane:" << endl;
    cout << "Marka: ";
    cin.get( marka[ 0 ], 30 );
    cin.get();
    cout << endl;
   
    cout << "Model: ";
    cin.get( model[ 0 ], 30 );
    cin.get();
    cout << endl;
   
    cout << "Pojemno˜† silnika: ";
    cin >> silnik[ 0 ];
    cin.ignore();
    cout << endl;
   
    cout << "Maksymalna pr©dko˜†: ";
    cin >> predkosc[ 0 ];
    cin.ignore();
    cout << endl;
   
    cout << "Naci˜nij ENTER aby przej˜† do nowego samochodu.";
    getchar();
    cout << endl << endl;
   
   
    // PO RAZ DRUGI 
    cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeˆniaj poniľsze dane:" << endl;
    cout << "Marka: ";
    cin.get( marka[ 1 ], 30 );
    cin.get();
    cout << endl;
   
    cout << "Model: ";
    cin.get( model[ 1 ], 30 );
    cin.get();
    cout << endl;
   
    cout << "Pojemno˜† silnika: ";
    cin >> silnik[ 1 ];
    cin.ignore();
    cout << endl;
   
    cout << "Maksymalna pr©dko˜†: ";
    cin >> predkosc[ 1 ];
    cin.ignore();
    cout << endl;
   
    cout << "Naci˜nij ENTER aby przej˜† do nowego samochodu.";
    getchar();
    cout << endl << endl;
   
   
    // PO RAZ TRZECI 
    cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeˆniaj poniľsze dane:" << endl;
    cout << "Marka: ";
    cin.get( marka[ 2 ], 30 );
    cin.get();
    cout << endl;
   
    cout << "Model: ";
    cin.get( model[ 2 ], 30 );
    cin.get();
    cout << endl;
   
    cout << "Pojemno˜† silnika: ";
    cin >> silnik[ 2 ];
    cin.ignore();
    cout << endl;
   
    cout << "Maksymalna pr©dko˜†: ";
    cin >> predkosc[ 2 ];
    cin.ignore();
    cout << endl;
   
    cout << "Naci˜nij ENTER aby zakoäczy† i przej˜† do nat©pnego etapu (wy˜wietlania i wyliczania).";
    getchar();
    cout << endl << endl;
   
   
    // WYŚWIETLANIE I LICZENIE
    cout << "BAZA:" << endl;
    cout << "Marka - model - pojemno˜† silnika - maksymalna pr©dko˜†" << endl;
    cout << marka[ 0 ] << " - " << model[ 0 ] << " - " << silnik[ 0 ] << " - " << predkosc[ 0 ] << endl;
    cout << marka[ 1 ] << " - " << model[ 1 ] << " - " << silnik[ 1 ] << " - " << predkosc[ 1 ] << endl;
    cout << marka[ 2 ] << " - " << model[ 2 ] << " - " << silnik[ 2 ] << " - " << predkosc[ 2 ] << endl << endl;
   
    cout << "Suma pojemno˜ci silników: " << silnik[ 0 ] + silnik[ 1 ] + silnik[ 2 ] << endl;
    cout << "—rednia pr©dko˜† maksymalna pojazd˘w: " <<( silnik[ 0 ] + silnik[ 1 ] + silnik[ 2 ] ) / 3 << endl << endl;
    cout << "Naci˜nij dowolny klawisz, aby wyj˜† z programu.";
   
    getch();
    return 0;
   
}
//                                    K O N I E C

... i jest OK.

EDIT 2: A w ogóle to jak wstawiać te kolorowe ramki z kodem? :)
P-8889
DejaVu
» 2009-07-29 12:55:39
[code src="C++"][/code]
P-8891
Kondziu
Temat założony przez niniejszego użytkownika
Dzięki
» 2009-07-29 12:56:58
Dzięki :).
P-8892
« 1 »
  Strona 1 z 1