Просмотров-111
0

Пример процедурного программирования на языке Crystal

Постановка задачи

Ранее в статье Что такое программирование? мы писали, что процесс создания программы в основном определяется теми закономерностями, которые концентрируются в понятиях виды и парадигмы программирования. В данной статье рассматривается пример процедурного программирования на языке Crystal при решении задачи статистического анализа случайного набора чисел.

Известно, что решение любой задачи на ЭВМ начинается с постановки задачи и ее формализации, то есть приведение к виду, удобному для решения на ЭВМ.

Необходимо разработать программу Stat статистического анализа случайного набора чисел. Статистический анализ случайных чисел заключается в определении математического ожидания и дисперсии данного набора чисел.

Известно также, что решение любой задачи на ЭВМ предполагает разработку алгоритма ее решения. В данном случае алгоритм простой, поэтому на его разработке останавливаться не будем. Вычисления оценок математического ожидания и дисперсии осуществляется по известным формулам математической статистики.

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

Разработка процедур и функций решения задачи

Функция генерации массива случайных чисел.

В методе предусмотрено применение пустого массива mas=[] вещественного типа of Float64 в качестве формального параметра.  Для создания случайного числа, соответствующего типу float, используется библиотечная функция rand. Формирование массива осуществляется путем дополнения элементов операцией “<<”.

  1. def gen(n,mas=[] of Float64)
  2.                 i=0
  3.                while i<n
  4.                 mas<< rand
  5.                   i+=1
  6.                 end    end

Функция суммирования элементов  массива случайных чисел.

В этом методе также предусмотрено применение пустого массива mas=[] вещественного типа of Float64 в качестве формального параметра. Далее применяется известный прием суммирования элементов массива в операторе цикла. В методе предусмотрено явная передача вычисленного значения оператором return sum.

  1. def sum_el_mas(n,mas=[] of Float64)
  2.    i=0
  3.     sum = 0
  4.         while i<n     
  5.            sum += mas[i]
  6.               i+=1
  7.        end
  8.             return sum
  9.   end

Функция вычисления математического ожидания элементов массива

И в этом методе также предусмотрено применение пустого массива mas=[] вещественного типа of Float64 в качестве формального параметра. Далее определяется сумма элементов массива путем вызова ранее созданного метода sum_el_mas(n,mas) с передачей ему фактических параметров(аргументов) – n  — размер массива, mas – ранее сгенерированный массив.

  1. def mat_ogid(n,mas=[] of Float64) 
  2.    i=0
  3.     sum = sum_el_mas(n,mas)
  4.           mat_og = sum/n
  5.               return mat_og
  6.   end

Для отладки метода вычисления математического ожидания создается специальная отладочная программа, в которой предусмотрены контрольные выводы значений промежуточных вычислений. Код программы и результаты ее выполнения показаны на следующем рисунке.

Пример процедурного программирования: отладка методов

Аналогично проводится отладка и других методов.

Функция вычисления дисперсии  элементов массива

Аналогично для передачи элементов массива в метод предусмотрено применение пустого массива mas=[] вещественного типа of Float64 в качестве формального параметра. В методе вычисляется математическое ожидание по ранее созданному методу, которое используется для вычисления центрированных значений случайных величин. Вычисление дисперсии по известной формуле.

  1. def sko_el_mas(n,mas=[] of Float64) 
  2.    i=0
  3.     sum = 0
  4.   mo = mat_ogid(n,mas)  # Матожидание элементов массива
  5.   while i<n     
  6.     sum += (mas[i]-mo)*(mas[i]-mo)  # Сумма центрированных значений
  7.      i+=1
  8.    end
  9.   disp = sum/(n-1)       #  Дисперсия элементов массива
  10.               return disp
  11.   end

После того как подготовлены все необходимые методы можно приступать к их объединению в единую программу решения поставленной задачи.

 Программа вычисления статистических характеристик элементов массива

В данной программе реализованы те шаги решения поставленной задачи, которые излагались при ее постановке. Повторяться не будем.

В преведенном ниже коде:

  • -задана размерность массива и объявлен пустой массив типа Float64;
  • -выполнена генерация массива вещественных чисел;
  • -вычислены математическое ожидание и дисперсия элементов массива.

Результаты промежуточных вычислений выводятся на экран для контроля работы программы.

  1. n=5
  2. mas=[] of Float64    # создаем массив Array(Float64)
  3. gen(n,mas)    # генерируем массив Array(Float64) из n элементов
  4. puts «Масив случайных вещественных чисел»
  5. puts mas
  6. y= sum_el_mas(n,mas)    # суммируем элементы массива Array(Float64)
  7. puts «Сумма элементов масива»,y
  8. mo = mat_ogid(n,mas)
  9.  puts «Матожидание элементов массива», mo
  10. disp = sko_el_mas(n,mas)
  11.  puts «Дисперсия элементов массива», disp    #,sko

Полный пример программы процедурного программирования на языке Crystal при решении задачи статистического анализа случайного набора чисел представлен на следующем рисунке.

Пример процедурного программирования:  программа вычисления статистических характеристик

Созданный пример программы процедурного программирования на языке Crystal при решении задачи статистического анализа случайного набора чисел выполнен в среде программирования языка Crystal. Результаты выполнения контрольного примера показаны на следующем рисунке, из которого видно, что программа выполняется корректно.

Пример процедурного программирования: результаты программы на языке Crystal

Поступая аналогичным образом, можно создать и использовать любую программу процедурного программирования на языке Crystal, предназначенную для решения задачи, решение которой целесообразно выполнять с помощью набора взаимодействующих процедур и функций.

Заключение

Представленный в статье пример процедурного программирования на языке Crystal при решении задачи статистического анализа случайного набора чисел показал, что его использование возможно, и даже иногда необходимо, не смотря на прочный объектно-ориентированных фундамент языка Crystal .

Статьи по теме.

Изучение управляющих
конструкций языка
программирования Crystal
Изучение языка программирования Crysal Управляющие конструкции Простые типы данных
языка программирования
Crystal
Язык программирования Crystal
Структурированные
типы данных языка
программирования Crystal
Структурированные типы данных Объектно — ориентированное
программирование на языке Crystal
Объектно ориентированное программирование

А также…

Внимание! Кто хочет своевременно узнавать о выходе новой статьи на сайте должен подписаться.

ПОДПИСКА НА РАССЫЛКУ

Статьи об онлайн курсах обучения

Дистанционное обучение
Обучение программированию
Проектирование информационных систем
 
Реклама. Информация о рекламодателе по ссылкам в статье.

brasm

Пенсионер с 33 - летним педагогическим стажем

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *