Основы алгоритмизации и программирования на языке Паскаль
..pdf7.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 символов. Каждая строка заканчивается специальным ко дом - маркером конца строки (МКС). А весь файл закан чивается маркером конца файла (МКФ).
Схематично это выглядит так:
Текущий указатель П
5ц 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.