Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






ВВОД И ВЫВОД МАССИВОВ




Отметим прежде всего, что действия с массивами, как правило, предполагают многократное повторение тех или иных операций, поэтому основными операторами в этих действиях являются операторы циклические. Эта особенность в полной мере относится и к операциям ввода и вывода.

Ввод массивов

Если число элементов массива невелико, скажем порядка 10–15, то ввод его может быть выполнен обычным способом с помощью оператора read, включенного в простой (для одномерного массива) или сложный (для многомерного) цикл. Заметим также что, если массив вводится в качестве исходных данных, то для проверки правильности ввода целесообразно предусматривать и вывод вводимых величин. Рассмотрим соответствующие примеры:

Пример 1.2. Ввести массив целых чисел l (к=1,2,...10) с одновременным выводом их для проверки.

program Vvod 1;

Var l: array [1..10] of integer;

k: integer;

Begin

writeln ('Массив исходных данных')

for k:=1 to 10 do

Begin

read (l[k]); write (l[k]);

end;

(продолжение программы)

Пример 2.2. Ввести матрицу R(3,4)

Обозначим i – номер строки матрицы, j – номер столбца. Тогда общий элемент матрицы обозначится ri,j. При вводе элементов матрицы с клавиатуры по строкам необходимо после прочтения последнего элемента строки переходить к новой строке. Для этого удобно использовать комбинацию операторов read и readln.

program Vvod 2;

Var r: array [1..3,1..4] of real;

i,j: integer;

Begin

for i=1 to 3 do

Begin

for j=1 to 3 do read(r[i,j]);

readln(r[i,4]);

end;

(продолжение программы)

Совершенно так же может быть осуществлен ввод этой матрицы по столбцам. В этом случае операторы циклов по индексам i и j следует поменять местами, а числа при вводе набирать в последовательности их расположения по столбцам. Соответствующий фрагмент программы применительно к данному примеру будет иметь вид:

Begin

for j:=1 to 4 do

Begin

for i=1 to 2 do read(r(i,j));

readln(r(3,j));

end;

(продолжение программы)

Отметим, что ввод массивов с помощью операторов read имеет одно существенное неудобство. Как известно, первоначальный вариант программы практически никогда не бывает без ошибок, которые могут обнаруживаться как на стадии компиляции программы, так и на стадии ее выполнения. В последнем случае выявление и исправление ошибок связано с многократными пробными запусками программы. При каждом таком запуске элементы массива приходится набирать на клавиатуре заново. Это весьма неудобно даже для массивов из 10–15 элементов, не говоря уже о больших.

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

Пример 2.3. Ввести одномерный массив Vec: 8.2 4.9 9.7 6.3 3.1,

а также матрицу Маt

В данном случае ввод может быть выполнен в разделе описания констант:

program Vvod 3;

{константы типа массив}

Const Vec: array [1...5] of real=(8.2,4.9,9.7,6.3,3.1);

Mat: array [1..3,1..4] of integеr=((10,20,30,40),

(50,60,70,80),(25,35,45,55));

i,j: integer;

Begin

(продолжение программы)

В дальнейшем в программе обращения к элементам описанных массивов будут обычными: Vес[i], Mat[i,j] и т.п. Общее правило использования констант типа массив таково: после описания массива и знака = числовые значения его элементов записываются в скобках через запятую, для двумерных массивов элементы каждой строки записываются в отдельных скобках.

Однако и описанный способ ввода не слишком удобен, когда число элементов массива выражается десятками, не говоря уже о сотнях и более.

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

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

Пример 2.4. Записать в текущий каталог, в файл с именем fd (файл данных) массив y состоящий из 50 вещественных чисел:

program Vvod4;

Var fd: file of real;

y: array [1..50] of real;

k: integer;

Begin

assign(fd,'fd');

rewrite(fd);

for k:=1 to 50 do writeln(fd,y[k]);

close(fd);

End.

По этой программе при наборе на клавиатуре каждого очередного числа y оно будет записываться под соответствующим номером в файл с именем fd. В этом фрагменте переменными(зависящими от выбора программиста) являются: имя файла – fd, имя массива – y; число элементов в нем –50, обозначение индекса – к, и место нахождения формируемого файла – запись 'fd' в операторе аssign. Все остальные записи являются стандартными. Поясним кратко смысл основных из них.

Запись fd: file оf real; объявляет переменную fd файлом, состоящим из вещественных чисел.

Оператор assign связывает файл, программное имя которого fd,с местом его расположение и именем, под которым он записывается на этом месте. В приведенном примере assign(fd,'fd') означает, что файл с именем fd записывается под тем же именем в текущий каталог. Оператор assign в данном случае мог бы выглядеть и так, например:

assign (fd,'masdat')

Это означало бы, что имя файла в программе fd, а его имя в текущем каталоге masdat. Если же, мы хотим записать этот файл в корневой каталог диска а: под именем, скажем, fajl.dat, то оператор assign следует представить в виде:

assign (fd,'a:\fajl.dat')

Иными словами в апострофах оператора assign записывается путь к месту нахождения формируемого файла и его имя на этом месте. Оператор rewrite (fd); открывает файл для записи, оператор close (fd) закрывает его.

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

Пример 2.5. Ввести массив а из 150 целых чисел, записанный файлом в каталоге DANNYE на диске A:, под именем mas.dat.

program Vvod_5;

Var f: file of integer;

a: array [1..150] of integer;

n: integer;

Begin

assign (f,'a:\DANNYE\mas.dat');

reset(f);

for n:=1 to 150 do read (f,a[n]);

close(f);

(Продолжение программы)

Здесь f – программное имя файла (разумеется произвольное); оператор Reset(f) открывает этот файл для чтения, все остальные операторы рассмотрены выше.

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






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных