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

Podobne dokumenty
Programowanie i struktury danych

Listy i funkcje zaprzyjaźnione w C++

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Dynamiczne struktury danych

int tab_a [ 2 ] [ 3 ];

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Wstęp do programowania

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

struct Student { char nazwisko[30]; int wiek; float ocena; }; #define MAX_ROZMIAR 3 Student lista_studentow[max_rozmiar];

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Zmienne i struktury dynamiczne

Programowanie komputerowe. Zajęcia 4

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Programowanie obiektowe

Algorytmy i Struktury Danych.

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Języki programowania obiektowego Nieobiektowe elementy języka C++

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

Wprowadzenie do programowania i programowanie obiektowe

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Struktury. Przykład W8_1

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Struktury czyli rekordy w C/C++

Programowanie - wykład 4

Programowanie Proceduralne

Listy powiązane zorientowane obiektowo

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Lista dwukierunkowa - przykład implementacji destruktorów

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Jak napisać listę jednokierunkową?

Wstęp do programowania

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

tablica: dane_liczbowe

Podstawy programowania w języku C++

Podstawy Programowania 2 Dwukierunkowa lista liniowa. Plan. Wstęp. Implementacja. Notatki. Notatki. Notatki. Notatki.

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny

Dariusz Chaberski. UMK Toruń

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy informatyki 2

. Podstawy Programowania 2. Dwukierunkowa lista liniowa. Arkadiusz Chrobot. 7 kwietnia 2019

Zofia Kruczkiewicz, ETE8305_2 1

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Podstawy programowania

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

Podstawy Programowania. Listy i stosy

Alokacja pamięci dla tablicy dwuwymiarowej

Ćwiczenie 4 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Zasady programowania Dokumentacja

Dynamiczne struktury danych

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Laboratorium 6: Dynamiczny przydział pamięci. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Ćwiczenie 5 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Deklaracja struktury w C++

Wstęp do programowania 1

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Ilość cyfr liczby naturalnej

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

KOLEJKA (QUEUE) (lista fifo first in, first out)

Struktury dynamiczne

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Algorytmy i Struktury Danych.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Wstęp do Programowania, laboratorium 02

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wskaźniki. Informatyka

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

ALGORYTMY I STRUKTURY DANYCH

Wskaźniki w C. Anna Gogolińska

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

E S - uniwersum struktury stosu

Uzupełnienie dot. przekazywania argumentów

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Część 4 życie programu

int f(); //f - funkcja zwracająca wartość typu int int (*f)(); //f - wskaźnik do funkcji zwracającej wartość typu int

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Transkrypt:

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 edytować przy wykorzystaniu wskaźniów 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 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 NULL. 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. Przechodzimy całą listę element po elemencie (pomocniczy = pomocniczy next) tak długo dopóki pomocniczy next nie wskazuje na NULL. (Rysunek 4) 1

Rysunek 1: Lista jest jeszcze pusta Rysunek 2: Dodajemy pierwszy element 2

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 NULL (rysunek 5). Teraz lista wygląda następująco (rysunek 6): W tym celu należy się przesunąć element po elemencie aż do 3

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 4

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ł. 5

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> 6

#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 7

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

else break; while (znak!= k ); system("pause"); return 0; 9

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ępują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 element 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 element 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. 10