Теоретический материал по теме: «Массивы»

Автор работы: Пользователь скрыл имя, 29 Октября 2013 в 15:08, курсовая работа

Описание

Массив - упорядоченные данные одного типа. Массивом часто обозначают характеристики объектов одного типа, имеющих одинаковые единицы измерения. Массив состоит из элементов, имеющих порядковые номера, т. е. элементы массива упорядочены. Таким образом, если объекты одного типа обозначить именем, например "A", то элементы объекта будут A[1], A[2] и т. д. В квадратных скобках указан номер элемента

Содержание

I ЧАСТЬ
• Теоретический материал по теме: «Массивы»………………………………………
• Постановка задачи…………………………………………………………………….
• Таблица соответствия обозначений………………………………………………….
• Построение алгоритма. Схема алгоритма главной программы и подпрограммы..
• Описание программы…………………………………………………………………
• Процедуры и функции языка программирования Паскаль, используемые
в программе……………………………………………………………………………
•Программа на языке Паскаль…………………………………………………………
• Тестирование и отладка программы………………………………………………….
II ЧАСТЬ
• Теоретический материал по теме: «Записи и файлы»……………………………….
• Таблицу соответствия полей записи………………………………………………….
• Таблица с исходными данными……………………………………………………….
• Схему алгоритма создания файла……………………………………………………..
• Таблицу с исходными данными для создания файла………………………………..
• Программы создания файла……………………………………………………………
• Схему алгоритма обработки файла……………………………………………………
• Программу обработки файла…………………………………………………………..
• Таблицу с результатами обработки файла……………………………………………
• Список литературы………………………………

Работа состоит из  1 файл

Вариант 16.doc

— 307.50 Кб (Скачать документ)

СОДЕРЖАНИЕ

 

I ЧАСТЬ   

• Теоретический материал по теме: «Массивы»………………………………………

• Постановка задачи…………………………………………………………………….

• Таблица соответствия обозначений………………………………………………….

• Построение алгоритма. Схема алгоритма  главной программы и подпрограммы..

• Описание программы…………………………………………………………………

• Процедуры и функции языка программирования Паскаль, используемые

  в программе……………………………………………………………………………

 •Программа на  языке Паскаль…………………………………………………………

• Тестирование и отладка  программы………………………………………………….

   II ЧАСТЬ

• Теоретический материал по теме: «Записи и файлы»……………………………….

• Таблицу соответствия полей записи………………………………………………….

• Таблица с исходными  данными……………………………………………………….

• Схему алгоритма  создания файла……………………………………………………..

• Таблицу с исходными данными для создания файла………………………………..

• Программы создания файла……………………………………………………………

• Схему алгоритма  обработки файла……………………………………………………

• Программу обработки файла…………………………………………………………..

• Таблицу с результатами обработки файла……………………………………………

• Список литературы……………………………………………………………………..

 

 

 

 

 

 

 

 

 

 

 

ЧАСТЬ I

ТЕОРЕТИЧЕСКИЙ МАТЕРИАЛ ПО ТЕМЕ МАССИВЫ

Массив - упорядоченные данные одного типа. Массивом часто обозначают характеристики объектов одного типа, имеющих одинаковые единицы измерения. Массив состоит из элементов, имеющих порядковые номера, т. е. элементы массива упорядочены. Таким образом, если объекты одного типа обозначить именем, например "A", то элементы объекта будут A[1], A[2] и т. д. В квадратных скобках указан номер элемента. Порядковый номер элемента массива, обычно не несет никакой информации о значении элемента, а показывает расположение элемента среди других. К элементам массива можно обращаться только по их номеру (индексу). Значения элементам массива присваиваются также как и другим переменным с учетом типа массива. Если элементы массива имеют один индекс, то массив называется одномерным или линейным, либо массив - вектор. Значения элементов одномерного массива обычно выводят на экран или бумагу в виде столбца или строки. В некоторых случаях удобно элементы массива пронумеровывать двумя независимыми индексами, такие массивы называются двумерными или матрицами. Значения элементов двумерного массива обычно выводят на экран в виде таблицы. Если элементы массива имеют три независимых индекса, то массив называется трехмерным. Значения элементов трехмерного массива обычно выводят на экран в виде набора таблиц.

Описание массивов:

Var A : array[1..30] of byte; S : array[1..30] of string; SO: array[1..30] of string[12];

Присвоение значений элементам массива "A": A[1]:=5; A[2]:=4; и т. д.

Присвоение значений элементам  массива "S ": S[1]:= 'Иванов'; S[2]:= 'Петров'; и т. д.

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

For j:=1 to 66 do Write('-'); Writeln; For j:=1 to 3 do Write('| Фамилия | оценка |'); Writeln;  
For j:=1 to 66 do Write('-'); Writeln;

В цикле удобно определять сумму элементов массива, наибольший (наименьший) элемент и создавать новые массивы, удовлетворяющие некоторому условию, например:  
s := 0; for i := 1 to 100 do s:= s + a[i]; { s - сумма элементов массива}

a_max:=a[1];

for i:= 1 to 100 do { поиск наибольшего элемента a[j] }

if a[i] > a_max then begin a_max:= a[i]; j:= i; end;

j := 0; k := 0; for i:=1 to 100 do {создание новых массивов с элементами: b[j]>=0, c[k]<0}

if a[i] >= 0 then begin j := j+1; b[j] := a[i]; end else begin k := k+1; c[k] := a[i]; end; j := 0; k := 8;

for i:= 1 to 100 do {создание массива номеров "M" для элементов: a[i] > a[k]}  
if a[i] > a[k] then begin j := j+1; M[j] := i; end;

Двумерные массивы отличаются от линейных, одномерных лишь тем, что имеют элементы, упорядоченные по двум индексам и часто называются матрицами. В Турбо-Паскале при описании многомерного массива диапазоны изменения индексов перечисляются через запятые, например:  Var  A: array[1..30, 1..7] of  byte;

Работу с двумерными массивами легко иллюстрировать массивом оценок учеников класса по нескольким предметам. В данном случае оценка будет являться значением элемента массива оценок "A" и иметь порядковый номер (два индекса). Первому индексу можно поставить в соответствие номер фамилии в списке учеников, а второму - номер предмета, по которому получена оценка. Тогда двумерный массив оценок можно представить в виде таблицы: каждый элемент a[i,j] будет находиться на пересечении I-ой строки и J-го столбца.  
Сам двумерный массив можно задать с использованием функции Random, например:  
for i:= 1 to N do for j:= 1 to M do A[i, j]:= random(4) + 2;

Для вывода "шапки" таблицы можно использовать операторы:  
Writeln; Write('Фамилия\\Предметы:|'); For i:= 1 to M do write(P[i]:9,' |');

Для вывода элементов  массива "A" на экран удобно использовать вложенный цикл:  
for i:= 1 to N do begin writeln; write(S[i]:19, ' |'); for j:= 1 to M do write(A[i,j]:7, ' |'); end;

Если порядковый номер  предмета изменится, то необходимо изменить расположение оценок в массиве "A", например, перестановку колонок с оценками по физике и химии можно сделать операторами: for j:= 1 to N do begin a1:=A[1,j]; A[1,j]:=A[2,j]; A[2,j]:=a1; end;

ПОСТАНОВКА  ЗАДАЧИ

Дана матрица N(строки)xM(столбцы). Пусть N=3  (по вариантам) – количество цифровых станций, обслуживающих данный населенный пункт. М=6 - количество услуг (1 услуга – телефония, 2 услуга – поиск документов, 3 услуга – цветной факс). Количество услуг оказанных каждой станцией определяется формулой ai=random(30*k+50), где k=16 – номер варианта. В  соответствии с вариантами задания,  приведенными ниже, разработать схему алгоритма  программы,  затем описать алгоритм в виде программы на языке Паскаль.

Индивидуальное  задание: определить на каких станциях общий объём услуг составляет выше 300.

Решение:

В задании дана матрица NxM. Согласно варианту №16 количество станций N=3. По условию задачи количество услуг М=6. Согласно индивидуальному заданию, требуется определить на каких станциях общий объём услуг составляет выше 300. Это значит, что нужно найти сумму элементов матрицы в каждой строке и вывести на экран те номера строк, где полученные значения будут больше 300. Таким образом исходная матрица 3x6, а количество услуг, оказанных каждой станцией, определяется формулой aij=random(30*k+50), где k=16 – номер варианта.

 

 

 

 

 

 

 

 

ТАБЛИЦА 1. СООТВЕТСТВИЯ ОБОЗНАЧЕНИЯ  ЗАДАНИЯ №16

Идентификатор

Назначение

A

Исходный двумерный массив, из элементов целочисленного типа

С

Массив, элементы которого равны суммам элементов массива А в соответствующих строках

I, J

Номер текущей строки и столбца  элемента в массиве

Summa

Подпрограмма – функция, определяющая сумму элементов в i-ой строке массива А.

Formirovka

Подпрограмма – процедура, заполняющая массив С значениями сумм элементов массива А в соответствующих строках.

Reshenie

Подпрограмма – процедура, выводящая на экран номера тех  строк массива А, суммы элементов  в которых больше 300.


 

 

 

 

 

 

 

ПОСТРОЕНИЕ АЛГОРИТМА. СХЕМА АЛГОРИТМОВ ГЛАВНОЙ ПРОГРАММЫ И ПОДПРОГРАММЫ


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Схема алгоритма основной программы приведена на рисунке 1. Схема начинается с блока НАЧАЛО. После этого запускается на выполнение цикл с известным количеством повторений FOR i:=1 to N do For j:=1 to M do Begin …End; создания исходного массива из элементов целочисленного типа с помощью счетчика случайных чисел. В данном случае N=3, M=6. Создаются числа положительные, поэтому в формулу вводится математическое выражение a[i,j]:=random(480)+50 (что означает , что числа будут формироваться в диапазоне от -50 до 50). Во вложенном цикле FOR по строкам и столбцам формируется и вводится в виде таблицы двумерный массив А.

Далее следует блок обращения  к подпрограмме formirovka – заполнения массива объёмов и номеров станций. В результате работы этой подпрограммы указанный массив будет не только создан, но и выведен на экран. Аналогично представлен блок обращения к процедуре reshenie. Эта процедура не только выводит на экран номера станций, где объём услуг больше 300, как того требует задание, но и считает их количество. Кроме этого, она выводит на экран сообщение «Таких станций нет», если того требуют обстоятельства. Оканчивается схема блоком КОНЕЦ.

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

На рисунке 2 приведены БЛОК СХЕМЫ алгоритмов подпрограмм Summa, formirovka и zapolnenie. Схемы начинаются с блока ВХОД. В подпрограмме Summa осуществляется подсчёт значения S – суммы элементов i – ой строки массива А. Для этого значение S обнуляется и с каждым шагом цикла for l:=1..M do увеличивается на значение элемента A[I,l] – следующего элемента строки массива А. После чего, найденное значение S присваивается значению подпрограммы – функции Summa. Процедура Formirovka, в свою очередь, циклом for i:=1..N do заполняет массив С, используя для работы функцию Summa. Так как элементы массива С представлены в виде такой структуры, как запись, то, поле k элементов C[i] позволяет сохранять ещё и номер соответствующей строки. Далее, эта же процедура выводит на экран значения полей элементов массива С, используя, как и прежде, цикл for. Подпрограмма Reshenie средствами цикла for i:=1 to N do проверяет, не содержит ли текущий элемент массива C значение, меньшее 100. В случае, если такой элемент найден, на экран не только выводится необходимое сообщение, но и происходит подсчёт таких станций, увеличением значения f. На смену циклу приходит условный оператор, проверяющий условие f<>0 и выводящий на экран соответствующее сообщение.


 

ОПИСАНИЕ ПРОГРАММЫ

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

 

program ex16_1;

const N=3; M=6;

type

mas=array[1..N,1..M+1] of integer;

     zap=record B,k:integer;

         end;

     mas1=array[1..N] of zap;

var A:mas; C:mas1; i,j,f:integer;

function summa(i:integer):integer;

var l,S:integer;

begin S:=0;

for l:=1 to M do

begin

S:=S+A[i,l];

end;

summa:=S;

end;

procedure formirovka;

var i:integer;

begin

for i:=1 to N do

begin

C[i].B:=summa(i); C[i].k:=i;

end;

writeln('Исходные значения:');

for i:=1 to N do

begin writeln('Объём=',C[i].B,' Номер станции=',C[i].k);

end;

end;

procedure zapolnenie;

var f,i:integer;

begin

f:=0;

for i:=1 to N do

begin if C[i].B<100

   then begin writeln('Номер станции, где объём услуг<100: ',C[i].k);

              f:=f+1;

        end;

end; if f<>0

   then begin writeln('Таких станций= ',f);

        end

   else writeln('Таких станций нет');

end;

begin

for i:=1 to N do

begin

  for j:=1 to M do

   begin

   A[i,j]:=random(390)-50;

   write(' ',A[i,j]);

   end;

  writeln;

end;

zapolnenie;

proverka;

end.

Заголовок программы  с именем ex13_1

Раздел констант

Раздел описания типов 

Двумерный массив, целочисленного типа

Тип – запись

Одномерный массив

Раздел описания переменных

Раздел описания функций

Функция Summa

 

 

 

 

 

 

 

Процедура formirovka

 

 

 

 

 

 

 

 

 

 

 

 

Процедура zapolnenie

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тело программы


 

ПРОЦЕДУРЫ И ФУНКЦИИ ЯЗЫКА ПРОГРАММИРОВАНИЯ ПАСКАЛЬ, ИСПОЛЬЗУЕМЫЕ В ПРОГРАММЕ

Вложенный цикл  повтора FOR . 

for i:=1 to N do     for j:=1 to M do         -   Для i , изменяющегося от1 до N делать

begin                                  - Начало   тела цикла

A[i,j]:=random(390)-50          - Функцией RANDOM формируется положительное число в диапазоне от -50 до 50.

write(A[i,j]);                               - Процедурой вывода  распечатывается полученный массив в виде таблицы.

end                                                    -  Конец тела цикла

for i:=1 to N do                                               - Цикл for в функции formirovka

 begin                                                                 формирует массив C[i], обращаясь  

 C[i].B:=summa(i);                                            для подсчёта значений к функции

 C[i].k:=i;                                                            summa

end;

 

for l:=1 to M do                                               - В функции Summa цикл for

begin                                                                  осуществляет подсчёт элементов

 S:=S+A[i,l];                                                       i-ой строки массива А.      

 end;

summa:=S;                                                        - Полученное значение S присваивается

                                                                             значению функции summa

                          

if C[i].B<100                                                     - Условие, стоящее в теле                   

   then begin                                                          цикла for, проверяет,

writeln('Номер станции,                                     существуют ли строки,

где объём услуг>300: ',C[i].k);                          сумма значений элементов

                  f:=f+1;                                                в которых >300 и считает их

        end;                                                              количество

 

if f<>0                                                               - Если такие строки существуют,

   then begin                                                      на экран оператором writeln

          writeln('Таких станций= ',f);                   выводится соответствующее

          end                                                             сообщение

   else writeln('Таких станций нет');

Информация о работе Теоретический материал по теме: «Массивы»