Практическая работа №1 «Представление в памяти двумерных массивов »
Цель работы: размещение в памяти ЭВМ элементов двумерных массивов
Задачи:
1) Изучить понятие двумерного массива и составы его элементов ;
Научиться выделять память каждому элементу двумерного массива
Элементы абстрактного массива в памяти машины физически располагаются последовательно, согласно описанию. При этом каждый элемент занимает в памяти количество байт, соответствующее его размеру. Например, если массив состоит из элементов типа integer, то каждый элемент будет занимать по два байта. А весь массив займет SА сколько места займет массив, состоящий из массивов, т.е. матрица? Очевидно: SiS´j, где Si - количество строк, а Sj – количество элементов в каждой строке. Например, для массива типа
Matrix= array [1..3, 1..2] of integer;
потребуется 12 байт памяти.
Элемент | M11 | Элемент | M12 | Элемент | M21 | Элемент | M22 | Элемент | M31 | Элемент | M32 |
Рассмотрим схему размещения массива M типа matrix в памяти.
Под каждый элемент M[i, j] типа integer выделяется две ячейки памяти. Размещение в памяти осуществляется «снизу вверх». Элементы размещаются в порядке изменения индекса, что соответствует схеме вложенных циклов: сначала размещается первая строка, затем вторая, третья... Внутри строки по порядку идут элементы: первый, второй и т.д.
Как мы знаем, доступ к любой переменной возможен, только если известен адрес ячейки памяти, в которой хранится переменная. Конкретная память выделяется для переменной при загрузке программы, то есть устанавливается взаимное соответствие между переменной и адресом ячейки. Но если мы объявили переменную как массив, то программа «знает» адрес начала массива, то есть первого его элемента. Как же происходит доступ ко всем другим элементам массива? При реальном доступе к ячейке памяти, в которой хранится элемент двумерного массива, система вычисляет ее адрес по формуле:
Addr+SizeElem*Cols*(I-1)+SizeElem*(J-1), где Addr – фактический начальный адрес, по которому массив располагается в памяти; I, J – индексы элемента в двумерном массиве; SizeElem – размер элемента массива (например, два байта для элементов типа integer); Cols – количество элементов в строке.
Выражение SizeElem*Cols*(I-1)+SizeElem*(J-1) называют смещением относительно начала массива.
Рассмотрим вопрос о том, каков максимально допустимый размер массива, учитывая ограниченный объем памяти.
Для работы программы память выделяется сегментами по 64 Кбайт каждый, причем как минимум один из них определяется как сегмент данных. Вот в этом-то сегменте и располагаются те данные, которые будет обрабатывать программа. Ни одна переменная программы не может располагаться более чем в одном сегменте. Поэтому, даже если в сегменте находится только одна переменная, описанная как массив, то она не сможет получить более чем 65536 байт. Но почти наверняка, кроме массива в сегменте данных будут описаны еще некоторые переменные, поэтому реальный объем памяти, который может быть выделен под массив, находится по формуле: 65536-S, где S – объем памяти, уже выделенный под другие переменные.
Поэтому при компиляции транслятор выдаст сообщение об ошибке объявления слишком длинного массива, даже если с точки зрения синтаксиса в программе встретит правильное описание ():
Type myArray= array [1..50000] of integer;
Вы уже знаете, что, учитывая двухбайтовое представление целых чисел, реально можно объявить массив с количеством элементов равным 65536/2 –1=32767. И то лишь в том случае, если других переменных не будет. Двумерные массивы должны иметь еще меньшие границы индексов.
Задания на выполнение работы:
Практическая работа №2 «Команды MS DOS работы с файлами»
Цель работы: создание, модификация и удаление файлов
Задачи работы:
1) изучить команду просмотра содержимого каталогов и управления ее выводом;
Tree ASD
7. Разместим файлы в созданных каталогах. Скопируем из c:\winnt в каталог A1 3 файла с расширением .txt ; в каталог A2 1 файл с расширением .exe ; в каталог A11 файл regedit.exe.
8. Просмотрим на экране результат, выполнив команду tree с ключом /f, чтобы на экране выводились каталоги с содержащимися в них файлами
Tree / f
9. Сформировать отчет по проделанной работе
GOTO – позволяет определять команды переходов в пакетных файлах. Переходы требуются в тех случаях, когда определенные команды должны обрабатываться только при выполнении некоторого условия. Общий вид:
GOTO метка_перехода
где метка_перехода обозначает место, в которое оператор GOTO должен передать управление.
Пример1. Пакетный файл primer1.bat
@echo off
cls
if not exist c:\temp\sozdan.bat goto f
C:
cd c:\temp
sozdan
goto end
:f
echo File not found
:end
Этот пакетный файл сначала очищает экран дисплея, затем проверяет (через команду if not exist), отсутствует ли файл с именем sozdan.bat в каталоге C:\Temp, и если это так, то передает управление на метку :f. Метки перехода обозначаются двоеточием в начале. После этого на экран дисплея выводится сообщение: “File not found!!”
При запуске пакетный файл может принимать параметры из командной строки. Параметры нумеруются символами %1, %2, %3,…%9 с обязательным разделительным пробелом. При вызове соответствующий % заменяется на параметр.
Таким образом, пакетный файл primer1.bat может быть запущен с параметром sozdan.bat, а в соответствующем месте в тексте файла нужно указать символ %1.
Пример2. Пакетный файл primer2.bat
@echo off
cls
if not exist c:\temp\%1 goto f
C:
cd c:\temp
%1
goto end
:f
echo File not found
:end
FOR – пакетная команда для многократного повторения какой-либо команды. Формат команды:
FOR %%переменная IN (значение) DO команда [параметры]
переменная – не может быть цифрой; используется для того, чтобы получить текущее значение и передать его дальше;
значение – может быть именем файла (с указанием пути или без него), именем каталога или символьной цепочкой. В именах файлов допустимы символы подстановки (* ИЛИ ?);
команда – команда MS-DOS, подлежащая многократному выполнению;
параметры – параметры или ключи для выполняемой команды MS-DOS.
Пример3. В каталоге C:\Temp находятся файлы if . txt , goto . txt , for . txt , rem . txt , echo . txt . Создать пакетный файл, который последовательно и постранично выведет на экран содержимое этих файлов.
Пример3. Пакетный файл primer3.bat
@echo off
cls
for %%A in (*.txt) do type %%A|more&pause
Rem – вводит комментарий в командном файле.
Пакет Windows NT Resourse Kit содержит другие полезные утилиты для работы с пакетными файлами.
При запуске пакетных файлов в командной строке можно указывать произвольное число параметров, значения которых можно использовать внутри файла. Это позволяет, например, применять один и тот же командный файл для выполнения команд с различными параметрами.
Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %*. При этом вместо подставляется имя выполняемого пакетного файла, вместо %0%1, %2, …, %9 — значения первых девяти параметров командной строки соответственно, а вместо %* — все аргументы. Если в командной строке при вызове пакетного файла задано меньше девяти параметров, то "лишние" переменные из %1 – %9 замещаются пустыми строками. Рассмотрим следующий пример. Пусть имеется командный файл copier.bat следующего содержания:
@ECHO OFF CLS ECHO File %0 copying directory %1 in %2 XCOPY %1 %2 /S
Если запустить его из командной строки с двумя параметрами, например
copier.bat C:\Programs D:\Backup
то на экран выведется сообщение
File copier.bat copying directory C:\Programs in D:\Backup
и произойдет копирование каталога C:\Programs со всеми его подкаталогами в D:\Backup.
При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новое значение %9 — пустая строка.
Рассмотрим пример. Пусть командный файл my.bat вызван из командной строки следующим образом:
my.bat p1 p2 p3
Тогда %0=my.bat, %1=p1, %2=p2, %3=p3, параметры %4 – %9 являются пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3, параметры %3 – %9 – пустые строки.
При включении расширенной обработки команд SHIFT поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть числом от 0 до 9.
Например, в следующей команде:
SHIFT /2
параметр %2 заменяется на %3, %3 на %4 и т.д., а параметры %0 и %1 остаются без изменений.
Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT уже нельзя восстановить параметр (%0), который был первым перед сдвигом. Если в командной строке задано больше десяти параметров, то команду SHIFT можно использовать несколько раз.
Задания на выполнение работы:
1. Создать и сохранить в совей папке учебные файлы primer 1. bat , primer 2. bat , primer 3. bat.
2. Самостоятельно создать пакетные файлы, выполняющие следующие задачи:
a. Создать в C :\ Temp пакетный файл spr . bat, который при запуске его с параметром (параметр – имя соответствующей команды) создает текстовый файл, который должен содержать справку по данной команде команде (например, при запуске spr if – в C :\ Temp должен быть создан файл if . txt, содержащий описание этой команды). Создать с помощью пакетного файла spr.bat текстовые файлы if . txt , goto . txt , for . txt , rem . txt , echo . txt.
b. Создать пакетный файл new _ name . bat, который проверяет наличие соответствующего текстового файла и, если он найден в C :\ Temp, копирует его в папку студента, изменяя при этом расширение на . doc . Запустить пакетный файл new _ name . bat 5 раз, задавая при этом в качестве параметра имя соответствующего файла с расширением *. txt.
3. Написать пакетный файл, выполняющий следующие задачи.
1) Сделать текущим диск D:.
2) Создать каталог MYDIR в каталоге C :\ TEMP.
3) Изменить текущий каталог на каталог TEMP диска С:.
4) Просмотреть содержимое текущего каталога:
а) вывести список файлов и подкаталогов с паузой после каждой страницы (экрана);
б) вывести этот же список в несколько колонок;
в) вывести список файлов корневого каталога диска С:, имеющих атрибут “системный”
5) Создать в каталоге MYDIR следующую структуру каталогов:
6) С помощью команды copy создать в каталоге MYDIR текстовый файл example.txt из двух строк (любых). Для обозначения файла-источника при вводе с клавиатуры используется имя con, разделитель строк – нажатие [Enter], конец ввода – [F6]
7) Скопировать в каталог CAT1 файл example.txt.
8) Переименовать каталог CAT1 в TEXT.
9) Вывести на экран содержимое файла example.txt.
10) Скопировать в каталог CAT3 все файлы с расширением ini из каталога С:\WINNT.
11) Переместить все файлы из каталога CAT3 в каталог CAT4 с изменением расширения файлов на doc.
12) Удалить каталог CAT3.
13) Вывести текущую дату. (самостоятельно)
14) Вывести текущее время.(самостоятельно)
15) Добавить в приглашение DOS текущие дату и время.(самостоятельно)
16) Узнать версию операционной системы.
17) Удалить каталог MYDIR.
4. Сформировать отчет по проделанной работе
Файл primer1.bat
@echo off
Rem Приветствие
echo Privet!
Результатом работы этого файла будет вывод на экран слова Privet!. Если убрать из файла конструкцию @echo off, каждая срока файла будет выводится вместе с результатом выполнения команд.
Файл primer2.bat
@echo off
Rem Диалог с пользователем
set /p name="Enter your name - "
echo Your name is - %name%
Операторы перехода
Командный файл может содержать метки и команды GOTO перехода к этим меткам. Любая строка, начинающаяся с двоеточия (:), воспринимается при обработке командного файла как метка. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Приведем пример.
Пусть имеется командный файл следующего содержания:
@ECHO OFF
COPY %1 %2 GOTO Label1
ECHO Эта строка никогда не выполнится
:Label1
REM Продолжение выполнения
DIR %2
После того, как в этом файле мы доходим до команды GOTO Label1 его выполнение продолжается со строки REM Продолжение выполнения
В команде перехода внутри файла GOTO можно задавать в качестве метки перехода строку :EOF, которая передает управление в конец текущего пакетного файла (это позволяет легко выйти из пакетного файла без определения каких-либо меток в самом его конце).
Также для перехода к метке внутри текущего командного файла кроме команды GOTO можно использовать и рассмотренную выше команду CALL
CALL :метка аргументы
При вызове такой команды создается новый контекст текущего пакетного файла с заданными аргументами, и управление передается на инструкцию, расположенную сразу после метки. Для выхода из такого пакетного файла необходимо два раза достичь его конца. Первый выход возвращает управление на инструкцию, расположенную сразу после строки CALL, а второй выход завершает выполнение пакетного файла. Например, если запустить с параметром Копия-1 командный файл следующего содержания:
file.bat
@ECHO OFF
ECHO %1
CALL :2 Копия-2
:2
ECHO %1
то на экран выведутся три строки:
Копия-1
Копия-2
Копия-1
Таким образом, подобное использование команды CALL очень похоже на обычный вызов подпрограмм (процедур) в алгоритмических языках программирования.
Операторы условия
С помощью команды IF … ELSE (ключевое слово ELSE может отсутствовать) в пакетных файлах можно выполнять обработку условий нескольких типов. При этом если заданное после IF условие принимает истинное значение, система выполняет следующую за условием команду (или несколько команд, заключенных в круглые скобки), в противном случае выполняется команда (или несколько команд в скобках), следующие за ключевым словом ELSE.
Primer.bat А Б В Г
то в результате выполнения на экран выведется следующая информация:
Выполняется файл: primer.bat
Файл запущен со следующими параметрами: А Б В Г
Все.
Рассмотрим теперь оператор IF в следующем виде:
IF [/I] строка1 оператор_сравнения строка2 команда
Синтаксис и значение операторов_сравнения представлены в следующей таблице
Оператор | Значение |
EQU | Равно |
NEQ | Не равно |
LSS | Меньше |
LEQ | Меньше или равно |
GTR | Больше |
GEQ | Больше или равно |
Приведем пример использования операторов сравнения:
@ECHO OFF
CLS
IF -%1 EQU –Вася ECHO Привет, Вася!
IF -%1 NEQ –Вася ECHO Привет, но Вы не Вася!
Ключ /I, если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Например, условие
IF /I DOS==dos …будет истинным.
Задание 1 на использование безусловного перехода
1) Создать командный файл, такой же как file.bat. Выполнить его и сравнить результаты с приведенными выше.
2) Создать другой командный файл, выводящий текущее время и вызывающий file.bat.
Задание 2 на применение команды условного перехода
1) Создать командные файлы, подобные примерам. Выполнить их и сравнить с результатами, приведёнными в описании.
2) Написать командный файл, который запрашивает имя пользователя, сравнивает его с заранее заданным значением и в случае совпадения выводит строку "Access granted" и содержимое текущего каталога. Если имена не совпадают, программа выдает строку "Access denied" и прекращает выполнение.
3) Написать командный файл, который проверяет существование файла, заданного пользователем в качестве параметра и в случае его наличия, печатает содержимое файла на экране. Если файл не найден, пользователю предлагается ввести другое имя файла для просмотра. Если файл снова не найден, выводится строка "Exiting.." и программа завершается. Если файл найден, то программа выводит содержимое постранично на экран, а затем снова запрашивает имя. И так до ввода несуществующего имени файла.
Организация циклов
В командных файлах для организации циклов используются несколько разновидностей оператора FOR, которые обеспечивают следующие функции:
- выполнение заданной команды для всех элементов указанного множества;
- выполнение заданной команды для всех подходящих имен файлов;
- выполнение заданной команды для всех подходящих имен каталогов;
- выполнение заданной команды для определенного каталога, а также всех его подкаталогов;
- получение последовательности чисел с заданными началом, концом и шагом приращения;
- чтение и обработка строк из текстового файла;
- обработка строк вывода определенной команды.
Самый простой вариант синтаксиса команды FOR для командных файлов имеет следующий вид:
FOR %%переменная IN (множество) DO команда [параметры]
Перед названием переменной должны стоять именно два знака процента (%%), а не один, как это было при использовании команды FOR непосредственно из командной строки.
Сразу приведем пример. Если в командном файле заданы строки
file1.bat
@ECHO OFF
FOR %%i IN (Раз,Два,Три) DO
ECHO %%i
то в результате его выполнения на экране будет напечатано следующее:
Раз
Два
Три
переменная i последовательно принимает все значения из списка.
Параметр множество в команде FOR задает одну или более текстовых строк, разделенных запятыми, которые нужно обработать с помощью заданной команды. Скобки здесь обязательны. Параметр команда [параметры] задает команду, выполняемую для каждого элемента множества, при этом вложенность команд FOR на одной строке не допускается. Если в строке, входящей во множество, используется запятая, то значение этой строки нужно заключить в кавычки.
Если требуется в теле цикла выполнить несколько команд, то используются круглые скобки для обозначения границ тела цикла:
file2.bat
@ECHO OFF
FOR %%i IN (Раз,Два,Три) DO (
echo Внимание, считаем:
ECHO %%i
)
Результат работы файла:
Внимание, считаем:
Раз
Внимание, считаем:
Два
Внимание, считаем:
Три
Параметр множество в команде FOR может также представлять одну или несколько групп файлов. Например, чтобы вывести в файл список всех файлов с расширениями txt и prn, находящихся в каталоге C:\TEXT, без использования команды DIR, можно использовать командный файл следующего содержания:
file3.bat
@ECHO OFF
FOR %%f IN (C:\TEXT\*.txt C:\TEXT\*.prn) DO
ECHO %%f >> list.txt
При таком использовании команды FOR процесс обработки продолжается, пока не обработаются все файлы (или группы файлов), указанные во множестве.
Задания на выполнение работы:
1) Написать программу, которая с помощью цикла FOR создаёт несколько файлов в текущем каталоге и записывает в них соответствующее имя. Имена файлов задаются в виде названий дней недели.
Замечание
Ключ TOKENS= позволяет извлечь из одной строки файла до 26 подстрок, поэтому запрещено использовать имена переменных, начинающиеся не с букв английского алфавита (a–z). Следует помнить, что имена переменных FOR являются глобальными, поэтому одновременно не может быть активно более 26 переменных.
Команда FOR /F также позволяет обработать отдельную строку. Для этого следует ввести нужную строку в кавычках вместо набора имен файлов в скобках. Строка будет обработана так, как будто она взята из файла. Например, файл следующего содержания:
@ECHO OFF
FOR /F " EOL =; TOKENS =2,3* DELIMS =, " %%i IN ("ААА ББББ ВВВВ,ГГГГГ ДДДД") DO @ECHO %%i %%j %%k
при своем выполнении напечатает:
ББББ ВВВВ ГГГГГ ДДДД
Вместо явного задания строки для разбора можно пользоваться переменными среды, например:
@ECHO OFF
SET M=ААА ББББ ВВВВ,ГГГГГ ДДДД
FOR /F "EOL=; TOKENS=2,3* DELIMS=, " %%i IN ("%M%") DO @ECHO %%i %%j %%k
Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует вместо набора имен файлов в скобках ввести строку вызова команды в апострофах (не в кавычках!). Строка передается для выполнения интерпретатору команд cmd.exe, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующий командный файл:
@ECHO OFF
CLS
ECHO Имена переменных среды: ECHO.
FOR /F "DELIMS==" %%i IN ('SET') DO ECHO %%i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.
В цикле FOR допускается применение тех же синтаксических конструкций (операторов), что и для заменяемых параметров
Операторы | Описание |
%~Fi | Переменная %i расширяется до полного имени файла |
%~Di | Из переменной %i выделяется только имя диска |
%~Pi | Из переменной %i выделяется только путь к файлу |
%~Ni | Из переменной %i выделяется только имя файла |
%~Xi | Из переменной %i выделяется расширение имени файла |
%~Si | Значение операторов N и X для переменной %i изменяется так, что они работают с кратким именем файла |
Если планируется использовать расширения подстановки значений в команде FOR, то следует внимательно подбирать имена переменных, чтобы они не пересекались с обозначениями формата.
Например, если мы находимся в каталоге C:\Program Files\Far и запустим командный файл следующего содержания:
@ECHO OFF
CLS
FOR %%i IN (*.txt) DO ECHO %%~Fi
то на экран выведутся полные имена всех файлов с расширением txt:
C:\Program Files\Far\Contacts.txt
C:\Program Files\Far\FarFAQ.txt
C:\Program Files\Far\Far_Site.txt
C:\Program Files\Far\License.txt
C:\Program Files\Far\License.xUSSR.txt
C:\Program Files\Far\ReadMe.txt
C:\Program Files\Far\register.txt
C:\Program Files\Far\WhatsNew.txt
Задания на выполнение работы:
1) Написать программу, которая с помощью цикла FOR /D ищет в log-файлах Windows сообщения, задаваемые пользователем. Текст сообщения вводится с клавиатуры.
2) Написать командный файл, который составляет список всех журналов (*.log) на диске С:
3) Написать программу, которая в текущем каталоге создаёт 50 файлов с именами от N.txt (где N=1…50) и записывает в каждый файл текущее время.
Задание 5
Написать командный файл, который:
в данный подкаталог переносится файл из i:\temp
Скрипт должен вести журнал i:\download\move.log, в который заносятся имена перенесенных файлов, а также дата и время операции.
Задание 6
Написать скрипт, который
Пояснение:
Строка вводится пользователем и сохраняется в переменной. Программа должна в цикле выделить все символы (по одному), затем сложить их как числа. Теорию и примеры см. в описании работы 3, раздел 5.
Задание 7
Написать скрипт, который
Практическая работа №1 «Представление в памяти двумерных массивов »
Цель работы: размещение в памяти ЭВМ элементов двумерных массивов
Задачи:
1) Изучить понятие двумерного массива и составы его элементов ;
Дата: 2018-12-28, просмотров: 499.