szkuner |
» 2009-10-17 22:19:46 Ja dopiero teraz zauważyłem że nie dałem ci gwiazdki ale widze że doszłeś już do tego. Moim zdaniem zamiast stosować np dane.name powinieneś zastosowc coś na wzór tego dane->name;
cin >> dane->name;
A tu spróbuje ci to zademonstrować struct osoba { char name[ 20 ]; float volume; double price; }; int main() { using namespace std; osoba * ps = new osoba; cout << "Podaj cenę (zł): "; cin >> ps->price; delete otym operatorze docztaj sobie sam co ś tu brakuje;
|
|
Elaine |
» 2009-10-17 23:28:20 Well, ale tu chodzi o dyntablice, czyli będzie raczej coś takiego: foo * dane = new foo[ rozmiar ];
cin >> dane[ 0 ].costam; dane[ 3 ].cosinnego = dane[ 1 ].cosinnego;
delete[] dane; |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-19 22:59:50 mam dalej problem, teraz z zapisem danych do struktury co program ma zrobic: -zapytac, ile potrzeba biletow - wprowadzamy przez cin>> zamowienie === np 3 -tyle samo razy zapytac = 3 razy nazwisko - rozwiazane przez petle for(int i=0;i<zamowienie;i++) -dopisywac do struktury np bilet.nazwisko - kazdorazowo nazwisko, czyli nie moge skorzystac z tej samej petli, bo zaczynaloby zapisywac po kazdym zamowieniu od pozycji 0, wykombinowalem, ze wprowadze int licznik=0, a kazde wpisane nazwisko bedzie zapisane w pozycji bilet[licznik+i].nazwisko - czyli w pierwszym przejsciu bedzie zapisywac od 0 + kazde przejscie petli + 1. po wyjsciu z petli ustawilem, ze licznik+=zamowienie, czyli nastepna petla nie zacznie sie od 0, ale od i=0+3 nie wiem tylko, czy nie powinienem wczesniej "zarezerwowac" miejsca na zapis nazwisk w strukturze pytanie = bo po pierwszym przejsciu petli wywala mi blad i program sie zawiesza/kompilator rowniez a tu przykladowy kod #include <iostream> #include <conio.h> #include <string>
struct loty { std::string nazwisko; }; main() { using namespace std; int zamowienie, ilosc_biletow = 5, licznik = 0; loty * Rzym = new loty[ licznik ]; char znak; do { cout << " Ile zamawiasz biletow?\n"; cin >> zamowienie; if( zamowienie > ilosc_biletow ) { cout << "\nnie ma tyle biletow!\a\n"; } else { licznik += zamowienie; ilosc_biletow -= zamowienie; for( int i = 0; i < zamowienie; i++ ) { cout << "\nPodaj nazwisko\n"; cin >> Rzym[ i ].nazwisko; } } cout << "\n nazwiska " <<( * Rzym ).nazwisko << "\n Wcnisnij q aby zakonczyc\n"; cin >> znak; } while( znak != 'q' ); }
blad pewnie jest w zapisie nazwisk do struktury, bo jak usune cin>>.... to program dziala dobrze, poza tym ze nie moge wpisac nazwisk |
|
malan |
» 2009-10-19 23:26:30 Nie dziw się, że program się zawiesza skoro zadeklarowałeś wskaźnik na tablicę o liczbie elementów = 0: int licznik = 0; loty * Rzym = new loty[ licznik ];
Jeśli chodzi o wyświetlanie nazwisk to prędzej tak: for( int j = 0; j < zamowienie; j++ ) std::cout << Rzym[ j ].nazwisko;
|
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-19 23:37:26 ale nie ma znaczenia, ze jeszcze przed zapetleniem dalem, ze licznik+= zamowienie?? czyli ze robi miejsce w stukturze na konkretna ilosc zapisow? bo wlasnie o to mi chodzi, aby byla mozliwosc dopisywania nazwisk, po to uzywam dynamicznego przydzialu pamieci? chyba, ze robie to zle, prosze o podpowiedz, bo kombinuje z tym juz dosc dlugo i utknalem
ps, zmienilem licznik na 10 w deklaracji zmiennej no i poszlo... ale chodzi mi, aby zapisal na pozycji Rzym[0], a pozniej juz kazdy nastepny zapis +1,w miedzy czasie dalej kombinuje....
ps2, twoj pomysl na wyswietlanie nazwisk - mialem podobnie - jako POTWIERDZENIE ZAKUPU - DLA KAZDEGO NOWEGO NAZWISKA, ale potrzebuje wyswietlic nazwiska dla wszytskich dokonanych zakupow - czyli zamowien bedzie wiele wiecej, zamowienie na 2 bilety - dodaj 2 nazwiska, zamowienie na 3 nazwiska, dodaj 3 nazwiska - czyli ograniczeniem nazwisk nie moze byc l. zamowien |
|
DejaVu |
» 2009-10-19 23:44:12 |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-19 23:51:46 no to wiem, dlaczego mi nie szlo... zawsze zabiore sie za cos i wychodzi, ze to material, ktorego jeszcze nie czytalem. dzieki za podpowiedzi i dobrej nocy, a ja dalej dzialam niestety nie lapie tego http://forum.ddt.pl/?Tid=137moze moglby ktos wytlumaczyc bardziej? tzn dla mojego kodu tworze dodatkowo w strukturze loty* nastepny chyba tez loty* poczatek "Jeśli chcesz dodać teraz element do listy jednokierunkowej, musisz dynamicznie zarezerwować pamięć, i dodać go do kolejki." czyli dla Rzym.nazwisko robie to wg lekcji o new/delete czyli wskaznik1=new typ_zmiennej ewentualnie [ilosc_elementow_danego_typu] w moim przypadku?: loty* Rzym=new loty; Rzym->nastepna=NULL; poczatek=Rzym; pomijam juz sprawdzanie czy poczatek == null czy szukac OSTATNIE itd, chodzi mi o sam zapis, bo z tego nie rozumiem, jak kompilator bedzie wiedzial, ze ma dodac nowy zapis dla danej zmiennej w strukturze, a do mnie chyba tak tylko mozna trafic, tlumaczac jak widzi to krok po kroku kompilator kolejny raz ja.... zrobilem cos takiego, przerobilem podpowiadany kod na to #include <iostream> #include<conio.h> struct osoba { char name[ 20 ]; float volume; double price; }; int main() { int r; using namespace std; osoba * ps = new osoba[ r ]; cout << "podaj r\n"; cin >> r; for( int i = 0; i < r; i++ ) { cout << "Podaj cene (zl): "; cin >> ps[ i ].price; cout << ps[ i ].price << "\n"; } for( int i = 0; i < r; i++ ) cout << "\n " << ps[ i ].price << "\n"; getch(); }
i dziala... i znowu #include <iostream> #include<conio.h> struct osoba { char name[ 20 ]; float volume; double price; }; int main() { int r, t = 0; char znak; using namespace std; osoba * ps = new osoba[ r ]; do { cout << "podaj r\n"; cin >> r; for( int i = 0; i < r; i++ ) { cout << "Podaj cene (zl): "; cin >> ps[ t ].price; cout << ps[ t ].price << "\n"; t++; } for( int i = 0; i < t; i++ ) { cout << "\n " << ps[ i ].price << "\n"; } cout << "q aby zakonczyc\n"; cin >> znak; } while( znak != 'q' ); getch(); }
dziala, mniej wiecej tak, jak chce, musze znalezc, co robie nie tak w moim kodzie #include <iostream> #include <conio.h> #include <string>
struct loty { std::string nazwisko; }; int main() { using namespace std; int r, t = 0; loty * Rzym = new loty[ zamowienie ]; char znak; do { cout << " Ile zamawiasz biletow?\n"; cin >> r; for( int i = 0; i < r; i++ ) { cout << "\nPodaj nazwisko\n"; cin >> Rzym[ t ].nazwisko; t++; } for( int i = 0; i < t; i++ ) { cout << "\n nazwiska " << Rzym[ i ].nazwisko << "\n Wcnisnij q aby zakonczyc\n"; } cout << "q aby zakonczyc"; cin >> znak; } while( znak != 'q' ); } dalej nie dziala, zawiesza sie po 2 wpisaniach nazwiska |
|
DejaVu |
» 2009-10-20 03:00:28 Nie pojmujesz idei działania listy. Spójrz na obrazek na wikipedii. Masz element listy: struct Element { int wiek; std::string imie; Element * nastepny; };
Element * poczatek = NULL;
Utworzenie nowego elementu to: Element * nowy = new Element;
nowy->nastepny = NULL;
Element następnie trzeba dodać do kolejki. Kolejka jest w zmiennej poczatek: if( !poczatek ) { poczatek = nowy; } else { Element * ostatni = poczatek; while( ostatni->nastepny ) { ostatni = ostatni->nastepny; } ostatni->nastepny = nowy; }
Przemyśl te fragmenty kodu, spójrz na obrazek i wczytaj się w tekst... /edit: Wikipedia to nie jedyne źródło informacji. Możesz poszukać innych stron znając hasło pod jakim występuje zagadnienie. |
|
1 « 2 » 3 4 |