Автор: Пользователь скрыл имя, 15 Мая 2013 в 16:47, курсовая работа
Язык Паскаль, названный в честь французского математика и философа Блеза Паскаля (1623-1662), был создан как учебный язык программирования в 1968-71 годах швейцарским ученым Никлаусом Виртом на кафедре информатики Стэнфордского университета (Цюрих). В настоящее время это язык имеет более широкую сферу применения, чем предусматривалось при его создании.
Введение 4
1 Теоретическая часть 5
1.1 Математическая постановка задачи 5
1.2 Язык программирования 5
1.3 Описание данных 20
1.4 Алгоритм решения задачи 21
1.5 Структурные схемы 23
2 Экспериментальная часть 27
2.1 Применение программы 27
2.2 Описание данных 27
2.3 Описание структуры программы 27
2.4 Руководство программиста 29
2.5 Анализ ошибок при отладке программы 29
2.6 Инструкция для использования 29
2.7 Анализ результатов решения 32
Заключение 33
Список литературы 34
Приложение. Листинг программы
Заметим, что хотя и существует возможность выхода из цикла с помощью оператора безусловного перехода goto, делать этого не желательно. Во всех случаях можно воспользоваться специально предназначенными для этого процедурами Break и Continue.
В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
Для использования подалгоритма в
качестве подпрограммы ему необходимо
присвоить имя и описать
В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подпрограммы в вызывающий блок (результаты работы подпрограммы).
Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, переменных. Исполняемая часть содержит собственно операторы процедур.
Формат описания процедуры имеет вид:
procedure имя процедуры (формальные параметры);
раздел описаний процедуры
begin
исполняемая часть процедуры
end;
Формат описания функции:
function имя функции (формальные параметры):тип результата;
раздел описаний функции
begin
исполняемая часть функции
end;
Формальные параметры в заголовке процедур и функций записываются в виде:
var имя параметра: имя типа
и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
Вызов процедуры производится оператором, имеющим следующий формат:
имя процедуры(список фактических параметров);
Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
имя функции := результат;
При вызове процедур и функций необходимо соблюдать следующие правила:
Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
Любой из структурированных типов
данных характеризуется
В Турбо Паскале пять структурированных типов:
Массивы - это совокупности однотипных элементов. Характеризуются они следующим:
Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме longint). Чаще всего используется интервальный тип (диапазон).
Описание типа массива задается следующим образом:
type
имя типа = array[ список индексов ] of тип
Здесь имя типа - правильный идентификатор; список индексов - список одного или нескольких индексных типов, разделенных запятыми; тип - любой тип данных.
Вводить и выводить массивы можно только поэлементно.
Пример 1. Ввод и вывод одномерного массива.
const
n = 5;
type
mas = array[1..n] of integer;
var
a: mas;
i: byte;
begin
writeln('введите элементы
for i:=1 to n do readln(a[i]);
writeln('вывод элементов массива:');
for i:=1 to n do write(a[i]:5);
end.
Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например:
var a,b,c: array[1..10] of integer;
Если массивы a и b описаны как:
var
a = array[1..5] of integer;
b = array[1..5] of integer;
то переменные a и b считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа.
Если типы массивов идентичны, то в программе один массив может быть присвоен другому. В этом случае значения всех переменных одного массива будет присвоены соответствующим элементам второго массива.
Вместе с тем, над массивами не определены операции отношения. Сравнивать два массива можно только поэлементно.
Так как тип, идущий за ключевым словом of в описании массива, - любой тип Турбо Паскаль, то он может быть и другим массивом. Например:
type
mas = array[1..5] of array[1..10] of integer;
Такую запись можно заменить более компактной:
type
mas = array[1..5, 1..10] of integer;
Таким образом возникает понятие мног
Работа с многомерными массивами почти всегда связана с организацией вложенных циклов. Так, чтобы заполнить двумерный массив (матрицу) случайными числами, используют конструкцию вида:
for i:=1 to m do
for j:=1 to n do a[i,j]:=random(10);
Для "красивого" вывода матрицы на экран используйте такой цикл:
for i:=1 to m do begin
for j:=1 to n do write(a[i,j]:5);
writeln;
end;
Исходные данные:
Выходные данные:
1. Ввод числа строк М и столбцов N и значений элементов таблицы А.
Ввод таблицы обычно задается по строкам с помощью двух циклов. Для таблицы размерностью M´N имеем:
1) задаем значения i от 1 до M во внешнем цикле.
2) задаем значения j от 1 до N во внутреннем цикле.
3) с помощью оператора ввода задаем ввод каждого элемента Aij матрицы.
2. Определение суммы элементов строк.
Каждая строка двумерного массива представляет собой одномерный массив, следовательно, к ней применим алгоритм поиска суммы элементов массива.
Вначале устанавливаем текущее значение суммы равным нулю:
sum = 0.
Затем выбираем очередной элемент mas[i] массива и добавляем его в сумму
sum = sum + mas[i].
Для решения задачи:
Повторяем описанный алгоритм для всех строк двумерного массива.
3. Формирование одномерных массивов.
Алгоритм формирования прост – элементы соответствующих строк переписываются в вектора.
v1j = A1j,
v2j = A2j,
v3j = A3j,
v4j = A4j,
j = 1..N.
4. Поиск минимального элемента и его индекса.
Элементы массива просматривает
Алгоритм выполнения действий следующий:
…
min = A(1) – начальное присвоение
for i = 1 to n – цикл просмотра
if A(i) <min then – сравнение текущего элемента с min
min = A(i) – переопределение текущего значения min
next
…
Для определения индекса
…
min = A(1) – начальное присвоение min
indmin = 1 – начальное присвоение индекса
for i = 1 to n – цикл просмотра
if A(i) < min then – сравнение текущего элемента с min
min = A(i) – переопределение текущего значения min
indmin = i – переопределение индекса
end if
next
…
5. Вычисление суммы и их
Сумму заданных элементов массива вычисляем по алгоритму, описанному выше, только учитывая условие: одна сумма будет содержать элементы расположенные до минимального, вторая – после минимального.
Вначале устанавливаем текущее значение сумм равным нулю:
sum1 = 0,
sum2 = 0.
Затем выбираем очередной элемент mas[i] массива и, если его номер не превосходит индекс минимального, добавляем его в первую сумму:
s1 = s1+ mas[i];
если же номер превосходит индекс минимального, добавляем его во вторую сумму:
s2 = s2+ mas[i].
Вычисляем отношение найденных сумм:
otn = ,
s2 ¹ 0.
Последнее условие означает, что минимальный элемент находится на последней позиции.
Программа предназначена для обработки
прямоугольных целочисленных
Разработанная программа имеет следующие характеристики: