Тема:атрибути файлів, використання дискових функцій bios 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема:атрибути файлів, використання дискових функцій bios



Питання:

1.Атрибути файлів.

2. Параметри.

Атрибути файлів.

Як змінити атрибути файлу на C. У кожного файлу в ОС Windows є аттрібути. A H R S.

Архівний (A)

Прихований (H)

Тільки читання (R)

Системний (S)

Змінити ці параметри можна і вручну, але деякі з них складно змінити без особливих навиків роботи в ОС. ТАК і не завжди це потрібно робити вручну. У WinAPI від Білла є функція SetFileAttributes.

Функція SetFileAttributes - встановлює атрибути файлу.

Синтаксис

BOOL SetFileAttributes (

LPCTSTR lpFileName, / / ​​ім'я файлу

DWORD dwFileAttributes / / атрибути

);

Параметри

lpFileName-Покажчик на рядок символів, визначальну ім'я файлу, атрибути якого повинні бути встановлені.

Windows NT/2000/XP: У версії ANSI цієї функції, ім'я обмежується значенням прапорця MAX_PATH. Щоб вийти за межі цього обмеження, до довжини 32 767 символів, викличте Unicode версію цієї функції і приєднайте спереду шляху "\ \? \". Детальну інформацію можна знайти у статті Іменування файлів.

Windows 95/98/Me: Ця символьний рядок не повинна виходити за межі значення прапорця MAX_PATH.

dwFileAttributes - Встановлювані атрибути файлу. Цей параметр може складатися з одного або декількох нижченаведених значень. Однак, всі інші значення відміняють атрибут FILE_ATTRIBUTE_NORMAL.

FILE_ATTRIBUTE_ARCHIVE Цей файл - архівний файл. Додатки використовують цей атрибут, щоб відзначити файли для резервування або переміщення.

FILE_ATTRIBUTE_HIDDEN Файл прихований. Він не включається в звичайний список каталогу.

FILE_ATTRIBUTE_NORMAL У файлу немає іншого набору атрибутів. Цей атрибут допустимо тільки в тому випадку, якщо використовується в поодинці.

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED Файл не індексується містить індексацію службою.

FILE_ATTRIBUTE_OFFLINE Дані файлу безпосередньо не доступні. Цей атрибут вказує, що дані файлу були фізично переміщені на автономне запам'ятовуючий пристрій. Цей атрибут використовується Вилученим сховищем, програмним забезпеченням ієрархічного управління пам'яттю. Додатки не повинні довільно змінювати цей атрибут.

FILE_ATTRIBUTE_READONLY Файл тільки для читання. Додатки можуть читати файл, але не можуть записати в нього або видалити його.

FILE_ATTRIBUTE_SYSTEM Файл - це частина операційної системи або використовується виключно нею.

FILE_ATTRIBUTE_TEMPORARY Файл використовується для тимчасового збереження. Файлові системи уникають писати дані назад на запам'ятовуючий пристрій великої ємності, якщо доступна достатня кеш-пам'ять, тому що додаток часто видаляє тимчасовий файл незабаром після того, як дескриптор закривається. У цьому випадку, система може повністю скасувати запис даних. В іншому випадку, дані повинні бути записані після того, як дескриптор закриється.

Якщо функція завершується успішно, повертається значення - не нуль.

Якщо функція завершується помилкою, величина значення, що повертається - нуль. Щоб отримати додаткові дані про помилку, викличте GetLastError.

Приклад:

# Include <windows.h>

SetFileAttributes ("1.exe", FILE_ATTRIBUTE_HIDDEN);

Питання для контролю:

1. Що таке атрибути файлів?

2. Чи можна змінити атрибути файлів?

3. Які бівають параметри атрибутів файлів?

Література:

Проценко В.С., Чаленко П.Й., Ставровський А.Б.Техніка програмування мовою Сі. - К.: Либідь, 1993. - 223 с.,с. 272

Урок №64

(згідно робочої навчальної програми)

Тема: Списки

Питання:

1. Динамічні структури даніх

2. Лінійні списки

Динамічні структури даніх

Динамічні структури даніх представляють собою набор даніх, можливости різніх тіпів, Що об'єднані Певної чином.

Базова елементом структури даніх є елемент (вузол), Який Призначений для Зберігання Певного типу даніх. ЯКЩО Елементи зв'язані Між собою за допомог покажчіків, то такий спосіб організації даніх назівається дінамічнімі структурами даніх, так Як їх Розмір дінамічно змінюється Під годину виконан прогр.

З дінамічніх структур даніх найчастіше вікорістовуються лінійні списки, стеки, черга та бінарні дерева.

Лінійні списки

Лінійній список - ції скінченна послідовність однотипних елементів (вузлів). Кількість елементів у Цій послідовності назівається довжина списку. Основні методи Зберігання лінійніх Списків поділяються на методи послідовного та зв'язаного зберігання.

Послідовне Зберігання Списків. Метод послідовного Зберігання Списків грунтується на вікорістанні масивов елементів Деяк типу та змінної, в якій зберігається Поточна кількість елементів списку.

# Define MAX 100 / * максимально можлива довжина списку * /

typedef struct

{

int x; / * тут потрібно описати структуру елементів списку * /

} Elementtype;

typedef struct

{

elementtype elements [MAX];

int count;

} Listtype;

У віщенаведеному фрагменті Програми опісуються тіпі даніх elementtype (візначає структуру елемента списку) та listtype (містіть масив для Зберігання елементів та змінну для Зберігання потокового розміру списку).

Наводимое Приклади реалізації функцій для виконан основних операцій над списками.

Ініціалізація списку (робіть список порожнім).

void list_reset (listtype * list)

{

list-> count = 0;

};

Додавання нового елемента в позіцію pos.

void list_insert (listtype * list, int pos, elementtype element)

{

int j;

if (pos <0 | | pos> list-> count | | pos> = MAX) return;

for (j = list-> count; j> pos; j -)

{

list-> elements [j] = list-> elements [j-1];

};

list-> elements [j] = element;

list-> count + +;

};

Вилучення елемента з номером pos.

void list_delete (listtype * list, int pos)

{

int j;

if (pos <0 | | pos> list-> count) return;

for (j = pos +1; j <list-> count; j + +)

{

list-> elements [j-1] = list-> elements [j];

};

list-> count -;};

Отримання елемента з номером pos.

int list_get (listtype * list, int pos, elementtype * element)

{

if (pos <0 | | pos> list-> count)

{

return 0; };

* Element = list-> elements [pos];

return 1;};

При послідовному зберіганні Списків за допомог масівів Елементи списку зберігаються в масіві. Така організація дозволяє легко переглядаті вміст списку та додаваті Нові Елементи в Його кінець. Альо Такі Операції, Як вставка нового елемента в середину списку чі вилучення елемента з середини списку потребують зсуву Всіх Наступний елементів. При збільшенні елементів масива кількість операцій, Потрібна для впорядкування списку, стрімко зростає.

Зв'язане зберігання лінійніх списків. Найпростішій спосіб зв'язати множини елементів - Зробити так, щоб Кожній елемент містів посилання на наступний. Такий список назівається односпрямованім (однозв'язанім). Якщо додати в такий список галі ї посилання на попередній елемент, то отрімаємо двозв'язаній список. А список, перший та останній елементи якого зв'язані, назівається кільцевім.

Структуру даніх для зберігання односпрямованого лінійного списку можна описати таким чином:

typedef long elemtype;

typedef struct node

{

elemtype val;

struct node * next;

} List;

У даному фрагменті програми опісуються декілька тіпів даніх:

elemtype - візначає тип даніх лінійного списку. Можна використо-вувати будь-який стандартний тип даніх, включаючі структури.

list - візначає структуру елемента лінійного списку (val - значення, його призначення та зберігається у вузлі, next - Покажчик на Наступний вузол).

list * addbeg (list * first, elemtype x)

{

list * vsp;

vsp = (list *) malloc (sizeof (list));

vsp-> val = x;

vsp-> next = first;

first = vsp;

return first;

}

Видалення елемента з початку списку.

list * delbeg (list * first)

{

list * vsp;

vsp = first-> next;

free (first);

return vsp;

}

Друк значень списку.

void print (list * first)

{

list * vsp;

vsp = first;

while (vsp)

{

printf ("% i \ n", vsp-> val);

vsp = vsp-> next;

}

}

Питання для контролю:

4. Що таке списки?

5. Як видалити елемент списку?

6. Що таке лінійний список?

Література:

1. Д. Рассохин, “От С к С++”, Москва, “Едель” 2003 г., с. 371-379

 

Урок №65

(згідно робочої навчальної програми)

Тема: Стеки

Питання:

1.Стек. Загальні поняття.

2. Приклад використання стеку

Стек. Загальні поняття.

Стек (англ. stack - стопка) - структура даніх, в якій доступ до елементів організованій за принципом LIFO (англ. last in - first out, «останнім прийшов - Перша Вийшов»). Найчастіше принцип роботи стека порівнюють Зі стопки тарілок: щоб взяти одного зверху, потрібно зняті верхні.

Додавання елемента, звання кож проштовхуванням (push), можливости Тільки в вершину стека (Доданий елемент стає Першим зверху). Відалення елемента, звання кож віштовхуванням (pop), теж можливости Тільки з вершини стека, при цьому другий зверху елемент стає верхнім.

Стеки широко застосовують у обчіслювальній техніці. Наприклад, для відстеження точок повернення з підпрограм вікорістовується стек викликів, Який є невід'ємною частина архітектури більшості сучасности процесорів. Мови програмування високого рівня кож вікорістовують стек викликів для передачі параметрів при виклику процедур.

Приклад використання стеку

Наведемо приклад програми з використанням стеку, для підрахунку елементів в масиві використовується count.

Исходный код:

#include <stdio.h>

int mas[10];

int count=0;

void push(int a)

{

mas[count]=a;

count++;

}

int pop()

{

if (count==0)

{

printf("Стек пуст");

return 1;

}

count--;

return mas[count];

}

main()

{

push(1);

push(2);

push(3);

while (count>0)

{

printf("Рузультат: %d\n", pop());

}

}

Питання для контролю:

7. Що таке стек?

8. Як занести значення в стек?

9. Як видалити значення зі стеку?

Література:

1. Д. Рассохин, “От С к С++”, Москва, “Едель” 2003 г., с. 467-471

 

Урок №66

(згідно робочої навчальної програми)

Тема: Дерева

Питання:

1. Основні визначення

2. Приклад використання дерев

Основні визначення

Існує досить багато рівносильних визначень дерев, ось лише деякі з них.

Дерево - це зв'язний граф без циклів.

Дерево - це зв'язний граф, в якому при N вершинах завжди рівно N-1 ребро.

Дерево - це граф, між якими двома вершинами якого існує рівно один шлях.

Аналогічним чином визначається і орієнтоване дерево - як орграф, в якому між будь-якими двома вершинами існує не більше одного шляху.

Кореневе дерево - це орієнтоване дерево, в якому можна виділити вершини трьох видів: корінь, листя (інша їх назва: термінальні вершини) і інші вершини (нетермінальні); причому повинні виконуватися дві обов'язкові умови:

з листя не виходить жодна дуга; з інших вершин може виходити скільки завгодно дуг;

в корінь не заходить жодна дуга; під всі інші вершини заходить рівно по одній дузі.

Традиційно в математиці і в родинних їй науках (у тому числі і в теоретичному програмуванні) дерева "ростуть" униз головою: це робиться просто для зручності нарощування листя в разі потреби. Таким чином, на малюнках корінь дерева виявляється самої верхньої вершиною, а листя - самими нижніми.

Предок вершини v - це вершина, з якої виходить дуга, заходить у вершину v. Нащадок вершини v - це вершина, в яку заходить дуга, яка виходить із вершини v. У цих термінах можна дати інші визначення поняттям корінь і аркуш: біля кореня немає предків, у листа немає нащадків.

Бінарне дерево - це кореневе дерево, кожна вершина якого має не більше двох нащадків. У такому випадку іноді говорять про лівому нащадку і правом нащадку для поточної вершини.

Висота кореневого дерева - це максимальна кількість дуг, що відокремлюють листя від кореня. Якщо дерево не зважене, то його висота - це просто відстань від кореня до самого віддаленого аркуша.

І на закінчення ми наведемо визначення, що зв'язує довільні графи з деревами більш щільно.

Каркас графа - це дерево, отримане після викидання з графа деяких ребер.

Прикладом каркаса є (кореневе) дерево найкоротших шляхів від деякої виділеної вершини (вона буде коренем каркаса) до всіх інших вершин графа.

Приклад використання дерев

#pragma once

template <class T>

class Tree

{

struct Node

{

T item;

Node *son;

Node *brother;

Node(T i, Node *s = NULL, Node *b = NULL)

{

item = i;

son = s;

brother = b;

}

};

Node *root;

public:

Tree()

{

root = NULL;

}

~Tree()

{

DeleteSubtree(root);

}

int GetHeight()

{

return GetHeight(root);

}

int GetNodesOnLevel(int level)

{

return GetNodesOnLevel(root, level);

}

void Add(const T &elem)

{

Add(root, elem);

}

private:

void Add(Node *&node, const T &elem);

void DeleteSubtree(Node *node);

int GetHeight(Node *node);

int GetNodesOnLevel(Node *node, int level);

};

template <class T>

void Tree<T>::DeleteSubtree(Node *node)

{

if (node)

{

DeleteSubtree(node->son);

DeleteSubtree(node->brother);

delete node;

}}

template <class T>

int Tree<T>::GetHeight(Node *node)

{

if (node == NULL)

{ return 0; }

int max = 0;

for (Node *current = node->son; current; current = current->brother)

{ int curHeight = GetHeight(current);

if (curHeight > max)

{

max = curHeight;

} }

return max + 1;}

template <class T>

int Tree<T>::GetNodesOnLevel(Node *node, int level)

{

if (node == NULL)

{

return 0;

}

if (level <= 0)

{

return 0;

}

return GetNodesOnLevel(node->son, level - 1) + (level == 1) +

GetNodesOnLevel(node->brother, level);

}

template <class T>

void Tree<T>::Add(Node *&node, const T &item)

{

if (node == NULL)

{

node = new Node(item);

}

else if (item < node->item)

{

Add(node->son, item);

}

else

{

Add(node->brother, item);

}}

include "iostream"

#include "tree.h"

using namespace std;

int main()

{

setlocale(0,"");

Tree<int> tree;

int n, lev, item;

cout << "Введіть кількість елементів в дереві: ";

cin >> n;

cout << endl;

cout << "Введть елементи дерева: ";

for (int i = 0; i < n; i++)

{

cin >> item;

tree.Add(item);

}

cout << endl;

cout << "Висота дерева: " << tree.GetHeight()<< endl;

cout << "Введіть номер рівня на якому потрібно знати кількість вузлів: ";

cin >> lev;

cout << endl;

Питання для контролю:

10. Що таке дерева?

11. Що таке кореневе дерево в мові С?

12. Що таке бінарне дерево?

13. Що таке вершина дерева?

Література:

1. Д. Рассохин, “От С к С++”, Москва, “Едель” 2003 г., с. 484- 493

 



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 217; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.116.159 (0.119 с.)