• Nie Znaleziono Wyników

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

N/A
N/A
Protected

Academic year: 2021

Share "Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach"

Copied!
10
0
0

Pełen tekst

(1)

Materiał uzupełniający do ćwiczen z przedmiotu:

Programowanie w C ++ - ćwiczenia na wskaźnikach

27 kwietnia 2012

Wiedząc, że deklarowanie typu rekordowego w języku C/ C++ wygląda następująco:

struct element {

char * imie;

element *next;

};

zaś definiowanie zmiennych takiego typu złożonego (struktura w C/C++) wygląda następująco:

struct element *poczatek;

Napisz program wyposażony w funkcje pozwalające stworzyć a następnie edy- tować przy wykorzystaniu wskaźniów kolejki w stylu FIFO czyli zgodnie z za- sadą:[First In First Out]: Kolejne funkcje powinny pozwalać:

• void tworzListe(void) - funkcja pozwala tworzyć listę od samego początku.

Kolejne slajdy pokazją etapy dodawania nowych elementów do listy:

– jeśli to pusta lista (dotąd nie stworzona) to:

∗ Początek listy (zmienna poczatek) wskazuje na N U LL.

∗ Tworzymy element typu element o nazwie nowy. Wypełniamy jego zawartość (wpisujemy imię do pola imie) oraz przypisujemy aby wskazywał on na N U LL.

∗ Przepisujemy wskazanie zmiennej poczatek tam gdzie faktycznie jest początek, a więc tam gdzie teraz jest element nowy.

– Dodajemy kolejny element (nie pierwszy na liście) - rysunek 3.

∗ Ustawiamy się zmienną pomocniczą na początku listy. Przechodz- imy całą listę element po elemencie (pomocniczy = pomocniczy→ next) tak długo dopóki pomocniczy → next nie wskazuje na N U LL. (Rysunek 4)

(2)

Rysunek 1: Lista jest jeszcze pusta

Rysunek 2: Dodajemy pierwszy element

(3)

Rysunek 3: Dodajemy kolejny element (nie pierwszy na liście)

Rysunek 4: Tworzenie nowego elementu.Ustawiamy się na początku listy

∗ Tworzymy i wypełniamy nowy element danymi. Przepisujemy wskazanie pomocniczy→ next na element nowy, a nowy → next na N U LL (rysunek 5). Teraz lista wygląda następująco (rysunek 6): W tym celu należy się przesunąć element po elemencie aż do

(4)

Rysunek 5: Połączenie listy dotychczasowej z nowym elementem. Dołączenie go na końcu listy.

Rysunek 6: Lista dwóch elementów

końca listy (rysunek 7).

• void usun() Funkcja usuń ma usuwać elementy z początku listy. W tym celu należy wogóle sprawdzić czy lista czasem nie jest juz pusta (poczatek ==

N U LL ?). Jeśli nie to przypisujemy zmienną pomocniczą pomocniczy tam gdzie wskazuje początek listy, a następnie przepisujemy wskazanie zmiennej poczatek tam gdzie wskazuje jej pole next i usuwamy zmienną pomocniczy.

• void wyswietl(void) Funkcja pozwala na wyświelenie po kolei wszystkich elementów listy.

• void szukaj(char * tekst) Funkcja pozwala wyszukać elementy o podanym

(5)

Rysunek 7: Dodanie kolejnego (trzeciego) elementu

Rysunek 8: Przechodzenie całej listy. etap 1

tekście (imieniu). Funkcja zlicza liczbę wystapień tego tekstu i na jakich pozycjach w liscie wystąpił.

(6)

Rysunek 9: Przechodzenie całej listy. etap 2

Rysunek 10: Dołączenie na końcu 3 elementu

Poniżej zamieszczono kod programu realizującego funkcje: tworzListe(), wyswietl() oraz usun().

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

(7)

#include <string.h>

#include <iostream.h>

struct osoba {

int i;

char * imie;

osoba *nast;

};

struct osoba *begin;

void usun() {

struct osoba *pom;

pom = begin;

if ( begin == NULL) cout<<"brak elementow";

else {

pom = begin;

if (pom->nast !=NULL) {begin = pom->nast;

pom->nast = NULL;}

else begin=NULL;

} }

void wyswietl(void) {

int i=0;

struct osoba *pom;

if ( begin == NULL) cout<<"brak elementow";

else {

pom = begin;

while (pom != NULL) {

cout<<"\n element nr: "<<++i<< " to "<<pom->imie<<" \n";

pom = pom->nast;

} } };

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

(8)

{

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";

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();

(9)

else break;

}while (znak !=’k’);

system("PAUSE");

return 0;

}

(10)

Materiał uzupełniający do ćwiczen z przedmiotu:

Język programowania obiektowego - ćwiczenia na wskaźnikach część II

27 kwietnia 2012

1. Dopisz do napisanego już na poprzednich zajęciach programu wyposażonego w funkcje pozwalające stworzyć a następnie edytować przy wykorzystaniu wskaźniów kolejki w stylu FIFO czyli zgodnie z zasadą:[First In First Out]:

void tworzListe(void), void wyswietl(void) oraz void usuń(void), nowe (następu- jące) funkcje:

• - int liczbaSzukanychElementow(char *) funkcja pozwala zliczyć liczbę elementów o podanym kryterium (łańcuch tekstowy: imie, nazwisko);

• - boolean SzukajElement(char *) funkcja pozwala sprawdzić czy na liście istnieje element o podanym kryterium (łańcuch tekstowy: imie, nazwisko);

• - void dodajElementNaPozycje(int) funkcja pozwala dodać nowy el- ement na pozycję wskazaną indeksem będącym argumentem funkcji.

Jeśli taka pozycja nie istnieje na liście to nowy element należy dodać na końcu listy;

2. Lista dwukierunkowa różni się od listy jednokierunkowej, czy stosu tym jedynie, iż w strukturze swojej ma dwa pola wskaźnikowe. Jedno wskazuje na element poprzedzający dany element na liście, drugie wskazujące na el- ement następny. To pozwala dużo łatwiej poruszać się po takiej strukturze dynamicznej:

struct element {

char * imie;

element *next;

element *prev;

};

Zmodyfikuj program z trzema podstawowymi funkcjami z poprzednich zajęć tak, aby miał on formę listy dwukierunkowej.

Cytaty

Powiązane dokumenty

Rysunek do zadania 19

Przez połowę drogi naszej planety wokół Słońca, czyli przez pół roku, Ziemia nachylona jest swoim północnym biegunem do Słońca, a południowym odchylona

Na zajęciach powinieneś posiadać akty prawne niezbędne do pracy na ćwiczeniach (Konstytucja RP, literatura podana przez prowadzącego na pierwszych zajęciach, inne akty prawne

GWiRT:: OZNACZENIA MATERIAŁÓW BUDOWLANYCH OZNACZENIA MATERIAŁÓW BUDOWLANYCH GWiRT GWiRT:: GWiRT GWiRT:: ZASADY WYMIAROWANIA

witaj na I etapie konkursu geograficznego. Przeczytaj uważnie instrukcję i postaraj się prawidłowo odpowiedzieć na wszystkie pytania.  Przed rozpoczęciem pracy sprawdź

Dz.U. 6) Wykonawca, który powołuje się na zasoby innych podmiotów, w celu wykazania braku istnienia wobec nich podstaw wykluczenia udziału w postępowaniu składa także jednolite

Na kolejnym rysunku przedstawiony jest czas rozpoczęcia i zakończenia egzaminu, liczba zadań, na jakie zdający udzielił odpowiedzi, oraz pozostały czas do zakończenia

zakamarki pamięci artystycznej przed widzami i ba- daczami sztuki. Humaniści zdawali sobie sprawę z jego mocy i upatrywali w nim narodzin nowocze- snego typu sztuki –