Все статьи » ЗФТШ Информатика

Статьи

  • §7. Поисковые системы

    Поисковая система (ПС) (от англ. search engine) — это компьютерная система, предназначенная для хранения данных о множестве интернет-страниц и обеспечивающая поиск информации по этим интернет-страницам. Для того, чтобы найти какую-либо информацию с помощью ПС, необходимо ввести в поисковую строку запрашиваемую информацию в виде последовательности символов, слов или фраз, которые называются поисковым запросом.

    В настоящее время самой популярной ПС в мире является Google, при этом в русскоговорящем сегменте сети интернет лидерство с Google делит поисковая система Yandex. В структуру любой поисковой системы входят:


    • поисковый робот – автоматическая программа для сбора информации в сети Интернет;
    • поисковый индекс – специальная база данных, куда найденная поисковым роботом информация сохраняется для последующего анализа и обеспечения быстрого и точного поиска информации;
    • поисковик – интернет-страница с графическим интерфейсом для работы пользователя.


    Для поисковых запросов в Google и Yandex можно использовать специальные символы и слова, которые могут заметно ускорить нахождения необходимой информации в сети Интернет, как указано в Табл. 2 и 3.

    Пример 6

    Определите количество страниц в сети Интернет, которые будут найдены с помощью поисковой системы www.yandex.ru на запрос «Плавание», если известно количество страниц при следующих запросах:

    Решение

    Обозначим число страниц на запрос «плавание» как X, а число страниц на запрос «Олимпиада | Сочи» как Y. По формуле включений и исключений получаем:

    X = Y|X - Y + X&Y = 780 - 300 + 250 = 730.


  • §6. Сетевые протоколы

    TCP/IP является протоколом, посредством которого работает множество других протоколов, с помощью которых выполняются различные задачи в сети Интернет. К таким протоколам относятся:

    HTTP – протокол обмена данных, основанный на модели «клиент-сервер», согласно которой пользователи сети делятся на два типа: клиент и сервер. В роли серверов выступают компьютеры с данными, а в роли клиентов – множество пользователей, получающих эти данные у серверов. Данный протокол нашел широкое применение во Всемирной Компьютерной Сети, о которой будет написано ниже.

    HTTPS – версия протокола HTTP, но в отличие от оригинального протокола, по протоколу HTTPS данные передаются в зашифрованном виде. Данный протокол широко используют банки, институты, правительства и другие организации.

    P2P – протокол обмена данных, согласно которому все узлы интернет сети равноправны и информация размещена на серверах, а в памяти компьютеров множества пользователей, подключенных к сети, при этом каждый пользователь может выступать в роле как клиента, так и сервера. В настоящее время около половины трафика сети Интернет работает по P2P протоколу. По количеству узлов, работающих на P2P протоколе, лидируют такие сети, как Bittorrent, eDonkey2000, Gnutella2, Gnutella.

    FTP – протокол передачи файлов, основанный на модели «клиент-сервер». С помощью этого протокола можно выполнять такие операции как копирование, перемещение и удаление файлов на удалённом сервере, который называется FTP сервером.

    SSH – сетевой протокол, обладающий шифрованием трафика и позволяющий не только работать с файлами на удаленной системе, но и удаленно управлять этой системой. В отличие от FTP протокола, данный протокол обеспечивает безопасную работу по незащищенным каналам сети за счет шифрования трафика.

    Для указания точного расположения файлов данных в сети Интернет широко используется универсальный указатель местоположения ресурса, называемый URL. Примером URL является «"https://ru.wikipedia.org/wiki/URL"». Данный пример URL, как и любой другой URL состоит из трех частей:


    • Имя протокола передачи данных (напр. https)
    • IP адрес или доменное имя сервера (напр. ru.wikipedia.org)
    • URL пути – уточняющая информация о месте нахождения ресурса на сервере (напр. wiki/URL).


    Сеть Интернет на протяжении многих лет с момента появления использовалась лишь узким кругом пользователей: сотрудниками институтов, лабораторий, министерств и т. д. Настоящую популярность интернет обрёл благодаря появлению Всемирной Компьютерной Сети или World Wide Web (WWW). Сеть WWW – это информационное пространство сети Интернет, где положение информации задано с помощью указателей URL, а информация связана посредством гипертекстовых ссылок. Успех WWW во многом зависел от создания концепции гипертекста – текста, изображённого на экране компьютера, содержащего в себе гиперсылку, а именно ссылку на другой текст, к которому пользователь может получить незамедлительный доступ (напр. щелкнув по ссылке указателем мыши). На сегодняшний день в WWW насчитывается более четырёх с половиной миллиардов интернет-страниц.


  • §5. Компьютерная сеть и адресация в сети интернет

    Компьютерная сеть – это телекоммуникационная сеть, позволяющая узлам сети обмениваться информацией. Примерами узлов компьютерной сети являются компьютеры, вычислительные кластеры и другие устройства, связь между которыми осуществляется по путям, которые называются каналами сети. Связь по каналам сети может осуществляться посредством как проводного (напр. кабельного), так и беспроводного (напр. Wi-Fi) соединения. Для обеспечения обмена данных любая компьютерная сеть работает согласно определённым наборам правил, которые называются сетевыми протоколами.

    Одной из самых распространённых компьютерных сетей в настоящее время является сеть Интернет (Internet) – глобальная система связанных между собой компьютерных сетей, использующих протокол связи TCP/IP. Согласно этому протоколу любая информация перед отправкой разделяется на блоки. Эти блоки имеют общий адресат, но в целях обеспечения равномерной загрузки каналов сети каждый блок отправляется по каналу, не обязательно совпадающему с каналами других блоков. При получении адресатом все блоки соединяются в одно целое согласно порядку, который был задан при их отправке. При этом протокол TCP отвечает за разделение и сбор информации, а протокол IP – за доставку блоков информации и выбор маршрутов по сети для каждого блока.

    Сеть Интернет является объединением множества подсетей, соединённых протоколом TCP/IP. При этом, внутри каждой подсети могут существовать свои правила адресации, но между подсетями существует единая система адресации, позволяющая уникально идентифицировать каждый узел сети.

    IP адрес – это уникальная 32-разрядная последовательность двоичных цифр, разделённая на 4 группы по 8 бит, называемых октетами с помощью которой компьютер однозначно идентифицируется в сети интернет. В десятичной записи, октеты разделены точками. Так, примером IP адреса является адрес: 172.16.123.1. Узел сети, обладающий IP адресом, называется хостом.

    IP адрес состоит из двух логических частей – номера подсети и номера узла (номера хоста) в этой подсети. Под номер подсети отводятся первые несколько бит IP адреса, оставшиеся биты обозначают номер хоста. Для определения того, какая часть IP адреса отвечает за номер подсети, а какая за номер хоста, применяются маски подсети.

    Маска подсети (subnet mask) – это число, которое используется в паре с IP адресом так, что двоичная запись маски содержит единицы в тех разрядах, которые должны в IP адресе интерпретироваться как номер подсети. Обычно маска записывается по тем же правилам, что и IP адрес, – в виде четырёх байтов, причем каждый байт записывается в виде десятичного числа. При этом, в маске сначала стоят единицы, а затем с некоторого места – нули. Адрес подсети получается в результате применения поразрядной конъюнкции к заданному IP адресу узла и маске.

    Пример 5

    Чем ограничено количество IP адресов? Может ли количество подключённых к сети компьютеров превышать предельное число IP адресов?

    Решение

    Общее количество IP адресов не может превышать `256^4` т. е. около 4 млрд. Число компьютеров, подключенных к сети интернет, может превышать данное число благодаря технологии, согласно которой группы компьютеров объединяются под одним общим IP адресом.

    Компьютеры в сети, представляющие свои ресурсы в общее пользования для предоставления и передачи информации, называются серверами. Для упрощения доступа к серверам, вместо IP адреса используют буквенное обозначение, которое называют доменным адресом (например www.yandex.ru). Служба, которая обеспечивает доступ к серверу через доменный адрес, называет DNS служба (от англ. Domain Name System). Данная служба однозначно соотносит доменный адрес с IP адресом сервера.

  • §4. Цветовая модель HSB. Зависимость между моделями RGB и CMYK

    Модель HSB (от англ. Hue, Saturation и Brightness) – одна из самых распространенных цветовых моделей, применяемая для работы с графическими изображениями. Цвет в этой модели описывается с помощью трёх параметров: цветовой тон (Hue), насыщенность (Saturation) и яркость (Brightness). Для удобства обозначим эти параметры как α\alpha, β\beta и `h`, соответственно и рассмотрим геометрическую интерпретацию данной модели ниже.

    Параметры α\alpha, β\beta и `h`, задают положение точки внутри или на поверхности цветового конуса, как изображено на Рис. 2.

    Цветовой тон, α\alpha, задаёт спектральный оттенок цвета на цветовом круге в плоскости перпендикулярной оси конуса (см. Рис. 2) и имеет значение от 0 до 360 градусов. Например, α=60°\alpha=60^{\circ} соответствует жёлтому цвету, а α=120°\alpha=120^{\circ} – зелёному.

    Насыщенность, β\beta, определяет величину осветвлённости цвета, т. е. долю белой краски в цвете. По мере уменьшения насыщенности цвет осветляется, подобно добавлению белой краски. Так, при нулевом β\beta любой цвет становится полностью белым, см. Рис. 2.

    Яркость, `h`, определяет величину затемнённости цвета, т. е. долю чёрной краски в цвете. По мере уменьшения `h` доля чёрного цвета растёт, а при максимальном значении `h` доля чёрного цвета равна нулю и цвет становится максимально ярким.

    Зависимость между моделями RGB и CMYK хорошо видна на рис. 1, где видно, что базисные цвета RGB модели расположены точно напротив базисных цветов модели CMYK. Важным свойством модели RGB можно отметить то, что цвета модели, которые не попадают в треугольник, полученный соединением основных цветов, в RGB модели
    непредставимы. Аналогично – для модели CMYK. В сравнении с моделями RGB и CMYK, модель HSB позволяет закодировать практически все цвета, воспринимаемые глазом человеком.

    Пример 4

    После преобразования графического изображения количество цветов уменьшилось с 256 до 32. Во сколько раз уменьшился объём занимаемой памяти?

    Решение

    Информационный объем одной точки 1-го и 2-ого изображения равны 8 и 5 бит соответственно. Тогда объём занимаемой памяти уменьшился в 8/5=1,6 раза.


  • §3. Цветовые модели RGB и CMYK

    Для излучаемого света широко используется цветовая модель цветов RGB, а для модели отражаемого цветовая модель CMYK. Модели RGB и CMYK отличаются выбором тройки линейно независимых цветов, называемых базовыми цветами.

    В модели RGB (от англ. Red, Green и Blue) базовыми цветами являются красный, зеленый и синий. Множество цветов, отличных от базовых цветов, получаются путем смешения базовых цветов с различной интенсивностью. Так, при смешении красного и зелёного цветов получается жёлтый, зеленого и синего – голубой, а синего и красного – малиновый (см. Рис. 1).

    RGB модель с 16- и 24-битной глубиной цвета называется Hi-color и True-color соответственно. В режиме Hi-color на кодирование градаций яркости красного и синего цвета отводится по 5 бит, а на кодирование зеленого цвета – 6 бит. В режиме True-color на кодирование градаций каждого из трех основных цветов отводиться ровно по 8 бит.

    Пример 2

    Пусть для RGB кодирования цвета используется режим Hi-color. Какой цвет задается кодом 1111100000011111?

    Решение

    Данный цвет является смешением красного и синего цветов. Как видно на цветовом круге на Рис. 1, смешением красного и синего цветов является фиолетовый цвет.

    Цветовая модель RGB широко используется в программном обеспечении для работы с цифровыми изображениями в сети интернет.

    Пример 3

    Для кодирования цвета фона страницы интернет используется атрибут bgcolor=”RRGGBB”, где RR, GG и BB – это шестнадцатеричные коды красной, зелёной и синей цветовых компонент соответственно модели RGB в режиме True-color. Какой цвет у страницы, заданной тегом <body bgcolor=”FFFF00”>?

    Решение

    Цвет страницы – желтый, как смешение красного и зелёного цветов, см Рис. 1.

    Модель CMYK (от англ. Сyan, Мagenta, Yellow и BlacK) создана и широко используется для типографической печати. Эта модель использует базовые цвета, противоположные цветам модели RGB: голубой (Сyan), малиновый (Мagenta) и желтый (Yellow), см. Рис. 1. На практике при печати, чтобы добиться насыщенного чёрного цвета, используется четвёртый цвет – чёрный (BlacK).

  • §2. Основные принципы цветопередачи

    Научные дисциплины, занимающиеся математическими моделями цвета, называются метрологией и колориметрией. Среди основных положений данных дисциплин рассмотрим колометрические законы Грассмана, позволяющие дать простое объяснение принципов цветопередачи на экране компьютера и при печати изображения на бумаге. Для этого, сначала, введем понятие линейной независимости цветов. А именно, цвета считаются линейно независимыми, если никакой из них нельзя получить путем смешения остальных. Тогда три закона Гроссмана формулируются следующим образом:

    (1) Закон трехмерности. С помощью трех выбранных линейно независимых цветов можно однозначно выразить любой цвет.

    (2) Закон непрерывности. К любому цвету можно подобрать сколь угодно близкий к нему цвет.

    (3) Закон аддитивности. Все цвета равноправны, разложение цветов можно выполнять по любым линейно независимым цветам.

    При работе с изображениями световое излучение можно разделить на два вида: излучаемый свет и отражаемый свет. Так, примером излучаемого света является свет от экрана монитора, а отражаемого – свет, отраженный от изображения на бумаге.

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

    Напротив, излучаемый свет от экрана компьютера воспринимается как черный при отсутствии цветов на экране, и как белый – при максимальной яркости всех цветов на экране.


  • §1. Растровая и векторная графика

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

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

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

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

    Точки растрового изображения могут принимать ограниченное множество цветов, называемое палитрой изображения. Количество бит, отводимое на каждый пиксель для представления цвета, называют глубиной цвета, которая может быть вычислена по формуле: `P=2^k`, где `P` – количество цветов палитры, `k` – глубина цвета. Наиболее распространенными значениями глубины цвета являются 4, 8, 16 или 24 бита на пиксель.

    Одной из характеристик качества изображения является разрешение, обычно измеряемое в количестве точек на дюйм изображения dpi (от англ. dot per inch). Чем выше разрешение и глубина цвета, тем выше качество изображения.

    Для представления цветов на экране компьютера и для печати на принтере используются различные математические модели представления цветов в виде упорядоченного набора чисел. Такие модели называются цветовыми моделями. В компьютерной графике и технике чаще всего используются следующие три цветовые модели: RGB, CMYK и HSB.

    Между информационным размером растрового изображения и глубиной цвета палитры существует зависимость согласно формуле: `I=n k`, где `n` – количество точек изображения, `k` – глубина цвета, а `I` – информационный размер изображения, измеряемый в битах.

    Пример 1

    Сколько места в памяти надо выделить для хранения фотографии размером 128 на 64 пикселя с 16-цветной палитрой?

    Решение

    Глубина цвета палитры с 16 цветами вычисляется по формуле: `k = log_2(16) = 4`.

    Тогда размер фотографии равен I=128·64·4I = 128 \cdot 64 \cdot 4 бит = 4 Кбайт.

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

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

  • §3. Тип string в Паскале

    Теперь пришло время познакомиться с ещё одним типом переменных, который активно используется при обработке текстов – это строка (string). Строка представляет собой последовательность символов. Размер строки варьируется от 0 до 255. В отличие от всех остальных названий типов, слово string является зарезервированным служебным словом и, соответственно, не может использоваться в качестве имени переменных. При описании строки под неё выделяется 256 байт (по одному байту на каждый символ + нулевой байт, в котором хранится текущая длина строки). Если заранее известно, что длина строки не будет превышать какого-то количества символов (например 20) , то это можно указать при описании переменной: var s :string[20], в квадратных скобках после слова string записывается максимальная длина строки. В этом случае под переменную будет выделен 21 байт (по одному на каждый из 20 символов + нулевой байт для текущей длины строки). Указание длины никак не влияет на совместимость типов.

    Переменным типа string можно присваивать константные значения. При этом строковая константа, подобно символу, заключается в апострофы, например s:='cat'. Также их можно выводить на экран, и, что особенно приятно, вводить с клавиатуры одним оператором: (readln(s)).

    Так же в задачах иногда бывают ситуации, когда строку нужно набирать постепенно (добавляя в неё по 1 символу). Для этого предусмотрена операция сложения строк (конкатенация). Например, запись s:=s+'c', означает, что к текущему значению переменной s справа приписывается символ 'c'. Операция s:=s+'ch' означает, что справа припишется два символа. Также можно записать такое сложение: s:='ch'+'hc'; тогда переменная s получит значение 'chhc'. Операция сложения строк не обладает свойством коммутативности, то есть, от перестановки мест слагаемых сумма изменяется. Если в последнем примере поменять местами слагаемые, то получится строка 'hcch'.

    Ещё к строкам можно применять операции сравнения, причём все шесть, которые существуют в Паскале. Строки сравниваются посимвольно, то есть сначала первые символы, в случае их равенства вторые и т. д. Если на каком-то шаге (возможно, на первом) символ первой строки оказался больше символа второй, то первая строка считается больше второй. Если у строк совпадают все символы и длины, то строки считаются равными. Если у строк совпали все символы, но первая строка уже кончилась, а вторая – нет (например, «ветер» и «ветерок»), то вторая строка считается больше, чем первая.

    Следующая интересная возможность – это работать со строкой, как с символьным массивом (массивом, элементами которого являются символы). При этом индекс имеет целый тип и всегда принадлежит диапазону от единицы до максимально заказанной длины строки (по умолчанию – 255). К строке применимы все те же операции, что и к символьному массиву, то есть возможность получить доступ к отдельному элементу строки и работать с ним как с отдельным символом.

    Теперь рассмотрим стандартные функции и процедуры для обработки строк.

    1) length(s) — функция, возвращающая текущую длину строки.

    2) сopy(s,i,n) — функция, возвращающая кусок строки s длиной n символов, начиная с i-го. Параметр s имеет тип string, i, n – тип integer.

    3) pos(s1,s) — функция, в качестве результата выдающая номер позиции в строке s, с которой начинается подстрока s1; если подстрока s1 не входит в строку s, то результат равен 0.

    4) delete(s,i,n) — процедура, удаляющая из строки s n символов, начиная с i-го символа. Параметр s имеет тип string, i, n – тип integer.

    5) insert(s1,s,i) — процедура, вставляющая в строку s подстроку s1 перед символом с номером i;

    6) str(a,s) — процедура, переводящая число a в его строковое представление s. Параметр s имеет тип string, a – тип integer либо real.

    7) val(s,n,i) — процедура, переводящая строку s в число (вещественное или целое, согласно типу переменной n). Если строка s не является изображением числа соответствующего типа по правилам Паскаля, то значение переменной i будет равняться номеру первого символа, который не удаётся преобразовать в число, а переменная n примет значение – ноль. При удачной конвертации значение переменной i станет равным нулю;

    Функции для обработки строк, подобно математическим, входят в состав выражений. Процедуры – это новое для нас понятие. В отличие от функции процедура не возвращает какое-то конкретное значение. Результат работы процедуры – изменение одного или нескольких её параметров (например, процедура val в любом случае меняет значения второго и третьего параметра). Изменяемые параметры должны быть переменными. Неизменяемые – могут быть константами, как у функций. Вызов процедуры записывается отдельным оператором. Все функции и процедуры корректно изменяют текущую длину строки (так же как и операция сложения строк или присваивание строке нового значения).

    Рассмотрим несколько примеров задач на обработку строк. В каждой задаче под «словом» понимается любая последовательность символов, не содержащая пробелы.

    задача 1

    Ввести строку, состоящую из нескольких слов. Между словами 1 или более пробелов. Так же могут быть пробелы в начале и в конце строки. Удалить из строки все лишние пробелы. Длина входной строки не превосходит 255 символов.

    Решение

    Эта задача не просто демонстрирует работу со строками, но ещё и постоянно возникает в качестве подзадачи в более сложных задачах. Решить эту задачу можно разными способами. Самое простое (но не самое эффективное) решение заключается в следующем: Мы будем искать во входной строке подстроку в виде двух пробелов подряд. Если нашли, то один из них удаляем. Процесс повторяется, пока такая подстрока находится. В итоге у нас получится строка, в которой между словами ровно по 1 пробелу, плюс, возможно, есть по 1 пробелу в начале и в конце строки. Если они есть, то мы их удаляем. Приведём полный код программы.

    var s : string;
    begin
    \:\:\:\: readln(s);
    \:\:\:\: while pos(' ', s)<>0 do delete(s, pos('
    \:\:\:\: ',s), 1);
    \:\:\:\: if s[1]= ' ' then delete(s, 1, 1);
    \:\:\:\: if s[length(s)]=' ' then delete(s, length(s), 1);
    \:\:\:\: writeln(s);
    \:\:\:\: readln
    end.

    На примере этой задачи мы увидели работу функций length и pos, и процедуры delete.

    задача 2

    Вводится строка, состоящая из двух слов. Между словами ровно один пробел. Требуется поменять эти два слова местами.

    Решение

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

    var s, s1 : string;
    begin
    \:\:\:\: readln(s);
    \:\:\:\: s1:=copy(s, pos(' ',s)+1, length(s)-pos(' ', s));
    \:\:\:\: s1:=s1+' '+copy(s,1,pos(' ', s)-1);
    \:\:\:\: writeln(s1);
    end.

    Постарайтесь внимательно разобраться в параметрах функции copy.

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

    задача 3

    Волшебник усердно шифрует свои заклинания. Текст заклинания состоит из нескольких слов. Слово – это последовательность заглавных и строчных латинских букв. Длина слова не превосходит 20 символов. Между словами стоит 1 разделитель – любой символ кроме латинской буквы. В начале и конце строки разделителей нет. Общая длина заклинания не превосходит 250 символов. Волшебник сначала подсчитывает количество букв в самом коротком слове (k), а потом каждую латинскую букву заменяет на k-ую за ней по счёту в алфавите. Алфавит считается циклическим, то есть вторая буква за Z – это B. Малые буквы превращаются в малые, заглавные — в заглавные. Ввести зашифрованный текст заклинания, вывести расшифрованный.

    Решение

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

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

    var s : string; k, dlin,i : integer;
    begin
    \:\:\:\: readln(s);
    \:\:\:\: k:=20; dlin:=0;

    \:\:\:\: for i :=1 to length(s) do
    \:\:\:\: if(s[i]>='A')and(s[i]<='Z')or(s[i]>=='a')and(s[i]<='z')
    \:\:\:\: then dlin:=dlin+1
    \:\:\:\:\:\:\:\: else begin if dlin<k then k:=dlin; dlin:=0 end;


    \:\:\:\: if dlin < k then k:=dlin; {анализ последнего слова}
    {Вторая стадия решения. Напомним, что функция ord(c) выдаёт код символа, находящегося в переменной с. В то время как функция chr(x) выдаёт символ по значению кода.}

    \:\:\:\: for i:=1 to length(s) do begin
    \:\:\:\: if (s[i]>='A')and(s[i]<='Z')
    \:\:\:\:\:\:\:\: then begin s[i]:=chr(ord(s[i])-k);
    \:\:\:\:\:\:\:\: if s[i]<'A' then s[i]:=chr(ord(s[i])+26)
    \:\:\:\:\:\:\:\: end;
    \:\:\:\: if (s[i]>='a')and(s[i]<='z')
    \:\:\:\:\:\:\:\: then begin s[i]:=chr(ord(s[i])-k);
    \:\:\:\:\:\:\:\: if s[i]<'a' then s[i]:=chr(ord(s[i])+26)
    \:\:\:\:\:\:\:\: end;
    \:\:\:\: end;
    \:\:\:\: writeln(s);
    \:\:\:\: readln
    end.

    Обратите внимание, что в качестве аргумента для функции chr(x) может использоваться выражение типа integer.


  • §2. Стандартные задачи с массивами

    Пока что будем рассматривать массив a, содержащий 10 элементов типа integer с индексами от 1 до 10.

    задача 1

    Ввести с клавиатуры элементы массива a, а потом вывести их в том порядке, в котором они вводились

    Решение

    Задача решается в 2 строки:

    for i:=1 to 10 do read(a[i]);
    for i:=1 to 10 do writeln(a[i]);

    При вводе чисел: 1 1 1 3 2 2 2 5 66 1 Программа выдаст ответ:

    1
    1
    1
    3
    2
    2
    2
    5
    66
    1

    Каждое число в ответе располагается на отдельной строке. Это происходит потому, что мы использовали для вывода оператор writeln. Однако, если у нас в массиве, например, 400 элементов, то такой вывод будет неудобным, ибо 400 строк не поместятся на одном экране, и придётся пользоваться прокруткой. Поэтому, более рациональным является использование другого оператора вывода – write.

    for i:=1 to 10 do read(a[i]);
    for i:=1 to 10 do write(a[i], ' ');

    В список вывода добавлен пробел, чтобы числа не сливались в одно.

    задача 2

    Ввести с клавиатуры элементы массива a, а потом вывести их в обратном порядке.

    Решение

    Есть два способа решения этой задачи. Первый заключается в том, что при выводе мы идём по массиву в обратном порядке (от последнего элемента к первому). Код будет выглядеть так:

    for i:=1 to 10 do read(a[i]);
    for i:=10 downto 1 do write(a[i], ' ');

    Преимущество этого решения – его простота. Недостаток – отсутствие универсальности. Дело в том, что во многих задачах требуется переписывать элементы массива в обратном порядке и затем работать с перевёрнутым массивом. Приведённое же решение так сделать не позволит, поскольку массив, фактически не изменяется. Рассмотрим алгоритм переписывания элементов массива в обратном порядке:

    for i:=1 to 10 do read(a[i]);
    for i:=1 to 10 div 2 do
    \:\:\:\:  begin x:=a[i]; a[i]:=a[10-i+1]; a[10-i+1]:=
    = x end;
    for i:=1 to 10 do write(a[i], ' ');

    Второй цикл переписывает элементы массива в обратном порядке при помощи алгоритма «поменять местами значения двух переменных». Первый элемент меняется местами с последним, второй с предпоследним, и так далее, до середины массива. Обратите внимание, что идти по массиву нужно только до середины, а не до конца. Если пойти до конца, то массив сначала перевернётся (когда мы дойдём до середины), а потом перевернётся обратно, и в итоге получится исходный массив.


    Теперь давайте представим, что заказчик, предложивший вам эту задачу, вдруг решил изменить размер массива до 20 элементов. Сколько изменений вам придётся вносить в программу? Очевидно, что нужно будет исправить границу в трёх циклах for (заменить «to 10» на «to 20»), во втором цикле заменить 10 на 20 в формулах, и ещё надо будет заменить 10 на 20 при описании массива. То есть, целых шесть изменений для такой простой задачи. В более сложных задачах количество изменений может достигать сотен. Поэтому, мы познакомимся с так называемой «константой границы», которая позволит при любом размере программы обходиться всего лишь одним изменением кода! Константа границы описывается в разделе описания констант до объявления массива, а затем используется при его объявлении, например:

    \:\:\:\: сonst N=10;

    \:\:\:\: var a : array [1..N] of integer;

    Далее в программе при работе с массивом A всегда вместо конкретного значения границы указывается константа N. Таким образом, если заказчик меняет размер массива, то нам нужно внести в код всего одно изменение – поменять значение константы N в разделе const.

    Давайте перепишем решение последней задачи с использованием константы границы.

    for i:=1 to N do read(a[i]);
    for i:=1 to N div 2 do
    \:\:\:\:  begin x:=a[i]; a[i]:=a[N-i+1]; a[N-i+1]:=
    = x end;
    for i:=1 to do write(a[i], ' ');

    Для всех последующих задач мы будем использовать описание массива с константой границы:

    сonst N=10;
    \:\:\:\: var a : array [1..N] of integer;

    Так же мы будем предполагать, что массив уже заполнен и сконцентрируемся собственно на алгоритмах его обработки.

    задача 3

    Вывести сумму элементов массива.

    Решение

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

    s:=0;
    for i:=1 to N do s:=s+a[i];
    writeln(s);

    задача 4

    Вывести значение максимального элемента массива.

    Решение

    Изначально предположим, что максимальным является первый элемент массива. Затем пройдём по массиву от второго до последнего элемента, сравнивая каждый элемент с текущим значением максимума и меняя это значение по необходимости

    for i:=1 to N do read(a[i]);
    max:=a[1];
    for i:=2 to N do if a[i]>max then max:=a[i];
    writeln(max);

    задача 5

    Найти в массиве максимальный и минимальный элементы и поменять их местами.

    Решение

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

    \:\:\:\: min:=a[1]; max:=a[1];
    for i:=2 to N do
    \:\:\:\: if a[i]>max then max:=a[i]
    \:\:\:\: else if a[i]<min then min:=a[i];
    x:= max;
    max:=min;
    min:=x;

    Является ли это решение верным? Разумеется, нет. Здесь меняются местами значения переменных max и min, в то время как массив остаётся без изменений. В правильном решении нам нужно сохранять не сами значения максимального и минимального элементов, а их местоположение в массиве. Правильное решение выглядит следующим образом.

    min:=1; max:=1;
    for i:=2 to N do
    \:\:\:\: if a[i]>a[max] then max:=i
    \:\:\:\:\:\:\:\: else if a[i]<a[min] then min:=i;
    x:=a[max];
    a[max]:=a[min];
    a[min]:=x;

    задача 6

    Циклически сдвинуть элементы массива на одну позицию влево.

    Решение

    В задаче требуется преобразовать массив следующим образом: все элементы, кроме первого переместить на одну позицию влево, а первый элемент (поскольку сдвиг циклический) поместить в крайнюю правую позицию. То есть из массива 5 4 3 2 должен получиться массив 4 3 2 5. Решение этой задачи фактически является расширенным алгоритмом обмена значений двух переменных и выглядит так:

    x:=a[1];
    for i:=1 to N-1 do a[i]:=a[i+1];
    a[N]:=x;

    задача 7

    Упорядочить элементы массива по возрастанию.

    Решение

    Обратите на эту задачу особенное внимание! Она называется задачей «сортировки массива» и регулярно встречается в качестве подзадачи в сложных задачах, в частности в задачах ЕГЭ. Каждый ученик должен уметь быстро и безошибочно написать алгоритм для решения этой задачи. Существует множество алгоритмов сортировки. Каждый из них имеет свои достоинства и недостатки. Идеального среди них нет. Мы рассмотрим наиболее простой и понятный алгоритм сортировки, который называется «выбор максимума».

    Идея алгоритма «выбора максимума» в следующем: мы находим в массиве максимальный элемент и ставим его на предназначенное ему место (последнее) путём обмена (меняем местами максимальный и последний элементы), затем из оставшихся элементов (всех кроме последнего) находим максимальный и меняем его местами с предпоследним и так далее. С каждым шагом область сортировки (несортированная часть массива) будет уменьшаться на один элемент. Алгоритм работает последний раз, когда в области сортировки остаётся два элемента (первый и второй).

    Реализуется этот алгоритм следующим образом. У нас будет цикл, который будет отвечать за размер области сортировки. Внутри этого цикла выполняется два действия: поиск максимума и обмен максимального элемента с крайним правым в области сортировки. Приведём код.

    for j:=N downto 2 do begin
    \:\:\:\: max:=1;
    \:\:\:\: for i:=2 to j do if a[i]>a[max] then max:=i;
    \:\:\:\: x:=a[j];
    \:\:\:\: a[j]:=a[max];
    \:\:\:\: a[max]:=x;
    end;

    Мы рассмотрели сортировку по возрастанию, если же нам нужно упорядочить элементы массива по убыванию, то достаточно заменить в программе всего один символ! Во внутреннем цикле for изменить знак «>» на знак «<». Ну и ещё для удобочитаемости можно вместо переменной max использовать переменную min, хотя с точки зрения корректности алгоритма это и необязательно.
    задача 8

    Даны два целочисленных массива из 30 элементов. Первый заполнен числами от 1 до 30 – это номера дней в июне. Во второй массив метеорологи ввели значения температуры в соответствующий день (то есть в первом элементе – температура первого июня, во втором – второго и так далее до тридцатого). Метеорологи хотят вывести даты июня в порядке от самой холодной до самой жаркой.

    Решение

    Очевидно, что это тоже задача сортировки, которую мы уже умеем решать. Сложность заключается в том, что сортировать надо по одному признаку (температура), а выводить другой (дата). Наша цель – модифицировать алгоритм сортировки таким образом, чтобы не нарушать связь между датой и температурой. Это достигается следующим образом: каждый раз, когда меняются элементы одного массива, надо менять и соответствующие элементы другого массива.

    В программе мы будем использовать два массива с говорящими именами: dat и temp. Приведём содержательную часть решения, а именно сортировку.

    for j:=N downto 2 do begin
    \:\:\:\: max:=1;
    \:\:\:\: for i:=2 to j do if temp[i]>temp[max] then max:=i;
    \:\:\:\: x:=temp[j];
    \:\:\:\: temp[j]:=temp[max];
    \:\:\:\: temp[max]:=x;

    \:\:\:\: x:=dat[j];
    \:\:\:\: dat[j]:=dat[max];
    \:\:\:\: dat[max]:=x;
    end;

    Далее необходимо вывести элементы массива dat.

    задача 9

    Вводится непустая последовательность символов. Точка – признак конца ввода. Требуется вывести статистику: сколько заглавных латинских букв каждого вида входит в эту последовательность.

    Решение

    Иногда учащимся приходит в голову следующее решение: «А давайте мы сохраним все элементы последовательности в массиве, потом отсортируем его, а потом пройдём по нему, посчитаем, сколько раз встретится каждая заглавная буква, и выведем это число». Основная проблема заключается в том, что по условию задачи нам никто не сказал максимальное количество символов в последовательности, что означает невозможность сохранять их все в массиве (поскольку нужно заранее заказывать размер). К тому же в случае большой последовательности мы потратим ОЧЕНЬ много времени на сортировку. Поэтому, нам нужно завести такой массив, размер которого был бы заранее известен, и при этом в нём хранилась бы вся информация об интересующих нас элементах последовательности. Хорошее решение – создать массив счётчиков, который будет учитывать количество вхождений каждой заглавной буквы в последовательность. Очевидно, что мы можем заранее указать размер этого массива – 26 элементов, поскольку в латинском алфавите – 26 букв. Индексами массива счётчиков должны быть подсчитываемые элементы (то есть заглавные латинские буквы). Внимание! Это первая задача, где тип индекса является не диапазоном целых чисел, а диапазоном символов. Тип элементов в массиве, очевидно, целый. Приведём полный текст решения.

    var count : array ['A'..'Z'] of integer;
    \:\:\:\: c : char;
    begin
    \:\:\:\: for c:='A' to 'Z' do count[c]:=0;
    \:\:\:\: read(c);
    \:\:\:\: repeat
    \:\:\:\: if (c<='Z') and (c>='A') then count[c]:=
    \:\:\:\: = count[c]+1;
    \:\:\:\: read(c)
    \:\:\:\: until c='.';
    \:\:\:\: for c:='A' to 'Z' do writeln(c, '-',count[c]);
    \:\:\:\: readln
    \:\:\:\: end.

    задача 10

    Ввести последовательность символов. Точка – признак конца ввода. Составить из заглавных латинских букв, входящих в последовательность, первый в алфавитном порядке палиндром максимальной длины и вывести его на экран. Гарантируется, что в последовательность входит хотя бы одна заглавная латинская буква.

    Решение

    Палиндром – это строка символов, которая читается одинаково слева направо и справа налево. Например, известная фраза из Буратино «А роза упала на лапу Азора» становится палиндромом, если удалить из неё пробелы и не различать заглавные и строчные буквы (что происходит автоматически при восприятии этой фразы на слух).

    В нашей задаче нам нужно найти палиндром максимальной длины, первый в алфавитном порядке. Мы подсчитаем количество вхождений каждой заглавной латинской буквы в последовательность, а потом будем выводить половину вхождений каждой буквы в порядке от A до Z. Таким образом, мы выведем половину искомого палиндрома. Далее, найдём первую букву в алфавитном порядке, которая встречается нечётное количество раз, и поставим её в середину палиндрома. Во фразе из Буратино средней буквой является «н». Если же окажется, что все буквы встретились в последовательности чётное количество раз, то, соответственно, палиндром будет чётной длины без серединной буквы, и, значит, на этой стадии ничего не произойдёт. Наконец, последним этапом мы выведем половину вхождений каждой буквы, но уже в обратном порядке – от Z до A. Рассмотрим полный код решения.

    var count : array ['A'..'Z'] of integer;
    c,d : char; i : integer;
    begin
    \:\:\:\: for c:='A' to 'Z' do count[c]:= 0;
    \:\:\:\: read(c);
    \:\:\:\: repeat
    \:\:\:\:\:\:\:\: if (c<='Z')and (c>='A')then count[c]:=
    \:\:\:\:\:\:\:\: =count[c]+1;
    \:\:\:\:\:\:\:\: read(c)
    \:\:\:\: until c='.';

    \:\:\:\: for c:='A' to 'Z' do
    \:\:\:\: for i:=1 to count[c] div 2 do write(c);

    \:\:\:\: d:='0';
    \:\:\:\: for c:='A' to 'Z' do
    \:\:\:\:\:\:\:\: if count[c] mod 2 <> 0 then begin
    \:\:\:\:\:\:\:\:\:\:\:\: d:=c; break end;

    \:\:\:\: {оператор break прерывает выполнение цикла и передаёт управление на следующий за ним оператор программы}

    \:\:\:\: if d<>'0' then write(d);
    \:\:\:\: for c:='Z' downto 'A' do
    \:\:\:\: for i:=1 to count[c] div 2 do write(c);

    readln
    end.

  • §1. Массивы данных

    В предыдущих темах мы неоднократно сталкивались с задачами обработки последовательностей (последовательностей чисел в первом задании или символов – во втором). Все подобные задачи решались по единой стратегии: мы считывали очередной элемент последовательности, обрабатывали и забывали о нём. Теперь рассмотрим пример задачи, где подобная стратегия не сработает.

    Пример 

    Ввести последовательность из 100 целых чисел, а затем вывести эти числа в порядке возрастания.

    РЕШЕНИЕ

    Очевидно, что для решения этой задачи нам необходимо сохранить все введённые числа, поэтому описанная выше стратегия здесь неприменима. Так же очевидным является факт, что для хранения всех введённых чисел крайне неудобно использовать сто переменных с уникальными именами. Гораздо удобнее было бы обозначать элементы последовательности так, как это делается в математике, то есть указывать общее имя последовательности и номер элемента (например, a1,a2,a3,...,ana_1, a_2, a_3, ..., a_n). Для реализации этой идеи нам нужно познакомиться с новым типом переменных – массивом.

    Определение 1

    Массив – это сложная структура элементов одного типа. Все элементы массива упорядочены по номерам. Порядковый номер элемента в массиве называется индексом элемента. Количество элементов в массиве называется размером массива. Под массив отводится непрерывный участок в оперативной памяти.

    Определение 2

    Размерность массива – это количество индексов, которое нужно указать для однозначной идентификации элемента массива. Если нужно указывать один индекс, то массив называется одномерным, если два, то двумерным и т. д. В этой главе мы будем работать исключительно с одномерными массивами.

    Рассмотрим, каким образом одномерный массив описывается на языке Паскаль.

    var <имя массива>: array [тип индекса] of <тип элементов>

    В этой конструкции слова ARRAY и OF являются ключевыми словами языка. Задаваемое имя массива должно соответствовать правилам именования объектов в языке Паскаль, то есть, представлять из себя последовательность латинских букв, цифр и символов подчёркивания. начинающуюся с буквы или символа подчёркивания. Тип элементов массива может быть любым (integer, longint, real, boolean, char и т. д.). В качестве типа индекса мы будем использовать диапазоны целых чисел или символов. Диапазон оформляется следующим образом: записывается минимальная граница, затем дважды ставится точка и потом записывается максимальная граница. Обе границы включаются в диапазон.

    Пример описания массива:

    var massiv: array [1..10] of integer;

    В примере описывается массив из 10 целых чисел с индексами от 1 до 10.

    Другой пример:

    \:\:\:\: var massiv2: array [0..9] of integer;

    В этом примере также описывается массив из 10 целых чисел, но индексы у них от 0 до 9.

    Для того, чтобы работать с элементом массива, в программе необходимо записывать имя массива и в квадратных скобках индекс интересующего нас элемента. Например, massiv[10]:=2. Этот оператор присваивает в элемент массива massiv с индексом 10 число 2. Необходимо всегда контролировать выход за границы диапазона значений индекса. Скажем, оператор massiv2[10]:=2 является ошибкой, поскольку у массива с именем massiv2 нет элемента с индексом 10.

    Пусть у нас есть описание массива.

    var a: array [1..10] of integer;

    Рассмотрим возможные операции с этим объектом. Их можно разделить на две группы: операции с массивом, как с единым объектом, и операции с одним элементом массива.

    В первой группе операций совсем немного – всего лишь одна! Это операция копирования массивов.

    Пусть есть описание: var a,b: array [1..10] of integer

    Тогда допустимыми являются следующие операторы присваивания: a:=b и соответственно b:=a. Первый из этих операторов во все элементы массива a запишет значения соответствующих элементов массива b (то есть элементов с теми же индексами). А второй оператор во все элементы массива b запишет значения соответствующих элементов массива a.

    Необходимо помнить, что операция копирования в Паскале применима только к переменным, имеющим одинаковый тип (исключение, в real можно присваивать integer). Описанные выше массивы a и b имеют одинаковый тип. Если же описать их немного иначе:

    \:\:\:\: var a: array [1..10] of integer;

    \:\:\:\: var b: array [1..10] of integer;

    то операция копирования будет неприменима! Несмотря на структурную эквивалентность (и то, и другое – массивы из целых чисел с индексами от 1 до 10) Паскаль-машина считает, что это разные типы переменных, и поэтому присваивать их один другому нельзя. (Необходимо отметить, что некоторые компиляторы позволяют копирование массивов в случае структурной эквивалентности, но в рамках этого задания мы будем руководствоваться стандартом языка).

    Больше с массивами как с едиными объектами нельзя делать ничего. Нельзя даже считывать и выводить их на экран одним оператором (оператор readln(a) или writeln(a) недопустим).

    Перейдём к рассмотрению второй группы операций (операции с отдельными элементами массива). С каждым элементом массива можно выполнять все операции, которые применимы к обычной переменной соответствующего типа. Если элемент массива — целое число (как описано выше), то его можно использовать в арифметических выражениях, ему можно присваивать значения арифметических выражений, его можно считывать с клавиатуры и выводить на экран (например, writeln(a[4])). Если элемент массива имеет тип Boolean, то его нельзя вводить с клавиатуры, но можно присвоить ему значение true или false, использовать его в логическом выражении в качестве операнда для логической операции и т. д. 

    Исходя из всего вышесказанного, уже очевидно, как присвоить значения всем элементам (заполнить массив). Для массива a заполнение может выглядеть следующим образом:

    a[1]:=1;
    a[2]:=4;
    a[3]:=-1000;
    a[4]:=8950;
    a[5]:=0;
    a[6]:=78;
    a[7]:=6789;
    a[8]:=13;
    a[9]:=222;
    a[10]:=90; 

    Понятно, что такой способ заполнения, когда мы явным образом прописываем присваивание значения каждому элементу массива, подходит только в случае, когда массив небольшой. То есть, для массива из 20 элементов нужно будет написать 20 операторов присваивания, для массива из 200 элементов – 200 и т. д. При этом, в случае изменения исходных данных, нам нужно будет менять в программе все эти строки! Гораздо выгоднее воспользоваться оператором ввода с клавиатуры и циклом for. Тогда алгоритм заполнения массива записывается в 1 строку независимо от количества элементов в массиве! Для массива a алгоритм заполнения будет выглядеть так:

    for i:=1 to 10 do readln(a[i]);

    Индексы не всегда нужно записывать явным образом. Как показано в примере, на месте индекса можно писать и переменную или выражение соответствующего типа (типа, совпадающего с объявленным типом индекса).

  • § 16. Работа с таблицами. Схема данных

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

    Для совершения запроса информации из нескольких таблиц необходимо заранее установить схему связей данных в БД. Рассмотрим пример, поясняющий работу с БД, состоящей из нескольких таблиц.

    Составим базу о расписании авиарейсов и приведём пример запроса информации из нескольких таблиц одновременно. В Microsoft Access создадим три таблицы: «Календарь», «Расписание» и «Авиакомпании».

    Для создания таблицы необходимо задать её имя, число столбцов и указать типы значений в каждом из столбцов. Первая таблица «Календарь» (см. Табл. 8) состоит из трёх полей «ID», «День» и «День недели». Поле «День» содержит дни месяца и этому полю присвоен тип целых чисел. Поле «День недели» содержит дни недели, и этому полю присвоен текстовый тип. Первое поле «ID» таблицы является ключевым. В БД Microsoft Access ключевое поле — это одно или несколько полей, комбинация значений которых однозначно определяет каждую запись в таблице. Цель ключевых полей состоит в быстром поиске и связи данных из разных таблиц при помощи  запросов, форм и отчётов. Первые поля двух приведённых ниже таблиц являются также ключевыми. 


    В таблице «Расписание» (см. Табл. 9) находится расписание авиарейсов, а именно номер рейса, числа месяца, названия аэропортов и время прилёта самолётов. В таблице «Авиакомпании» (см. Табл. 10) находятся номера рейсов,  названия самолётов и названия соответствующих авиакомпаний.


    Наша цель – сформулировать запросы на некоторые необходимые данные из нескольких таблиц БД. Это возможно, если таблицы частично располагают общей информацией.  В базе данных необходимо заранее построить схему данных с помощью средств Microsoft Access, определяющую логические связи между таблицами. На следующем рисунке показана такая схема данных, составленная для таблиц «Расписание», «Календарь» и «Авиакомпании». 


    Обе таблицы «Расписание рейсов» и  «Календарь» содержат в поле «день» информацию о днях месяца. Таким образом, некоторой записи в таблице «Расписание» соответствует некоторая запись в таблице «Календарь», если дни месяца в этих записях совпадают. Задав запрос «В какой день недели осуществляется рейс 232?», СУБД определит, сначала какие таблицы содержат дни недели, какие таблицы содержат номера рейсов и установит, связаны ли эти таблицы между собой схемой данных. В данном случае результатом запроса будет информация, одновременно соответствующая записям из обеих таблиц, то есть с одинаковыми днями месяца.  Результатом запроса является день недели —  понедельник.

    Пример 16

    По построенной выше базе данных рейсов самолётов и построенной схеме данных, связывающих таблицы, определите результат запроса  «Каким самолётом осуществляется рейс в `6:43` седьмого числа?».

    Решение

    Таблицы «Расписание» и «Авиакомпании» имеют общие поля «рейсы».  Номер рейса из таблицы «Авиакомпании» можно соотнести с таким же номером рейса из таблицы «Расписание», если он там имеется. Построенная схема данных соотносит записи двух таблиц. С помощью схемы данных Microsoft Access может определить тип самолёта согласно записям таблицы «Авиакомпании», которая связана с таблицей «Расписание» полем «Рейс». Рейс, соответствующий заданному времени и дате прилёта,   определяется в таблице «Расписание» и равен `765`. Cоответствующий этому рейсу самолёт определяется по схеме данных в таблице «Авиакомпании».  Согласно таблице рейсу `765` соответствует самолёт Airbus-`380`.

  • § 15. Операции с таблицами. Сортировка. Запросы. Формы. Отчёты

    Порядок строк в таблицах задаётся согласно порядку, по которому данные были внесены в таблицу. Однако во многих базах данных имеется возможность сортировки данных в таблицах. Наиболее распространённым видом сортировок в базах данных является упорядочивание информации по одному или нескольким столбцам. Для числовых данных упорядочивание проводится по возрастанию или убыванию значений. Аналогично, упорядочивание символьных данных состоит в расположении их в алфавитном порядке. Например, упорядочивание по цене БД в Табл. 7:

    Автомобиль

    Длина

    Ширина

    Высота

    Масса

    Цвет

    Цена

    Renault Sandero

    `4,020`

    `1,750`

    `1,534`

    `2300`

    серый

    `337`

    Toyota Yaris

    `3,750`

    `1,660`

    `1,500`

    `1120`

    красный

    `350`

    Peugeot 207

    `4,030`

    `1,720`

    `1,472`

    `1580`

    белый

    `450`

    Lada Largus

    `4,470`

    `1,750`

    `1,636`

    `1260`

    синий

    `504`

    Suzuki Swift

    `3,850`

    `1,800`

    `1,510`

    `1400`

    зелёный

    `560`

    Табл. 7


    Наиболее важной возможностью баз данных является автомати­ческий поиск информации. Поиск данных в базе данных - это отбор данных по чётко определённой комбинации признаков. Основой для поиска информации в базах данных служат специальные команды под названием запросы. Совокупность запросов, по которым можно получить информацию, считается главной характеристикой баз данных. Запросы в базах данных подразделяются на простые и сложносоставные. В простых запросах указывается имя одного из столбцов и некоторое значение. Примеры простых запросов:

    запрос:            автомобиль = Suzuki Swift

    запрос:                                    цвет = белый

    Ответами на запросы будут строки из таблицы приведённого типа. На первый запрос – строка, в которой в графе «автомобиль» стоит «Suzuki Swift», а на второй запрос – строка со значением «белый» в графе «цвет».

    Для числовых значений в запросах могут стоять знаки «больше» или «меньше». Примеры соответствующих запросов:

    запрос:            длина `> 3,800`

    запрос:                   масса `<= 1200`

    Ответами на эти запросы также будут одна или несколько строк из таблицы, в которых «длина» или «масса» будут удовлетворять указанным условиям. Но возможно, что поиск окажется безрезультатным, если ни одна строка в таблице не удовлетворяет заданным условиям.

    Сложносоставные запросы образуются из простейших с исполь­зованием логических связок «и» и «или». Примеры сложносоставных запросов:

    запрос: масса `< 1400` и цвет = зеленый

    запрос: цвет = синий или цвет = красный

    Ответами на составные запросы со связкой «и» будут все строки таблицы, удовлетворяющие обоим условиям. Ответами на запросы со связкой «или» будут все строки таблицы, которые удовлетворяют первому или второму условию, либо и тому и другому одновременно.

    Пример 14

    Выявите победителя по результатам соревнований по тяжёлой атлетике согласно таблице. Воспользуйтесь сортировкой по возрастанию и убыванию. Как выглядит запрос, определяющий спортсменов, взявших в рывке более `149` кг и при этом весивших менее `78,5`?

    Примечание. Каждый атлет имеет три попытки в рывке и три попытки в толчке. Самый тяжёлый вес поднятой штанги в каждом упражнении суммируется в общем зачёте. Если спортсмен потерпел неудачу во всех трёх попытках в рывке, он может продолжить соревнование в толчке, но уже не сможет занять какое-либо место по сумме двух упражнений. Если два спортсмена заканчивают состязание с одинаковым результатом, высшее место присуждается спортсмену с меньшим весом. Если же вес спортсменов одинаков, преимущество отдаётся тому, кто первым поднял победный вес.

    Решение

    Сначала отсортируем таблицу по убыванию значения «взято в рывке» + «взято в толчке». В результате видно, что атлеты Петрушкин и Михальчук в сумме двух испытаний подняли одинаковый максимальный вес. Из двух спортсменов Михальчук весит меньше и является победителем. Запрос спортсменов, взявших в рывке более `149` кг и при этом весивших менее `78,5` таков: «взято в рывке» `> 149` И «вес» `< 78,5`.

    Пример 15

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

    Сколько учащихся в таблице удовлетворяют условию «Фамилия `=`’*о*’ И (Математика`>50` И Русский язык`>50`)»?

    Решение

    Условию «фамилия = ’*о*’» удовлетворяют все, кроме Васина и Папайчика, в их фамилиях не содержится буква «о». Среди остальных учащихся ученик Травинов удовлетворяет второму условию, он единственный набрал более `50` баллов по математике и русскому языку.

    Помимо запросов и сортировки данных БД в Microsoft Access имеется средство фильтрации записей по некоторому критерию.  Например, в поле «Информатика» из таблицы из примера выше можно задать фильтр, отображающий записи, в которых балл по информатике равен `49`. Одна запись удовлетворяет такому фильтру и только она будет отображена после того, как фильтр будет применён к таблице. В Microsoft Access предусмотрено четыре способа отбора записей с помощью фильтров: фильтр по выделенному фрагменту, обычный фильтр, поле Фильтр для (Filter For) и расширенный фильтр.

    Фильтр по выделенному фрагменту позволяет найти все записи, содержащие определённое значение в выбранном поле. Обычный фильтр используется для отбора записей по значениям нескольких полей. Для создания сложных фильтров следует использовать расширенный фильтр.

    Наряду с запросами, сортировкой и фильтрами в БД Microsoft Access имеются средства для ввода, редактирования, а также вывода табличных данных, называемые формой и отчётом.

    Форма

    это средство работы с БД, предназначенное для изменения и ввода данных в существующие таблицы и вывода результатов на экран монитора. Изменение данных с помощью форм в таблицах баз данных проводится по эле­ментам строк, а добавление информации производится вводом новых строк. Помимо формы, существует специальное средство формирования результирующих данных и вывода их на принтер, называемое отчётом. Для ознакомления с правилами создания и правилами работы с формами и отчётами вы можете обратиться к дополнительной литературе.

     

  • § 14. Типы полей базы данных Microsoft Access

    Помимо   текстового   и   числового   типа   данных   полей   в  СУБД Microsoft Access существует несколько дополнительных типов данных. Приведём краткое описание всех типов:

    Текстовый (Text)

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

    Поле MEMO (MEMO)

    поле MEMO предназначено для ввода текстовой информации, по объёму превышающей `255` символов. Такое поле может содержать до `65535` символов. Этот тип данных отличается от типа Текстовый (Text) тем, что в таблице хранятся не сами данные, а ссылки на блоки данных, хранящиеся отдельно. За счёт этого ускоряется обработка таблиц (сортировка, поиск и т. п.).

    Числовой (Number)

    числовой тип применяется для хранения числовых данных, используемых в математических расчётах. Существует несколько  подтипов числового типа. От выбора подтипа данных числового типа зависит размер данных и точность вычислений.  Данные числового типа могут содержаться в `1`, `2`, `4`, `8` или `16` байтах. Подтип целые числа используется для представления целых чисел от `-32768` до `32767`, при этом числа занимают `2` байта памяти ЭВМ. Длинные целые числа занимают `4` байта памяти и используются для целых чисел от `-2147483648` до `2147483647`. Одинарные числа с плавающей точкой занимают `4` байта и используются для чисел от `-3.402823`E`38` до `3.402823`E`38` (здесь знак E`38` означает произведение на число 10, возведённое в `38` степень). Двойные числа с плавающей точкой – занимают `8` байтов памяти. Этот подтип чисел также называется числами двойной точности и используются для чисел в диапазоне примерно от  `-1`E`308` до `1`E`308`.

    Дата/Время (Date/Time)

    тип для представления даты и времени. Позволяет вводить даты с сотого по `9999`-ый год. Размер этого поля — `8` байтов. Даты и время хранятся в специальном фиксированном числовом формате. Дата является целой частью значения поля типа Дата/Время, а время — его дробной частью. Access предоставляет большой выбор форматов отображения даты и времени.

    Денежный (Currency)

    тип данных, предназначенный для хранения данных, точность представления которых колеблется от `1` до `4` десятичных знаков. Целая часть данного типа может содержать до `15` десятичных знаков.

    Счётчик (AutoNumber)

    поле содержащее `4`-байтный уникальный номер, определяемый Microsoft Access автоматически для каждой новой записи либо случайным образом, либо путём увеличения предыдущего значения на `1`. Значения полей типа счётчика обновлять нельзя. Максимальное число записей в таблице с полем счётчика не должно превышать двух миллиардов.

    Логический (Yes/No)

    логическое поле, которое может содержать только два значения, интерпретируемых как Да/Нет, Истина/Ложь, Включено/Выключено.  Microsoft Access использует величину `1` для представления значения Истина и величину `0` — для значения Ложь.

    Поле объекта OLE (OLE object)

    содержит ссылку на OLE-объект (документ Microsoft Word, звук, рисунок и т. п.). 

    Гиперссылка (Hyperlink)

    даёт возможность хранить в поле ссылку, с помощью которой можно ссылаться на произвольный фрагмент данных внутри файла или Web-страницы на том же компьютере, в интранет или в Интернет.


  • § 13. Реляционные базы данных. Операции с таб-лицами

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

    База данных (БД)

    это совокупность данных, хранящихся в долговре­менной памяти ЭВМ и допускающих определённые способы поиска информации. В форме баз данных может храниться различная информация такая как: расписание движения самолётов, поездов или автобусов, сведения о наличии товаров в магазине или на складе, сведения об учениках и преподавателях, информация о книгах в библиотеке и многое другое. С понятием БД тесно связано понятие системы управления базой данных. 


    Системы управления базой данных  (СУБД) — это комплекс программных средств, предназначенных для создания БД, ввода информации в БД, редактирования содержимого и визуализации информации.

    Информация в базах данных может быть организована несколь­кими способами. База данных, информация в которой организована  в виде таблиц, является наиболее простой и распрост­ранённой формой баз данных. Такая БД называется реляционной. Каждая из таблиц в такой БД имеет строго определённое число столбцов, снабжённых именами и содержащими информацию определённого типа. Пример реляционной БД:


    Автомобиль

    Длина

    Ширина

    Высота

    Масса

    Цвет

    Цена

    Toyota Yaris

    `3,750`

    `1,660`

    `1,500`

    `1120`

    красный

    `350`

    Suzuki Swift

    `3,850`

    `1,800`

    `1,510`

    `1400`

    зелёный

    `560`

    Lada Largus

    `4,470`

    `1,750`

    `1,636`

    `1260`

    синий

    `504`

    Renault Sandero

    `4,020`

    `1,750`

    `1,534`

    `2300`

    серый

    `337`

    Peugeot 207

    `4,030`

    `1,720`

    `1,472`

    `1580`

    белый

    `450`

    Табл. 6. Пример реляционной БД


    Каждую строку таблицы реляционной БД называют записью, а столбцы таблицы – полями записи. В рассматриваемом примере таблица имеет семь полей: «автомобиль», «длина», «ширина», «высота», «масса», «цвет» и «цена». Каждое поле определяется уникальным именем, типом данных и размером. Поле может содержать данные нескольких типов, из которых основные типы – это числовой и текстовый. Так в столбцах «автомобиль» и «цвет» записаны текстовые данные, а в остальных столбцахчисловая информа­ция. В виде строк в реляционных базах данных записываются данные об объектах, людях или вещах. В приведённом примере данные, например, автомобиля  Renault Sandero записаны в четвёртой строке.

  • § 12. Графики и диаграммы

    Для наглядного представления числовых данных электронные процессоры позволяют строить диаграммы.

    Диаграмма

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

    Электронные таблицы Excel позволяют строить диаграммы различных типов. Наиболее распространённые типы диаграмм представлены в таблице.


    Гистограмма

    Линейчатая

    График

    Круговая

    Точечная

    С областями

    Кольцевая

    Лепестковая

    Табл. 5


    Основными элементами диаграммы являются область построения, ось значений, ось категорий, легенда данных, ряды данных и линии сетки. Рассмотрим пример, поясняющий назначения элементов диаграммы.

    Пример 13

    Ниже представлена электронная таблица с результатами тестирования учащихся по стобалльной шкале.

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

    Решение

    Для построения диаграммы средствами Microsoft Excel сначала необходимо определить диапазон ячеек, значения которых необходимо отобразить на диаграмме. В нашем случае `"C"4:"G"4` является необходимым диапазоном значений диаграммы. Тогда построенная диаграмма выглядит следующим образом.

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

  • § 11. Функции и логические выражения в электронных таблицах

    В электронных таблицах широко используются логические выражения, такие как IF()/ЕСЛИ(), NOT/НЕ, логическое умножение AND()/И()  и логическое сложение OR/ИЛИ. При работе с формулами в электронной таблице возможно использование функций, подобно использованию функций во многих языках программирования. Функция характеризуется названием, предназначением, количеством аргументов, типом аргументов и типом возвращаемого значения. Приведём пример часто используемых функций.


    Функции и логические выражения

    Англоязычная форма

    Русифицированная

    форма

    Среднее арифметическое

    AVERAGE `("A"1:"A"5)`

    СРЗНАЧ `("A"1:"A"5)`

    Сумма

    SUM `("A"1:"A"5)`)

    СУММ `("A"1:"A"5)`

    Максимальное значение

    MAX `("A"1:"A"5)`

    МАКС `("A"1:"A"5)`

    Минимальное значение

    MIN `("A"1:"A"5)`

    МИН `("A"1:"A"5)`

    Остаток от деления

    MOD`("A"1:"A"2)`

    ОСТАТ `("A"1:"A"2)`

    Целая часть числа

    INT `("A"1)`

    ЦЕЛОЕ `("A"1)`

    Табл. 3



    Из функций в таблице выше функция MOD `("A"1;"A"2)` – это функция, возвращающая остаток от деления числа, хранящегося в ячейке `"A"1`, на делитель, хранящийся в ячейке `"A"2`. При этом результат имеет тот же знак, что и делитель.

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

    Пример 11

    В электронной таблице значение формулы `=`AVERAGE `("A"1:"A"3)` равно `5`. А значение формулы `=`SUM `("A"1:"A"2)` равно `2`. Чему равно значение ячейки `"A"3`?

    Решение

    Среднее значение `"A"1`, `"A"2`, `"A"3` равно `5`, что значит `"A"1+"A"2+"A"3=15`. Тогда `"A"3` равно `15-("A"2+"A"1)=15-2=13`.

    Ответ

    `"A"3 =13`.

    Пример 12

    Дмитрий, Мария и Андрей сдавали два теста по биологии. Чтобы сдать их успешно, необходимо было получить за каждый тест не меньше `35` баллов и в сумме не меньше `80`. В таблице ниже приведены результаты тестов. Какую формулу нужно написать для ячейки `"D"2`?


    Примечание. В случае условных вычислений часто используется логическое выражение IF(усл; рез_и; рез_л). Русским эквивалентов выражения IF является выражение ЕСЛИ. В логическом выражении IF, как и в других выражениях с более, чем одним аргументом, аргументы разделяются знаком точка с запятой.  Первым аргументом функции IF является проверяемое условие.  Второй аргумент «рез_и» – это результат логического выражения IF, если проверяемое условие истинно. И третий аргумент «рез_л» –  это результат выражения IF, если проверяемое условие ложно.


    Решение

    Алгоритм вычисления значения ячейки `"D"2` может выглядеть так: «если `"B"2>``=35`,   

    `"C"2>` `=35` и `"B"2+"C"2>``=80`, то записать в ячейку `"D"2` «успешно», если нет – «не успешно». Воспользуемся логическими выражениями IF и AND. Логическое умножение AND() истинно, если все его аргументы истины.  Тогда формула в ячейке `"D"2` выглядит:

    `="IF"("AND"("B"2>``=35`; `"C"2>``=35`;  `("B"2+"C"2)>``=80)`; "успешно";  "неуспешно").  Так как адреса в формуле имеют относительный вид, то путём копирования формулы из ячейки `"D"2` мы свободно можем применить формулу для ячеек `"D"3` и `"D"4`.

  • § 10. Абсолютная и относительная адресация в формулах таблицы

    Как было показано выше в примере 7, электронная таблица позволяет автоматически пересчитывать значения ячеек при изменении исходных данных. Однако табличные процессоры позволяют вычислять значения не только в старых, но и в новых ячейках по формулам, ранее введённым в другие ячейки. Данное свойство табличного процессора напрямую связано с разными видами адресаций ячеек в таблице, о которых пойдёт речь дальше.

    Адреса ячеек, использующиеся в формулах ЭТ, могут быть трёх видов – абсолютнымиотносительными и смешанными. Рассмотрим каждый из них.


    В случае относительной адресации адреса ячеек, используемые в формулах, определены относительно места расположения формулы. При копировании формулы в новое положение таблицы адреса используемых в формуле ячеек меняются соответственно новому месту положения формулы. Например, в таблице на рисунке справа формулу в ячейке `"C"1` табличный процессор воспринимает так: умножить значение ячейки, расположенной на две ячейки левее на значение ячейки, расположенной на одну ячейку левее данной формулы. Тогда при копировании формулы в ячейку `"C"2` табличный процессор умножит значение ячейки `"A"2` на значение ячейки `"B"2`. Преимущество относительной адресации состоит в том, что при копировании ячейки в новое положение ссылки в копируемой формуле меняются автоматически. Однако на практике бывает так, что адрес ячейки, используемой в формуле, не должен меняться при копировании. В этом случае используется абсолютная адресация. В абсолютных адресах перед неизменяемым значением адреса ячейки ставится знак $, например $`"B"`$`2` – это абсолютный адрес ячейки `"B"2`. Поясним преимущества относительного адреса и использование абсолютного адреса на следующем примере.

    Пример 8

    Турфирма «Кругосвет» предоставляет путевки в Грецию, на Мальту и в Италию по ценам, указанным в долларах США. Составьте формулу для расчёта цен путёвок в европейской валюте ЕВРО согласно курсу, указанному в таблице.

    Решение

    Составим формулу расчёта цены путёвки в Грецию в ячейке `"C"4` так, чтобы, скопировав её в ячейки `"C"5` и `"C"6`, можно было автоматически вычислить значения цены на путёвки на Мальту и в Италию. Положение ячейки `"B"1` относительно ячеек `"C"4`, `"C"5` и `"C"6` различное, значит необходимо, чтобы в формуле `"C"4` адрес ячейки `"B"1` был абсолютным. Положение ячеек `"B"4`, `"B"5` и `"B"6` относительно `"C"4`, `"C"5`, `"C"6` одинаковое, а значит, адрес ячейки `"B"4` в формуле должен быть относительным. Тогда выражение `="B"4` _/_ $`"B"`$`1` является формулой расчёта цены путёвки в Грецию. Использование относительного адреса `"B"4` и абсолютного адреса $`"B"`$`1` позволяет скопировать формулу в ячейки `"C"5` и `"C"6` и  автоматически вычислить цены путёвок в остальные страны.

    В формулах возможно использование смешанной адресации, при которой один из компонентов адреса абсолютный, а другой - относительный. Например, в адресе `"B"`$`2` компонент по столбцу относительный, а компонент по строке абсолютный.


    Пример 9

    В ячейке `"B"1` электронной таблицы находится формула `="E"1+`$`"E"2`. Какой вид приобретёт формула после того, как содержимое ячейки `"B"1` скопируют в ячейку `"C"1`?


    Решение

    Так как относительное положение ячейки по строкам не изменилось, и в формуле используется относительная адресация по строкам, то строковая компонента нового адреса остаётся прежней и имеет вид `="X"1+"Y"2`, где адрес по столбцам `"X"` и `"Y"` необходимо определить. Адрес столбца ячейки `"E"1` относительный, и так как ячейка `"B"1` копируется в `"C"1` со смещением в один столбец вправо, то новый адрес столбца ячейки `"E"1` будет `"F"`. Адрес столбца ячейки $`"E"2` абсолютный, значит, он остаётся неизменным и равным `"E"`. Итак, получаем, что формула в новой ячейке принимает вид `="F"1+`$`"E"2`.


    Пример 10

    В ячейке `"C"2` записана формула `=`$`"B"`$`3+"D"2`. Какой вид она приобретёт после того, как содержимое ячейки `"C"2` скопируют в ячейку `"B"1`?

    Решение

    Адрес первой ячейки $`"B"`$`3` абсолютный, значит, он не изменится. Адрес ячейки `"D"2 `относительный по строке и по столбцу. Ячейка `"D"2` располагается в той же строке, что и ячейка `"C"2`, но в другом столбце `"D"` со смещением вправо на один столбец. Значит, адрес столбца ячейки `"D"2` в ячейке `"B"1` станет C, а по строке станет `1`, и полный вид формулы будет выглядеть `=`$`"B"`$`3+"C"1`.

  • §9. Типы данных электронной таблицы

    В электронных таблицах Micosoft Excel различаются три основных типа данных: текст, числа и формулы. Формулой в электронной таблице называется выражение, начинающееся со знака равенства и содержащее  адреса ячеек таблицы, математические функции, знаки математических операций, логические символы и числа-константы. Прежде чем рассмотреть текстовый и числовой типы данных, отметим, что данные таблицы распознаются табличным процессором согласно заданному в ячейке формату. Форматов ячеек ТП Microsoft Excel существует несколько: общий, текстовый, числовой, денежный, финансовый, формат дат и времени, процентный, дробный, экспоненциальный и специальный.

    Числовой формат

    это формат ячейки для отображения и работы с числовыми значениями в виде последовательности цифр, которые могут быть разделены десятичной запятой и начинаться с цифры, знака числа («`+`» либо «`-`») или десятичной запятой. Например, `237,45` или `-12,1`.


    Экспоненциальный формат

    это формат ячейки для отображения и работы с числовыми значениями в экспоненциальном представлении. Числа в экспоненциальном формате представляются в виде `x"E"+-n`, где `x` — целое число или десятичная дробь, `n` — целое число. Пример, `1,2"E"+5` или `1,225"E"+5`.


    Денежный формат

    это формат ячейки для отображения и работы с  денежными величинами в заранее заданной пользователем валюте. Например, `342,23`р. или `12,2634`р.


    Специальный формат 

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


    Итак, мы выяснили, что каждому формату ячеек соответствует определённый формат данных.

    Числовой тип

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


    И наконец,

    текстовый тип данных

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

    Общий формат ячейки

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


    Замечание.

    Числа, даты, время, проценты, финансы, денежные значения, дробные и экспоненциальные числа и специальные данные табличный процессор выравнивает по правому краю ячейки, а текст - по левому. Необходимо помнить, что если формат ячейки текстовый, и в ячейке хранится последовательность цифр, то этот набор цифр ТП Microsoft Excel будет распознавать как текст.

    Итак, табличный процессор распознаёт содержимое ячейки в зависимости от выбранного формата ячейки. Пусть, в ячейке содержатся следующие цифры: `230199`. Если в ячейке установлен текстовый формат, цифры будут восприняты как символы `2`, `3`, `0`, `1`, `9`, `9`. Они же могут быть проинтерпретированы табличным процессором как число, если установлен числовой формат. Если же в ячейке установлен общий формат, то цифры будут распознаны как число `230199`.


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

    Пример 7

    В ячейку `"A"2` таблицы (см. Ввод формулы ) введена формула `="B"1+"C"3**"B"1`. Какое значение отобразиться в ячейке `"A"2`? Измениться ли значение формулы, если изменить значение ячейки `"B"1` на `4`?

    Табл. 2


    Решение

    Формула обеспечивает сложение числа, хранящегося в ячейке `"B"1`, с числом, хранящимся в ячейке `"C"3`, умноженным на число, хранящееся в ячейке `"B"1`. Таким образом в ячейке `"A"2` появиться число `3+2^(**)3= 9`.


    В электронной таблице можно автоматически найти значение формулы для других исходных данных, только лишь изменив исходные данные на новые. Например, изменив значение ячейки `"B"1` на `4`, в ячейке `"A"2` автоматически отобразиться новое значение `4+2^(**)4= 12`.

  • §8. Структура электронной таблицы

    Большинство табличных процессоров имеет схожую структуру. Поэтому, изучив один из табличных процессоров, можно легко освоить работу с другими. В данном задании мы рассмотрим ТП Microsoft Excel.

    Основными элементами электронной таблицы являются столбцы и строки. Пересечение строки и столбца образует минимальный элемент электронной таблицы, называемый ячейкой. Каждая ячейка обладает адресом (ссылкой), который состоит из названия столбца, состоящего из латинских букв, и номера строки, состоящего из чисел. Столбцы в электронной таблице располагаются в алфавитном порядке, а строки – в порядке возрастания числа, как изображено на рисунке справа. Так, например,  ячейка,  располагающаяся в столбце «`"B"`» и строке «`2`», имеет адрес `"B"2` соответственно.

    В электронной таблице возможна работа с выборочным множеством данных. Для этой цели ячейку с необходимыми данными можно выделить курсором в виде рамки. Выделенная ячейка называются активной. Выделенная область прямоугольной формы, состоящая из нескольких ячеек, называется диапазоном ячеек. Пример двух диапазонов изображён на рисунке справа. Диапазон обозначается с помощью двоеточия, разделяющего адреса ячеек, которые располагаются в противоположных углах прямоугольной области, например `bb"A1":bb"B2"` и `bb"D2":bb"E3"`. Два диапазона, изображённые на рисунке, также могут образовывать один общий диапазон, обозначающийся с помощью точки с запятой `bb"A1":bb"B2"`;`bb"D2":bb"E3"`.

  • §7. Электронные таблицы и табличные процессоры

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

    Электронная таблица (ЭТ)

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

    Табличными процессорами (ТП)

    называются прикладные программы, позволяющие пользователю обрабатывать и анализировать электронные таблицы. Существует большое количество различных табличных процессоров: VisiCalc, Microsoft Excel, SuperCalc, Multiplan и другие. Основное назначение табличного процессора состоит в автоматизации расчётов в табличной форме. Любой ТП обладает следующими функциями:

    1) редактирование и добавление новой информации в ЭТ;

    2) создание данных, зависящих от исходных данных, с целью анализа и обработки исходных данных;

    3) графическое представление информации в виде графика или диаграмм.

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