Раздел 1. СПОСОБЫ ПРЕДСТАВЛЕНИЯ АЛГОРИТМОВ
Методические указания по проведению учебной практики
Направление подготовки – Бизнес-информатика
Квалификация выпускника - бакалавриат
Краснодар – 2012
![]() |
Содержание
ВВЕДЕНИЕ………………………………………………………………………………………….3
Раздел 1. Способы представления алгоритмов………………………………………………...4
1.1.Линейные программы. Структура программы…………………………………………….7
1.2.Понятие массива……………………………………………………………………………..9
1.2.1. Одномерные массивы……………………………………………………………………9
1.2.2. Многомерные массивы…………………………………………………………………13
1.3.Двумерные массивы………………………………………………………………………..15
1.4.Действия над элементами массива………………………………………………………...18
1.5.Решение задач – примеров…………………………………………………………………19
Раздел 2. Архитектура предприятия…………………………………………………………..21
2.1. Понятие и общие представления об архитектуре предприятия………………………...21
2.2. Цели создания ……………………………………………………………………………..22
2.3. Методические принципы создания архитектуры……………………………………….23
2.4. Корпоративная архитектура………………………………………………………………23
2.5. Детализация при формировании архитектуры………………………………………….29
2.6. Схема «3Д-предприятие»…………………………………………………………………37
Раздел 3. Система управления архитектурой предприятия…………………………………40
3.1. Приемы процессно-ориентированной архитектуры предприятия…………………….42
3.2. Изменения архитектуры…………………………………………………………………...44
3.3. Идентификация и описание бизнес-процессов………………………………………….49
3.4. Моделирование организации деятельности предприятия………………………………51
Раздел 4. Системы управления контентом……………………………………………………53
4.1. Объектная модель………………………………………………………………………….55
4.2. Сетевая модель……………………………………………………………………………..56
4.3. Модульная модель ………………………………………………………………………...57
4.4. CMS-системы……………………………………………………………………………...57
4.5. Коммерческие системы……………………………………………………………………61
Задание для самостоятельной работы…………………………………………………………63
Контрольные вопросы………………………………………………………………………….64
Учебно-методическое обеспечение…………………………………………………………...65
Введение
Так как ЭВМ является "слепым" исполнителем программ, то успешное решение задачи полностью определяется квалификацией программиста.
В общем случае решение задачи на ЭВМ можно разбить на следующие этапы:
- постановка задачи;
- разработка алгоритма;
- составление программы;
- трансляция программы;
- отладка и выполнение программы;
- анализ результатов.
В программировании используется такое определение алгоритма: "алгоритм – это точное предписание, определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату".
Алгоритм должен обладать следующими основными свойствами:
- детерминированность (определенность) – при заданных исходных данных обеспечивается однозначность искомого результата;
- массовость – пригодность для задач данного типа при исходных данных, принадлежащих заданному подмножеству;
- результативность – реализуемый вычислительный процесс выполняется за конечное число этапов с выдачей осмысленного результата;
- дискретность – разбиение на отдельные этапы, выполнение которых не вызывает сомнений.
Под программой понимают описание, воспринимаемое ЭВМ и достаточное для решения на ней определенной задачи. Для создания программы используются искусственные языки, называемые языками программирования. ЭВМ, как правило, непосредственно воспринимает и выполняет программы, написанные только на одном из языков программирования – машинном языке для данной ЭВМ. С помощью специальных программ можно получить опосредованное "понимание" других языков. Одна из таких программ – транслятор.
Транслятор – это программа, осуществляющая перевод текстов с одного языка на другой, т.е. с входного языка (Паскаль и т.д.) на машинный язык реальной ЭВМ. Программа, попадающая на вход транслятора, называется исходной, а результат трансляции – объектной программой.
Раздел 1. СПОСОБЫ ПРЕДСТАВЛЕНИЯ АЛГОРИТМОВ
Одним из самых трудоемких этапов решения задачи на ЭВМ является разработка алгоритма.
При разработке алгоритмов чаще всего используют следующие способы их описания: словесный, графический, с помощью языков программирования.
Рассмотрим два способа: графический и с помощью языков программирования.
Графический способ записи алгоритмов – наиболее наглядный и распространенный. Он основан на использовании геометрических фигур (блоков), каждая из которых отображает конкретный этап процесса обработки данных, соединяемых между собой прямыми линиями, называемыми линиями потока. Обозначение и назначение элементов графических схем алгоритмов приведено в табл.1. В поле каждого блочного символа указывают выполняемую функцию. При необходимости справа можно поместить комментарии, относящиеся к данному блоку или направлению потока. Каждый блочный символ (кроме начального и конечного) помечается порядковым номером. Для отличия ситуаций пересечения и слияния потоков последняя изображается точкой. Линии потока, имеющие направление вверх или направо, дополняются стрелками.
Таблица 1
Геометрическая фигура | Назначение |
![]() | Начало и завершение алгоритма, прерывание процесса обработки данных или выполнения программы. a выбирается из ряда 5,10,15мм и т.д. ,а b=1,5a или 2a |
![]() | Выполнение операции или группы операций, в результате которых изменяются значение, форма представления или расположение данных |
![]() | Ввод-вывод - преобразование данных в форму, пригодную для обработки или регистрации результатов обработки |
![]() | Вызов подпрограммы: функции или процедуры |
![]() | Текст, поясняющий выполняемую операцию или группу операций. Располагается справа от геометрической фигуры |
![]() | Внутристраничный соединитель, указывающий связь между прерванными линиями потока |
![]() | Межстраничный соединитель, указывающий связь между прерванными линиями потока, помещенными на разных листах |
![]() ![]() ![]() ![]() | Указания последовательности связей между элементами схемы алгоритма |
По своей структуре различают следующие типы алгоритмов: линейные, разветвляющиеся и циклические. В линейных схемах алгоритмов все предписания выполняются одно за другим. Например, алгоритм вычисления длины окружности по известной площади круга (рис.2).
В разветвляющихся схемах алгоритмов для конкретных исходных данных выполняются не все заданные предписания. Однако какие именно предписания будут выполняться, конкретно определяется в процессе выполнения алгоритма в результате проверки некоторых условий. Разветвляющийся алгоритм всегда избыточен.
Примером разветвляющегося алгоритма является алгоритм, приведенный на рис.3 и определяющий, пройдет ли график функции y=3x+4 через точку с координатами x1,y1.
![]() |
![]() |
Циклическим алгоритмом называется такой алгоритм, в котором можно выделить многократно повторяющуюся последовательность предписаний, называемую циклом. Для таких алгоритмов характерно наличие параметра цикла, которое перед входом в цикл имеет начальное значение, а затем изменяется внутри цикла. Имеется также предписание о проверке условия окончания цикла. Применение циклов сокращает текст алгоритма и, в конечном итоге, длину программы. Примером циклического алгоритма может служить алгоритм, приведенный на рис.4 и определяющий факториал натурального числа n. В этом алгоритме введена дополнительная переменная i, которая является параметром цикла и изменяется от начального значения 1 до конечного значения n c шагом 1. На каждом шаге итерации искомая величина f умножается на переменную цикла. В реальных задачах, как правило, сочетаются все три типа алгоритмов. Способ описания алгоритма с помощью алгоритмического языка подробно рассматривается в следующем разделе.
ЛИНЕЙНЫЕ ПРОГРАММЫ
СТРУКТУРА ПРОГРАММЫ
Чтобы иметь представление о том, как программируют на языке Паскаль, приведем пример программы pr1, определяющей сумму двух чисел:
program pr1;
var a,b,result: integer;
begin
a:=2;
b:=3;
result:=a+b;
writeln(result);
end.
Это – линейная программа. К линейным программам чаще всего приводят задачи, в которых необходимо выполнить обработку данных по формулам. В любой линейной программе имеются блоки ввода исходных данных, вычислительный блок, который выполняет присваивание переменной значения некоторого выражения, и блок вывода результатов решения задачи.
Структура программы на языке Паскаль в общем случае выглядит следующим образом:
* заголовок программы;
* описательная часть;
* операторная часть.
Заголовок программы представляется так:
program <имя программы>;
Cлово program является зарезервированным (ключевым), т.е. не может использоваться для каких-нибудь иных целей.
<имя программы> – это правильный идентификатор. Идентификаторы (или имена) используются в программе и для обозначения переменных, меток, типов, процедур и функций, констант. На имена (идентификаторы) накладываются некоторые ограничения. Важным ограничением при выборе идентификаторов является невозможность использования ключевых слов, например program или var. Идентификатор должен начинаться с буквы и может содержать буквы латинского алфавита, цифры и знаки подчеркивания. Длина идентификатора может быть любой, но значащими являются первые 63 символа. Имена могут нести смысловую нагрузку, как, например, result, но могут и не нести. Использование осмысленных имен предпочтительнее, так как это делает программу более простой для понимания. В идентификаторах, как и во всей программе на Паскале, игнорируется разница в высоте букв.
Описательная часть программы может содержать несколько разделов:
1) раздел меток;
2) раздел констант;
3) раздел типов;
4) раздел переменных;
5) раздел процедур и функций.
По мере необходимости далее в тексте будет излагаться материал по каждому разделу описательной части.
Операторная часть программы заключается в операторные скобки begin end и содержит операторы, необходимые для выполнения последовательности действий для решения поставленной задачи. Разделителем между разделами описательной части и операторами служит точка с запятой. В конце программы должна стоять точка. Язык Паскаль является языком свободного формата, что позволяет размещать в строке как один, так и несколько операторов.
Первая строка приведенной выше программы является заголовком программы, в котором указывается имя программы. В данном случае программа названа pr1. В Паскале можно опускать заголовок программы.
Вторая строка – описательная часть, содержащая в данном случае только описание переменных. Описание переменных всегда начинается с ключевого слова var и указывает имена переменных и их тип.
Третья и все последующие строки программы – это операторная часть программы (тело программы). В данном примере в теле программы содержатся операторы присваивания и оператор вызова встроенной процедуры writeln вывода данных. Встроенная процедура не нуждается в предварительном описании и доступна любой программе.
Понятие массива данных
На практике, при функционировании автоматизированных систем управления, информационных систем, измерительных комплексов и др., возникает необходимость обрабатывать большое количество различной информации. Например, показания температуры воздуха окружающей среды, стоимость товаров, значения координат движущихся объектов, характеристики приборов и других технических устройств и т.д. Программное обеспечение таких систем должно обеспечивать обработку, хранение, ввод-вывод больших объемов всевозможных данных. Интегрированная среда Turbo Pascal позволяет эффективно разрабатывать, тестировать и отлаживать программы, связанные с обработкой массивов данных самой различной структуры.
В языке Pascal под массивом понимается упорядоченный набор фиксированного количества однотипных данных.
Массивы, наряду с записями, строками, множествами, относятся к структурированному типу данных языка. Массивы могут быть одномерные и многомерные. При этом размер массива не ограничивается. Размерность массивов на практике ограничивается лишь объемом рабочей памяти конкретного компьютера. В памяти компьютера элементы массива располагаются в последовательных соседних ячейках памяти.
Одномерные массивы
Переменные массивов можно задавать двумя способами:
а) через объявление типа в формате
TYPE
< имя типа > = ARRAY [тип индекса] OF < тип элементов >;
VAR
< идентификатор >: < имя типа >;
б) через объявление переменных в формате
VAR
< идентификатор >: ARRAY [тип индекса] OF < тип элементов >;
Элементы массива могут быть любого, в том числе и структурированного, типа. Следует отметить, что вещественный тип не относится к упорядоченным типам данных. В качестве типа индекса может использоваться любой порядковый тип, кроме типа Longint. Обычно в качестве индексного типа используется целочисленный тип-диапазон, в котором задаются границы изменения индексов.
Примеры объявления массивов:
CONST
N = 25; {размерность массива}
TYPE
X = ARRAY [1.. 100] OF INTEGER;
Y = ARRAY [1.. N] OF REAL;
Z = RECORD
R, I: REAL
END;
VAR
M: X; {целочисленный массив}
V1, V2: Y; {вещественные массивы }
L1, L2: ARRAY [1.. 20 ] OF Z; {массивы записей }
K: ARRAY [ BYTE ] OF CHAR; { массив символов }
R: ARRAY [ 1.. 5 ] OF STRING [25]; { массив строк }
T: ARRAY [-10.. 9] OF BYTE; { массив целых чисел }
S: ARRAY [ BOOLEAN ] OF REAL; { вещественный массив }
F: ARRAY [ GREEN, RED, BLUE ] OF INTEGER; { целый массив с перечислимым типом-индексом}
G: ARRAY [ 1.. N ] OF (MO, TU, WE, TH, FR, SA, SU );
{ массив перечислимого типа }
Типизированная константа-массив объявляется в программе следующим образом:
CONST
A: ARRAY [1.. 5] OF INTEGER = ( 1, 2, 3, 4, 5 );
B: ARRAY [1.. 4] OF REAL = ( 1.1, 2.2, 3.3, 4.4 );
Приведена схема алгоритма формирования элементов массива с помощью датчика случайных чисел, вывод элементов массива на экран, вычисление суммы всех элементов. Программа приведена в примере:
const n1=100; {максимальный размер массива}
type mas = array[1..n1] of integer;
var a:mas;
i, {индекс элемента массива}
n,s:integer;
begin
writeln ('Введите число элементов массива:');
read (n);
{ Формирование массива с помощью датчика случайных чисел}
randomize;{Инициализация датчика случайных чисел }
for i:=1 to n do
a [i]:=random(10);
writeln ('Полученный массив');
for i:=1 to n do
write (a[i]:5);
writeln;
s:=0; { Нахождение суммы }
for i:=1 to n do
s:=s+a[i];
writeln ('s=',s);
end.
Графическая схема алгоритма определения максимального элемента массива и суммы положительных элементов, а также замены максимального элемента массива суммой положительных элементов массива.
const n1=100; {максимальный pазмеp массива}
type
mas = array[1..n1] of integer;
var
a:mas;
i, {индекс элемента массива}
n,s,
imax:integer;{индекс максимального элемента}
begin
writeln('Введите число элементов массива:');
read(n);
{Ввод массива}
for i:=1 to n do
begin
read(a[i])
end;
s:=0;
imax:=1;{пpедполагаем, что пеpвый элемент максимальный}
for i:=1 to n do
begin
{если элемент положительный, то прибавляем его к сумме}
if a[i]>0 then s:=s+a[i];
{если текущий элемент массива больше максимального, то запоминаем его индекс}
if a[imax]<a[i] then imax:=i;
end;
writeln('максимальный элемент массива =',a[imax]);
a[imax]:=s;{ замена максимального элемента суммой }
writeln('s=',s);
writeln('Обpаботанный массив:');
for i:=1 to n do
writeln (a[i]);
end.
Ввод и вывод элементов массивов происходит поэлементно. Значения элементам массива можно присвоить с помощью оператора присваивания или путем считывания из файла, но на практике они чаще всего вводятся с клавиатуры или с помощью генератора случайных чисел. Последний способ целесообразно использовать тогда, когда количество элементов массива достаточно велико.
Примеры ввода одномерных массивов:
а) ввод с клавиатуры
FOR I: = 1 TO N DO READ ( M [I] );
б) ввод с помощью генератора случайных чисел
RANDOMIZE; {инициализация генератора случайных чисел}
FOR I: = 1 TO N DO M [I]: = - 25 + RANDOM (D);
Стандартная функция Random формирует случайное целое число из диапазона от 0 до D-1. При этом i-му элементу массива будет присвоена сумма выбранного случайного числа и -25. Таким образом, массив будет заполняться целыми случайными числами от -25 до -25 + (D-1). Например, если выбрать D равным 51, то массив будет заполняться случайными числами от -25 до +25.
Вывод одномерных массивов происходит аналогичным образом, например:
FOR I: = 1 TO N DO WRITELN ( M [I] );
Ввод двумерных массивов (матриц) производится с помощью вложенного оператора FOR:
FOR I: = 1 TO N DO
FOR J: = 1 TO K DO
READ ( M [I, J] );
Вывод значений элементов двухмерных массивов производится аналогичным образом с использованием операторов вывода WRITE или WRITELN:
FOR I: = 1 TO N DO
FOR J: = 1 TO K DO
WRITELN ( M [I, J] )
Таким же образом, поэлементно, происходит ввод и вывод многомерных массивов.
Многомерные массивы
Элементами массивов могут быть также массивы. В этом случае мы имеем двухмерный массив ( матрицу ).
Двухмерные массивы задаются в программе следующим образом:
а) через объявление типа в формате
TYPE
< имя типа > = ARRAY [тип индекса 1] OF ARRAY [тип индекса 2] OF < тип элементов >;
или
< имя типа > = ARRAY [ тип индекса 1, тип индекса 2 ] OF <тип элементов>;
Обе формы описания равносильны, но вторая употребляется чаще.
VAR
< идентификатор >: < имя типа >;
б) через объявление переменных в формате
VAR
< идентификатор >: ARRAY [тип индекса 1, тип индекса 2] OF < тип элементов >;
Необходимо отметить, что индексы не обязательно должны иметь один и тот же тип. В общем случае индексы по каждому измерению могут быть разных типов как, например, в следующем фрагменте раздела описаний.
Примеры объявления двухмерных массивов:
CONST
N = 5;
M = 10;
TYPE
A = ARRAY [ 1.. N, 1.. M ] OF WORD;
B = ARRAY [ 1.. 10, 1.. 20 ] OF REAL;
VAR
C: ARRAY [ 1.. N, BOOLEAN ] OF -20.. 20;
D1, D2: A;
F1, F2: B;
Типизированная константа-матрица объявляется в программе следующим образом:
CONST
M: ARRAY [1.. 3, 1.. 2] OF INTEGER = ((1, 2), (3, 4), (5, 6));
Массивы могут быть не только одномерными или двухмерными, но и 3-х, 4-х и n-мерными. В этом случае они описываются в программе следующим образом:
VAR
M: ARRAY [ 1.. 10, -10.. 9, CHAR ] OF BYTE;
N: ARRAY [ 1.. 5, 1.. 10, 1.. 15, 1.. 20 ] OF SHORTINT;
В памяти компьютера элементы размещаются друг за другом так, что при переходе от младших адресов к старшим наиболее быстро изменяется самый правый индекс массива. Например, для матрицы 2х2: A[1,1], A[1,2], A[2,1], A[2,2].
ДвумерныЕ массивЫ
Приведена схема алгоритма формирования элементов массива с помощью датчика случайных чисел, вывод элементов массива на экран, вычисление суммы всех элементов двумерного массива. Программа дана в примере:
program pr21;
const n1=10; {максимальнoе количество стpок массива}
m1=10; { максимальное количество столбцов массива}
type mas = array[1..n1,1..m1] of integer;
var a: mas;
i, { текущий номеp строки }
j, { текущий номеp столбца }
n,s,m : integer;
begin
writeln('Введите число стpок и столбцов массива:');
read(n,m);
randomize;
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(10);
writeln('Полученный массив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
s:=0;
for i:=1 to n do
for j:=1 to m do
s:=s+a[i,j];
writeln('s=',s);
end.
Дана прямоугольная матрица. Отсортировать столбцы матрицы в порядке неубывания максимальных элементов столбцов. Пример решения:
const n1=10; {максимальнoе количество стpок массива}
m1=10; {максимальнoе количество столбцов массива}
type
mas = array[1..n1,1..m1] of integer;{квадpатная матpица}
var
a:mas;
b:array[1..m1] of integer;{массив из максимальных элементов столбцов}
i, { текущий номеp стpоки }
j, { текущий номеp столбца }
n,m,d:integer;
fl:boolean;
begin
writeln ('Введите число стpок и столбцов массива:');
read(n,m);
for i:=1 to n do
for j:=1 to m do
begin
writeln('Введите элемент массива');
read(a[i,j]);
end;
writeln ('Исходный массив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
{Фоpмиpование одномеpного массива из максимальных
элементов столбцов}
for j:=1 to m do {Пеpебиpаем все столбцы}
begin
b[j]:=a[1,j];{Пpинимаем пеpвый элемент в столбце за максимальный }
for i:=2 to n do{Пеpебиpаем все элементы в столбце}
if a[i,j]>b[j] then b[j]:=a[i,j];
end;
{Сортировка одномерного и двумерного массива}
repeat
fl:=true;{Поднять флаг}
for j:=1 to m-1 do {Перебрать элементы одномерного массива}
if b[j]>b[j+1] then { Проверить нужна ли перестановка }
begin
fl:=false;{опустить флаг}
{Переставить элементы одномерного массива и}
d:=b[j];
b[j]:=b[j+1];
b[j+1]:=d;
{столбцы двумерного массива}
for i:=1 to n do
begin
d:=a[i,j];
a[i,j]:=a[i,j+1];
a[i,j+1]:=d;
end;
end;
until fl;{Завершить сортировку,если флаг не опускался}
writeln('Отсортированный массив');
for i:=1 to n do
begin
for j:=1 to m do
write (a[i,j]:5);
writeln;
end;
end.