Раздел: Задачи / Простейшие /
Использование модулей и заголовочных файлов
|
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Условие задачи 0.3.
Задача 0.3
Создать модуль (подключаемый файл) с функциями из задачи 0.2. Использовать этот модуль в простой программе, которая генерирует одно слово (набор символов).
В задаче 0.2 я показал вам, как можно программно создавать наборы символов и составлять из них предложения. Как я уже говорил, такие наборы символов могут пригодиться при решении задач по программированию.
Сегодня предлагаю оформить функции, разработанные при решении задачи 0.2, в отдельный модуль (подключаемый файл), чтобы этот модуль можно было использовать в других программах, и не загромождать исходный код этих программ “лишними” строками.
Итак, набор функций (и прочий программный код) можно сохранить в отдельном файле. Такой файл называется модулем в Паскале и подключаемым (заголовочным) файлом в С++. Подробнее о модулях см. здесь, а о подключаемых файлах здесь.
Больше рассказывать особо нечего - просто посмотрите примеры исходных кодов ниже.
ПРИМЕЧАНИЕ
Создать модуль можно из среды разработки. Или просто создать обычный текстовый файл, присвоить ему имя с расширением PAS (в Паскале) или CPP/H (в С++). Более подробно об этом см. по указанным выше ссылкам.
Примеры программ на Паскале и С++.
Модуль unit gensim; {$mode objfpc}{$H+} interface uses Classes, SysUtils; //**************************************************************** // КОНСТАНТЫ //**************************************************************** const MAX_WORDS = 16; //Наибольшее количество слов в предложении MAX_SIMBOLS = 8; //Наибольшее количество символов в слове MIN_SIMBOLS = 1; //Наименьшее количество символов в слове MIN_ASCII = 97; //Наименьшее значение ASCII-кода MAX_ASCII = 122; //Наибольшее значение ASCII-кода //**************************************************************** // ТИПЫ ДАННЫХ //**************************************************************** //Слово type TWordString = string[MAX_SIMBOLS]; //Предложение type TSentenceWords = array[1..MAX_WORDS] of TWordString; //**************************************************************** // ОБЪЯВЛЕНИЕ ФУНКЦИЙ И ПРОЦЕДУР //**************************************************************** function CreateWord : TWordString; function CreateSentence : string; function CreateSentenceWords : TSentenceWords; function WordsToSentence(M : TSentenceWords) : string; procedure ArrayToScreen(M : TSentenceWords); //**************************************************************** // ИСПОЛНЕНИЕ ФУНКЦИЙ И ПРОЦЕДУР //**************************************************************** implementation //**************************************************************** // Создаёт слово //**************************************************************** function CreateWord : TWordString; var i, j, n : byte; str : TWordString; begin str := ''; //Количество букв в слове n := Random(MAX_SIMBOLS) + MIN_SIMBOLS; for i := 1 to n do //Создать слово из случайных символов begin j := MIN_ASCII + Random(MAX_ASCII - MIN_ASCII + 1); str := str + Chr(j); end; Result := str; end; //**************************************************************** // Создаёт предложение (строку) //**************************************************************** function CreateSentence : string; var i, n : byte; str : string; begin str := ''; n := Random(MAX_WORDS) + 1; //Количество слов в предложении for i := 1 to n do //Создать предложение из случайных слов begin if i = 1 then //Первое слово begin str := CreateWord; str[1] := UpCase(str[1]); end else str := str + ' ' + CreateWord; end; Result := str + '.'; end; //**************************************************************** // Создаёт предложение (массив слов) //**************************************************************** function CreateSentenceWords : TSentenceWords; var i, n : byte; str : TSentenceWords; begin for i := 1 to MAX_WORDS do str[i] := ''; n := Random(MAX_WORDS) + 1; //Количество слов в предложении for i := 1 to n do //Создать массив случайных слов str[i] := CreateWord; Result := str; end; //**************************************************************** // Преобразует массив слов в предложение //**************************************************************** function WordsToSentence(M : TSentenceWords) : string; var i : byte; str : string; begin str := ''; for i := 1 to MAX_WORDS do begin if M[i] = '' then Break; if i = 1 then //Первое слово begin str := M[i]; str[1] := UpCase(str[1]); end else str := str + ' ' + M[i]; end; Result := str + '.'; end; //**************************************************************** // Выводит массив слов на экран //**************************************************************** procedure ArrayToScreen(M : TSentenceWords); var i : byte; begin for i := 1 to MAX_WORDS do begin if M[i] = '' then Break; WriteLn(M[i]); end; end; //**************************************************************** // Исполняемый код //**************************************************************** begin Randomize; end. Программа program mytask; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin WriteLn(CreateWord); //Создать и вывести слово WriteLn('The end. Press ENTER...'); ReadLn; end.
Модуль
#include <cstdlib>
#include <iostream>
using namespace std;
//****************************************************************
// КОНСТАНТЫ
//****************************************************************
const unsigned char MAX_WORDS = 16; //Наибольшее количество слов в предложении
const unsigned char MAX_SIMBOLS = 8; //Наибольшее количество символов в слове
const unsigned char MIN_SIMBOLS = 1; //Наименьшее количество символов в слове
const unsigned char MIN_ASCII = 97; //Наименьшее значение ASCII-кода
const unsigned char MAX_ASCII = 122; //Наибольшее значение ASCII-кода
//****************************************************************
// ТИПЫ ДАННЫХ
//****************************************************************
//Слово
typedef string TWordString;
//Предложение
typedef TWordString TSentenceWords[MAX_WORDS];
//****************************************************************
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
//****************************************************************
TWordString WordString;
TSentenceWords WordsArray;
//****************************************************************
// ИСПОЛНЕНИЕ ФУНКЦИЙ
//****************************************************************
//****************************************************************
// Создаёт слово
//****************************************************************
string CreateWord()
{
unsigned char i, j, n;
string str;
str = "";
WordString.clear();
n = (rand() % MAX_SIMBOLS) + MIN_SIMBOLS;
for (i = 0; i < n; i++) //Создать слово из случайных символов
{
j = MIN_ASCII + (rand() % (MAX_ASCII - MIN_ASCII + 1));
str = str + char(j);
}
return(str);
}
//****************************************************************
// Создаёт предложение (строку)
//****************************************************************
string CreateSentence()
{
int i, n;
char chLetter('a');
string str;
str = "";
n = (rand() % MAX_WORDS) + 1;
for (i = 0; i < n; i++) //Создать предложение из случайных слов
{
if (0 == i) //Первое слово
{
str = CreateWord();
chLetter = str[0];
chLetter = chLetter - 32;
str[0] = chLetter;
}
else
str = str + " " + CreateWord();
}
return(str + ".");
}
//****************************************************************
// Создаёт предложение (массив слов)
//****************************************************************
void CreateSentenceWords()
{
int i, n;
for (i = 0; i < MAX_WORDS; i++) WordsArray[i] = "";
n = (rand() % MAX_WORDS) + 1;
for (i = 0; i < MAX_WORDS; i++) //Создать массив случайных слов
WordsArray[i] = CreateWord();
return;
}
//****************************************************************
// Преобразует массив слов в предложение
//****************************************************************
string WordsToSentence()
{
char chLetter('a');
string str;
str = "";
for (int i = 0; i < MAX_WORDS; i++)
{
if ("" == WordsArray[i]) break;
if (0 == i) //Первое слово
{
str = WordsArray[i];
chLetter = str[0];
chLetter = chLetter - 32;
str[0] = chLetter;
}
else
str = str + " " + WordsArray[i];
}
return(str + ".");
}
//****************************************************************
// Выводит массив слов на экран
//****************************************************************
void ArrayToScreen()
{
for (int i = 0; i < MAX_WORDS; i++)
{
if ("" == WordsArray[i]) break;
cout << WordsArray[i] << endl;
}
return;
}
Заголовочный файл
#include "getsim.cpp"
//****************************************************************
// ОБЪЯВЛЕНИЕ ФУНКЦИЙ
//****************************************************************
string CreateWord();
string CreateSentence();
void CreateSentenceWords();
string WordsToSentence();
void ArrayToScreen();
Программа
#include <cstdlib>
#include <iostream>
#include "getsim.h"
#include <ctime> //!!! Подключить этот модуль,
//если ругается на srand
using namespace std;
//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
int main(int argc, char *argv[])
{
srand(time(0)); //Запустить генератор случайных чисел
//Создать и вывести слово
cout << CreateWord() << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
В современном Паскале также вместо модулей можно создавать подключаемые файлы с помощью директив компилятора.
ВНИМАНИЕ!
Если вам что-то осталось непонятно, то советую почитать книги
“Основы программирования” и
“Основы С++”.
|
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
|
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
|
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |