Раздел 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

 

Рис. 3

 

Циклическим алгоритмом называется такой алгоритм, в котором можно выделить многократно повторяющуюся последовательность предписаний, называемую циклом. Для таких алгоритмов характерно наличие параметра цикла, которое перед входом в цикл имеет начальное значение, а затем изменяется внутри цикла. Имеется также предписание о проверке условия окончания цикла. Применение циклов сокращает текст алгоритма и, в конечном итоге, длину программы. Примером циклического алгоритма может служить алгоритм, приведенный на рис.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.