dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-21 00:15:12 znalazlem swietny przyklad, teraz na jego przykladzie sprobuje sobie utrwalic stosowanie listy, moze komus przyda sie tez ten program do nauki #include <iostream> #include <iostream.h> #include <conio.h> typedef struct El { std::string Wartosc; struct El * Nastepny; } ELEMENT; typedef struct { ELEMENT * Glowa; ELEMENT * Ogon; } INFO;
INFO * Lista;
void Pisz_Menu(); void Do_Listy( int W ); void Dopisz_K_elem_do_Listy(); void Pisz_Liste(); void Usun_Liste();
void main() { char znak; Lista = new INFO; Lista->Glowa = NULL; Lista->Ogon = NULL; do { clrscr(); Pisz_Menu(); znak = getch(); switch( znak ) { case '1': Dopisz_K_elem_do_Listy(); break; case '2': Pisz_Liste(); break; case '3': Usun_Liste(); break; case '4':; break; case '5':; break; case '6':; break; } } while( znak != '7' ); Usun_Liste(); }
void Pisz_Menu() { cout << "PRZYKLADOWE OPERACJE NA LISCIE DYNAMICZNEJ\n"; cout << "1. Dopisz k liczb do listy\n"; cout << "2. Pokaz cala liste\n"; cout << "3. Usun cala liste\n"; cout << "4. Pokaz elementy parzyste w liscie\n"; cout << "5. Usun k elementow poczatkowych z listy\n"; cout << "6. Zapisz liste na plik tekstowy\n"; cout << "7. Zakoncz program\n"; cout << "*********************************************** *\n"; }
void Do_Listy( std::string W )
{ ELEMENT * Nowy; Nowy = new ELEMENT; if( Lista->Glowa == NULL ) { Lista->Glowa = Nowy; Lista->Ogon = Lista->Glowa; } else { Lista->Ogon->Nastepny = Nowy; Lista->Ogon = Nowy; } Nowy->Wartosc = W; Nowy->Nastepny = NULL; }
void Dopisz_K_elem_do_Listy()
{ int i, K; std::string W; clrscr(); cout << "Ile elementow dopisujemy do listy (podaj K<6): "; cin >> K; cout << "Wprowadz kolejne elementy listy:\n"; for( i = 1; i <= K; i++ ) { cout << "element_"; cout.width( 2 ); cout << i << " = "; cin >> W; Do_Listy( W ); } cout << "Elementy dopisano do listy - nacisnij klawisz\n"; getch(); }
void Pisz_Liste()
{ ELEMENT * Biezacy; int i = 0; clrscr(); Biezacy = Lista->Glowa; if( Lista->Glowa == NULL ) cout << "Lista jest pusta\n"; else while( Biezacy != NULL ) { i++; cout.width( 2 ); cout << "element_" << i << " : " << Biezacy->Wartosc << endl; Biezacy = Biezacy->Nastepny; } cout << "Wypisano elementy z listy - nacisnij klawisz\n"; getch(); }
void Usun_Liste() { int i = 0; ELEMENT * Usuniety; if( Lista->Glowa == NULL ) cout << "Lista jest pusta - nacisnij klawisz"; else { while( Lista->Glowa != NULL ) { i++; Usuniety = Lista->Glowa; Lista->Glowa = Lista->Glowa->Nastepny; delete Usuniety; } if( Lista->Glowa == NULL ) cout << "\nListe usunieto ( " << i << " element. ) - nacisnij klawisz" << endl; } getch(); }
|
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-21 22:49:33 #include <iostream> #include <conio.h>
struct loty { std::string nazwisko; loty * nastepny; };
int main() { loty * Rzym = new loty; int r; std::cout << "podaj r\n"; std::cin >> r; loty * gora = NULL; loty * dol; if( gora == NULL ) { gora = Rzym; dol = gora; } else { dol->nastepny = Rzym; dol = dol->nastepny; } Rzym->nastepny = NULL; for( int i = 0; i < r; i++ ) { std::cout << "\npodaj nazwiska\n"; std::cin >> Rzym->nazwisko; } loty * element; element = gora; std::cout << "nazwiska\n" << gora->nazwisko; getch(); }
program pamieta tylko ostatni zapis, czyli cos nie tak, ale nie potrafie znalezc bledu, ciagle bede szukal, ale moze ktos w miedzy czasie pomoze? |
|
DejaVu |
» 2009-10-22 02:37:17 Zmieniaj roota tylko i wyłącznie gdy == NULL. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-22 22:35:59 kurcze, sorki za wyrażenie ;) wszystko dobrze zadeklarowane...ale, a moze ALE... jedna linijka nie w tym miejscu co trzeba, ale znalazlem nareszcie,
byc moze o to chodzilo p.Piotrowi - bo nie do konca zrozumialem podpowiedz, ale trzeba bylo przeniesc loty*Rzym=new loty do petli, a nie jak ja zrobilem, poprostu zadeklarowac przy innych zmiennych, zaraz pod main();
przynajmniej juz rozumiem, o co chodzi w tworzeniu list, jak operowac wskaznikami, aby bylo dobrze, jeszcze kilka list dla praktyki i chyba bedzie opanowane:)
dzieki za cierpliwosc, nie raz bede jeszcze pytal |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-23 18:01:48 #include <iostream> #include <conio.h>
struct loty { std::string nazwisko; loty * nastepny; };
main() { int L, znak, licznik = 0; using namespace std; loty * gora = NULL; loty * dol; loty * Rzym; do { clrscr(); cout << "MENU WYBORU\n\n_ _ _ _ _ _\n\n\n1 = dopisz nazwiska do listy\n\n2 = zobacz liste\n\n3 = wyjscie\n\n\n _ _ _ _ _ _\n\n"; cin >> znak; clrscr(); switch( znak ) { case 1: cout << "\nile nazwisk zapisac? = "; cin >> L; licznik += L; for( int i = 0; i < L; i++ ) { Rzym = new loty; cout << "\npodaj nazwisko nr " << i + 1 << "\n"; cin >> Rzym->nazwisko; if( gora == NULL ) { gora = Rzym; dol = gora; } else { dol->nastepny = Rzym; dol = Rzym; } Rzym->nastepny = NULL; } cout << "\n dopisano " << L << " nowe nazwisk(a) do listy \n"; cout << "\n w sumie dopisano juz " << licznik << " nazwik(a) do listy\n"; getch(); break; case 2: cout << "\nLISTA NAZWISK\n "; if( gora == NULL ) { cout << "\nlista pusta... wcisnij dowolny klawisz\n"; getch(); } else { int i = 1; loty * wyswietl = gora; while( wyswietl != NULL ) { cout << "\n" << i << ". " << wyswietl->nazwisko << endl; wyswietl = wyswietl->nastepny; i++; } getch(); } getch(); break; case 3: cout << "koniec"; getch(); break; default: cout << "\nzla liczba\n"; getch(); break; } } while( znak != 3 ); } programik smiga, a to tylko wstep do tego, co planuje zrobic... mam pytanie, czy powinienem uzyc w tym kodzie "delete" ? drugie pytanie, kiedy uzywac delete w kodzie, czy na wyjsciu z programu, czy podczas dzialania - bo w sumie skoro pisze liste, to potrzebne mi te dane aby byly zapamietane caly czas trwania programu, a widzialem niektore przyklady, gdzie usuwanie przez delete nastepuje podczas trwania programu - czyli ze usuwane dane sa zbedne do dalszej pracy programu? |
|
DejaVu |
» 2009-10-23 20:06:24 Używasz delete wtedy gdy dane usuwasz i nie będziesz już z nich korzystał. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2009-10-24 20:04:53 Witam ponownie. Czy jest mozliwe, aby prowadzic 3 listy w programie? przyklad: menu da wybor lotu do 1 z 3 miast, zaleznie od wyboru, nazwisko bedzie zapisywane na lot w odpowiednie miejsce, a liczba biletow na dany lot bedzie ubywala oczywiscie co do biletow nie ma problemu - petla switch i dla kazdego miasta osobny case, a tam ubywa np biletyRZYM-=zamowienie, biletyMIASTO2-=zamowienie itd... chodzi o to, ze mam strukture ze zmiennymi 'nazwisko' i 'nastepny' czy powinienem w tym celu stworzyc nowe struktury, dla kazdego miasta osobna? tak, abym mogl pozniej wyswietlic osobno bilety sprzedane na jedno miasto oczywiscie w miedzy czasie sam tez probuje - ale byc moze sa rozwiazania, o ktorych jeszcze nie wiem (tak jak wczesniej z dynamicznym przydzielaniem pamieci, pozniej z listami) #include <iostream> #include <conio.h> using namespace std; struct loty { std::string nazwisko; loty * nastepny; }; loty * Rzym; loty * Paryz; loty * Tokio; loty * gora = NULL; loty * dol; int i = 1; void kolejka( loty * wskaznik );
main() { int L, znak, licznik = 0; do { cout << "\n1 = Rzym\n2 = Paryz\n3 = Tokio\n4 = wyjscie\n"; cin >> znak; switch( znak ) { case 1: do { clrscr(); cout << "MENU WYBORU\n\n_ _ _ _ _ _\n\n\n1 = dopisz nazwiska do listy\n\n2 = zobacz liste\n\n3 = wyjscie\n\n\n _ _ _ _ _ _\n\n"; cin >> znak; clrscr(); switch( znak ) { case 1: cout << "\nile nazwisk zapisac? = "; cin >> L; licznik += L; for( i = 1; i <= L; i++ ) { kolejka( Rzym ); } cout << "\n dopisano " << L << " nowe nazwisk(a) do listy \n"; cout << "\n w sumie dopisano juz " << licznik << " nazwik(a) do listy\n"; getch(); break; case 2: cout << "\nLISTA NAZWISK\n "; if( gora == NULL ) { cout << "\nlista pusta... wcisnij dowolny klawisz\n"; getch(); } else { int i = 1; loty * wyswietl = gora; while( wyswietl != NULL ) { cout << "\n" << i << ". " << wyswietl->nazwisko << endl; wyswietl = wyswietl->nastepny; i++; } getch(); } getch(); break; case 3: cout << "koniec"; getch(); break; default: cout << "\nzla liczba\n"; getch(); break; } } while( znak != 3 ); break; case 2: do { clrscr(); cout << "MENU WYBORU\n\n_ _ _ _ _ _\n\n\n1 = dopisz nazwiska do listy\n\n2 = zobacz liste\n\n3 = wyjscie\n\n\n _ _ _ _ _ _\n\n"; cin >> znak; clrscr(); switch( znak ) { case 1: cout << "\nile nazwisk zapisac? = "; cin >> L; licznik += L; for( i = 1; i <= L; i++ ) { kolejka( Paryz ); } cout << "\n dopisano " << L << " nowe nazwisk(a) do listy \n"; cout << "\n w sumie dopisano juz " << licznik << " nazwik(a) do listy\n"; getch(); break; case 2: cout << "\nLISTA NAZWISK\n "; if( gora == NULL ) { cout << "\nlista pusta... wcisnij dowolny klawisz\n"; getch(); } else { int i = 1; loty * wyswietl = gora; while( wyswietl != NULL ) { cout << "\n" << i << ". " << wyswietl->nazwisko << endl; wyswietl = wyswietl->nastepny; i++; } getch(); } getch(); break; case 3: cout << "koniec"; getch(); break; default: cout << "\nzla liczba\n"; getch(); break; } } while( znak != 3 );; break; case 3: do { clrscr(); cout << "MENU WYBORU\n\n_ _ _ _ _ _\n\n\n1 = dopisz nazwiska do listy\n\n2 = zobacz liste\n\n3 = wyjscie\n\n\n _ _ _ _ _ _\n\n"; cin >> znak; clrscr(); switch( znak ) { case 1: cout << "\nile nazwisk zapisac? = "; cin >> L; licznik += L; for( i = 1; i <= L; i++ ) { kolejka( Tokio ); } cout << "\n dopisano " << L << " nowe nazwisk(a) do listy \n"; cout << "\n w sumie dopisano juz " << licznik << " nazwik(a) do listy\n"; getch(); break; case 2: cout << "\nLISTA NAZWISK\n "; if( gora == NULL ) { cout << "\nlista pusta... wcisnij dowolny klawisz\n"; getch(); } else { int i = 1; loty * wyswietl = gora; while( wyswietl != NULL ) { cout << "\n" << i << ". " << wyswietl->nazwisko << endl; wyswietl = wyswietl->nastepny; i++; } getch(); } getch(); break; case 3: cout << "koniec"; getch(); break; default: cout << "\nzla liczba\n"; getch(); break; } } while( znak != 3 ); break; case 4: break; default: cout << "\nzla liczba\n"; break; } } while( znak != 4 ); } void kolejka( loty * wskaznik ) { wskaznik = new loty; cout << "\npodaj nazwisko nr " << i << "\n"; cin >> wskaznik->nazwisko; if( gora == NULL ) { gora = wskaznik; dol = gora; } else { dol->nastepny = wskaznik; dol = wskaznik; } wskaznik->nastepny = NULL; }
w tym kodzie, poki co, zapisane nazwiska dla jednego miasta, widoczne sa rowniez dla innych, chce to wlasnie zmienic, aby kazde miasto prowadzilo wlasna ewidencje nazwisk |
|
DejaVu |
» 2009-10-24 20:45:14 struct pasazer { std::string imie; std::string nazwisko; pasazer * nastepny; };
struct lot { std::string skad; std::string dokad; int pozostalo_biletow; pasazer * lista; lot * nastepny; };
lot * lista = NULL;
|
|
1 2 « 3 » 4 |