Podstawy Programowania C 14

plik : program.h

// drzewo BST

// PROGRAM GŁÓWNY

#include <stdio.h>

int main(){

#include <conio.h>

struct W * n, *z;

#include <stdlib.h>

n=czytaj_tree("pr_01.txt");

#include "BST.h"

printf("\n\tD R Z E W O n\n\n\n");

#include "uni.h"

druk_tree(n,0);

printf("\n\n\nglebokosc

n=%d\n\n\n",deep_tree(n));

printf("\n\tD R Z E W O z\n\n\n"); z=kopia_tree(n);

druk_tree(z,0);

printf("\n\n\nglebokosc

z=%d\n\n\n",deep_tree(z));

zapisz_tree(z,"drzewo.txt","\tD R Z E W O

Z\n\n");

koniec();

return 0;

}

plik : uni.h

// Funkcje pomocnicze

// Funkcja min zwracająca minimum

#ifndef UNI

int min(int , int );

#define UNI

//Funkcja dopisująca wartość double

#include <stdio.h>

//do pliku

#include <conio.h>

void dopisz_lf(char *, double );

#include <stdlib.h>

// Funkcja dopisująca znak do pliku

// DEKLARACJE innych funkcji void dopisz_c(char *, char );

//Funkcja zabezpiecza

// Funkcja dopisująca napis do pliku

//przed zamknięciem okna programu

void dopisz_s(char *, char* );

void koniec();

#include "uni.c"

// Funkcja max zwracająca maximum

#endif

int max(int , int );

plik : BST.h

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

// drzewo BST

// Funkcja druk_W drukuje na ekran

#ifndef BST

// zawartość węzła

#define BST

// pokazywanego przez wskaźnik

#include <stdio.h>

void druk_W(struct W * );

#include <conio.h>

// Funkcja dodaj_W wstawia węzeł

#include <stdlib.h>

// o zadanej wartości do drzewa

// STRUKTURA W

// pokazywanego przez wskaźnik

//każdy obiekt typu struct W

void dodaj_W(struct W * , double);

// jest węzłem drzewa BST

//Funkcja drukująca drzewo

//l wskazuje na lewe poddrzewo

//w porządku in-order

//p wskazuje na prawe poddrzewo

void druk_in(struct W *);

//n przechowuje wartość

//d przechowuje liczbe

// Funkcja zwracająca głębokość drzewa

// wszystkich potomków danego węzła

int deep_tree(struct W *);

struct W{

// Funkcja drukująca drzewo bokiem

int d;

void druk_tree(struct W *,int );

double n;

// Funkcja czytająca drzewo z pliku struct W * l;

struct W * czytaj_tree(char * );

struct W * p;

// Funkcja tworząca kopię drzewa

};

struct W * kopia_tree(struct W *);

// Deklaracje funkcji dla struktury W

// Funkcja zapisująca drzewo do pliku

//Funkcja n_W tworzy nowy węzeł

// i zwraca do niego wskaźnik

void zapisuj_tree(struct W *,int ,char *); struct W * n_W(double);

// Funkcja zapisująca drzewo do pliku void zapisz_tree(struct W *,char *, char *);

#include "BST.c"

#endif

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

plik : uni.c

// Funkcje pomocnicze- definicje funkcji // Funkcja dopisująca wartość double

// Funkcja koniec

//do pliku

//zabezpiecza przed przedwczesnym

void dopisz_lf(char *nazwa, double x){

//zamknięciem okna programu

FILE *plik;

void koniec(){

plik=fopen(nazwa,"a");

printf("\nK O N I E C");

fprintf(plik,"%.0lf\n",x);

fflush(stdin);

fclose(plik);

getch();

}

}

// Funkcja dopisująca znak do pliku

// Funkcja max zwracająca maximum z x i y void dopisz_c(char *nazwa, char x){

int max(int x, int y){

FILE *plik;

if(x>y) return x;

plik=fopen(nazwa,"a");

return y;

fprintf(plik,"%c",x);

}

fclose(plik);

}

// Funkcja min zwracająca minimum z x i y int min(int x, int y){

// Funkcja dopisująca napis do pliku if(x<y) return x;

void dopisz_s(char *nazwa, char* x){

return y;

FILE *plik;

}

plik=fopen(nazwa,"a");

fprintf(plik,"%s",x);

fclose(plik);

}

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

plik : BST.c

// drzewo BST

// Funkcja dodaj_W wstawia węzeł

#include "uni.h"

// o wartości t do drzewa

// FUNKCJE dla struktury W

// pokazywanego przez wskaźnik x

void dodaj_W(struct W * t, double x){

//Funkcja n_W tworzy nowy węzeł

struct W* pom;

// i zwraca do niego wskaźnik

int i;

struct W * n_W(double p){

i=1;

struct W *pm;

pom=t;

pm=malloc(sizeof(struct W));

while((pom->l!=NULL || pom->p!=NULL) pm->l=NULL;

&& i!=0) {

pm->p=NULL;

i=0;

pm->n=p;

if(pom->n>x && pom->l!=NULL) {

pm->d=0;

pom=pom->l;

return pm;

i++;

}

}

// Funkcja druk_W drukuje na ekran

if(pom->n<=x && pom->p!=NULL) {

// zawartość węzła

pom=pom->p;

// pokazywanego przez wskaźnik p

i++;

void druk_W(struct W * p){

}

printf("n=%.2lf\n",p->n);

}

printf("d=%d\n",p->d);

if(pom->n>x && pom->l==NULL)

}

pom->l=n_W(x);

if(pom->n<=x && pom->p==NULL) pom->p=n_W(x);

}

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

// Funkcja drukująca drzewo

// Funkcja drukująca drzewo bokiem

// w porządku in-order

void druk_tree(struct W *t,int k){

void druk_in(struct W * p){

int i;

if(p->l!=NULL)

if(t!=NULL) {

druk_in(p->l);

for(i=1;i<=k;i++)

printf("n= %.2lf\td=%d\n",p->n,p->d); if(!(k%2))

if(p->p!=NULL)

k+=3;

druk_in(p->p);

druk_tree(t->p,k+5);

}

if(t->p!=NULL) {

// Funkcja zwracająca głębokość drzewa for(i=0;i<(k+2);i++)

int deep_tree(struct W * t){

printf(" ");

int i;

printf(" /\n");

i=1;

}

if(t->l!=NULL && t->p!=NULL) for(i=0;i<k;i++)

i=i+max(deep_tree(t->l),deep_tree(t->p)); printf(" "); else

printf("%.0lf\n",t->n);

{

if(t->l!=NULL) {

if(t->p!=NULL)

for(i=0;i<(k+2);i++)

i=i+deep_tree(t->p);

printf(" ");

if(t->l!=NULL)

printf(" \\\n");

i=i+deep_tree(t->l);

}

if(t->l==NULL && t->p==NULL) druk_tree(t->l,k+5);

i=1;

}

}

}

return i;

}

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

// Funkcja czytająca drzewo z pliku

// Funkcja zapisująca drzewo do pliku struct W * czytaj_tree(char * nazwa){

void zapisuj_tree(struct W *t,int k,char *n){

struct W *pm;

int i;

int i;

if(t!=NULL) {

double pn;

for(i=1;i<=k;i++)

FILE *plik;

if(!(k%2))

pm=NULL;

k+=3;

plik=fopen(nazwa,"r");

zapisuj_tree(t->p,k+5,n);

if(plik!=NULL) {

if(t->p!=NULL) {

i=fscanf(plik,"%lf",&pn); for(i=0;i<(k+2);i++)

if(i!=-1)

dopisz_c(n,' ');

pm=n_W(pn);

dopisz_s(n," /\n");

while(i!=-1) {

}

i=fscanf(plik,"%lf",&pn); for(i=0;i<k;i++)

if(i!=-1)

dopisz_c(n,' ');

dodaj_W(pm,pn);

dopisz_lf(n,t->n);

}

if(t->l!=NULL) {

}

for(i=0;i<(k+2);i++)

else

dopisz_c(n,' ');

printf("\nBRAK PLIKU %s\n",nazwa); dopisz_s(n," \\\n");

return pm;

}

}

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

}

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

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

712

/

600

/

512

/

256

\

150

/

128

\

96

\

72

/

64

\

48

/

32

\

20

/

16

\

10

glebokosc n=6

K O N I E C

drzewo BST w 5 plikach Podstawy Programowania

Podstawy Programowania C 14

drzewo BST w 5 plikach Podstawy Programowania