Согласие на обработку персональных данных.

11.10.2019
Новые видео и статья Условный оператор в JavaScript.

05.10.2019
Новые видео и статья Выражения и операторы в JavaScript.

04.10.2019
Новый выпуск журнала Автоматизация и программирование.

28.09.2019
Новая статья Область видимости переменных в JavaScript.

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



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

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

Условие задачи 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;
}

В современном Паскале также вместо модулей можно создавать подключаемые файлы с помощью директив компилятора.

ВНИМАНИЕ!
Если вам что-то осталось непонятно, то советую почитать книги “Основы программирования” и “Основы С++”.


Основы C++ Основы C++

C++ - это один из самых популярных языков программирования. Не важно, на каком языке программируете лично вы. Но, если вы хотя бы в общих чертах не знаете С++, то это большой пробел в вашем образовании, который надо восполнить как можно быстрее... Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

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