- •Предисловие
- •Тема 13 посвящена актуальной в настоящее время проблеме компьютерных вирусов, также рассмотрены некоторые свойства компьютерных вирусов, их классификация, программы обнаружения и защиты от них.
- •Тема 1. Обработка данных средствами электронных таблиц Область применения
- •Основные понятия электронных таблиц
- •Общая характеристика интерфейса ms Excel
- •Технология ввода данных в ms Excel
- •Формулы, функции, мастер функций
- •Контрольные вопросы
- •Тема 2. Введение в технологию баз данных Базы данных и системы управления базами данных
- •Основные понятия теории баз данных
- •Модели данных
- •Средства ускорения доступа к данным
- •Язык запросов
- •Программные системы управления базами данных
- •Структура простейшей базы данных
- •Объекты базы данных
- •Режимы работы с базами данных
- •Разработка схемы данных
- •Контрольные вопросы
- •Тема 3. Этапы создания программ
- •Контрольные вопросы
- •Тема 4. Системы и языки программирования Системы программирования
- •Классификация языков программирования
- •Контрольные вопросы
- •Тема 5. Методологии программирования
- •Структурное программирование
- •Нисходящее проектирование
- •Концепция модульного программирования
- •Объектно-ориентированное программирование (ооп)
- •Декларативное программирование
- •Параллельное программирование
- •Case-системы
- •Индустрия искусственного интеллекта
- •Данные и знания
- •Модели представления знаний
- •Экспертные системы
- •Контрольные вопросы
- •Тема 6. Паскаль – структурный язык программирования высокого уровня Структура программы
- •Константы и переменные
- •Основные типы данных
- •Выражения, операнды, операции
- •Совместимость и преобразование типов
- •Основные операторы языка
- •Массивы
- •Процедуры и функции
- •Контрольные вопросы
- •Тема 7. Основные принципы построения компьютерных сетей
- •Основные показатели качества ивс
- •Виды информационно-вычислительных сетей
- •Контрольные вопросы
- •Тема 8. Способы связи компьютеров
- •Контрольные вопросы
- •Тема 9. Модель взаимодействия открытых систем osi
- •Физический уровень
- •Канальный уровень
- •Сетевой уровень
- •Транспортный уровень
- •Сеансовый уровень
- •Представительский уровень
- •Прикладной уровень
- •Контрольные вопросы
- •Тема 10. Техническое и программное обеспечение ивс Техническое обеспечение информационно-вычислительных сетей
- •Серверы и рабочие станции
- •Маршрутизаторы и коммутирующие устройства
- •Модемы и сетевые карты
- •Аналоговые модемы
- •Модемы для цифровых каналов связи
- •Сетевые карты
- •Устройства межсетевого интерфейса
- •Программное обеспечение информационно-вычислительных сетей
- •Контрольные вопросы
- •Тема 11. Локальные вычислительные сети
- •Виды локальных сетей
- •Базовые технологии локальных сетей
- •Построение локальных сетей Структуризация локальных сетей средствами канального уровня
- •Построение локальных сетей средствами сетевого уровня
- •Системное программное обеспечение вычислительных сетей
- •Контрольные вопросы
- •Тема 12. Глобальная сеть Интернет Основные понятия
- •Информационные ресурсы (службы) Интернет
- •Програмное обеспечение работы в Интернете
- •Адресация и протоколы в Интернете
- •Контрольные вопросы
- •Тема 13. Вирусы и антивирусное программное обеспечение Свойства компьютерных вирусов
- •Классификация вирусов
- •Программы обнаружения и защиты от вирусов
- •Контрольные вопросы
- •Библиографический список
Массивы
До сих пор мы рассматривали переменные, которые имели только одно значение, могли содержать в себе только одну величину определенного типа.
Вы знаете, что компьютер предназначен в основном для облегчения работы человека с большими информационными объемами. Как же, используя только переменные известных вам типов, сохранить в памяти и обработать данные, содержащие десяток, сотню, тысячу чисел? А ведь такие задачи встречаются в любой области знания. Конечно, можно завести столько переменных, сколько данных, можно даже занести в них значения, но только представьте, какой величины будет текст такой программы, сколько времени потребуется для его составления, как много места для возможных ошибок? Естественно, об этом задумывались и авторы языков программирования. Поэтому во всех существующих языках имеются типы переменных, отвечающие за хранение больших массивов данных. В языке Паскаль они так и называются: «массивы».
Массивом будем называть упорядоченную последовательность данных одного типа, объединенных одним именем.
Проще всего представить себе массив в виде таблицы, где каждая величина находится в собственной ячейке. Положение ячейки в таблице должно однозначно определяться набором координат (индексов). Самой простой является линейная таблица, в которой для точного указания на элемент данных достаточно знания только одного числа (индекса) – порядкового номера элемента. Такие массивы называются одномерными.
Одномерные массивы
Описание типа линейного массива выглядит так:
Type <Имя типа>=Array [<Диапазон индексов>] Of <Тип элементов>;
В качестве индексов могут выступать переменные любых порядковых типов. При указании диапазона начальный индекс не должен превышать конечный.
Описать массив можно и сразу (без предварительного описания типа) в разделе описания переменных:
Var <имя массива> : Array [<Диапазон индексов>] Of <Тип элементов>;
Примеры описания массивов:
Var
A, B : Array [1..20] Of Integer;
N : Array [1..40] Of Real;
Теперь переменные A, B представляют собой массивы из 20 целочисленных чисел; массив N – из 40 вещественных элементов.
Единственным действием, которое возможно произвести с массивом целиком – присваивание. Для данного примера описания впоследствии допустима следующая запись:
B:=A;
Однако присваивать можно только массивы одинаковых типов.
Никаких других операций с массивами целиком произвести невозможно, но с элементами массивов можно работать точно так же, как с простыми переменными соответствующего типа. Обращение к отдельному элементу массива производится при помощи указания имени всего массива и в квадратных скобках – индекса конкретного элемента. Например: N[10] – элемент массива N с индексом 10.
Рассмотрим несколько способов заполнения массивов и вывода их содержимого на экран. В основном мы будем пользоваться числовыми типами компонент, но приведенные примеры будут справедливы и для других типов (если они допускают указанные действия).
Ввод массива:
С клавиатуры
For I:=1 To 20 Do
Read (a[i]);
Автоматическое формирование массива
For I:=1 To 20 Do
a[i] := random (50)-25;
Здесь был использован генератор случайных чисел random. Рассмотрим его подробнее.
Для формирования значения целого типа используется random с параметром, например random (50), который будет формировать случайным образом число из диапазона от 0 до числа, указанного в скобках минус единица, т. е. до 49. Для формирования не только положительных, но и отрицательных значений из полученного результата достаточно вычесть какое-либо число. Например, random (50) - 25 – будет формировать целое число в диапазоне от -25 до 24.
Для формирования значения вещественного типа используется random без параметра. В этом случае формируется число в диапазоне от 0 до 1. Для увеличения значения числа можно домножить полученное на 10, 100 и т. д. Для получения отрицательных значений используется тот же прием, что и для целых чисел. Пример, random*100-50; .
Вывод массива:
В строку
For I:=1 to 20 Do
Write(A[I] :5)
Формат вывода (:5) необходим в данном случае для того, чтобы элементы массива не соединились в одно число и между ними были пробелы;
В столбец
For I:=1 to 20 Do
Writeln(A[I])
Указание формата вывода здесь не обязательно. При его указании столбец будет сдвигаться вправо по экрану.
Пример: сформировать массив случайным образом из 20 элементов в диапазоне от -10 до 10 и вывести его в строку.
Program M1;
Var
A : Array [1..20] Of Integer;
I : Integer;
Begin
Randomize;
For I:=1 To 20 Do
a[i] := random (11)-10;
writeln(Массив А);
For I:=1 to 20 Do
Write(A[I] :5)
End.
Двумерные и многомерные массивы
Представьте себе таблицу, состоящую из нескольких строк. Каждая строка состоит из нескольких ячеек. Тогда для точного определения положения ячейки нам потребуется знать не одно число (как в случае таблицы линейной), а два: номер строки и номер столбца. Структура данных в языке Паскаль для хранения такой таблицы называется двумерным массивом.
Описание двумерного массива:
Var
A : Array [1..20,1..30] Of Integer;
Описан двумерный массив, соответствующий таблице, состоящей из 20 строк и 30 столбцов.
Отдельный элемент двумерного массива адресуется, естественно, двумя индексами. Например, ячейка, находящаяся в 5-й строке и 6-м столбце будет называться A[5,6].
Ввод двумерного массива:
С клавиатуры
For i:=1 to 20 do
For j:=1 to 30 do
Read (a[I,j]);
Автоматическое формирование массива
For i:=1 to 20 do
For j:=1 to 30 do
a[I,j] := random (50)-25;
Вывод двумерного массива в виде матрицы:
For i:=1 to 20 do begin
For j:=1 to 30 do
Write(A[i,j] :5)
Writeln;
End;
Для иллюстрации способов работы с двумерными массивами решим задачу: «Задать и распечатать массив 10х10, состоящий из целых случайных чисел в интервале [1,100]. Найти сумму элементов, лежащих выше главной диагонали».
При отсчете, начиная с левого верхнего угла таблицы, главной будем считать диагональ из левого верхнего угла таблицы в правый нижний. При этом получается, что элементы, лежащие на главной диагонали будут иметь одинаковые индексы (i=j), а для элементов выше главной диагонали номер столбца будет всегда превышать номер строки (j>i).
Program M2;
Uses Crt;
Var
A : Array[1..10,1..10] Of Integer;
i, j : Byte;
S : Integer;
Begin
Clrscr;
Randomize;
{формирование матрицы}
For i:=1 to 10 do Begin
For j:=1 to 10 do Begin
A[i,j]:=Random(100)+1;
{вывод матрицы}
For i:=1 to 10 do Begin
For j:=1 to 10 do
Write(A[i,j]:5);
Writeln:
End;
{подсчет суммы элементов выше главной диагонали}
S:=0;
For i:=1 to 10 do
For j:=1 to 10 do
If j>i Then S:=S+A[i,j]
Writeln('Сумма элементов выше главной диагонали равна ',S)
End.
Если модель данных в какой-либо задаче не может свестись к линейной или плоской таблице, то могут использоваться массивы произвольной размерности. N-мерный массив характеризуется N индексами.