Автор: Пользователь скрыл имя, 30 Марта 2010 в 10:32, курсовая работа
ЗАДАНИЕ: Задана действительная матрица размера n*m. Построить матрицу той же размерности, если каждый элемент новой матрицы равен сумме элементов в не заштрихованной области.
Задание на курсовую работу…………………………………………………2
Замечания руководителя……………………………………………….……..3
Введение…...………………….……………………………………………….5
1. Теоретическая часть…………….………………………………………….6
1.1 Стандартные типы данных……….……………………………….……6
1.2 Массивы в языке программирования Pascal…….…………………….9
1.3 Процедуры и функции…………………………………………….…....10
1.4 Графические возможности языка программирования Pascal………..13
2. Экспериментальная часть………………………………………………….15
2.1 Постановка задачи……………………………………………….……..15
2.2 Алгоритм решения задачи……………………………………….….....15
2.3 Описание диалога с пользователем……………………………….…..25
2.4 Контрольный пример……………………………………………….….26
Заключение…………………………………………………………………….27
Список литературы……………………………………………………………28
Приложение……………………………………………………………………29
Trunc(X) и Round(X),
Первая из них выделяет целую часть действительного аргумента путем отсечения дробной части, вторая округляет аргумент до ближайшего целого.
Символьный тип (Char) определяет упорядоченную совокупность символов, допустимых в данной ЭВМ. Значение символьной переменной или константы - это один символ из допустимого набора. Символьная константа может записываться в тексте программы тремя способами:
-как
один символ, заключенный в апострофы,
например:
'A' 'a' 'Ю' 'ю';
-с помощью конструкции вида #K, где K - код соответствующего символа, при этом значение K должно находиться в пределах 0..255;
-с помощью конструкции вида ^C, где C - код соответствующего управляющего символа, при этом значение C должно быть на 64 больше кода управляющего символа.
К
величинам символьного типа применимы
все операции отношения. Для величин символьного
типа определены две функции преобразования
Ord(C) Chr(K).
Первая функция определяет порядковый номер символа С в наборе символов, вторая определяет по порядковому номеру К символ, стоящий на К-ом месте в наборе символов. Порядковый номер имеет целый тип.
К
аргументам символьного типа применяются
функции, которые определяют предыдущий
и последующий символы:
Pred(C) Succ(C). Pred('F') = 'E' ; Succ('Y')
= 'Z' .
При
отсутствии предыдущего или последующего
символов значение соответствующих функций
не определено. Для литер из интервала
'a'..'z' применима функция UpCase(C), которая
переводит эти литеры в верхний регистр
'A'..'Z'.
1.2
Массивы в языке
Представьте себе таблицу, состоящую из нескольких строк. Каждая строка состоит из нескольких ячеек. Тогда для точного определения положения ячейки нам потребуется знать не одно число (как в случае таблицы линейной), а два: номер строки и номер столбца. Структура данных в языке Паскаль для хранения такой таблицы называется двумерным массивом. Описать такой массив можно двумя способами:
I. Var
A : Array [1..20] Of Array [1..30] Of Integer;
II. Var
A : Array [1..20,1..30] Of Integer;
В обоих случаях описан двумерный массив, соответствующий таблице, состоящей из 20 строк и 30 столбцов. Приведенные описания совершенно равноправны.
Отдельный элемент двумерного массива адресуется, естественно, двумя индексами. Например, ячейка, находящаяся в 5-й строке и 6-м столбце будет называться A[5][6] или A[5,6].
Для иллюстрации способов работы с двумерными массивами решим задачу: "Задать и распечатать массив 10X10, состоящий из целых случайных чисел в интервале [1,100]. Найти сумму элементов, лежащих выше главной диагонали."
При
отсчете, начиная с левого верхнего
угла таблицы, главной будем считать диагональ
из левого верхнего угла таблицы в правый
нижний. При этом получается, что элементы,
лежащие на главной диагонали будут иметь
одинаковые индексы, а для элементов выше
главной диагонали номер столбца будет
всегда превышать номер строки. Договоримся
также сначала указывать номер строки,
а затем - номер столбца.
Program M5;
Var
A : Array[1..10,1..10] Of Integer;
I, K : Byte;
S : Integer;
Begin
S:=0;
For I:=1 To 10 Do
Begin
For K:=1 To 10 Do
Begin
A[I,K]:=Trunc(Random*100)+1;
Write(A[I,K]:6);
If K>I Then S:=S+A[I,K]
End;
Writeln
End;
Writeln('Сумма элементов выше гл. диагонали равнаV',S)
End.
Если модель данных в какой-либо задаче не может свестись к линейной или плоской таблице, то могут использоваться массивы произвольной размерности. N-мерный массив характеризуется N индексами. Формат описания такого типа данных:
Type
<Имя
типа>=Array[<диапазон
<диапазон
индекса N>] Of <тип компонент>;
Отдельный элемент именуется так:
<Имя
массива>[<Индекс 1>,<Индекс 2>,...,<Индекс
N>]
1.3
Процедуры и функции
При
решении сложных объемных задач
часто целесообразно разбивать
их на более простые. Метод последовательной
детализации позволяет
В языке Паскаль существует два вида подпрограмм: процедуры и функции, определяемые программистом. Процедурой в Паскале называется именованная последовательность инструкций, реализующая некоторое действие. Функция отличается от процедуры тем, что она должна обязательно выработать значение определенного типа.
Процедуры и функции, используемые в программе, должны быть соответствующим образом описаны до первого их упоминания. Вызов процедуры или функции производится по их имени.
Подпрограммы
в языке Паскаль могут иметь
параметры (значения, передаваемые в
процедуру или функцию в
Формат описания процедуры:
Procedure <Имя процедуры> (<Имя форм. параметра 1>:<Тип>;
< Имя форм. параметра 2>:<Тип>?);
<Раздел описаний>
Begin
<Тело процедуры>
End;
Раздел описаний может иметь такие же подразделы, как и раздел описаний основной программы (описание процедур и функций - в том числе). Однако все описанные здесь объекты "видимы" лишь в этой процедуре. Они здесь локальны также, как и имена формальных параметров. Объекты, описанные ранее в разделе описаний основной программы и не переопределенные в процедуре, называются глобальными для этой подпрограммы и доступны для использования.
Легко
заметить схожесть структуры программы
целиком и любой из ее процедур.
Действительно, ведь и процедура
и основная программа реализуют некий
алгоритм, просто процедура не дает решения
всей задачи. Отличие в заголовке и в знаке
после End.
Формат описания функции:
Function <Имя функции> (<Имя форм. параметра 1>:<Тип>;
< Имя форм. параметра 2>:<Тип>?) : <Тип результата>;
<Раздел описаний>
Begin
<Тело функции>
End;
В теле функции обязательно должна быть хотя бы команда присвоения такого вида: <Имя функции>:=<Выражение>; Указанное выражение должно приводить к значению того же типа, что и тип результата функции, описанный выше.
Вызов процедуры представляет в программе самостоятельную инструкцию:
<Имя
процедуры>(<Фактический
Вызов функции должен входить в выражение. При вычислении значения такого выражения функция будет вызвана, действия, находящиеся в ее теле, будут выполнены, в выражение будет подставлено значение результата функции.
Приведем простейший пример использования подпрограммы.
Задача: "Найти максимальное из трех введенных чисел". Для решения воспользуемся описанием функции, принимающей значение максимального из двух чисел, которые передаются в нее в виде параметров.
Program Fn;
Var
A,B,C :Real;
Function Max(A,B:Real):Real; {Описываем функцию Max с формальными}
Begin {параметрами
A и B, которая принимает }
If A>B Then Max:=A {значение максимального из них }
Else Max:=B
{Здесь A и B - локальные переменные
}
End;
Begin
Writeln('Введите три числа');
Readln(A,B,C);
Writeln('Максимальным
из всех является ', Max(Max(A,B),C))
End.
Обратите внимание на краткость тела основной программы и на прозрачность действий внутри функции. Формальные параметры A и B, используемые в подпрограмме, не имеют никакого отношения переменным A и B, описанным в основной программе.
Существует два способа передачи фактических параметров в подпрограмму: по значению и по ссылке. В первом случае значение переменной - фактического параметра при вызове подпрограммы присваивается локальной переменной, являющейся формальным параметром подпрограммы. Что бы потом ни происходило с локальной переменной, это никак не отразится на соответствующей глобальной. Для одних задач это благо, но иногда требуется произвести в подпрограмме действия над самими переменными, указанными в качестве фактических параметров. На помощь приходит второй способ. Происходит следующее: при обращении к подпрограмме не происходит формирования локальной переменной -формального параметра. Просто на время выполнения подпрограммы имя этой локальной переменной будет указывать на ту же область памяти, что и имя соответствующей глобальной переменной. Если в этом случае изменить локальную переменную, изменятся данные и в глобальной.
Передача
параметров по ссылке отличается тем,
что при описании подпрограммы перед
именем переменной - формального параметра
ставится служебное слово Var. Теперь использование
в качестве фактических параметров выражений
или непосредственных значений уже не
допускается - они должны быть именами
переменных.
1.4
Графические возможности языка программирования
Pascal
Экран
дисплея ПК представляет собой прямоугольное
поле, состоящее из большого количества
точек. Дисплей может работать в
текстовом и графическом
Чтобы сделать процесс графического программирования более эффективным, фирма Borland International разработала специализированную библиотеку Graph (в этом библиотечном модуле содержится 79 графических процедур, функций, различных стандартных констант и типов данных), набор драйверов, позволяющих работать с разными типами мониторов, и набор шрифтов для вывода на графический экран текстов разной величины и формы.
Аппаратная поддержка графики ПК обеспечивается двумя основными модулями: видеомонитором и видеоадаптером. Какой бы адаптер ни был установлен на компьютере, мы можем использовать один и тот же набор графических процедур и функций Турбо Паскаля благодаря тому, что их конечная настройка на конкретный адаптер осуществляется автоматически. Эту настройку выполняют графические драйверы.