Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadachi_OOP_SPIOS_Assembler.doc
Скачиваний:
4
Добавлен:
28.10.2018
Размер:
314.37 Кб
Скачать

ОПиАя и ооп

12.4 Дан файл символов построить частотный словарь, представив его виде бинарного дерева поиска и составить линейно скобочную запись.

//подключение внешних модулей

#include "stdio.h"

#include "string.h"

#include "iostream.h"

#include "Windows.h"

#include "io.h"

#include "fcntl.h"

#include <sys/stat.h>

struct list{//ст-ра элемента дерева

char el;

int count;

list *nextl,*nextr; };

char* scob_zap(list *node)

{//функция воз-я скоб-ю запись дерева

char * asd = new char [1024];

ZeroMemory(asd,1024);//очищаем память

asd[0] = node->el;//записывем то что нах-ся в инф поле

strcat(asd,"(");//присоединяем (

if(node->nextl!=NULL)

strcat(asd,scob_zap(node->nextl));//рек-но ищем ск. зап. Для левого наследника

strcat(asd,",");

if(node->nextr!=NULL)

strcat(asd,scob_zap(node->nextr)); //рек-но ищем ск. зап. Для правого наследника

strcat(asd,")");

return asd;//возвращаем получ значение

}

void insert_el(char el, list ** node)

{//функция вставки элемента в дерево

if(*node == NULL)

{//создаем новый элемент

*node = new list;

(*node)->el = el;

(*node)->nextl = NULL;

(*node)->nextr = NULL;

(*node)->count = 1;

}else//изменяем уже имеющийся если оны равны

if(el == (*node)->el){ (*node)->count++;

}else{//если не равны – ищем дальше

if(el>(*node)->el) insert_el(el,&(* node)->nextr); else

insert_el(el,&(* node)->nextl);

}}

int fh;

void main(){ //the main function

fh = -1;//file handle

list *fst,*tek;

fst = tek = NULL;//создаём файл

fh = _open( "tmp1.file", _O_WRONLY|_O_CREAT );

printf("vvedite simvol i = ");

char i;

scanf("%c",&i);

do{

int j = _write(fh,&i,sizeof(char));//записываем элементы в него

if(j<=0) printf("error write");

printf("Vvedite simvol(konechnii element - !) i = ");

cin>>i;}while(i!='!');

_close(fh);//close file

fh = _open( "tmp1.file",_O_RDONLY );

bool is_first = true;//

while(!_eof(fh))

{ _read(fh,&i,sizeof(char)); insert_el(i,&fst);

}// end of tree construction

printf("%s",scob_zap(fst));//output string

}

13.4 Дан файл, компоненты которого являются действительными числами. Сформировать линейный список и

найти наибольшее из значений компонент.

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <io.h>

#include <stdio.h>

#include <stdlib.h>

struct list

{

int info;

list *prev;

list *next;

list() { prev=NULL; next=0; info=0; }

};

void insert_post(list *, int);

void printList(list *);

int findMax(list *);

list *first=0;

list *last=0;

char buffer[100];

void main( void )

{

int fh;

unsigned int i, nbytes = 100, bytesread;

char digit[10];

list *p;

/* Open file for input: */

if((fh = _open("file.dat", _O_RDONLY)) == -1)

{

perror("open failed on input file");

exit(1);

}

/* Read in input: */

if((bytesread = _read(fh, buffer, nbytes)) <= 0) {

perror("Problem reading file");

exit(1);

}

for(i=0; i<bytesread; i++) {

if(buffer[i]==0x0a) continue;

p=last;

sprintf(digit, "%c", buffer[i]);

insert_post(p, atoi(digit));

}

printList(first);

printf("The max item in the list is %d\n", findMax(first));

_close(fh);

}

/* Tставка элемента после текуего */

void insert_post(list *q, int value)

{

list *p = new list;

if (q != 0)

{

p->next = q->next;

p->prev = q;

}

p->info = value;

if (q == 0)

{

first = p;

last = p;

}

else

{

if (q->next == 0) last = p;

else q->next->prev = p;

q->next = p;

}

}

/* find max item in the list */

int findMax(list *q)

{

int max=-9999;

while(q!=NULL) {

if(q->info > max) max = q->info;

q = q->next;

}

return max;

}

/* Print the list */

void printList(list *q)

{

if (q == 0)

printf("List is empty.\n\n");

else

{

printf("The list is:\n");

while (q != 0)

{

printf("%d-> ", q->info);

q = q->next;

}

printf("NULL\n\n");

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]