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: #include <iostream> #include <conio.h>
int main() { using namespace std; char marka[ 2 ][ 5 ]; char model[ 2 ][ 3 ]; float silnik[ 2 ]; float predkosc[ 2 ]; cout << "Witaj w bazie danych nt. samochod˘w! Umoliwia ona przechowanie danych nt. 3 dowolnych samochod˘w oraz obliczenie pojemnoci wszystkich samochod˘w i ich redniej pr©dkoci maksymalnej." << endl << endl << "|||URUCHOM (Enter)|||" << endl << endl; getchar(); cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeniaj 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 << "Nacinij ENTER aby przej† do nowego samochodu."; getchar(); cout << endl << endl; cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeniaj 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 << "Nacinij ENTER aby przej† do nowego samochodu."; getchar(); cout << endl << endl; cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeniaj 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 << "Nacinij ENTER aby zakoäczy† i przej† do nat©pnego etapu (wywietlania i wyliczania)."; getchar(); cout << endl << endl; 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 pojemnoci 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 << "Nacinij dowolny klawisz, aby wyj† z programu."; getch(); return 0; }
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. |
|
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. |
|
DejaVu |
» 2009-07-28 22:44:26 Nie wiem czy się to w ogóle kompiluje, ale to co wywala Ci aplikację to: 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. |
|
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ć. |
|
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: #include <iostream> #include <conio.h>
int main() { using namespace std; char marka[ 2 ][ 30 ]; char model[ 2 ][ 30 ]; float silnik[ 2 ]; float predkosc[ 2 ]; cout << "Witaj w bazie danych nt. samochod˘w! Umoliwia ona przechowanie danych nt. 3 dowolnych samochod˘w oraz obliczenie pojemnoci wszystkich samochod˘w i ich redniej pr©dkoci maksymalnej." << endl << endl << "|||URUCHOM (Enter)|||" << endl << endl; getchar(); cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeniaj 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 << "Nacinij ENTER aby przej† do nowego samochodu."; getchar(); cout << endl << endl; cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeniaj 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 << "Nacinij ENTER aby przej† do nowego samochodu."; getchar(); cout << endl << endl; cout << "Aby wprowadzi† do bazy nowy samoch˘d wypeniaj 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 << "Nacinij ENTER aby zakoäczy† i przej† do nat©pnego etapu (wywietlania i wyliczania)."; getchar(); cout << endl << endl; 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 pojemnoci 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 << "Nacinij dowolny klawisz, aby wyj† z programu."; getch(); return 0; }
... i jest OK. EDIT 2: A w ogóle to jak wstawiać te kolorowe ramki z kodem? :) |
|
DejaVu |
» 2009-07-29 12:55:39 |
|
Kondziu Temat założony przez niniejszego użytkownika |
Dzięki » 2009-07-29 12:56:58 Dzięki :). |
|
« 1 » |