Podstawy Programowania

Podobne dokumenty
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

Co nie powinno być umieszczane w plikach nagłówkowych:

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

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

Podstawy programowania wykład

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

Drzewa wyszukiwań binarnych (BST)

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Podstawy Programowania C 09

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Funkcja (podprogram) void

Podstawy programowania C. dr. Krystyna Łapin

Wstęp. #define include include include include include include

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

// Funkcja glowna int main() { // zmienne int kont='t'; double x1, y1, x2, y2, x3, y3, a, b, c, p1, p2, p3, pole, ha, hb, hc;

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

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

INSTRUKCJE REPETYCYJNE PĘTLE

Argumenty wywołania programu, operacje na plikach

Podstawy Programowania C 03

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

INSTRUKCJE REPETYCYJNE PĘTLE

Dariusz Chaberski. UMK Toruń

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

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

Abstrakcyjne struktury danych w praktyce

Wstęp do programowania

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

tablica: dane_liczbowe

Szablony klas, zastosowanie szablonów w programach

Wstęp do Programowania, laboratorium 02

2 Przygotował: mgr inż. Maciej Lasota

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

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

Wstęp do wskaźników w języku ANSI C

Programowanie w językach wysokiego poziomu

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

Wykład 9 - struktury rekurencyjne uporządkowane

Język C zajęcia nr 11. Funkcje

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

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

1. Abstrakcyjne typy danych

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

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

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

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

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

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Programowanie strukturalne i obiektowe

Sieciowa komunikacja procesów - XDR i RPC

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

Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Funkcje zawarte w bibliotece < io.h >

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Język C/C++ w przykładach

Funkcje. Piotr Zierhoffer. 7 października Institute of Computer Science Poznań University of Technology

Podstawy programowania w języku C++

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

ALGORYTMY I STRUKTURY DANYCH

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

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Pliki. Informacje ogólne. Obsługa plików w języku C

Wskaźniki. Programowanie Proceduralne 1

Programowanie obiektowe i C++ dla matematyków

PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.

Operacje wejścia/wyjścia odsłona pierwsza

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wskaźniki w C. Anna Gogolińska

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Opisy funkcji /html_node/libc_528.html

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Funkcje zawarte w bibliotece < io.h >

Katedra Elektrotechniki Teoretycznej i Informatyki. sem. III. Dr inż. M. Czyżak

Wstęp do programowania 1

Programowanie Proceduralne

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Zmienne, stałe i operatory

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

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

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Wysokość drzewa Głębokość węzła

Język ANSI C tablice wielowymiarowe

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

Uzupełnienie dot. przekazywania argumentów

Katedra Elektrotechniki Teoretycznej i Informatyki. sem. II - wykład 6. Dr hab. inż. M. Czyżak

Programowanie Proceduralne

Łańcuchy znaków. Agnieszka Nowak - Brzezińska

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

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

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

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Struktury czyli rekordy w C/C++

Pliki. Informacje ogólne. Obsługa plików w języku C

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Transkrypt:

drzewo BST #include <stdio.h> #include <conio.h> #include <stdlib.h> #include "BST.h" #include "uni.h" Funkcje pomocnicze #ifndef UNI #define UNI #include <stdio.h> #include <conio.h> #include <stdlib.h> DEKLARACJE innych funkcji Funkcja zabezpiecza przed zamknięciem okna programu void koniec(); Funkcja max zwracająca maximum int max(int, int ); C 14 plik : program.h PROGRAM GŁÓWNY int main(){ struct W * n, *z; n=czytaj_tree("pr_01.txt"); printf("ntd R Z E W O nnnn"); druk_tree(n,0); printf("nnnglebokosc n=%dnnn",deep_tree(n)); printf("ntd R Z E W O znnn"); z=kopia_tree(n); druk_tree(z,0); printf("nnnglebokosc z=%dnnn",deep_tree(z)); zapisz_tree(z,"drzewo.txt","td R Z E W O Znn"); koniec(); return 0; plik : uni.h Funkcja min zwracająca minimum int min(int, int ); Funkcja dopisująca wartość double do pliku void dopisz_lf(char *, double ); Funkcja dopisująca znak do pliku void dopisz_c(char *, char ); Funkcja dopisująca napis do pliku void dopisz_s(char *, char* ); #include "uni.c" #endif plik : BST.h

C 14 drzewo BST #ifndef BST #define BST #include <stdio.h> #include <conio.h> #include <stdlib.h> STRUKTURA W każdy obiekt typu struct W jest węzłem drzewa BST l wskazuje na lewe poddrzewo p wskazuje na prawe poddrzewo n przechowuje wartość d przechowuje liczbe wszystkich potomków danego węzła struct W{ int d; double n; struct W * l; struct W * p; ; Deklaracje funkcji dla struktury W Funkcja n_w tworzy nowy węzeł i zwraca do niego wskaźnik struct W * n_w(double); Funkcja druk_w drukuje na ekran zawartość węzła pokazywanego przez wskaźnik void druk_w(struct W * ); Funkcja dodaj_w wstawia węzeł o zadanej wartości do drzewa pokazywanego przez wskaźnik void dodaj_w(struct W *, double); Funkcja drukująca drzewo w porządku in-order void druk_in(struct W *); Funkcja zwracająca głębokość drzewa int deep_tree(struct W *); Funkcja drukująca drzewo bokiem void druk_tree(struct W *,int ); Funkcja czytająca drzewo z pliku struct W * czytaj_tree(char * ); Funkcja tworząca kopię drzewa struct W * kopia_tree(struct W *); Funkcja zapisująca drzewo do pliku void zapisuj_tree(struct W *,int,char *); Funkcja zapisująca drzewo do pliku void zapisz_tree(struct W *,char *, char *); #include "BST.c" #endif

C 14 Funkcje pomocnicze- definicje funkcji Funkcja koniec zabezpiecza przed przedwczesnym zamknięciem okna programu void koniec(){ printf("nk O N I E C"); fflush(stdin); getch(); Funkcja max zwracająca maximum z x i y int max(int x, int y){ if(x>y) return x; return y; Funkcja min zwracająca minimum z x i y int min(int x, int y){ if(x<y) return x; return y; plik : uni.c Funkcja dopisująca wartość double do pliku void dopisz_lf(char *nazwa, double x){ FILE *plik; plik=fopen(nazwa,"a"); fprintf(plik,"%.0lfn",x); fclose(plik); Funkcja dopisująca znak do pliku void dopisz_c(char *nazwa, char x){ FILE *plik; plik=fopen(nazwa,"a"); fprintf(plik,"%c",x); fclose(plik); Funkcja dopisująca napis do pliku void dopisz_s(char *nazwa, char* x){ FILE *plik; plik=fopen(nazwa,"a"); fprintf(plik,"%s",x); fclose(plik);

drzewo BST #include "uni.h" FUNKCJE dla struktury W Funkcja n_w tworzy nowy węzeł i zwraca do niego wskaźnik struct W * n_w(double p){ struct W *pm; pm=malloc(sizeof(struct W)); pm->l=null; pm->p=null; pm->n=p; pm->d=0; return pm; Funkcja druk_w drukuje na ekran zawartość węzła pokazywanego przez wskaźnik p void druk_w(struct W * p){ printf("n=%.2lfn",p->n); printf("d=%dn",p->d); C 14 plik : BST.c Funkcja dodaj_w wstawia węzeł o wartości t do drzewa pokazywanego przez wskaźnik x void dodaj_w(struct W * t, double x){ struct W* pom; i=1; pom=t; while((pom->l!=null pom->p!=null) && i!=0) { i=0; if(pom->n>x && pom->l!=null) { pom=pom->l; i++; if(pom->n<=x && pom->p!=null) { pom=pom->p; i++; if(pom->n>x && pom->l==null) pom->l=n_w(x); if(pom->n<=x && pom->p==null) pom->p=n_w(x);

Funkcja drukująca drzewo w porządku in-order void druk_in(struct W * p){ if(p->l!=null) druk_in(p->l); printf("n= %.2lftd=%dn",p->n,p->d); if(p->p!=null) druk_in(p->p); C 14 Funkcja zwracająca głębokość drzewa int deep_tree(struct W * t){ i=1; if(t->l!=null && t->p!=null) i=i+max(deep_tree(t->l),deep_tree(t->p)); else { if(t->p!=null) i=i+deep_tree(t->p); if(t->l!=null) i=i+deep_tree(t->l); if(t->l==null && t->p==null) i=1; return i; Funkcja drukująca drzewo bokiem void druk_tree(struct W *t,int k){ if(t!=null) { for(i=1;i<=k;i++) if(!(k%2)) k+=3; druk_tree(t->p,k+5); if(t->p!=null) { for(i=0;i<(k+2);i++) printf(" "); printf(" n"); for(i=0;i<k;i++) printf(" "); printf("%.0lfn",t->n); if(t->l!=null) { for(i=0;i<(k+2);i++) printf(" "); printf(" n"); druk_tree(t->l,k+5);

C 14 Funkcja czytająca drzewo z pliku struct W * czytaj_tree(char * nazwa){ struct W *pm; double pn; FILE *plik; pm=null; plik=fopen(nazwa,"r"); if(plik!=null) { i=fscanf(plik,"%lf",&pn); if(i!=-1) pm=n_w(pn); while(i!=-1) { i=fscanf(plik,"%lf",&pn); if(i!=-1) dodaj_w(pm,pn); else printf("nbrak PLIKU %sn",nazwa); return pm; Funkcja zapisująca drzewo do pliku void zapisuj_tree(struct W *t,int k,char *n){ if(t!=null) { for(i=1;i<=k;i++) if(!(k%2)) k+=3; zapisuj_tree(t->p,k+5,n); if(t->p!=null) { for(i=0;i<(k+2);i++) dopisz_c(n,' '); dopisz_s(n," n"); for(i=0;i<k;i++) dopisz_c(n,' '); dopisz_lf(n,t->n); if(t->l!=null) { for(i=0;i<(k+2);i++) dopisz_c(n,' '); dopisz_s(n," n"); zapisuj_tree(t->l,k+5,n); Funkcja zapisująca drzewo do pliku void zapisz_tree(struct W *t,char *n, char *tekst){ FILE * plik; plik=fopen(n,"w"); fprintf(plik,"%s",tekst); fclose(plik); zapisuj_tree(t,0,n);

Funkcja tworząca kopię drzewa struct W * kopia_tree(struct W *t){ struct W * pp; pp=n_w(t->n); if(t->p!=null) pp->p=kopia_tree(t->p); if(t->l!=null ) pp->l=kopia_tree(t->l); return pp; D R Z E W O n C 14 64 128 32 256 96 48 512 150 72 20 16 10 glebokosc n=6 K O N I E C 600 712

C 14