DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Лабораторна робота 9

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
Комп’ютерні науки
Кафедра:
Не вказано

Інформація про роботу

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Програмно-орієнтовані мови програмування
Варіант:
5

Частина тексту файла (без зображень, графіків і формул):

1) послідовність слів, впорядкування за довжинами слів (якщо довжини збігаються, то за абетковим порядком); 2) нижній (від листків) зліва направо; 3) 3.1) надрукувати список подій, які відносяться до заданого часового проміжку та вказати їхню кількість; 3.2) вилучити всі вузли, які є листками дерева; 4) симетричний справа наліво; 5) вилучення вузлів з довгими словами.  / /******************************************************************* * Ти мусиш десь на компі зробити файл під назвою vvid в блокноті * * Вона має бути заповнена так: слово ентер слово ентер * * Після останнього слова нічого не ставити! * * * * Наприклад вміст файл * * * * sagrg * dgfd * dhfdg * jhkfgbj * lghlbjl * kjhbf * nbnb * jfkhg * hjxfg * ghfgjf * * dhyjg * fkfjk * kjlagfhg * jkhbf * uilgn * * * *******************************************************************/ //Підключаєм бібліотекі //<stdlib.h> для виділення пам"яті #include<stdio.h> #include<stdlib.h> #include<string.h>//Для пошуку покмбінації //MAX-Довжина слова #define MAX 10 //Структура дерева: слово і вказівники на менший і більший елемент typedef struct DER { char k[MAX]; struct DER *bil,*men; } der; //р-вказівник на корінь дерева der* p; int kil;//Для того щоб знати скільки слів вивели //Функція формування дерева void form(der* pn,der** pz) { int a,b,i; a=b=i=0;//Онулюєм if(*pz==NULL)//Якщо місце пусте вставляєм в нього новий елемент { *pz=pn; return; } while(pn->k[a]!='\0')//Рахуєм довжину нового слова a++; while((*pz)->k[b]!='\0')//Рахуєм довжину поточного слова b++; if(a==b)//Якщо довжина однакова перевіряєм по алфавіту { a=b=0; while(a==b)//Робим цикл доти доки коди символів небудуть різними { if(pn->k[i]=='\0'&&(*pz)->k[i]=='\0')//Якщо в обох словах є нуль символ значить вони одинакові { free(pn);//Видаляєм нове одинакове слово return; } a+=pn->k[i];//Сюда сумуєм коди символів нового речення b+=(*pz)->k[i++];//Сюда сумуєм коди символів поточного речення з дерева } } if(a<b) form(pn,&(*pz)->men);//Якщо нове слово по коду менше за поточне слово то йдем до меншого else form(pn,&(*pz)->bil);//наоборот } //Функція вводу з файла void vvid() { FILE* f; int i; char c; der* pn; f=fopen("C:\\pop\\ vvid.txt","r");//тут запхаєш свій шлях через "\\" і в кінці vvid.txt" while(!feof(f)) { pn=(der*)calloc(1,sizeof(der));//Виділяєм память для нового елемента pn->bil=pn->men=NULL;//Онулюєм pn->k[0]=NULL; // i=0; // while(1) { fscanf(f,"%c",&c);//Зчитуєм з файла посимвольно if(c!='\n'&&!feof(f))//Якщо с є ентор значчить кінець слова, якщо feof(f)-то кінец файла pn->k[i++]=c;//Записуєм посимвольно в наше слово else break; } pn->k[i]='\0';//Присвоюєм в кінці нульсимволь для того щоб знати де кінець слова form(pn,&p);//Добавляєм новий елемент в дерево } fclose(f);//Закриваєм відкритий файл } //Функція виводу дерева (нижній (від листків) зліва направо) void vuvid(der* pn) { if(pn->men!=NULL)//Якщо ще є менший йдем до нього vuvid(pn->men); if(pn->bil!=NULL)//Якщо ще є більший йдем до нього vuvid(pn->bil); puts(pn->k); } //Функція виводу слів по проміжку void promigok(int a,int b,der* pn) { int dov=0;//Змінна для довжини слова while(pn->k[dov]!='\0')//Рахуєм довжину нового слова dov++; if(dov>=a&&dov<=b)//Якщо довжина підходить { puts(pn->k);//виводим слово kil++;//Рахуєм кількість виведених слів } if(pn->men!=NULL)//Якщо є менший елемент йдем до нього promigok(a,b,pn->men); if(pn->bil!=NULL)//Якщо є менший елемент йдем до нього promigok(a,b,pn->bil); } //Функція видалення листків void lustki(der* pn) { if(pn->bil!=NULL)//Якщо є більший елемент { if(pn->bil->bil==NULL&&pn->bil->men==NULL)//Якщо він листок то наступні будуть нулями { free(pn->bil);//Видаляєм листок pn->bil=NULL;//Онулюєм його місце return;//Виходим з функції } else//Якщо не листок lustki(pn->bil);//Йдем до більшого } if(pn->men!=NULL)//Якщо є менший елемент { if(pn->men->bil==NULL&&pn->men->men==NULL)//Якщо він листок то наступні будуть нулями { free(pn->men);//Видаляєм листок pn->men=NULL;//Онулюєм його місце return;//Виходим з функції } else//Якщо не листок lustki(pn->men);//Йдем до меншого } } //Функція видалення дерева і піддерев (симетричний справа наліво) void zvil(der* pn) { der* pz; if(pn->bil!=NULL)//Якщо є більший йдем до нього zvil(pn->bil); if(pn->men!=NULL)//Якщо є менший { pz=pn->men;//Зберігаєм вказівник меншого free(pn);//Звільняєм поточний елемент zvil(pz);//викликаєм функцію зі збереженим елементом } else free(pn);//Якщо він останній то видаляєм } //Функція яка видаляє довгі слова (Будем вважати що довгі то слова які мають більше 6 букв) void dovgislova()//Не рекурсивна { int dov,i;//Змінна для довжини слова der* pn;//Вказівник на дерево для роботи while(1)//Вічний цикл { i=0;//Лічильник для того щоб знати коли вийти з цикла pn=p;//Берем вказівник на корінь while(1)//Вічний цикл { if(pn->bil!=NULL)//Якщо є більший елемент { dov=0;//Довжину онюлюєм while(pn->bil->k[dov]!='\0')//Рахуєм довжину наступного більшого слова dov++; if(dov>=7)//Якщо довжина більше 6 { i++;//Збільшуєм лічильк zvil(pn->bil);//Видаляєм більшу гілку pn->bil=NULL;//Онулюєм її місце break;//Зупиняєм цикл } else//Якщо менше 7 { pn=pn->bil;//Йдем до більшого continue; } } if(pn->men!=NULL)//Якщо є менший елемент { dov=0;//Довжину онюлюєм while(pn->men->k[dov]!='\0')//Рахуєм довжину наступного більшого слова dov++; if(dov>=7)//Якщо довжина більше 6 { i++;//Збільшуєм лічильк zvil(pn->men);//Видаляєм меншу гілку pn->men=NULL;//Онулюєм її місце break;//Зупиняєм цикл } else//Якщо менше 7 { pn=pn->men;//Йдем до меншого continue; } } break;//Зупиняєм цикл } if(i==0)//Якщо дорівнює 0 значіть нічого не видалялось return;//Виходим з функції } } //Головна функція void main() { int a,b;//Зміння для проміжку vvid();//Зчитуєм слова з файлу printf("Pochatkove derevo\n"); vuvid(p);//Виводи початкове дерево printf("Vvedit promigok v kilkosti bykv\n"); scanf("%d%d",&a,&b);//Зчитуєм проміжок promigok(a,b,p);//Виводим всі слова які підхоять під проміжок if(kil!=NULL)//Якщо виводилось значить відмінне від 0 printf("\nKilkist vuvedenuh sliv=%d\n",kil);//Виводи кількість виведених слів else printf("\nTakuh sliv nemaye\n");//Якщо 0 то виводим що таких немає lustki(p);//Видаляєм листкі з дерева printf("\nDerevo pislya vudalennya lustkiv\n"); vuvid(p);//Виводим дерево після видалення листків a=0; while(p->k[a]!='\0')//Рахуєм довжину кореня a++; if(a<7)//Якщо воно не довге { dovgislova();//Шукаєм довгі слова і видаляєм printf("\nDerevo pislya vudalennya dovguh sliv\n"); vuvid(p);//Виводим дерево після видалення довгих слів } zvil(p);//Видаляєм ціле дерево fflush(stdin); getchar();//Затримка }
Антиботан аватар за замовчуванням

24.04.2014 23:47

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!