|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.12.2009, 18:48 | #1 |
Пользователь
Регистрация: 17.11.2009
Сообщений: 26
|
Подпрограммы и связаные структуры данных на С++
Добрый день!
Очень сильно нуждаюсь в помощи. Задали кучу домашки, лекции ещё не прочитали, а сделать её нужно за 4 дня. Нужно знать всё о подпрограммах и о структурах данных. Надеюсь, что украинский язык тут знают, так как задание на украинском. Задание: Написати програми на мовах Паскаль та Сі, які складаються з наступних дій: 1. Опису структури даних, використовуючи пойменований тип, згідно з варіантом (табл. 1). 2. Опису змінної типу, що вказаний в п.1 даного завдання. Якщо у варіанті надане зв’язане представлення даних, то описується вказівна змінна. Якщо векторне – звичайна. 3. Опису змінної індексованого типу з 10 елементів вказаного у варіанті типу даних (табл. 1) та її ініціювання. 4. Для векторного представлення – ініціювання, а для зв’язаного – ініціювання та створення, N елементів описаної структури даних, використовуючи змінну індексованого типу, що описана в п.3 даного завдання, де N – це ціле значення з діапазону від 0 до 9. 5. Видалення M елементів з описаної структури даних, де M – це ціле значення з діапазону від 0 до 15. Виконується тільки для лінійних структур даних. № варіанта Мова Структура даних Тип даних 10 Паскаль Лінійна: “Стек” векторне представлення Дійсний Сі Лінійна: “Черга” зв’язане представлення Цілий Прошу сказать, где можно про это почитать ну или же поясните, как сей шедевр делать, интересует С++, с Паскалём сам попробую разобраться. Ну и вот ещё одна лабораторная, с подпрограммами. Задание: Написати програму на мові Сі, яка складається з наступних дій: 1. Створення заголовного файлу (з розширенням .h). В файлі описується: – лінійна структура даних в зв’язаному уявленні (список), елемент якої має тип згідно з варіантом (табл.1); – відкрита підпрограма (inline-функція) згідно з варіантом (табл.2). 2. Створення основного файлу (з розширенням .cpp), в якому необхідно: – включити заголовний файл за допомогою директиви препроцесора include; – описати „підпрограму_1” формування елемента першого списку згідно з варіантом (табл.1); – описати „підпрограму_2” формування другого списку згідно з варіантом (табл.2). При формуванні використовується inline-функція; – описати головну програму, в якій застосовуються описані підпрограми, тобто формується перший список за допомогою „підпрограми_1” (кількість елементів згідно з варіантом) та формується другий список за допомогою „підпрограми_2”. № варіанта -10 Тип даних елементу списків -long Кількість елементів 1-го списку - 10 Перший список -Двоспрямований Спосіб формування елементу 1-го списку -Включення в кінець |
25.12.2009, 18:49 | #2 |
Пользователь
Регистрация: 17.11.2009
Сообщений: 26
|
Я даже примеры задания могу выложить, что мне дали, но даже по примеру понять я ничего не могу.
Пример задания1: void main() { //опис змінної, яка містить кількість елементів у черзі const int SizeOfQueue = 8; //опис лінійної структури даних «Черга» за допомогою пойменованого типу struct Queue { char elements [SizeOfQueue]; int handle; }; char rez, i,j; //опис змінної, яка показує скільки елементів черги необхідно ініціювати //(значення діапазону від 0 до 9) int N = 8; //опис змінної, яка показує скільки елементів черги необхідно видалити //(значення діапазону від 0 до 15) int M = 14; //опис змінної пойменованого типу Queue Queue MyQueue; //онулення вказівника поточної позиції читання/запису у черзі MyQueue.handle =0; //опис та ініціалізація змінної індексованого типу mas, тип елементів якої //відповідає типу елементів черги char mas [10] = {'M', 'y', 'p', 'r', 'o', 'g', 'r', 'a', 'm', '!'}; //організація циклу для ініціювання N елементів черги for (i = 0; i < N; i++) //у разі, коли вказівник поточної позиції елементу черги менш за розмір черги, if (MyQueue.handle < SizeOfQueue) { //ініціаліалізація елемента черги у позиції, на яку вказує MyQueue.handle(кінець //черги) MyQueue.elements [MyQueue.handle] = mas [i]; //збільшення на одиницю вказівника поточної позиції MyQueue.handle ++; } //організація циклу для видалення M елементів черги for (i = 0; i < M; i++) //у разі, коли вказівник поточної позиції елементу черги не дорівнює 0, тобто у //черзі є елементи if (MyQueue.handle != 0) { //читання першого елемента черги rez = MyQueue.elements [0]; //організація циклу, в якому всі елементи черги пересуваються на одну позицію //до початку for (j = 0; j <MyQueue.handle; j++) MyQueue.elements [j] = MyQueue.elements [j + 1]; //зменшення на одиницю вказівника поточної позиції черги MyQueue.handle --; MyQueue.elements [MyQueue.handle] = '\0'; } } |
25.12.2009, 18:49 | #3 |
Пользователь
Регистрация: 17.11.2009
Сообщений: 26
|
Пример задания2:
lab_6.h //описуємо елемент списку, який складається з елементу цілого типу та покажчика на //наступний елемент struct Element { short data; Element *pNext; }; //описуємо відкриту підпрограму, яка повертає значення true, якщо значення елемента //списку кратне 3 inline bool Check (Element * el) { if ((el ->data % 3) == 0) return true; else return false; } lab_6.cpp //підключаємо заголовний файл #include "lab_6.h" //описуємо прототипи підпрограм void CreateElement (Element* &, short); Element* CreateList (Element*); void main() { int i; //описуємо та ініціюємо нулем покажчик на перший елемент першого списку Element* pList1 = 0; //організовуємо цикл для формування 11 елементів першого списку for (i = 1; i <= 11; i++) //викликаємо підпрограму, яка формує один елемент списку, і передаємо у неї перший //елемент списку і дані для ініціалізації значення елементу списку CreateElement(pList1, i+ 4); //описуємо покажчик на перший елемент другого списку Element* pList2; //викликаємо підпрограму, яка формує другий односпрямований список за принципом //включення нових елементи після першого. Передаємо у підпрограму покажчик на //перший елемент першого списку. Значення для елементів списку обираються з першого //списку, але тільки ті, які кратні 3. pList2 = CreateList (pList1); } //описуємо підпрограму_1, яка формує один елемент списку, включаючи його у кінець void CreateElement (Element* & FirstEl, short d) { //описуємо зміну, яка використовується для формування нового елементу списку Element* NewEl; //розподіляємо пам’ять у купі для нового елементу NewEl = new Element; //заносимо у поле даних значення, що є передається у підпрограму NewEl ->data = d; //вказуємо, що покажчик на наступний елемент дорівнює нулю, оскільки елемент буде у //списку останнім NewEl ->pNext = 0; //визначаємо місце у списку для нового елементу //якщо списку немає, тобто покажчик на перший елемент дорівнює 0 if (FirstEl == 0) //то новий елемент стає першим у списку FirstEl = NewEl; else { //якщо елементи у списку є, то починаємо пошук останнього елементу Element* CurEl = FirstEl; while (CurEl ->pNext != 0) CurEl = CurEl ->pNext; //елемент, у якого покажчик на наступний елемент дорівнює 0, є останнім //ставимо новий елемент за останнім CurEl ->pNext = NewEl; } } //описуємо підпрограму_2 для формування односпрямованого списку із значень елементів //іншого списку, покажчик на перший елемент якого передається як параметр підпрограми Element* CreateList (Element* List1) { //описуємо та ініціюємо нулем покажчик на перший елемент нового списку Element* List2 = 0; //описуємо покажчик на елемент першого списку, що дає можливість пересуватися по //цьому списку //ініціюємо покажчик адресою першого елементу першого списку, тобто рухатись будемо //спочатку списку Element* CurEl = List1; //організуємо цикл, в якому перевіряються значення елементів першого списку і //формуються елементи нового списку do { //перевіряємо, чи є значення елементу списку кратним 3, використовуючи inline- //підпрограму if(Check (CurEl)) { //якщо значення елементу задовольняє вимогам, то описуємо елемент нового списку та //розподіляємо для нього пам’ять у купі Element* NewEl = new Element; //заносимо у поле даних нового елементу значення елементу першого списку NewEl ->data = CurEl ->data; //визначаємо місце у новому списку для нового елементу //якщо списку немає, тобто покажчик на перший елемент дорівнює 0 if (List2 == 0) { //записуємо у поле, яке вказує на наступний елемент, значення 0 NewEl ->pNext = 0; //таким чином новий елемент стає першим у новому списку List2 = NewEl; } else { //якщо перший елемент у новому списку є, то новий елемент ставимо у спису після //першого NewEl ->pNext = List2 ->pNext; List2 ->pNext = NewEl; } } //пересіваємося до наступного елементу першого списку CurEl = CurEl ->pNext; } while (CurEl); //повертаємо з підпрограми покажчик на перший елемент нового списку return List2; } |
14.01.2010, 01:14 | #4 |
Новичок
Джуниор
Регистрация: 14.01.2010
Сообщений: 1
|
НАУ, да?))))
|
14.01.2010, 01:24 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
хотите прикол?
а я украинский плохо знаю очень... и используйте тэг [CODE]на кнопке Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
14.01.2010, 01:44 | #6 |
Удален
Форумчанин
Регистрация: 02.12.2009
Сообщений: 309
|
Posso começar a consideração do problema dado só depois da transferência de uma condição na língua clara
|
14.01.2010, 22:57 | #7 |
Пользователь
Регистрация: 14.01.2010
Сообщений: 26
|
А што тебе именно не понятно?
-----------------------------Чем смог тем помог.--------------------------------------
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Динамические структуры данных на Си | STIGGA | Общие вопросы C/C++ | 1 | 05.12.2009 00:50 |
Динамические структуры данных | Gigatrest | Помощь студентам | 3 | 21.06.2009 14:32 |