ТОР 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 целых чисел, записанных на дискете, будут переданы в программу под именами а1,а2,...,а150 и могут обрабатываться в ней в соответствии с необходимостью. Не нашли, что искали? Воспользуйтесь поиском:
|