Полный вариант создания программного продукта этой задачи (без рассмотрения элементов теории алгоритмического языка) выполним задачей (3.2) определения площади круга.
Постановка задачи
Рассчитать площадь круга в квадратных метрах и квадратных миллиметрах, если его диаметр равен 76,3 см.
Создание математической модели задачи
Исходные данные
(основные)
d = 76,3 см | диаметр круга; | |
= 3,1416 | число Пи; | |
(дополнительные) | ||
kм = м/см | коэффициент перевода сантиметров в метры; | |
kмм = 10 мм/см | коэффициент перевода сантиметров в миллиметры. | |
Расчётные зависимости
[ ] | диаметр круга, м; | |
[ ] | диаметр круга, мм; | |
[ ] | площадь круга, м2; | |
[ ] | площадь круга, мм2. |
Выбор метода решения
Анализ математической формулировки позволяет сделать вывод, что решение сводится к последовательному однократному выполнению небольшого количества математических зависимостей, не содержащих нестандартных трансцендентных функций. Следовательно, в качестве метода решения необходим простой линейный вычислительный процесс.
Составление алгоритма решения
Анализ полученной математической модели (достаточно простой) и выбранного метода решения (простейшего) позволяет выполнить графическую схему алгоритма решения в один шаг (рис. 3.14).
Рис. 3.14. Схема алгоритма задачи о площади круга
Программирование задачи
Идентификация переменных представлена табл. 3.20.
Таблица 3.20
Обозначение в алгоритме | d | kМ | kММ | dМ | dММ | SМ | SММ | |
Обозначение в программе | d | PI | km | kmm | dm | dmm | sm | smm |
С учётом таблицы идентификации на основании схемы алгоритма запишем программу решения задачи (предписываемый блоком 2 ввод переменной PI выполним не напрямую – оператором ввода, а с помощью заменяющей директивы):
#include<stdio.h> /* включающие */
#include<stdlib.h> /* директивы */
#include<math.h> /* препроцессора */
#define PI 3.1416 /* заменяющая директива препроцессора */
main()
{
float d, km, kmm, /* описание локальных */
dm, dmm, sm, smm; /* переменных */
scanf(“%4f%5e%3f”, &d, &km, &kmm);
fprintf(stdout,“\nd=%5.2f PI=%6.4f km=%7.2e kmm=%4.1f”, d,PI,km,kmm);
dm=d*km;
dmm=d*kmm;
sm=PI*pow(dm/2.,2);
smm=PI*pow(dmm/2.,2);
fprintf(stdout,“\n dm=%8.4f dmm=%8.1f sm=%8.4f”
“smm=%8.1f \n”, dm, dmm, sm, smm);
}
76.31.e-210.
Последняя строка, под закрывающей программу фигурной скобкой, задаёт численные значения вводимых оператором scanf переменных.
Результаты решения представлены в приложении 3.2.
Заключение
Линейный – простейший вычислительный процесс. Назначение – организация последовательного однократного выполнения всех запланированных вычислений задачи. В чистом виде встречается редко. Большинство реальных вычислений – псевдолинейны (используют подпроцессы реализации различных трансцендентных функций).
Изучение линейного процесса – основа получения первоначальных навыков программирования на языке высокого уровня. Рабочий язык – Си/Си++. Основные компоненты – алфавит, элементарные конструкции, выражения, операторы, функции.
Алфавит – совокупность букв, цифр, специальных символов, используемых в языке.
Элементарные конструкции – составные конструкции алгоритмического языка. Типичные представители – ключевые слова, константы, переменные, вызовы функций.
Выражения – совокупности элементарных конструкций, предписываемые задачей. Варианты – арифметические и логические.
Операторы – основные конструкции языка высокого уровня. Программные аналоги конкретных предписаний алгоритма решения задачи.
Функции – базовые конструкции языка Си/Си++. Обеспечивают модульность программ решения задачи.
Структура Си/Си++-программы – заголовок и тело программы. Состав заголовка – комментарии, директивы препроцессора, объявление глобальных переменных.
Структура тела программы – последовательность главной и дополнительных функций. Состав любой функции – ее заголовок и тело.
Тело функции – объявления локальных переменных, операторы, комментарии.
Абсолютное следование сути определения линейных вычислений (однократность выполнения) – причина их малой эффективности для ЭВМ.
В обозримом будущем использование линейных процессов в программировании неизбежно. Залог повышения эффективности их использования – универсальность создаваемого программного продукта (возможность распространения на целый класс однотипных задач).
Вопросы для контроля
Что такое линейный вычислительный процесс?
Как классифицируются линейные процессы?
Каков алфавит языка Си/Си++?
Каковы структуры констант, примеры их записи?
Что такое переменная, имя переменной?
Какова структура описателей переменных?
Как реализуется структура функций, вызов функций?
Каковы правила составления и выполнения арифметических выражений?
Для чего используется оператор присваивания, какова его структура?
Какова структура оператора ввода и его спецификаторов?
Какова структура операторы вывода и их спецификаторов?
Как выглядит общая структура Си/Си++-программы?
Для чего используются препроцессор и его директивы?
Какова поэлементная структура простейшей программы?