Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
algoritm.doc
Скачиваний:
42
Добавлен:
13.02.2015
Размер:
923.14 Кб
Скачать

Задание

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

Вариант 1

а) Организовать сортировку массива по возрастанию.

б) Определить сумму отрицательных элементов массива.

Вариант 2

а) Организовать сортировку таким образом, чтобы значение 4-го элемента никогда не изменялось.

б) Определить сумму элементов массива с четными номерами.

Вариант 3

а) Определить максимальный элемент массива и его номер.

б) Организовать обработку (ввод и вывод) строковых элементов, например, фамилий студентов группы.

Вариант 4

а) Организовать ввод и сортировку дробных чисел и подсчет их суммы.

б) Организовать сортировку букв в строковом массиве.

Вариант 5

а) Определить среднее арифметическое из отрицательных чисел массива.

б) Увеличить все элементы массива на 25.

Вариант 6

а) Заполнить массив так, чтобы его элементы содержали арифметическую прогрессию (8, 10, 12, 14 ...).

б) Определить сумму отрицательных элементов массива.

Вариант 7

а) Модифицировать программу так, чтобы элементы массива со значением больше 100 стали равны 100.

б) Найти наименьший из положительных элементов массива.

Вариант 8

а) Модифицировать программу так, чтобы элементы массива меньше 10 стали равны 0.

б) Вычислить среднее арифметическое из положительных элементов массива.

Вариант 9

а) Заполнить массив так, чтобы его элементы содержали геометрическую прогрессию (1, 2, 4, 8...)

б) Определить сумму четных и сумму нечетных элементов массива.

Вариант 10

а) Найти произведение всех элементов массива не равных нулю

б) Вычислить отклонения элементов от среднего арифметического и заполнить ими второй массив.

Тема 11

Процедуры и функции пользователя

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

Использование процедур и функций с параметрами позволяет пользоваться ими многократно с заданием различных исходных данных, что имеет особенно большое значение в случае использования библиотек в виде отдельно скомпилированных модулей (*.tpu –файлов), для которых исходный текст программы может быть неизвестен.

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

Заголовок процедуры имеет следующий вид:

Procedure идентификатор [(параметры)];

где идентификатор – имя процедуры, уникальное в пределах программы;параметры- необязательный список формальных параметров (т.е. может отсутствовать).

Список параметров может состоять из нескольких групп параметров, разделенных точкой с запятой (;):

(группа параметров [; группа параметров [; …] ] ).

Группа параметров, которая содержит список параметров одного типа, может быть трех следующих видов:

  • идентификатор [, идентификатор [,…] ]: type(список параметров-значений - только передают значения в процедуру)

  • var идентификатор [, идентификатор [,…] ]: type(список параметров-переменных – возвращают значения в вызывающую программу из процедуры)

  • var идентификатор [, идентификатор [,…] ] (список нетипизированных параметров-переменных)

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

Пример. Процедура для вывода текстовой строки в указанную позицию на экране. Описание процедуры:

Procedure WrStr(X, Y: integer; S: string); {заголовок}

var {описание локальных переменных}

SaveX, SaveY: Integer;

begin

SaveX := WhereX; {запоминаем позицию курсора на экране по Х}

SaveY := WhereY; {то же по Y}

GotoXY(X,Y); {перемещаем курсор в заданную позицию X,Y}

Write(S); {выводим с заданной позиции строку текста}

GotoXY(SaveX, SaveY); {перемещаем курсор в исходную позицию}

end;

Обращение к ней из головной программы или другой процедуры может выглядеть следующим образом: WrStr(40, 2, ’Расчет …’):

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

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

Функция, в отличие от процедуры, имеет имя, которое принимает определенное значение после ее выполнения. Описание функции:

{функция, которая преобразует все символы строки в прописные}

Function UpCaseStr(S: string): string; {заголовок}

var i : integer; {раздел описаний локальных переменных}

begin {начало тела функции}

for i := 1 to Length(S) do

if (S[i] >= 'a') and (S[i] <= 'z') then Dec(S[i], 32);

UpCaseStr := S;

end; {конец описания функции}

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

Использование подобных функций пользователя ничем не отличается от использования стандартных функций вроде Sin(x), Exp(a)и проч.

Ниже приведён пример построения программы с разбиением её на отдельные процедуры:

Program Prg_proc;

Uses Crt, Printer;

Var

xn, xk, h : real;

i, j, m, n : word;

x, y : array [1..50] of real;

mnu : array [1..6] of string[15];

vv : char;

Procedure my_mnu;

begin

Window(1, 1, 80, 1); TextColor(0); gotoXY(1,1);

for i:=1 to 5 do

if i=m then

begin

TextBackground(2);Write(' ',mnu[i],' ');

end

else

begin

TextBackground(7); Write(' ',mnu[i],' ');

end;

Window(1, 2, 80, 25);

gotoXY(1,1); TextColor(15);TextBackground(0);

end;

Procedure input_kl;

begin

ClrScr;

Write('x начальное = '); Readln(xn);

Write('x конечное = '); Readln(xk);

Write('количество точек графика (n<50) = '); Readln(n);

m:=2; my_mnu

end;

Procedure calc_dat;

begin

x[1]:=xn;

h:=(xk-xn)/(n-1);

for i:=1 to n do

begin

y[i]:=sin(x[i]); x[i+1]:=x[i]+h;

end;

ClrScr; write('Расчет выполнен!')

end;

Procedure out_dat;

begin

ClrScr;

Writeln('------------------------------');

Writeln(' X Y ');

Writeln('------------------------------');

for i:=1 to n do writeln(x[i]:15:5,Y[i]:15:5);

Writeln('------------------------------');

end;

Procedure out_gr;

begin

Write('здесь нужно описать вывод графика на экран')

end;

begin {головная программа}

TextBackground(0); ClrScr;

mnu[1]:='Исх.данные';

mnu[2]:='Расчет' ;

mnu[3]:='Таблица';

mnu[4]:='График' ;

mnu[5]:='Выход' ;

m:=1;

my_mnu;

repeat

vv:=Readkey;

if ord(vv)=0 then vv:=Readkey;

case ORD(VV) of

13:begin

case m of

1:input_kl;

2:calc_dat;

3:out_dat ;

4:out_gr ;

end;

end;

77:begin if m<5 then m:=m+1 else m:=1; my_mnu end;

75:begin if m>1 then m:=m-1 else m:=5; my_mnu end;

end;

until (vv=chr(13)) and (m=5);

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]