Информатика 1курс
Лаб.работа F3
Цель занятия:
1. Типы данных: вектора и массивы.
2. Знакомство с форматированным выводом данных
3. Работа с массивами и подпрограммами
4. Использование Общей памяти
5. Решение задачи
Чтобы Ваши файлы были Вам всегда доступны, ЗАВЕДИТЕ себе дискетту (флеш-карту) и храните все свои исходные файлы на ней !!! Но никогда не работайте с дискетты (дискета – расходный материал).
0. Проверьте подключения сетевых дисков:
Работа выполняется с помощью файлового менеджера TotalCommander!!
Total Commander – Сеть - Подключить сетевой диск
Откроется знакомое окно подключения к сетевым дискам.
Подключите сетевые диски:
T: - Tasks - X-Files\ Students\Tasks – задания для студентов
E: - Exchange - X-Files\ Students\Exchange – диск обмена файлами для студентов
( Если эти буквы зарезервированы под другие сетевые диски, то ВНАЧАЛЕ отключите сетевой диск)
Скопируйте каталоги T:\Informatika\ Lab_F3 в свой каталог Inform (на диск Z: ).
Перейдите в каталог Lab_F3 (диск Z:)
Откройте текст лабораторной работы Lab_F3
Внимательно проверьте каталоги!!!
Вы должны быть в каталоге Z:\ Inform\Lab_F3
У Вас открыто 2 – окна: Total Commander и Текстовой Редактор (Word).
1. Опрос: Скажите преподавателю – подготовились ли Вы к этой лабораторной работе.
2. Разбор работы программы F3_1.FOR
Это программа, которая заполняет матрицу числами. Зададим значения чисел равными значениям, полученным из индексов элементов матрицы. Например, значение элемента A25 должно быть - 25.
Создадим массив 10 строк на 9 столбцов (зарезервируем место в памяти под 90 элементов массива)
Заполним часть массива (9*9) так, как мы хотим.
Вызываем подпрограмму Out_Arr для вывода массива – CALL (англ. - вызов)
При этом передаем подпрограмме имя массива (сообщаем подпрограмме, где в памяти располагается массив, т.е. где массив начинается, и количество строк и столбцов)
Подпрограмм Out_Arr вводится инструкцией SUBROUTINE и заканчивается возвратом в главную программу (инструкция RETURN ).
IMPLICIT NONE и END обязательно имеются в подпрограмме, так как подпрограмма написанная таким способом, воспринимается компилятором, как независимая программная единица, и компилируется независимо от главной программы.
Обратите внимание на то, что в подпрограмме описан массив. При этом место в памяти для него не выделяется. Массив A1 начинается с того адреса, который передается из вызывающей программы. Новый способ индексации этих ячеек памяти задаётся в подпрограмме. Поэтому на начальном этапе проще всего работать, когда размерности массивов в программе и подпрограмме совпадают. Рекомендуется сразу зарезервировать в памяти под массив немного больше места, чем нам необходимо для работы по условиям задачи. Например, для этой задачи, если мы знаем, что размер массива не превосходит 10*10, следует выделить место в памяти для массива 15*15 или больше. Тогда, мы можем избежать распространенной сложной ошибки: Если при адресации к элементу массива его индексы случайно, по ошибке, выйдут на единицу за границы выделенной памяти, то может произойти сбой программы или сбой компьютера или …
Например, пусть мы описали массив A(10,9), а обращаемся к элементу A8, 11 - возникнет типичная ошибка непредусмотренного обращения к не «своей» памяти. Разные компиляторы обрабатывают подобные ошибки по разному.
ИЗМЕНИТЕ оба размера на 15*15 (или 20,20)
Цикл DO заканчивается здесь не оператором END DO, а пустым оператором CONTINUE (англ. – продолжить). Чтобы чётко выделить, какой оператор заканчивает DO- цикл, последний оператор пометили меткой 70 и эту же метку указали в инструкции DO.
Так было принято оформлять DO-цикл в старых версиях Фортрана (версии II, IV, 77).
Печать массива осуществляется построчно. Но любой вывод в Фортране печатает сразу всю строку и переходит на новую строку !!! аналог WRITELN на Паскале. Поэтому надо сразу сформировать всю строку, которую мы хотим напечатать.
В этом примере строка заполняется элементами массива с помощью неявного DO- цикла.
PRINT 80, (A1(I,J), J=1,N)
Т.е. в начале формируется строка вывода из элементов A1(I,1), A1(I,2), , A1(I,N) , а потом эта строка выводится по «80 формату» - PRINT 80, и переводится строка.
80 FORMAT(20I4) – инструкция, сообщающая способ печати выходной информации
20I4 – 20 раз повторенное I4 – 4 знака для вывода значения целой (Integer) переменной,
то есть вся строка будет печататься как целые числа в колонки по 4 знака.
Запустите программу.
Теперь изменим
Stolb=10
Обратите внимание, что имеется ряд( столбик) нулей, а не то, что мы ожидали увидеть.
Найдите в чём дело с помощью отладчика.
Посмотрите работу ОТЛАДЧИКА (Debug)
Начало отладки –
Поставьте курсор у исполняемой инструкции: Stolb=10
Build – Debug – Run to Cursor ( быстрее нажать - Ctrl + F10) – Вы сразу «окажетесь около курсора»
Двигайтесь по шагам Build – Debug – Step over (клавиша - F10)
В нижней части экрана появляются окна (откройте их самостоятельно, если они не открыты View – Debug Windows ). Variables – переменные, определенные в задаче, Watch – значения выражений, которые можно самостоятельно ввести.
При движении по шагам значения переменных, показанные в окнах отладки, будут изменяться.
Дойдите до инструкции Call ( чтобы дойти быстро, вспомните, как дойти до курсора)
– зайдите внутрь этой подпрограммы: Build – Debug – Step into (F11)
Посмотрите на значения переменных N и M. Сравните их с теми, что Вы передали подпрограмме.
Научитесь пользоваться окошком Watch : Добавьте в него для просмотра элемент массива А1(1, 2) – должно быть 12
Выполните программу до конца – Build – Debug – Run – (F5)
Прервать работу отладчика в любой момент времени можно нажав - shift - F5
К такому же результату (нахождению ошибки) можно придти, если изначально на все вводы и передачи ставить «эхо-печать», т.е. контролировать правильность передач с помощью вывода значений: см.
! Print *, M,N
- После отладки эту строку легко убрать, «закомментировав»
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.