Académique Documents
Professionnel Documents
Culture Documents
13 maja 2009
Uwaga !!! W ramach zaj, ktre si niestety z uwagi na Juwenalia nie odbd w dniach 15.05 oraz 22.05, prosz o wykonanie nastpujcych zada: 1. Pitek: 15 maja Wiedzc, e deklarowanie typu rekordowego w jzyku C/ C++ wyglda nastpujco: struct element { char * imie; element *next; }; za deniowanie zmiennych takiego typu zoonego (struktura w C/C++) wyglda nastpujco: struct element *poczatek; Napisz program wyposaony w funkcje pozwalajce stworzy a nastpnie edytowa przy wykorzystaniu wskaniw kolejki w stylu FIFO czyli zgodnie z zasad:[First In First Out]: Kolejne funkcje powinny pozwala:
void tworzListe(void) - funkcja pozwala tworzy list od samego pocztku. Kolejne slajdy pokazj etapy dodawania nowych elementw do listy:
jeli to pusta lista (dotd nie stworzona) to: * Pocztek listy (zmienna poczatek) wskazuje na N U LL. * Tworzymy element typu element o nazwie nowy. Wypeniamy jego zawarto (wpisujemy imi do pola imie) oraz przypisujemy aby wskazywa on na N U LL. 1
Rysunek 2: Dodajemy pierwszy element Poniej zamieszczono kod programu realizujcego funkcje: tworzListe(), wyswietl() oraz usun().
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <iostream.h> struct osoba { int i; char * imie; osoba *nast; }; struct osoba *begin; void usun() { struct osoba *pom; 3
Rysunek 4: Tworzenie nowego elementu.Ustawiamy si na pocztku listy pom = begin; if ( begin == NULL) cout<<"brak elementow"; else {
Rysunek 6: Lista dwch elementw pom = begin; if (pom->nast !=NULL) {begin = pom->nast; pom->nast = NULL;} else begin=NULL; } } void wyswietl(void) { int i=0; struct osoba *pom;
Rysunek 8: Przechodzenie caej listy. etap 1 if ( begin == NULL) cout<<"brak elementow"; else { 6
Rysunek 10: Doczenie na kocu 3 elementu pom = begin; while (pom != NULL) { cout<<"\n element nr: "<<++i<< " to "<<pom->imie<<" \n"; pom = pom->nast; } } 7
}; void tworzListe(void) { struct osoba *nowy,*pocz,*biez; char *i,*p,znak; nowy=pocz=biez=NULL; cout<<"\n Program: lista jednokierunkowa do przodu.\n "; do { nowy = (struct osoba *)malloc(sizeof(struct osoba)); i=(char *)malloc(512*sizeof(char)); cout <<"Podaj imie: " <<endl; cin>>i; nowy->imie = (char *)malloc((strlen(i)+1)*sizeof(char)); strcpy(nowy->imie, i); if (pocz==NULL) { cout<<"\n To jest pierwszy elemement na liscie."; begin=nowy; pocz=nowy; biez=nowy; biez->nast = NULL; } else { biez->nast = nowy; biez=nowy; nowy->nast = NULL; } cout<<"Chcesz dodac element ?"; cin>>znak; } while(znak !=n); }
int main(int argc, char *argv[]) { struct osoba *begin; char znak; char* t; //clrscr(); begin = NULL; do { cout<<"Wybierz operacje?\n"; 8
cout<<"dodaj nowy element [d]\n"; cout<<"Pokaz cala liste [p]\n"; cout<<"Usun element z poczatku listy [u]\n"; cout<<"Zakoncz program [k]\n"; cin>>znak; if (znak == d) tworzListe(); else if (znak==p) wyswietl(); else if (znak == u)usun(); else break; }while (znak !=k); system("PAUSE"); return 0; } 2. Pitek: 22 maja: Uzupenij program z poprzednich wicze o nastpujce elementy:
Na pocztku ma si wywietla menu gwne, ktre proponuje rne moliwoci: poka ca list, szukaj wybranego elementu, usu z pocztku, usu z koca, usu wskazany elementy, zlicz elementy, zakocz. Dopisz do napisanego ju na poprzednich zajciach programu wyposaonego w funkcje pozwalajce stworzy a nastpnie edytowa przy wykorzystaniu wskaniw kolejki w stylu FIFO czyli zgodnie z zasad:[First In First Out]: void tworzListe(void), void wyswietl(void) oraz void usu(void), nowe (nastpujce) funkcje:
- int liczbaSzukanychElementow(char *) funkcja pozwala zliczy liczb elementw o podanym kryterium (acuch tekstowy: imie, nazwisko); - boolean SzukajElement(char *) funkcja pozwala sprawdzi czy na licie istnieje element o podanym kryterium (acuch tekstowy: imie, nazwisko); - void dodajElementNaPozycje(int) funkcja pozwala doda nowy element na pozycj wskazan indeksem bdcym argumentem funkcji. Jeli taka pozycja nie istnieje na licie to nowy element naley doda na kocu listy; - int zliczElementy(char *) funkcja zlicza wszystkie rekordy o podanym imieniu. Mwi, te na ktrych pozycjach listy one wystapiy.
Teraz nasz program powinien pozwala na zapis caej listy do pliku tekstowego. Ostatecznie, program powinien pozwala na zaimportowanie listy z pliku tekstowego.
10