Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы алгоритмизации и программирования на языке Паскаль

..pdf
Скачиваний:
11
Добавлен:
15.11.2022
Размер:
2.96 Mб
Скачать

7.7. Двумерный массив

Характерным примером двумерного массива является матрица, например

а 11

а 12

а 21

а 22

сл

а 52

а17'

а27

а57 -

Каждый элемент этого массива однозначно определя­ ется двумя индексами, номером строки и номером столбца, на пересечении которых этот элемент стоит. Каждый эле­ мент этого массива имеет имя A[i, j], где номер строки / = 1, 2,..,5, а номер столбцаj = 1,2, ..,7, на пересечении ко­ торых этот элемент стоит.

Такой массив должен быть описан в разделе описаний. В случае явного описания массива это можно сделать од­ ним из двух способов:

Var

А : A rrayfl.. 5 ,1 .. 7] o f real;

или

 

Const

M=5,N=7;

Var

A : A rrayfl.. M, 1 ..N] o f real;

 

Ввод и вывод двумерного массива

При обработке элементов двумерного массива исполь­ зуются сложные (вложенные) циклы.

Пример 7.11. Ввести с пульта элементы массива А[М, NJ. Приведем блок-схему сложного цикла:

Внешний цикл

Внутренний

цикл

Здесь используются две целочисленные переменные * и j, определяющие номера строк и столбцов, т.е. положение элемента массива. Программисту надлежит внимательно относиться к назначению и изменению индексов (в циклах) и неукоснительно выполнять следующие требования к сложным (вложенным) циклам:

-параметры внутреннего и внешнего циклов имеют различные имена;

-внутренний цикл полностью лежит внутри внешнего;

-недопустим вход во внутренний цикл, минуя внешний. Фрагмент программы можно записать двумя способами:

For i:=l to М do

For i:=l to M do

For j:= l to N do

For j:= l to N do

ReadlnfA[i, j]);

Begin

 

W r i t e r i : 2 , V , j:2, ’]=’);

 

Readln(A[Ii, j]);

 

End;

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

Пример 7.12. Вывести элементы двумерного массива в виде матрицы.

For i:=l to М do

 

begin

 

For j:= l to N

do

Write(A[i, j] :10:2);

Writeln;

{перевод курсора на новую строку}

End;

 

Обратите внимание, именно выделенные элементы этого фрагмента программы обеспечивают вывод элемен­ тов массива в виде четко выраженных строк и столбцов.

Пример 7.13. Вычислить сумму элементов квадратной мат­ рицыX[N, N], стоящих на главнойдиагонали (элементовX[I, IJ).

Первый способ:

 

 

Второй способ:

Sum:=0;

 

 

 

 

Sum:=0;

For

i:=l

to

N

do

For i:=l to N do

For

j:= l

to

N

do

Sum:=Sum+Xfi, ij;

 

I f

i=j

then

 

Writeln(Sum);

Sum:=Sum+X[i, j];

Writeln(Sum);

7.8Типизированная константа

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

типизированную константу. В отличие от обычной кон­ станты в описании типизированной константы указывается

как тип, так и значение константы.

В процессе работы программы элементы массива, опи­ санные как типизированные константы, изменить нельзя.

Формат типизированной константы:

 

 

Const

 

 

 

 

<Имя массива>: Array[<тип

индексов>] o f (<тип эле­

ментов>) = (<значения элементов массива>);

 

Например:

 

 

 

Const

 

 

 

 

А:

Аггау[1.. 5] o f integer = (1, 2, 3, 4, 5);

 

В:

Array[1.. 2 ,1 .. 3] o f

real = ( (0.5,

1.2,

3 ),

 

 

(6,

7,

3.2));

Здесь инициализированы два массива:

-одномерный массив А с элементами {1,2,3,4,5};

-двумерный массив - матрица

п _

[0,5

1,2

3 1

В

[6

7

3,2.

Контрольные вопросы и задания

1.Что такое массив? Что такое индекс, каким требова­ ниям он удовлетворяет?

2.Два способа описания массивов (явное и неявное).

3.Понятие размера и размерности массива.

4.Особенности расположения элементов массива в памяти ПК.

5.Организация ввода и вывода элементов массива.

6.На плоскости своими координатами задано пять то­ чек. Найти расстояние от самой удаленной от начала коор­ динат точки.

7.Написать фрагмент программы, выводящий элемен­ ты двумерного массива в виде матрицы.

Лекция 8 Работа с внеш ним и файлами

данных

8.1. Общие сведения

Большой объем данных (списки, справочники и т.д.) удобно хранить на внешних носителях в виде файлов. Пас­ каль имеет средства для организации хранения информации на внешних носителях и доступа к этой информации. Такие файлы называют внешними файлами данных (ВФ).

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

Таким образом, целесообразность применения внеш­ них файлов данных обоснована следующим:

-ввод больших объемов исходных данных с клавиату­ ры утомителен и требует большого количества времени; гораздо удобнее создать файл данных заранее и использо­ вать его неоднократно;

-внешний файл данных может быть подготовлен дру­ гой программой, другим программистом.

ВПаскале существует несколько типов внешних фай­ лов. По способу доступа к элементам различают файлы по­ следовательного и прямого доступа.

Файл последовательного доступа - это файл, доступ

кэлементам которого обеспечивается в той же последова­

тельности, в какой они записывались в файл. Например, если нужно прочесть 100-й элемент, то предварительно нужно прочесть первые 99 элементов этого файла..

Файл прямого доступа - это файл, доступ к элемен­ там которого осуществляется по адресу этого элемента. В этом случае для чтения 100-го элемента достаточно ука­ зать номер его позиции.

В нашем курсе рассматриваются только внешние фай­ лы последовательного доступа, в которых данные записы­ ваются в виде символов. Такие внешние файлы называют­ ся текстовыми файлами. Различная документация, ин­ формация, передаваемая по каналам электронной связи,- это все текстовые файлы.

Текстовый файл представляет собой последователь­ ность символов, разбитую на строки длиной от 0 до 256 символов. Каждая строка заканчивается специальным ко­ дом - маркером конца строки (МКС). А весь файл закан­ чивается маркером конца файла (МКФ).

Схематично это выглядит так:

Текущий указатель П

S\2

S\n МКС 521 522 ... Sin МКС

МКФ

В любой момент времени программе доступен только один элемент файла, тот, на который ссылается текущий указатель файла.

Текстовый файл можно создать или отредактировать в текстовом редакторе или программно. Его можно про­ смотреть на экране, распечатать на принтере.

8.2. Файловая переменная

Допустим, исходные данные хранятся во внешнем файле Danl.pas на каком-либо носителе. Вопрос, как он был создан, рассмотрим позже.

Наряду с именем конкретного файла на конкретном носителе вводится понятие файловой переменной (ФП).

Файловая переменная - это внутреннее или про­ граммное имя конкретного внешнего файла.

Имя файловой переменной назначается в соответствии

ссинтаксисом, например F, FI, Finp, Fout. Прежде всего файловая переменная должна быть объявлена в программе в разделе описаний. Для описания файловой переменной текстового файла используется стандартный тип - Text.

Формат описания:

Var <имя ФП>: Text;

Затем в программе необходимо проинформировать компилятор о местонахождении внешнего файла. Для это­ го устанавливается связь между ФП и конкретным внеш­ ним файлом на конкретном носителе. Вследствие этого все, что происходит в процессе выполнения программы

сФП, дублируется во внешний файл.

Надо помнить, что с элементами текстовых внешних файлов можно выполнять только две опе­ рации: чтение данных из внешнего файла и запись во внешний файл.

Связь между внешним файлом и файловой переменной в программе устанавливается с помощью процедуры Assign.

Запись файла

Под записью файла понимается:

-создание нового файла;

-вывод данных в результате работы программы из оперативной памяти во внешний файл (ОП —>ВФ).

Для этого необходимо выполнить следующие дей­ ствия:

1.Открыть файл для записи с помощью процедуры Rewrite (Fv); где Fv - файловая переменная.

При этом текущий указатель файла (ТУ) устанавлива­ ется на начало файла. Если в файле до этого была инфор­ мация, то она затирается и указатель устанавливается на начало файла.

Схематично выполнение процедуры Rewrite можно представить так:

До процедуры Rewrite После процедуры Rewrite

 

т у Я

J J Z ____ _______

Si s2

s„ МКФ

МКФ

2.Вывод данных во внешний файл производится с помощью процедуры Write.

Формат процедуры:

Write (<имя ФП>, <список вывода>);

Происходит запись во ВФ значений из <списка выво­

да^ после этого выставляются маркеры концов строк (МКС) и маркер конца файла (МКФ).

3.Закрыть файл для записи с помощью процедуры

Close (<имя ФП>).

Если случайно забыть процедуру Close, то во внешнем файле информация сформируется неверно.

Подведем итог:

Для создания и заполнения внешнего файла дан­ ных требуется выполнить следующую последова­ тельность действий:

-описать файловую переменную (Fv) в разделе описаний;

-произвести связь (назначение) между ФП и ВФ (процедура Assign);

-открыть файл для записи (процедура Rewrite);

-записать в файл данные (процедура WritefLn]);

-закрыть внешний файл (процедура Close).

Пример 8.1. Сформировать одномерный массив квадра­ тов чисел от 1 до 10. Записать его во внешний файл с име­ нем Danl.pas в текущей папке (там же, где и программа).

Program Demo4;

Var А : Array[1.. 10] o f integer;

i : integer;

 

Fout: text;

{файловая переменная}

Begin

 

Assign (Fout, ‘Danl.pas’);

{связь между ФП и ВФ}

ReWrite (Fout);

{открыть файл для записи}

For i:=l to 10 do

 

Begin

 

Afi]:=i*i;

 

Write (Fout, A[i]: 4);

{запись во внешний файл}

End;

 

Close(Fout);

{закрыть ВФ}

End.