Автор работы: Пользователь скрыл имя, 16 Октября 2013 в 16:41, курсовая работа
Целью курсовой работы является написание программ на языке Turbo Pascal.
Для достижения цели были поставлены следующие задачи:
• Обзор и анализ литературы по темам «Массивы» и «Записи и файлы»;
• Разработка алгоритма программы;
• Написание программы на языке Turbo Pascal;
• Отладка программы;
• Тестирование программы со всевозможными исходными данными;
• Оформление курсовой работы.
Введение
Часть 1.
1.1 Теоретический материал по теме «Массивы»
1.2 Решение задачи
Часть 2
2.1 Теоретический материал по теме «Записи и файлы»
2.2 Решение задачи
Заключение
Список использованных источников
Бурятский филиал ГОУ ВПО СибГУТИ
на тему: Программирование на языке Turbo Pascal
Выполнил:
студент
группа:
№ зач. книжки:
Проверил:
Эрдынеева Л.И.
Улан-Удэ
200__г.
Содержание
Введение |
|
Часть 1. |
|
1.1 Теоретический материал по теме «Массивы» |
|
1.2 Решение задачи |
|
Часть 2 |
|
2.1 Теоретический материал по теме «Записи и файлы» |
|
2.2 Решение задачи |
|
Заключение |
|
Список использованных источников |
Введение
Целью курсовой работы является написание программ на языке Turbo Pascal.
Для достижения цели были поставлены следующие задачи:
Часть 1
Массив есть упорядоченный набор переменных одинакового типа. Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке Паскаль, кроме файлового типа. Тип компонент называется базовым типом. Каждая компонента может быть явно обозначена с помощью имени переменной-массива, за которым в квадратных скобках следует индекс. Их тип называется типом индекса. Время, требуемое для доступа любой компоненты, не зависит от значения индекса. Поэтому о массивах можно говорить как об объектах, структура которых допускает случайный (или прямой) доступ.
Объявление переменных массивового типа
Переменная массивового типа описывается в разделе описания переменных в следующей форме:
var
<идентификатор>: array[<тип индекса>] of <тип компонент>
Чаще всего в качестве
типа индекса употребляется
var
T: array[1..12] of real;
Описание массива определяет, во-первых, размещение массива в памяти, во-вторых, правила его дальнейшего употребления в программе. Последовательные элементы массива располагаются в последовательных ячейках памяти (T[1], T[2] и т.д.), причем значения индекса не должны выходить из диапазона 1...12. В качестве индекса может употребляться любое выражение соответствующего типа. Например:
T[i+j], T[m div 2]
Тип индекса может быть любым скалярным порядковым типом, кроме integer (в реализации Turbo Pascal). Например, в программе могут присутствовать следующие описания:
var
Cod: array[Char] of 1..100;
L: array[Boolean] of Char;
В такой программе
допустимы следующие обозначени
cod['x']; L[true]; cod[chr(65)]; L[a>0];
В некоторых случаях бывает удобно в качестве индекса использовать перечисляемый тип. Например, данные о количестве учеников в четырех десятых классах одной школы могут храниться в следующем массиве:
Type
Index=(А, В, С, D);
Var
Class_10: array[Index] of byte;
И если, например, элемент Class_10[A] равен 35, то это означает, что в 10 «А» классе 35 человек. Такое индексирование улучшает наглядность программы.
Часто структурированному типу присваивается имя в разделе типов, которое затем используется в разделе описания переменных.
type
Mas1 = array[1..100] of integer;
Mas2 = array[-10..10] of char;
var
Num: Mas1;
Sim: Mas2;
Многомерные массивы
Многомерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Например, среднемесячную температуру за 10 лет можно хранить в массиве, описанном следующим образом:
var
H: array[1981..1990] of array[1..12] of real;
Вот примеры обозначения некоторых элементов этого массива:
Н[1981][1]; Н[1985][10]; Н[1990][12];
Однако чаще употребляется
другая, эквивалентная форма
Н[1981,1]; Н[1985,10]; Н[1990,12];
Переменная Н[1981] обозначает всю первую строку таблицы, т.е. весь массив температур за 1981 г. Другим вариантом, эквивалентным приведенному выше описанию, является следующий:
type
Month = array[1..12] of real;
Year = array[1981..1990] of Month;
var
H: Year;
Наиболее краткий вариант описания данного массива такой:
var
H: array[1981..1990, 1..12] of real;
Трехмерный массив можно определить как одномерный массив, у которого элементами являются двумерные массивы. Вот пример описания трехмерного массива:
var
A: array[1..10, 1..20, 1..30] of integer;
Это массив, состоящий из 10x20x30 = 6000 целых чисел и занимающий в памяти 6000x2 = 12000 байт. В Паскале нет ограничения сверху на размерность массива. Однако в каждой конкретной реализации Паскаля ограничивается объем памяти, выделяемый под массивы.
По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные — матрицами. Размер массивов не может быть изменен в процессе выполнения. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких изменений удобно определять индексные параметры в разделе констант:
сonst
Imax=10;
Jmax=20;
var
Mas: array[1..Imax, 1..Jmax] of integer;
Теперь для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе — раздел констант.
Операции над массивами
Действия над массивом как единым целым. Такие действия допустимы лишь в двух случаях:
присваивание значений одного массива другому;
операции отношения «равно», «не равно».
В обоих случаях массивы должны иметь одинаковые типы (тип индексов и тип элементов). Пример:
var
P, Q: Array[1..5, 1..10] Of Real;
При выполнении операции присваивания P := Q все элементы массива P станут равны соответствующим элементам массива Q.
В многомерных массивах переменная с индексом может обозначать целый массив. Например, если в таблице H требуется, чтобы данные за 1989 г. были такими же, как за 1981 г. (девятой строке присвоить значение первой строки), то это можно делать так:
Н[1989] := Н[1981];
А если нужно поменять местами значения этих строк, то это делается через третью переменную того же типа:
Р := Н[1989];
Н[1989] := Н[1981];
Н[1981] := Р;
где P описана так:
var
P: Array[1..12] Of Real;
Обработка массивов
Обработка массивов в программах производится покомпонентно. Вот примеры ввода значений в массивы:
for I := 1 to 12 do
readln(T[I]);
for I := 1 to IMax do
for J := 1 to JMax do
readln(Mas[I,J]);
Здесь каждое следующее значение будет вводиться с новой строки. Для построчного ввода используется оператор read. Аналогично в цикле по индексной переменной организуется вывод значений массива. Например:
for I := 1 tо 12 do
write(T[I]:8:4);
Следующий фрагмент программы организует построчный вывод матрицы на экран:
for I := 1 to IMax do
begin
for J := l to JMax do
write(Mas[I, J]:6);
writeln;
end;
После печати очередной строки матрицы оператор writeln без параметров переведет курсор в начало новой строки. Следует заметить, что в последнем примере матрица на экране будет получена в естественной форме прямоугольной таблицы, если JMax не превышает 12.
Поиск суммы произведения и количества элементов одномерного массива
Название |
Действие до цикла |
Действие в цикле |
Действия после цикла |
сумма |
S = 0 |
S = S + A[i] |
Write (S=',s) |
произведение |
P = 1 |
P = P * A[i] |
Write (P=',p) |
количество |
K = 0 |
If условие then K = K + 1 |
Write (K=',k) |
Поиск экстремального элемента в одномерном массиве
min := a[1];
k :=1;
for i := 1 to n do
begin
if A[i] < min then min := A[i];
k:=i;
end;
writeln (a[k]);
max := a[1];
k :=1;
for i := 1 to n do
begin
if A[i] > max then min := A[i];
k:=i;
end;
writeln (a[k]);
Операции, выполняемые с одномерными массивами применимы и для двумерных массивов. Единственная разница в том, что двумерные массивы содержат в качестве определителя номера элемента не только номер строки, но и номер столбца. Это нужно учитывать при работе с двумерными массивами
Задача. Дана матрица N(строки)xM(столбцы). Пусть N (по вариантам) – количество цифровых станций, обслуживающих данный населенный пункт. М=6 - количество услуг (1 услуга – телефония, 2 услуга – поиск документов, 3 услуга – цветной факс, 4 услуга – передача файлов, 5 услуга – видеотелефония, 6 услуга – поиск видео). Количество услуг оказанных каждой станцией определяется формулой ai=random(30*k+50), где k – номер варианта. (k=30, n=7) В соответствии с вариантами задания, приведенными ниже, разработать схему алгоритма программы, затем описать алгоритм в виде программы на языке Паскаль. Индивидуальное задание: Вывести названия видов услуг по убыванию объемов. Решение.
Таблица 1. Соответствие обозначений
|
Схема алгоритмов главной программы и подпрограммы
Рис.7 Блок-схема основной программы
Схема алгоритма главной программы приведена на рис. 7. Схема начинается с блока НАЧАЛО.
После этого запускается на выполнение Цикл с известным количеством повторений FOR i:=1 to 7 do For j:=1 to 6 do Begin …End; создания исходного массива из элементов целочисленного типа с помощью счетчика случайных чисел. Создаются числа положительные, поэтому в формулу вводится математическое выражение a[i,j]:=random(30*30+50) (что означает , что числа будут формироваться в диапазоне от 0 до 950). Во вложенном цикле FOR по строкам и столбцам формируется и выводится в виде таблицы двумерный массив А.
Далее следует блок обращения к подпрограмме выводящей названия услуг в порядке убывания объема, где NazvanieUslug - это имя подпрограммы. Оканчивается схема блоком КОНЕЦ.
Рис. 8 Блок-схема процедуры NazvanieUslug
На рис. 8 приведена блок-схема алгоритма подпрограммы. Схема начинается с блока ВХОД. Организуется цикл с известным количеством повторений for i:=1 to 6 do begin.. end; Затем задается начальное значение суммы услуг в каждом столбце. Далее организуется еще один цикл, в котором происходит подсчет суммы по столбцам, значение этой суммы заносится в одномерный массив.
Затем организуется ещё цикл, в котором происходит вывод названий услуг в порядке убывания объема.
Оканчивается схема блоком КОНЕЦ.
Программа состоит из трех частей: заголовка, раздела описаний, раздела операторов.
Раздел описания переменных содержит совокупность данных, с которыми производятся действия.
program z1; type mas=array[1..6,1..6]of integer;
var a:mas; i,j:byte; |
Заголовок программы с именем z1 Раздел описания типов Двумерный массив, целочисленного типа Раздел описания переменных Двумерный массив, целочисленные переменные |
Вложенный цикл повтора FOR .
for i:=1 to 6 do for j:=1 to 6 do - Для i , изменяющегося от1 до 6 делать
begin начало тела цикла
A[i,j]:=random(30*30+50) функцией RANDOM формируется положительное число в диапазоне от 0 до 950.
write(a[i,j]); Процедурой вывода распечатывается
полученный массив в виде
end
Во вложенном цикле
FOR - выполняется обработка
Текст программы
program z1;
uses crt;
type mas=array [1..7,1..6] of integer;
var a: mas;
i,j : integer;
procedure NazvanieUslug(m:mas);
var
s,max,n: integer;
b: array [1..6] of integer;
begin
for i:= 1 to 6 do begin
s:=0;
for j:= 1 to 7 do begin
s:=s+a[j,i];
end;
b[i]:=s;
end;
for i:= 1 to 6 do
write (b[i]:4);
writeln;
for i:= 1 to 6 do begin
max:=1;
for j:= 1 to 6 do
if (b[j]>0)and(b[j]>max) then begin n:=j; max:=b[j]; end;
b[n]:=0;
case n of
1:writeln ('1-telephoniy');
2:writeln ('2-poisk documentov');
3:writeln ('3-color fax');
4: writeln ('4-peredacha files');
5:writeln ('5-videotelephoniy');
6:writeln ('6-poisk video');