Тема: Розділити програму на модулі.
Будь ласка, допоможіть мені розділити цю програму на модулі.
Дуже потрібно))
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Обговорення → Розділити програму на модулі.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Будь ласка, допоможіть мені розділити цю програму на модулі.
Дуже потрібно))
А чому не раді в даному випадку? Технічно, власні напрацювання в дівчини є (див. код — хто б іще дав таке ім'я змінній? ), тож пункт 3.5 не порушено.
Поділ програми на модулі — питання більш філософське, ніж алгоритмічне. Технічно, звичайно, функції можна порозкидати по модулях як-завгодно (наприклад, усі службові функції — в один модуль, main — у другий, і не забути зробити спільний інклуд-файл з описами типів та заголовками функцій), але чому саме так, а не інакше... По ідеї, в модулі виноситься функціонал, який можна буде використати в іншій програмі (але в якій?).
Просто для мене було легше написати такий код,аніж розділений на модулі. А викладач вимагає розділити.
Чесно, вже передивилась купу відео,перечитала багато літератури. Пробувала розділяти, але вибиває помилку.
Тому прошу у вас допомоги, бо дійсно не знаю як зробити це((
0xDADA11C7 написав:А чому не раді в даному випадку? Технічно, власні напрацювання в дівчини є (див. код — хто б іще дав таке ім'я змінній? ), тож пункт 3.5 не порушено.
Поділ програми на модулі — питання більш філософське, ніж алгоритмічне. Технічно, звичайно, функції можна порозкидати по модулях як-завгодно (наприклад, усі службові функції — в один модуль, main — у другий, і не забути зробити спільний інклуд-файл з описами типів та заголовками функцій), але чому саме так, а не інакше... По ідеї, в модулі виноситься функціонал, який можна буде використати в іншій програмі (але в якій?).
del
З нервів все повидаляла. Зараз тільки ту програму на компі маю і все.
Покажіть як розділяли
В нормі, у вас має бути мінімум три файли: модуль головної програми (назвімо його main.cpp), модуль з функціями (module.cpp) та заголовний файл (module.h). (Назви можуть бути будь-якими іншими).
Що має бути в заголовному файлі: заголовки функцій без тіла і з ключовим словом extern. Наприклад:
extern void write();
extern void read();
// і т.д.
У модулі з функціями (module.cpp) має бути все, крім функції main.
У головній програмі (main.cpp), відповідно, треба не описувати функції, які є в module.cpp, а замість того включити заголовний файл:
#include "module.h"
Також у ньому має бути функція main і всі інклуди, які потрібні для її безпосередньої роботи.
Якщо все зробити правильно, то, по ідеї, має працювати. (Якщо не працюватиме, скидайте результат розділення сюди. І текст помилки не забудьте ).
(Хоча, я б сказав, такій програмі в такому вигляді поділ на модулі нічого не дає: і main, і функції взаємодіють з користувачем через консоль, і використати їх в іншій програмі, мабуть, проблематично. А ось, наприклад, якби на main лягала вся взаємодія з користувачем, а дані, отримані від нього, передавались функціям через параметри, й дані, які функції читають з файлу, повертались як їх результат і далі виводились головною програмою, то виділення таких функцій у модуль дозволило б, наприклад, написати потім програму з графічним інтерфейсом, яка використовує цей же модуль з цими ж функціями).
По вашому питанню напрацювань таки немає. Вам треба було поділити на модулі, ви цього не зробили (чи принаймні нам не показали).
Що ж до модулів, то особливого сенсу їх виділяти тут дійсно немає; якщо ж викладачеві вже так кортить їх робити, то винесіть все, що стосується вашої структури (фактично - все, крім main) до окремої пари файлів structura.hpp і structura.cpp, і включіть цю structura.hpp в основний файл перед main.
А якщо викладач хоче модулів у множині - то зробіть так само із кожною структурою і функцією, а потім включіть їхні заголовкові файли до structura.hpp; тоді легше робити це в окремій папці, десь так:
structura.hpp:
#ifndef __STRUCTURA_HPP__
#define __STRUCTURA_HPP__
//не містить коду, об'єднує інші модулі
#include<structura/read.hpp>
#include<structura/write.hpp>
...
#endif
structura/read.hpp:
#ifndef __STRUCTURA_READ_HPP__
#define __STRUCTURA_READ_HPP__
#include<struct.hpp>
void read(); //підпрограма яка виводить на екран всі дані
#endif
structura/struct.hpp:
#ifndef __STRUCTURA_STRUCT_HPP__
#define __STRUCTURA_STRUCT_HPP__
struct structura{...};
#endif
і т.д.
Насмілюся припустити, що цей код робили не ви, оскільки там є кілька дрібних помилок і код не компілюється.
Але я сьогодні маю трохи вільного часу, тому...
Що може означати ця помилка?)
Насмілюся припустити, що цей код робили не ви, оскільки там є кілька дрібних помилок і код не компілюється.
Але я сьогодні маю трохи вільного часу, тому...▼Structura.h▼IO_operation.h▼IO_Operation.cpp▼main
Що може означати ця помилка?)
Ця помилка означає, що ви не вмієте створювати проекти і підключати існуючі файли.
Я зрозуміла в чому діло. Просто я компілювала в Dev C++. А ви в Visual Studio. Тому в мене вибиває помилку. Дуже дякую за допомогу!!!
diana.ma3007 написав:Що може означати ця помилка?)
Ця помилка означає, що ви не вмієте створювати проекти і підключати існуючі файли.
▼Код правильний
Я зрозуміла в чому діло. Просто я компілювала в Dev C++. А ви в Visual Studio. Тому в мене вибиває помилку. Дуже дякую за допомогу!!!
Нема різниці.
Ця помилка означає, що ви не вмієте створювати проекти і підключати існуючі файли.
До речі, а як це робиться? Просто проблема може виникнути в багатьох новачків, які потім думають, що взагалі ні в чому не шарять, і йдуть на форум з тупими питаннями.
Сам для себе я проектик такої складності скомпілив би через gcc (MinGW) i не морочився:
gcc main.cpp IO_Operation.cpp -o moja_prohrama.exe
Але, по-перше, на C/C++ я практично нічого не пишу і, по-друге, це незовсім мейнстрімно — без IDE через командний рядок, та ще й компілятор незовсім віндузяцький. Як цивілізовані програмісти таке роблять?
До речі, а як це робиться?
...
Варіантів є багато і залежить від середовища. Наведу кілька прикладів на основі популярних IDE:
1. Linux
Makefile
Перший варіант, виходячи з вашого прикладу - консоль. І gcc - це для C, для C++ використовуйте g++.
Для того щоби не компілювати окремо кожен виконуваний файл, можна використати Makefile. Для цього в каталозі проекту створюємо документ з назвою Makefile. В даному випадку вмістиме Makefile буде мати вигляд:
Потім просто робимо такі дії:
Можна написати, наприклад, $ make main.o, якщо потрібно обновити чи скомпілювати окремий файл.
Компілятор сам підключить хедери де потрібно. В результаті маємо бінарник test, який можна запускати.
Є навіть програми, які створюють makefile.
Code::Blocks
Тут простіше нікуди. Створюємо проект, добавляємо файли і програма сама поділить хедери і виконувані файли, вам хіба треба натиснути кнопочку Run.
2. Windows
Visual Studio
В проектах VS автоматично створюються фільтри Header Files, Resources. Source Files. Це зроблено для того, щоби програмістові було зручніше орієнтуватися і ці фільтри є суто абстрактними, не плутайте з каталогами. Фактично, файли *.h і *.cpp можна скинути в один фільтр (до речі, їх можна створювати самому, ті що надає VS - дефолтні). Компілятор і так проводить пошук в проекті в цілому, за умови що ви не вказуєте свій шлях.
Qt Creator
Той самий принцип, що і у VS.
*в Linux те саме
(скрін з нету, лінь створювати новий проект)
Dev C++
Найпростіше. Тут все підряд:
(скрін з нету)
В Dev C++ також можна робити фільтри, навіть треба. Хоча Dev C++ зараз не "модно".
*При великих проектах варто робити свої фільтри, наприклад:
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися