Раздел: Задачи / Простейшие /

Использование модулей и заголовочных файлов

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Условие задачи 0.3.

Задача 0.3
Создать модуль (подключаемый файл) с функциями из задачи 0.2. Использовать этот модуль в простой программе, которая генерирует одно слово (набор символов).

В задаче 0.2 я показал вам, как можно программно создавать наборы символов и составлять из них предложения. Как я уже говорил, такие наборы символов могут пригодиться при решении задач по программированию.

Сегодня предлагаю оформить функции, разработанные при решении задачи 0.2, в отдельный модуль (подключаемый файл), чтобы этот модуль можно было использовать в других программах, и не загромождать исходный код этих программ “лишними” строками.

Итак, набор функций (и прочий программный код) можно сохранить в отдельном файле. Такой файл называется модулем в Паскале и подключаемым (заголовочным) файлом в С++. Подробнее о модулях см. здесь, а о подключаемых файлах здесь.

Больше рассказывать особо нечего - просто посмотрите примеры исходных кодов ниже.

ПРИМЕЧАНИЕ
Создать модуль можно из среды разработки. Или просто создать обычный текстовый файл, присвоить ему имя с расширением PAS (в Паскале) или CPP/H (в С++). Более подробно об этом см. по указанным выше ссылкам.

Примеры программ на Паскале и С++.

Решение задачи 0.3 на Паскале
Модуль

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.

Решение задачи 0.3 на С++
Модуль

#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 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика