Язык программирования

Автор: Пользователь скрыл имя, 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
Приложение. Листинг программы

Файлы: 1 файл

Никита.doc

— 294.00 Кб (Скачать)

Заметим, что хотя и существует возможность выхода из цикла с  помощью оператора безусловного перехода 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;

Таким образом возникает понятие многомерного массива. Глубина вложенности массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт.

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

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. Описание данных

Исходные данные:

  • число строк и столбцов массива M´N;
  • двумерный массив целых чисел.

Выходные данные:

  • сумма элементов каждой строки;
  • четыре вектора, составленные из элементов первых четырех строк;
  • минимальный элемент каждого вектора и его индекс;
  • отношение суммы элементов массива, расположенных до минимального элемента в массиве, к сумме элементов, расположенных после минимального.
    1. Алгоритм решения задачи

1. Ввод числа строк М и столбцов  N и значений элементов таблицы А.

Ввод таблицы обычно задается по строкам с помощью двух циклов. Для таблицы размерностью M´N имеем:

1) задаем значения i от 1 до M во внешнем цикле.

2) задаем значения j от 1 до N во внутреннем цикле.

3) с помощью оператора ввода  задаем ввод каждого элемента Aij матрицы.

2. Определение суммы элементов строк.

Каждая строка двумерного массива  представляет собой одномерный массив, следовательно, к ней применим алгоритм поиска суммы элементов массива.

Вначале устанавливаем текущее  значение суммы равным нулю:

sum = 0.

Затем выбираем очередной элемент mas[i] массива и добавляем его в сумму

sum = sum + mas[i].

Для решения задачи:

  • формируем тело программы и описываем переменные;
  • задаем длину массива N, значение элементов массива и устанавливаем начальное значение sum равным нулю;
  • последовательно просматриваем элементы и добавляем их в сумму;
  • выводим результат.

Повторяем описанный алгоритм для  всех строк двумерного массива.

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

Для определения индекса минимального элемента необходимо наряду с запоминанием max необходимо запоминать и его индекс.

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.

Последнее условие означает, что  минимальный элемент находится  на последней позиции.

 

    1. Структурные схемы


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Блок – схема алгоритма вычисления суммы элементов каждой строки матрицы

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Блок – схема алгоритма вычисления отношения суммы элементов массива, расположенных до минимального элемента в массиве, к сумме элементов, расположенных после минимального


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Блок – схема программы

 

  1. Экспериментальная часть

    1. Применение программы

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

Разработанная программа имеет  следующие характеристики:

  • размерность исходной матрицы: до 15´15. Число строк должно быть не менее 4 – ограничение из условия задачи.
  • тип данных – целые числа;
  • допускаемые пределы значений элементов матрицы: ограничены используем типом данных – Integer.
  • способ задания элементов матрицы: ввод с клавиатуры или текстового файла;
  • вывод полученных результатов и исходных данных производится на экран.

Информация о работе Язык программирования