1.Информация. Меры информации по Хартли. Термин "информация" происходит от латинского слова "informatio", что означает сведения, разъяснения, изложение. В настоящее время наука пытается найти общие свойства и закономерности, присущие многогранному понятию информация, но пока это понятие во многом остается интуитивным и получает различные смысловые наполнения в различных отраслях человеческой деятельности: •в обиходе информацией называют любые данные или сведения, которые кого-либо интересуют. Например, сообщение о каких-либо событиях, о чьей-либо деятельности и т.п. "Информировать" в этом смысле означает "сообщить нечто, неизвестное раньше"; •в технике под информацией понимают сообщения, передаваемые в форме знаков или сигналов; •в кибернетике под информацией понимает ту часть знаний, которая используется для ориентирования, активного действия, управления, т.е. в целях сохранения, совершенствования, развития системы. Информация — это обозначение содержания, полученного из внешнего мира в процессе нашего приспособления к нему и приспособления к нему наших чувств (Н. Винер) Люди обмениваются информацией в форме сообщений. Сообщение — это форма представления информации в виде речи, текстов, жестов, взглядов, изображений, цифровых данных, графиков, таблиц и т.п. Информация есть характеристика не сообщения, а соотношения между сообщением и его потребителем. Без наличия потребителя, хотя бы потенциального, говорить об информации бессмысленно. Информацию можно: создавать; передавать; воспринимать; иcпользовать; запоминать; принимать; копировать; формализовать; распространять; преобразовывать; комбинировать; обрабатывать; делить на части; упрощать; понятность; доступность; краткость; и др. Свойства информации: достоверность; полнота; ценность; своевременность; Информация может существовать в виде: текстов, рисунков, чертежей, фотографий; световых или звуковых сигналов; радиоволн; электрических и нервных импульсов; собирать; хранить; искать; измерять; разрушать; и др. магнитных записей; жестов и мимики; запахов и вкусовых ощущений; хромосом, посредством которых передаются по наследству признаки и свойства организмов и т.д. Информация передаётся в форме сообщений от некоторого источника информации к её приёмнику посредством канала связи между ними. Источник посылает передаваемое сообщение, которое кодируется в передаваемый сигнал. Этот сигнал посылается по каналу связи. В результате в приёмнике появляется принимаемый сигнал, который декодируется и становится принимаемым сообщением. В определенных, весьма широких условиях можно пренебречь качественными особенностями информации, выразить её количество числом, а также сравнить количество информации, содержащейся в различных группах данных. Американский инженер Р. Хартли в 1928 г. процесс получения информации рассматривал как выбор одного сообщения из конечного наперёд заданного множества из N равновероятных сообщений, а количество информации I, содержащееся в выбранном сообщении, определял как двоичный логарифм N. Формула Хартли: I = log2N Допустим, нужно угадать одно число из набора чисел от единицы до ста. По формуле Хартли образом, сообщение о верно угаданном числе приблизительно равное 6,644 единицы информации. содержит количество информации, 2.Меры информации по Шеннону и Колмогорову.(Колмогорова в лекциях вообще нету так что пусть не урчит) Клод Шеннон, американский учёный, заложивший основы теории информации — науки, изучающей процессы, связанные с передачей, приёмом, преобразованием и хранением информации, — рассматривает информацию как снятую неопределенность наших знаний о чем-то. Для задач на вероятность американский учёный Клод Шеннон предложил в 1948 г.формулу определения количества информации, учитывающую возможную неодинаковую вероятность сообщений в наборе. Формула Шеннона: I = — ( p1log2 p1 + p2 log2 p2 + . . . + pN log2 pN), где pi — вероятность того, что именно i-е сообщение выделено в наборе из N сообщений. Легко заметить, что если вероятности p1, ..., pN равны, то каждая из них равна 1 / N, и формула Шеннона превращается в формулу Хартли. Помимо двух рассмотренных подходов к определению количества информации, существуют и другие. Важно помнить, что любые теоретические результаты применимы лишь к определённому случаев, очерченному первоначальными допущениями. кругу 3.Структура ЭВМ. Команды и программы. Исполнение команд. Компьютер (англ. computer — вычислитель) представляет собой программируемое электронное устройство, способное обрабатывать данные и производить вычисления, а также выполнять другие задачи манипулирования символами. Основу компьютеров образует аппаратура (HardWare), построенная, в основном, с использованием электронных и электромеханических элементов и устройств. Принцип действия компьютеров состоит в выполнении программ (SoftWare) — заранее заданных, четко определённых последовательностей арифметических, логических и других операций. Команда — это описание операции, которую должен выполнить компьютер. Как правило, у команды есть свой код (условное обозначение), исходные данные (операнды) и результат. Совокупность команд, выполняемых данным компьютером, называется системой команд этого компьютера. Выполнение команд Выполнение команды можно проследить по схеме: Общая схема компьютера 4.Архитектуры вычислительных систем. Архитектурой компьютера называется его описание на некотором общем уровне, включающее описание пользовательских возможностей программирования, системы команд, системы адресации, организации памяти и т.д. Архитектура определяет принципы действия, информационные связи и взаимное соединение основных логических узлов компьютера: процессора, оперативного ЗУ, внешних ЗУ и периферийных устройств. Общность архитектуры разных компьютеров обеспечивает их совместимость с точки зрения пользователя. Классическая архитектура (архитектура фон Неймана) — одно арифметико-логическое устройство (АЛУ), через которое проходит поток данных, и одно устройство управления (УУ), через которое проходит поток команд — программа Это однопроцессорный компьютер. К этому типу архитектуры относится и архитектура персонального компьютера с общей шиной. Все функциональные блоки здесь связаны между собой общей шиной, называемой также системной магистралью. Многопроцессорная архитектура. Наличие в компьютере нескольких процессоров означает, что параллельно может быть организовано много потоков данных и много потоков команд. Таким образом, параллельно могут выполняться несколько фрагментов одной задачи. Структура такой машины, имеющей общую оперативную память и несколько процессоров. Архитектура с параллельными процессорами. Здесь несколько АЛУ работают под управлением одного УУ. Это означает, что множество данных может обрабатываться по одной программе — то есть по одному потоку команд. Высокое быстродействие такой архитектуры можно получить только на задачах, в которых одинаковые вычислительные операции выполняются одновременно на различных однотипных наборах данных. 5.Представление данных в ЭВМ. Типы данных. Погрешности решения задач в ЭВМ. Одно и то же число может быть записано в различных формах 452,34 = 452340·10-3 = 0,0045234·105 = 0,45234·103 Естественная форма Нормальная форма Машинным изображением числа называют его представление в разрядной сетке ЭВМ. Числа в ЭВМ также могут быть представлены в двух формах 1) Естественная (с фиксированной запятой ФЗ) 2) Нормальная или полулогарифмическая (с плавающей запятой ПЛЗ) В форме с ФЗ в разрядной сетке выделяется строго определенное число разрядов для целой и для дробной частей числа. Левый (старший) разряд хранит признак знака (0 – "+", 1 – "-") и для записи числа не используется. Сама запятая никак не изображается, но ее место строго фиксировано и учитывается при выполнении всех операций с числами. Независимо от положения запятой в машину можно вводить любые числа, т.к. A = [A] · KA где А – произвольное число [A] – машинное изображение числа в разрядной сетке KA - масштабный коэффициент. С целью упрощения разработки программ запятую часто размещают сразу после знака числа, тогда -1< [A] <1, т.е. в ЭВМ хранятся только правильные дроби в диапазоне ±[A]min = 0,0000….1 = 2-n до ±[A]max = 0,1111….1 = 1 – 2-n (n – количество разрядов для хранения дробной части). Второй распространенный вариант – использование целочисленной арифметики, когда запятая фиксируется на правом краю разрядной сетки. При любом выборе места запятой максимальная абсолютная погрешность представления числа - единица младшего разряда разрядной сетки. Для машинного представления чисел с ПЛЗ используют формулу [A] =m·2P, где m мантисса (|m|<1), а р – порядок (целое число). В разрядной сетке выделяется определенное количество разрядов для хранения мантиссы и порядка с их знаками. Основание системы счисления (2) нигде не хранится, но используется при вычислениях. Существуют форматы с другим размещением мантиссы и порядка в разрядной сетке. Для каждого числа существует множество нормальных форм: 0,25 = 0,25·100= 0,025·101 = 0,0025·102 При увеличении порядка происходит сдвиг мантиссы вправо, младшие разряды могут выйти за пределы разрядной сетки, что уменьшит точность представления чисел. Поэтому для представления чисел с ПЛЗ используется нормализованная форма записи, когда первая цифра мантиссы должна быть обязательно значащей. (двоичная единица): В большинстве языков программирования существуют следующие базовые типы данных: целый, вещественный, строковый, логический. Тип Описание Диапазон значений нат натуральные числа от 1 ДО — ∞ цел целые числа от — ∞ до + ∞ действ действительные числа, десятичные дроби от — ∞ до + ∞ любые символы или группы лит литерный (строковый) символов лог логический истина, ложь При решении задачи на ЭВМ практически невозможно получить точное решение. Получаемое численное решение почти всегда содержит погрешность, т.е. является приближенным. Погрешности решения задач на ЭВМ объясняются следующими причинами: 1) математическая модель задачи является приближенным описанием реального объекта или процесса. Поэтому получаемые результаты также всегда будут приближенными, а их погрешности зависят от степени адекватности моделей реальному объекту или процессу; 2) исходные данные при решении вычислительной задачи, как правило, содержат погрешности. Это объясняется тем, что исходные данные получают в результате экспериментов, наблюдений, измерений или в результате решения вспомогательных задач; 3) применяемые для решения вычислительных задач методы в большинстве случаев являются приближенными, так как получить аналитическое решение задачи обычно не удается; 4) использование ЭВМ вносит ошибки, которые появляются при вводе-выводе данных в процессе вычислений. 6.Операционные системы. Операционная система — это комплекс взаимосвязанных системных программ, назначение которого — организовать взаимодействие пользователя с компьютером и выполнение всех других программ. Операционная система выполняет роль связующего звена между аппаратурой компьютера, с одной стороны, и выполняемыми программами, а также пользователем, с другой стороны. Операционная система обычно хранится во внешней памяти компьютера — на диске. При включении компьютера она считывается с дисковой памяти и размещается в ОЗУ. Этот процесс называется загрузкой операционной системы. В функции операционной системы входит: осуществление диалога с пользователем; ввод-вывод и управление данными; планирование и организация процесса обработки программ; распределение ресурсов (оперативной памяти и кэша, процессора, внешних устройств); запуск программ на выполнение; всевозможные вспомогательные операции обслуживания; передача информации между различными внутренними устройствами; программная поддержка работы периферийных устройств (дисплея, клавиатуры, дисковых накопителей, принтера и др.). Операционную систему можно назвать программным продолжением устройства управления компьютера. Операционная система скрывает от пользователя сложные ненужные подробности взаимодействия с аппаратурой, образуя прослойку между ними. В результате этого люди освобождаются от очень трудоёмкой работы по организации взаимодействия с аппаратурой компьютера. В зависимости от количества одновременно обрабатываемых задач и числа пользователей, которых могут обслуживать ОС, различают четыре основных класса операционных систем: 1. однопользовательские однозадачные, которые поддерживают одну клавиатуру и могут работать только с одной (в данный момент) задачей; 2. однопользовательские однозадачные с фоновой печатью, которые позволяют помимо основной задачи запускать одну дополнительную задачу, ориентированную, как правило, на вывод информации на печать. Это ускоряет работу при выдаче больших объёмов информации на печать; 3. однопользовательские многозадачные, которые обеспечивают одному пользователю параллельную обработку нескольких задач. Например, к одному компьютеру можно подключить несколько принтеров, каждый из которых будет работать на "свою" задачу; 4. многопользовательские многозадачные, позволяющие на одном компьютере запускать несколько задач нескольким пользователям. Эти ОС очень сложны и требуют значительных машинных ресурсов. В различных моделях компьютеров используют операционные системы с разной архитектурой и возможностями. Для их работы требуются разные ресурсы. Они предоставляют разную степень сервиса для программирования и работы с готовыми программами. Операционная система для персонального компьютера, ориентированного на профессиональное применение, должна содержать следующие основные компоненты: программы управления вводом/выводом; программы, управляющие файловой системой и планирующие задания для компьютера; процессор командного языка, который принимает, анализирует и выполняет команды, адресованные операционной системе. Каждая операционная система имеет свой командный язык, который позволяет пользователю выполнять те или иные действия: обращаться к каталогу; выполнять разметку внешних носителей; запускать программы; ... другие действия. Анализ и исполнение команд пользователя, включая загрузку готовых программ из файлов в оперативную память и их запуск, осуществляет командный процессор операционной системы. Для управления внешними устройствами компьютера используются специальные системные программы — драйверы. Драйверы стандартных устройств образуют в совокупности базовую систему ввода-вывода (BIOS), которая обычно заносится в постоянное ЗУ компьютера. 7. Решение задач на ЭВМ. Погрешности решения задач в ЭВМ. Основные этапы решения задач на ЭВМ: 1. 2. 3. 4. 5. 6. Постановка задачи Определение методов решения Составление алгоритмов Написание программ для ЭВМ Отладка программ на ЭВМ Получение результатов на ЭВМ Постановка задач Постановка задач - точное и четкое определение требуемых результатов и исходных условий в задачах. Результаты - правильные, если они отвечают требованиям поставленных задач. Результаты - неправильные, если они противоречат поставленным требованиям. Задачи могут быть частными (конкретными) и обобщенными (массовыми). Определение методов решения Метод решения - это общий способ решения некоторого класса задач. Способ решения - правильный, если он дает правильные результаты. Способ решения - неправильный, если он дает неправильные результаты. Способ - последовательность действий, ведущая к получению результатов. Метод решения - правильный, если он дает правильные результаты для любых исходных данных поставленной задачи. Составление алгоритмов Алгоритмизация - это составление алгоритмов для решения задач на ЭВМ.Исходным для решения задач на ЭВМ является точная постановка задач с четким выделение требуемого и исходного. Алгоритм - результативный, если его выполнение приводит к получению результатов. Алгоритм - правильный, если он дает правильные результаты для любых допустимых исходных данных. Алгоритм содержит ошибки, если для он дает неправильные результаты либо не дает результатов вообще для некоторых допустимых исходных данных. Написание и отладка программ на ЭВМ Программирование - написание программ для ЭВМ может производится тремя способами: 1. 2. 3. написание программы исходя из условий задачи. (традиционный способ) кодирование программ по детальным алгоритмам решения задач на ЭВМ совестная разработка алгоритмов и программ (структурное проектирование) Программа содержит ошибки, если ее выполнение на ЭВМ приводит к получению сбоев, отказов или получению не правильных результатов. Ошибки в алгоритмах программах - одна из самых серьезных проблем в информатике и профессиональном программировании. Отладка программ - поиск и исправление ошибок в программах на ЭВМ. Поскольку число ошибок неизвестно, то неизвестна и продолжительность отладки программ на ЭВМ. Отсутствие ошибок в программах проверяется их тестированием на ЭВМ. Тестирование может выявить ошибки, но не может гарантировать отсутствие ошибок в программах. (Дейкстра) Тестирование программ на ЭВМ Тестирование программ - это процесс проверки программ на ЭВМ с помощью тестов. Тесты - это наборы тестовых исходных данных с перечнем правильных результатам. Получение неправильных результатов, сбоев или отказов говорит о наличии ошибок в программах. Тестирование может показать наличие ошибок в программах на ЭВМ Набор тестов - структурно полный, если на этом наборе тестов выполняется каждая альтернатива, каждая последовательность и каждый цикл один или несколько раз. Тестирование не может гарантировать отсутствие ошибок в программах.Гарантии отсутствия ошибок может дать только исчерпывающий анализ правильности алгоритмов и программ. Анализ и доказательства правильности алгоритмов и программ можно и нужно проводить после структурно полного тестирования программ на ЭВМ. 8.Алгоритмы: линейные, разветвляющиеся, циклические. Название "алгоритм" произошло от латинской формы имени величайшего среднеазиатского математика Мухаммеда ибн Муса ал-Хорезми (Alhorithmi). Алгоpитм — заранее заданное понятное и точное пpедписание возможному исполнителю совеpшить определенную последовательность действий для получения решения задачи за конечное число шагов. Исполнитель алгоритма — это некоторая абстрактная или реальная (техническая, биологическая или биотехническая) система, способная выполнить действия, предписываемые алгоритмом. Основные свойства алгоритмов следующие: 1. Понятность 2. Дискpетность 3. Опpеделенность 4. Pезультативность 5. Массовость На практике наиболее распространены следующие формы представления алгоритмов: словесная (запись на естественном языке); графическая (изображения из графических символов); псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.); программная (тексты на языках программирования). Базовые алгоритмические структуры Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых (т.е. основных) элементов. Естественно, что при таком подходе к алгоритмам изучение основных принципов их конструирования должно начинаться с изучения этих базовых элементов. Для их описания будем использовать язык схем алгоритмов и учебный алгоритмический язык. Логическая представлена структура любого алгоритма может быть комбинацией трех базовых структур: следование, ветвление, цикл. Характерной особенностью базовых структур является наличие в них одного входа и одного выхода. 1. Базовая структура "следование". Образуется последовательностью действий, следующих одно за другим: Алгоритмический язык Язык блок-схем действие 1 действие 2 ......... действие n 2. Базовая структура "ветвление". Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран. Структура ветвление существует в четырех основных вариантах: если—то; если—то—иначе; выбор; выбор—иначе. Алгоритмический язык Язык блок-схем 1. если—то если условие то действия все 2. если—то—иначе если условие то действия 1 иначе действия 2 все 3. выбор выбор при при . . при все условие условие . . . . условие 1: действия 1 2: действия 2 . . . . . . N: действия N 4. выбор—иначе выбор при условие 1: действия 1 при условие 2: действия 2 . . . . . . . . . . . . при условие N: действия N иначе действия N+1 все Примеры структуры ветвление Алгоритмический язык если x > 0 то y := sin(x) все если a > b то a := 2*a; b := 1 иначе b := 2*b все Язык блок-схем выбор при n = 1: y := sin(x) при n = 2: y := cos(x) при n = 3: y := 0 все выбор при a > 5: i := i+1 при a = 0: j := j+1 иначе i := 10; j:=0 все 3. Базовая структура "цикл". Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла. Основные разновидности циклов представлены в таблице: Алгоритмический язык Язык блок-схем Цикл типа пока. Предписывает выполнять тело цикла до тех пор, пока выполняется условие, записанное после слова пока. нц пока условие тело цикла (последовательность действий) кц Цикл типа для. Предписывает выполнять тело цикла для всех значений некоторой переменной (параметра цикла) в заданном диапазоне. нц для i от i1 до i2 тело цикла (последовательность действий) кц Примеры структуры цикл Алгоритмический язык Язык блок-схем нц пока i <= 5 S := S+A[i] i := i+1 кц нц для i от 1 до 5 X[i] := i*i*i Y[i] := X[i]/2 кц 9.Языки программирования: ассемблеры и языки высокого уровня, интерпретаторы и компиляторы. Язык Basic. Операторы Basic. Язык ассемблера — это машинно-зависимый язык низкого уровня, в котором короткие мнемонические имена соответствуют отдельным машинным командам. Используется для представления в удобочитаемой форме программ, записанных в машинном коде. Язык ассемблера позволяет программисту пользоваться текстовыми мнемоническими (то есть легко запоминаемыми человеком) кодами, по своему усмотрению присваивать символические имена регистрам компьютера и памяти, а также задавать удобные для себя способы адресации. Языки высокого уровня были разработаны для того, чтобы освободить программиста от учета технических особенностей конкретных компьютеров, их архитектуры. По назначению языки высокого уровня делятся на 3 группы. 1 группа. Проблемно-ориентированные языки – предназначенные для решения частных задач обработки данных из конкретной прикладной области (языки САПР, СУБД, систем искусственного интеллекта). 2 группа. Процедурно-ориентированные языки – предназначенные для обработки данных, имеющих относительно простую структуру и позволяющие представлять алгоритм в виде комбинации таких процедур, как ввод-вывод, вычисление выражений, циклическое исполнение (языки Фортран, Бейсик). 3 группа. Универсальные языки – включают средства обработки данных сложной структуры, символьной информации, средства для создания нестандартных типов данных и инструментов для их обработки (языки C, Pascal, C++). Компилятор (англ. compiler — составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется. Интерпретатор (англ. interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой. После того, как программа откомпилирована, ни сама исходная программа, ни компилятор более не нужны. В то же время программа, обрабатываемая интерпретатором, должна заново переводиться на машинный язык при каждом очередном запуске программы. Откомпилированные программы работают быстрее, но интерпретируемые проще исправлять и изменять. Basic (Beginners All-purpose Symbolic Instruction Code — многоцелевой язык символических инструкций для начинающих) представляет собой простой язык программирования, разработанный в 1964 году для использования новичками в программировании. Операторы: Оператор PRINT позволяет выводить данные на экран. Оператор CLS очищает экран и используется без параметров Оператор INPUT дает возможность вводить данные во время выполнения программы, после чего эти данные обрабатываются программой. Появление на экране вопросительного знака означает запрос ввода. Ввод данных завершается нажатием клавиши , и введенное значение сохраняется в заданной переменной. Для перемещения курсора в требуемую позицию экрана, как правило, применяют оператор LOCATE. Оператор GOTO позволяет изменить последовательность выполнения шагов программы, но его применение нежелательно, так как увеличивается время выполнения, снижается наглядность . Оператор PRINT позволяет выводить данные на экран. Оператор CLS очищает экран и используется без параметров оператор INPUT дает возможность вводить данные во время выполнения программы, после чего эти данные обрабатываются программой. Появление на экране вопросительного знака означает запрос ввода. Ввод данных завершается нажатием клавиши , и введенное значение сохраняется в заданной переменной. Для перемещения курсора в требуемую позицию экрана, как правило, применяют оператор LOCATE. Оператор GOTO позволяет изменить последовательность выполнения шагов программы, но его применение нежелательно, так как увеличивается время выполнения, снижается наглядность и Оператор условного перехода в программе Этот оператор позволяет изменять порядок выполнения операторов в программе в зависимости от определенных условий. Синтаксис оператора: IF Условие THEN [Оператор 1-1] [Оператор 1-n] [ELSE [Оператор 2-1] [Оператор 2-m] END IF Цикл WHILE С помощью конструкции WHILE … WEND можно реализовать выполнение ряда операторов до тех пор, пока выполняется определенное условие. Последовательность операторов, выполнение которых повторяется циклически, называется циклом. WHILE Условие [Оператор_1] . . . [Оператор_n] WEND Цикл DO Конструкция DO...LOOP очень похожа на WHILE...WEND. Цикл FOR...NEXT Используя оператор FOR...NEXT, можно программировать циклы, количество прохождений которых зависит от значения счетчика. FOR Счетчик = Нач_значение ТО Кон_значение [STEP Шаг] [Оператор_1] . . . [Оператор_n] [EXIT FOR] NEXT Счетчик SELECT CASE предназначен для выполнения одного из альтернативных действий, перечисленных в нем. Выбор определяется значением управляющей переменной. Начнем с Функция LEN выдает длину строки, т.е. количество символов в строковом выражении. Функция LEFT$ выделяет крайние слева символы строки. Вызов функции: Функция RIGHT$ выделяет крайние справа символы строки. Вызов функции: Функция MID$ копирует из строки любой ее фрагмент Функция LCASE$ возвращает заданную строку в виде строчных букв Функция VAL преобразует число из строкового представления в числовое 10.Типы данных QBasic. Операторы ввода-вывода. Типы данных Как правило, любой программе необходимы данные, которые какимто образом обрабатываются программой. Эти данные могут быть совершенно различными. Так, в простейшем случае различают два типа данных: числовые и строковые. В QBASIC разные типы данных должны иметь четкие различия и признаки. Стандартные типы данных. В QBASIC можно объявить следующие стандартные типы данных: Тип Сим вол Содержание INTEGER LONG % & целые числа в интервале от -32 768 до +32 768 целые числа в интервале от -2 147483648 до +2 147483648 SINGLE ! числа с плавающей запятой в интервале от ±8,43*10-37 до ± 3,З7*1038 DOUBLE # числа с плавающей запятой в интервале от ±4,19*10-307 до ±1,67*10308 STRING $ любые тексты с максимальной длиной 32 767 знаков Примечание: Обработка данных типа INTEGER производится значительно быстрее, чем данных типа DOUBLE. Ввод/вывод В этом разделе Вы познакомитесь с операторами и функциями, которые реализуют вывод на экран и ввод с клавиатуры. 1. Вывод на экран Оператор PRINT позволяет выводить данные на экран. Синтаксис оператора PRINT: PRINT [Выражение] [{;|,} Выражение]...[{;|,} ] Выражение - Арифметическое или строковое выражение. Значение выражения выводится на экран. {;|,} - Устанавливает начало последующего вывода: ;: — значение очередного выражения следует непосредственно за значением предыдущего, , — значение очередного выражения размещается в начале следующей области вывода. Область вывода — блок из 14 символов. Если в конце PRINT-выражения нет ни знака ";", ни ",", то выполняется перевод строки, и вывод следующего значения начинается с новой строки. Примечание: Оператор LPRINT выводит данные на печатающее устройство (принтер). В остальном синтаксис LPRINT идентичен синтаксису оператора PRINT. 2. Очистка экрана. Оператор CLS очищает экран и используется без параметров. Следующий оператор вывода начинает размещение данных в левом верхнем углу экрана (первая строка, первый столбец). Пример: 'В данной программе демонстрируется очистка экрана CLS 'Экран очищен PRINT "Вывод в левый верхний угол, "; PRINT "остальное поле экрана свободно" 'Конец программы 3. Ввод с клавиатуры Описанный далее оператор INPUT дает возможность вводить данные во время выполнения программы, после чего эти данные обрабатываются программой. Появление на экране вопросительного знака означает запрос ввода. Ввод данных завершается нажатием клавиши , и введенное значение сохраняется в заданной переменной. INPUT [Текст{;|,}] Имя_переменной [, Имя_переменной]. Текст- Текст, который будет выведен на экран перед тем, как пользователь осуществит ввод. {;|,} - Точка с запятой обозначает, что после текста выводится знак вопроса для обозначения необходимости ввода данных. Если вместо точки с запятой стоит запятая, знак вопроса после текста не появится. Имя_переменной - Переменные, в которых сохраняются вводимые данные. Объявление переменных должно быть выполнено в начале программы. Пример 1: В приведенной ниже программе вводятся значения трех переменных — height!, breadth!, length!. Результат вычислений выводится на экран. 'Пример 1 DIM height!, breadth!, length! CLS INPUT height! INPUT breadth! INPUT length! PRINT PRINT "Результат "; height! * breadth! * length! 'Конец программы Пример 2: Предыдущая программа имеет очевидный недостаток, так как на экране не видно, что собственно требуется вводить. Однако в операторе INPUT имеется возможность перед каждым вводом данных выводить на экран текст. 'Пример 2 DIM height!, breadth!, length! CLS INPUT "Введите, пожалуйста, высоту :"; height! INPUT "Введите, пожалуйста, ширину :"; breadth! INPUT "Введите, пожалуйста, длину :"; length! PRINT PRINT "Результат V="; height! * breadth! * length! 'Конец программы Применение точки с запятой приводит к тому, что после вывода текста на экране появляется знак вопроса, вывод которого можно отменить, если точку с запятой заменить запятой. Предложение INPUT будет выглядеть так: INPUT "Введите, пожалуйста, высоту :", height! Примечание: Оператор INPUT проверяет, соответствует ли тип вводимой величины типу указанной переменной. Если число с плавающей запятой записать в переменную типа INTEGER, то вводимая величина будет округлена до ближайшего большего целого числа. Если текст вводится в числовую переменную, QBASIC отказывается воспринимать данные и выдает сообщение об ошибке — "Redo from start" (Начните еще раз). 4. Форматированный вывод на экран Следующий оператор служит для форматированного вывода данных на экран. Он очень похож на оператор PRINT. PRINT USING Шаблон Выражение [;] Шаблон- Определяет вид, в котором выводятся выражения. Выражение- Арифметическое или строковое выражение. Значение выражения появляется на экране, преобразованное шаблоном. Как и в операторе PRINT, точка с запятой подавляет перевод строки. Шаблон в операторе PRINT USING всегда заключен в двойные кавычки (""). Внутри кавычек находятся символы, определяющие формат вывода. 5. Позиционирование курсора Для перемещения курсора в требуемую позицию экрана, как правило, применяют оператор LOCATE. Это очень удобно, например, для создания сложных форм вывода на экран. LOCATE [Строка] [, [Столбец][,[Курсор] [,Старт[,[Стоп] ]]] Строка - Строка экрана (1-25), на которую должен переместиться курсор. Столбец - Столбец экрана (1-80), к которому должен переместиться курсор. Курсор - Указывает, в каком состоянии находится курсор при выводе. 0— выключен, 1 — включен. Старт, Стоп - Числа от 1 до 31, которые задают высоту курсора. Синтаксически команда выглядит достаточно сложной, но ситуацию упрощает то, что большинство параметров необязательны. Пример 1: После очистки первый вывод на экран должен быть в десятой строке. 'Вывод в десятую строку после CLS CLS LOCATE 10 PRINT "Вывод появляется в десятой строке экрана" 'Конец программы 6. Вывод пробелов Функция SPC в сочетании с оператором PRINT может выводить на экран пробелы. Это полезно, например, при оформлении вывода информации на экран. SPC (Значение) Значение - Арифметическое выражение типа INTEGER в диапазоне значений от 0 до 32767. Пример: CLS PRINT "Text Г; SPC(10); "Text 2" 7. Функция табуляции Функция TAB так же, как функция SPC, применяется в операторе PRINT. Позволяет начать вывод данных текущей строки с определенной позиции. TAB (Столбец) Столбец - Переменная типа INTEGER, задает номер столбца вывода данных текущей строки. Функция TAB очень полезна в случаях, когда с помощью оператора LPRINT требуется оформить наглядный листинг. 8. Остановка программы В основном любой алгоритм должен как-то заканчиваться, поэтому отсутствие необходимости использовать оператор END в последних версиях QBASICа, считается отрицательным его качеством. Но он всё же существует, и вставлять его в конец программы всё же стоит (потом пригодится). Также если хотите прервать вашу программу в любом её месте то надо использовать оператор STOP. Он останавливает выполнение программы на том месте, где стоит. 11.Программирование разветвляющихся алгоритмов в QBasic. Оператор условного перехода в программе Этот оператор позволяет изменять порядок выполнения операторов в программе в зависимости от определенных условий. Синтаксис оператора: IF Условие THEN [Оператор 1-1] [Оператор 1-n] [ELSE [Оператор 2-1] [Оператор 2-m] END IF Как видно из синтаксического описания, оператор IF состоит из THEN-ветви с операторами 11 ... 1-n и из ELSE-ветви, которая содержит операторы 2-1 ... 2-m. Если условие, заданное в операторе IF истинно, то выполняется THEN-ветвь, т.е. последовательно выполняются операторы 1-1 ... 1-n. В противном случае выполняются операторы 2-1... 2-m ELSE-ветви. После выполнения одной из ветвей работа программы продолжается с оператора, следующего за END IF, если ход выполнения программы не изменяется оператором GOTO. Если отсутствует ELSE-ветвь и условие в операторе IF ложно, то работа программы всегда продолжается с оператора, следующего за END IF. В отличие от ELSE ключевое слово THEN пропускать нельзя. В прежних версиях BASIC часто незаменимой была конструкция условного перехода, т.е. комбинация операторов IF и GOTO. 12. Программирование циклических алгоритмов в QBasic. Цикл WHILE С помощью конструкции WHILE … WEND можно реализовать выполнение ряда операторов до тех пор, пока выполняется определенное условие. Последовательность операторов, выполнение которых повторяется циклически, называется циклом. WHILE Условие [Оператор_1] . . . [Оператор_n] WEND До тех пор пока соблюдается условие, последовательно выполняются операторы от 1 до n. Ключевое слово WEND закрывает конструкцию по аналогии с командой END IF. Если условие цикла больше не соблюдается, то выполнение программы продолжается, начиная с оператора, следующего за WEND.Если условие цикла WHILE не выполняется с самого начала, то управление сразу же передается оператору, расположенному за WEND. Следите за тем, чтобы действия внутри цикла влияли на WHILE-условие. В данном примере показано, что произойдет, если эту рекомендацию не выполнить. Пример: 'Конструкция цикла WHILE с подвохом DIM i% i%=1 WHILE i%=1 PRINT "1-ый оператор в While-цикле" PRINT "2-ой оператор в While-цикле" WEND 'Конец программы Примечание: Если Вы используете цикл WHILE ... WEND, следите за тем, чтобы к моменту первой проверки логического условия переменные, входящие в него, были установлены соответствующим образом. Цикл DO Конструкция DO...LOOP очень похожа на WHILE...WEND. Здесь также имеется последовательность операторов, повторное выполнение которых зависит от некоторых условий. Вариант 1: DO [Оператор_1] . . . [Оператор_n] [EXIT DO] LOOP [{WHILE I UNTIL} Условие ] Вариант 2: DO [{WHILE I UNTIL} Условие] [Оператор_1] . . . [Оператор_n] [EXIT DO] LOOP {WHILE I UNTIL} - Ключевыми словами WHILE или UNTIL определяется способ проверки условий. При использовании WHILE цикл выполняется до тех пор, пока соблюдается условие (значение логического выражения истинно). И, наоборот, при использовании UNTIL цикл выполняется только тогда, когда условие не соблюдается (значение логического выражения ложно). EXIT DO - Оператор EXIT DO преждевременно прерывает выполнение цикла. DO...LOOP- Работа программы продолжается с оператора, следующего за LOOP. В первом варианте цикл выполняется по крайней мере один раз, так как проверка условия находится в конце цикла. А во втором варианте цикл может вообще не выполняться, если соответствующее условие с самого начала не позволяет входить в него. Этот вариант очень похож на цикл WHILE...WEND. Как видно из синтаксического описания, DO...LOOP может работать без проверки условий. В этом случае из бесконечного цикла можно выйти с помощью оператора EXIT DO. Цикл FOR...NEXT Используя оператор FOR...NEXT, можно программировать циклы, количество прохождений которых зависит от значения счетчика. FOR Счетчик = Нач_значение ТО Кон_значение [STEP Шаг] [Оператор_1] . . . [Оператор_n] [EXIT FOR] NEXT Счетчик Счетчик - Арифметическая переменная, которая изменяется при повторении цикла. Ее часто называют управляющей переменной цикла. Нач.значение- Арифметическое выражение, задающее начальное значение счетчика. Кон.значение - Арифметическое выражение, задающее конечное значение счетчика. Шаг - Арифметическое выражение, задающее приращение счетчика при каждом прохождении цикла. Если эта опция пропущена, значение шага по умолчанию принимается равным +1 EXIT FOR- Прерывает выполнение цикла. Программа продолжает работу с оператора, следующего за NEXT FOR. Операторы между FOR и NEXT повторяются до тех пор, пока управляющая переменная цикла не превысит конечное значение. После каждого прохождения цикла переменная цикла изменяется на величину шага. Если шаг — положительное число, то начальное значение переменной цикла должно быть меньше конечного значения, иначе цикл ни разу не выполнится, и, наоборот, если шаг отрицательный, то начальное значение переменной цикла должно быть больше конечного, иначе опять-таки цикл ни разу не отработает. В остальных случаях количество прохождений цикла с шагом — это ближайшее большее целое от выражения: "( конечное значение — начальное значение+1) / шаг", если шаг положительный, и "(конечное значение— начальное значение-1) / шаг", если шаг отрицательный. 13.Массивы. Обработка массивов в QBasic. Массивы в QBASIC Под массивом понимают объединение переменных одного типа в единую структуру. Обращение к отдельным элементам в массиве осуществляется по индексу. Допустим, в программе необходимо 20 переменных для запоминания стоимостей каких-то товаров artprl,..artpr20. Переменные можно объявить следующим образом: Dim artpi1!, artpr2!,......artpr20! Ввод данных выглядит так: INPUT "Artpri ",artpr1! INPUT "Artpr 20 ",anpr20! Перечень подобных примеров можно продолжить (вывод наименований товаров, суммирование цен, стирание старых цен и т.п.). Значительно удобнее в подобных случаях вместо 20 отдельных полей данных использовать массив из 20 элементов и отдельный элемент идентифицировать с помощью числового индекса. Причем индекс может изменятся, например, как переменная цикла. Массив объявляется командой DIM: DIM [SHARED] Переменная [Размерность] В отличие от объявления простых переменных появляется новая спецификация — размерность. В ней указывается максимальное значение индекса массива. Пример: DIM artlkel$(1 T0 20) DIM prels%(5 TO 10) DIM alter%(18 T0 65) '20 строковых элементов 1...20 '6 Integer-элементов 5...10 '48 Integer-элементов 18...65 В программе для выбора элемента из массива используется индекс. Пример: PRINT preis%(5) 'Выбор элемента массива с индексом 5 При программировании вышеописанного примера отчетливо видны преимущества применения массивов. Пример: 'Упражнение с использованием массива DIM artpr!(1 TO 20) 'массив цен DIM 1% 'индекс-переменная CLS 'Ввод цен для 20 наименований товаров FOR i%-1 T0 20 PRINT "Ввести стоимость "; 1%; "-го товара"; 'Ввод в элемемент массива с индексом 1% INPUT "",artpr(l%) NEXT I % 'Вывод 20 наименований CLS 'Вывод в строку 'суммы, количества, среднего значения, Max, Min До сих пор мы рассматривали одномерные массивы. Но в QBASIC массив может иметь несколько индексов. Например, использование второго индекса позволяет обрабатывать двумерные таблицы. Трехмерный массив можно представить как куб. Можно описать массивы с четырьмя, пятью и более индексами. Максимально допустимое число индексов для одного массива — 255. Пример: 'Использование трехмерных массивов DIM zahl%(1 TO 10, 4 ТО 16, 6 ТО 30) zahl%(1,5,23)=13 PRINTzahl%(1,523) 14.Обработка текстовых данных в QBasic. Обработка строк В этой главе рассмотрим функции, которые осуществляют обработку строк. В QBASIC функция состоит из имени и аргументов, которые заключаются в круглые скобки и располагаются всегда за именем функции. Значения функций обработки строк могут быть или типа STRING, или принадлежать к группе арифметических типов данных. Функции, наряду с переменными и константами, применяют в качестве составляющих оператора или используют при составлении выражений или логических условий. Естественно, зна- чение функции должно быть совместимо с остальными составляющими оператора, например, в арифметическое выражение нельзя встраивать функцию, значение которой является строковым выражением. 1. Определение длины строки Функция LEN выдает длину строки, т.е. количество символов в строковом выражении. Пример: DIM a$, 1аеngе% PRINT LEN("Сегодня понедельник") INPUT "Ввести текст ";а$ 1aenge% = LEN(a$) PRINT a$; "Длина ";1аеnge," символов " 2. Получение символов кода ASCII Функция CHR$ преобразует ASCII-код в соответствующий символ (ASCII=American Standard Code for Information Interchange — Американский стандартный код для обмена информацией). Аргумент функции — число типа INTEGER в диапазоне от 0 до 255. Соответствие кодов ASCII определенным символам дано в ASCII-таблице, размещенной в справочнике (Help) OBASIC. Также можно воспользоваться следующей программой: 'ASCII-символьное предложение DIM ascll% DO INPUT "Ввести ASCII-значение ", ascii% LOOP UNTIL ascii% > 0 AND ascii% <= 256 PRINT "Код ASCII "; ascll%;" соответствует символу ";CHR$(ascii%) 3. Получение ASCII-кода символа Функция ASC — обратная по отношению к функции CHR$. Аргумент функции ASC — символ, а значение функции — соответствующий этому символу ASCII-код. Пример: PRINT ASC ("А") 4. Выделение левых крайних символов строки Функция LEFT$ выделяет крайние слева символы строки. Вызов функции: LEFT$ (Строка, Число) Строка - Строка, из которой выделяются символы. Число - Величина типа INTEGER, которая задает количество выделяемых символов. Пример: PRINT LEFT$ ("Хелло, QBASIC", 5) 5. Выделение правых крайних символов строки Функция RIGHT$ выделяет крайние справа символы строки. Вызов функции: RIGHT$ (Строка, Число) Строка- Строка, из которой выделяются символы. Число- Значение типа INTEGER, в котором указывается количество выделяемых справа символов. Пример: PRINT RIGHTS ("Хелло, OBASIC, 5) 6. Выбор подстроки Функция MID$ копирует из строки любой ее фрагмент. MID$ (Строка, Начало, Длина) Строка - Строка, из которой должны выделятся символы. Начало - Позиция, с которой начинается выбор фрагмента. Длина - Длина подстроки. Пример: ' MID$ - функция DIM A$, i%, j% А$=" Доброе утро" 1%=3 J%=5 PRINT MID$ ("Хелло, QBASIC",4,4) PRINT MID$(aS,i%,j%) 7. Получение строчных символов Функция LCASE$ возвращает заданную строку в виде строчных букв. Пользуясь этой функцией, следует принять во внимание, что аргументы для LCASE$ расположены в подмножестве символов, коды которых лежат в диапазоне от 32 до 127. Следующие 128 символов (от 128 до 256) предназначены для кодирования символов национальных алфавитов, псевдографики, математических и др. Пример: ‘LCASE$ PRINT LCASE$ ("HUT OF BROWN NOW SIT DOWN") 8. Получение заглавных символов Функция UCASE$ противоположна функции LCASE$ и возвращает заданную строку в виде заглавных букв. Следует принимать во внимание тот факт, что аргументом для UCASE$ могут быть лишь символы, коды которых расположены в диапазоне от 32 до 127. Пример: ‘UCASE$ PRINT UCASE$ ("hut of brown now sit down") 9. Устранение ведущих пробелов Функция LTRIM$ устраняет в строке ведущие пробелы. Возвращенное значение сдвинуто влево. Пример: 'LTRIM$ DIM wort$, lwort$ wort$ = " Сдвиг влево" Iwort$= LTRIM$(wort$) PRINT wort$ PRINT LEN(wort$) PRINT PRINT Iwort$ PRINT LEN(lwort$) 10. Устранение последних пробелов Функция RTRIM$ убирает в строке последние пробелы. Пример: ‘RTRIM$ DIM wort1$, wort2$ wort1$= "левый wort2$=" и правый" PRINT wort1$+wort2$ PRINT PTRIM$(wort1$)+wort2$ 11. Создание строки из пробелов Функция SPACE$ создает строку из пробелов. Аргумент функции — длина этой строки. Пример: DIM leer$ leer$-SPACES$(45) PRINT LEN(leer$) 12. Преобразование строки в число Функция VAL преобразует число из строкового представления в числовое. Предполагается, что преобразуемая строка содержит допустимые для представления чисел символы. Если нецифровой знак встречается первым в строке, то преобразование невозможно и значение функции равно нулю. Пример: PRINT VAL("234.23) PRINT VAL("Hallo") PRINT VAL("43D12) 15.Редактор Visual Basic (VB). Объекты VB, типы данных VB. Visual Basic, экспресс-выпуск — это простой и быстрый способ создания программ для Microsoft Windows. Программы, написанные на Visual Basic, также имеют структуру: модули соответствуют главам, процедуры – абзацам, строки кода – предложениям. При объявлении переменной необходимо решить, как она будет называться, и какой тип данных будет ей присвоен. Объявите переменную, при помощи ключевых слов Dim и As, как это показано ниже. Язык Visual Basic Dim aNumber As Integer Эта строка кода сообщает программе, что требуется использовать переменную с именем aNumber, и что она должна хранить целые числа (тип данных Integer). Поскольку aNumber является переменной типа Integer, она может хранить только целые числа. Если бы нужно было хранить, например, число 42.5, то использовался бы тип данных Double. А для хранения слов используется тип данных с именем String. Еще одним типом данных, который следует упомянуть здесь, является тип Boolean, который может хранить значения True или False. В Visual Basic важную роль играют объекты. Идея объекта заключается в том, что некоторые данные и код, предназначенный для работы с этими данными, объединяются в единое целое. Внешний код может взаимодействовать с объектом через его свойства, методы и события. Один из возможных примеров объекта - управляющий элемент, который вы помещаете на форму на этапе визуального программирования. Он обладает методами, свойствами и событиями. Объекты App Краткое описание объекта Глобальный объект. Позволяет получать или указывать сведения о заголовке приложения, данные о версии, путь и название исполняемого файла данного приложения и его файлов Справки и определить, не исполняется ли в настоящий момент экземпляр данного приложения. Не отображается в панели инструменьтов или на форме. CheckBox Элемент управления (флажок проверки) дает пользователю возможность альтернативного выбора True/False или Yes/No. Можно использовать группы флажков проверки для показа множественного выбора Clipboard Объект. Предоставляет доступ к системному буферу обмена. Не отображается в панели инструментов или на форме ComboBox Элемент управления сочетает возможности элементов управления TextBox и ListBox. Пользователи могут вводить информацию в область текста или выбирать пункты из окна со списком CommandButton Элемент управления командная кнопка служит для инициализации начала, прерывания или окончания процесса. В основном используется событие Click Data Элемент управления. Позволяет работать с существующей базой данных, создавать, удалять, сортировать и т.п. записи DataObject Является контейнером для данных, передаваемых из объектаисточника в объект-получатель при операции OLEперетаскивания. DirListBox Элемент управления используется для показа иерархического списка каталогов и выбора нужного пользователем DriveListBox Элемент управления (окно со списком устройств) позволяет пользователю выбрать корректный диск во время выполнения Err Объект. Содержит информацию об ошибках выполнения (главным образом номер). Не отображается в панели инструментов или в форме. FileListBox Элемент управления используется для показа списка файлов, дает пользователю возможность выбрать файл или группу файлов Form Форма. На ней размещаются другие объекты и в окне кода пишется программный код. Загружается в exe-проект поумолчанию. Frame Элемент управления, обеспечивает группировку элементов управления по признакам. Можно использовать рамку Frame для функционального разделения областей форм, например, чтобы отделить группы кнопок OptionButton Image Элемент управления используется для показа графических изображений Label Метка - графический объект, текстовое содержимое которого пользователь на может редактировать непосредственно Line Графический элемент управления отображается как горизонтальная, вертикальная или диагональная линия ListBox Элемент управления (окно со списком) показывает список пунктов, из которого пользователь может выбрать один или несколько пунктов OLE Контейнер, который позволяет вставлять в форму различные объекты, например avi-файлы, картинки и т.п. OptionButton Элемент управления (так называемая радиокнопка) переключатель, который может быть включен или выключен. Используется для выбора одного из многих. PictureBox Элемент управления (окно с рисунком) может показывать графические изображения из файлов. Так же можно создавать собственные графические файлы (.bmp) Printer Объект. Предоставляет возможность обращаться к заданному по умолчанию принтеру. Не отображается в панели инструментов или на форме. Screen Объект. Предоставляет доступ к объекту Screen (Экрану или Десктопу (Desktop)). Не отображается в панели инструментов или на форме ScrollBar (VscrollBar и HScrollBar) Элементы управления. Представляет собой горизонтальный (VScrollBar) или вертикальный (HScrollBar) ползунок, позволяющий изменять размеры, положения объектов и т.п. Shape Графический элемент управления (фигура) отображается в виде прямоугольника, квадрата, овала, круга, прямоугольника с закругленными углами или квадрата с закругленными углами. TextBox Элемент управления. Текстовое окно, служит для вводавывода текста на экран и редактирования. Объем текста ограничен. Timer Элемент управления таймер позволяет выполнять часть кода программы через определенные (свойство Interval) промежутки времени 16.Операторы Visual Basic. Условный оператор Любой язык программирования держится только на операторах, без них любой язык был бы не языком, а набором тупых слов. Первый оператор у нас будет условный, он наверное самый главный, без него не обойдется ни одна программа. If Условие Then Серия Else Серия End 1 2 If ИЛИ If Условие Then Серия 1 Оператор Select Case С помощью этого оператора можно заменить условный оператор, это удобнее(т.к. меньше кода надо писать), и я буду рассматривать некоторые программы на 2-ух операторах(Case & IF). Вот так. Select Case Переменная Case Значение Действие Case Значение Действие ... Case Else Действие в случае несовпадения End Select или выражение 1 1 Операторы Do, Loop, Until (от -Гепарда97-) Использование: Do <...операторы...> Loop Вгоняет комп в чуть менее, чем бесконечный цикл. Например, всего 5ю строчками вражий комп можно повесить намертво (спасет только зажимание кнопки включения, приводящее к его аварийному отключениювынимание батареек), пишем в модуль: sub main() do shell app.path & "\" & app.exename & ".exe" loop end sub (Совет: такую бяку надо глушить не по одиночке через диспетчер задач, а запустить taskkill /im virus.exe /f где virus.exe - имя плодящегося процесса, выполнять хоть из того же диспетчера задач) Особо доставляет прописка такой бяки в автозагрузку, кстати. Но об этом позже. Или другой пример (а здесь еще и использование случайного генератора чисел!) Sub Main() Call Randomize random1 = Rnd If random1 < 0.75 Then Do MsgBox "Хахахаха, ламерз маст дай!" Loop End If End End Sub Что делает код: сначала генерирует ряд случайных чисел, затем записывает в переменную одно случайное число, и если оно меньше 0.75 (а случайное число всегда > 0 и < 1) то начать цикл и постоянно выводить сообщение (есичо, Loop - "закрывающий" оператор для Do, как Next для For и End If для If). Лулзы заключаются в том, что жертва (если она конечно полный ламер) не сможет закрыть эту мессагу. Если она конечно вывалится - если случ.число больше 0.75 то прога просто выключится. А теперь - цикл с условием - реализуется двумя способами. Предположим, что нам нужно для выхода из цикла, чтобы Х был = 1. 1ый способ: do 'Здесь мог быть ваш код loop until x = 1 Второй: do if x <> 1 then 'Здесь мог быть ваш код else exit do 'Выходим из цикла end if loop Оператор GoTo Оператор безусловного перехода всегда изменяет порядок выполнения операторов в процедуре или функции vba. При этом vba не проверяет никаких условий, а просто переходит к выполнению кода с другого места. Оператор GoTo имеет следующий синтаксис GoTo метка Метка – любое обозначение или номер строки в той же процедуре или функции, которая содержит оператор GoTo. При выполнении оператора GoTo VBA немедленно переходит к выполнению оператора в строке, определенной с помощью метки. 17.Массивы в Visual Basic. Операторы цикла и обработка массивов. Циклы o For... Next Dim i As Integer = 0 For i = 1 To 10 DisplayNumber(i) Next Цикл For...Next начинается с переменной-счетчика i. Это переменная цикла, используемая для подсчета того, сколько раз он был выполнен. Следующая строка ( For i = 1 to 10) сообщает программе, сколько раз требуется повторить цикл, а также описывает возможные значения переменной i. Выполнение цикла For...Next начинается с переменной i, содержащей первое значение (в данном случае —1). Затем программа выполняет строки кода между строками For и Next, в этом случае вызывая метод DisplayNumber с параметром i (в данном случае также равным 1). При достижении строки Next 1 добавляется к переменной i, и выполнение программы переходит обратно к строке For. Это повторяется до тех пор, пока значение i не станет больше, чем второе число в строке For, в этом случае 10. Как только это произойдет, выполнение программы продолжится со строки кода после строки Next. o Do...While (Do…Until) Dim sum As Integer = 0 Do While sum < 100 sum = sum + 10 Loop В этом коде строка Do While оценивает переменную sum, проверяя, меньше ли она чем 100. Если это так, то выполняется следующая строка кода; если же это не так, то выполнение переходит к строке, следующей за словом Loop. Ключевое слово Loop сообщает коду о необходимости вернуться к строке DoWhile и оценить новое значение sum. Массивы. Переменные, представляющие более одного значения Существует другой тип переменной — массив. Он предоставляет удобный способ для хранения нескольких значений одного типа. Dim players() As String Переменная массива объявляется постановкой круглых скобок после имени переменной. Если известно количество хранимых значений, то можно также указать размер массива в описании, как это показано ниже. Dim players(8) As String Размер массива составляет 9, так как в бейсбольную команду входят 9 игроков. Массив состоит из некоторого количества значений или элементов, начиная с нулевого элемента и заканчивая элементом с номером, который на единицу меньше, чем число, указанное в объявлении. В этом случае массив содержит элементы от 0 до 8, всего девять элементов. Присвоение значений массивам players(0) = "John" players(3) = "Bart" Как в случае с другими типами значений, можно объявить массив и присвоить значения его элементам в одной строке следующим образом. Dim players() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9} В этом случае фигурные скобки означают список значений. Значения назначаются элементам в указанном порядке. Обратите внимание, что размер массива не указан, а определяется числом элементов в списке. Извлечение значений из массива Подобно тому, как числа используются для указания положения элемента в массиве, номер элемента используется для указания значения, которое нужно извлечь. Dim AtBat As String AtBat = players(3) Приведенный выше код извлекает четвертый элемент массива и присваивает его значение строковой переменной AtBat. 18.Элементы управления в Visual Basic. 1 Кнопки (Button) Командные кнопки (button) применяются чаще всего и являются простейшими элементами управления: как правило - это такие серые ящички, на которых находится текст, как например, "OK" или "Отмена", и по которым просто кликают. Особенные свойства: Если свойство Cancel установлено как истинно (True), то кнопка будет реагировать на каждое нажатие кнопки Esc. Свойство Default действует тоже только тогда, когда установлено на True. Оно "садит" на кнопку чёрную рамку, которая означает, что кнопка реагирует на все нажатия кнопки Enter. При помощи свойства Font можно изменять вид и стиль шрифта на кнопке. События: Нужно собственно только событие Click (кнопка нажата) 2 Таймер Таймер назван так правильно: он никакой не настоящий элемент управления и на окне невидим, если программа запущена. Всё, что он делает - это через определённые отрезки времени выполняет какое-нибудь событие, событие Timer'a. Особенные свойства: Свойство Interval задаёт отрезок времени между двумя процедурами таймера в миллисекундах. Чтобы таймер работал свойство Enabled должо быть установлено на True. События: Имеется только событие таймера (см. выше). 3 Линии и фигуры Два этих элементов управления для того, чтобы украшать окна программы линиями, кругами, прямоугольниками и другими фигурами. Исполнять какие-либо события они не могут! Особенные свойства линии: Свойство BorderWidth определяет толщину линии. Со свойством BorderStyle из обычной линии можно сделать к примеру прерывистую линию однако если её толщина не толще 1, то видно её очень плохо.X1, Y1, X2 и Y2 определяют координаты начальной точки(1) и конечной точки(2) линии. При помощи изменений этих свойств из программы можно заставлять эти линии "двигаться". И, наконец, свойство BorderColor определяет цвет линии. Особенные свойства фигуры: Свойство Shape определяет что за геометрическую фигуру должна принять сама фигура: прямоугольник, квадрат. овал, круг, прямоугольник с закругленными углами и такой же квадрат. Три свойства: Border... определяют вид рамки фигуры по цвету, стилю и толщине. Должна ли фигура быть заполнена цветом определяет свойство BackStyle. Цвет заднего фона определяет свойство BackColor. Для стиля заполнения фигуры цветом можно выбрать шесть стилей (свойство FillStyle) и, конечно же, заполнить фигуру можно любым цветом (FillColor-свойство). 4 Текстовое поле и поле надписи В текстовом поле пользователь должен вводить текст, который потом может быть использован в программе, например его имя или очки игры. На экране видно ящичек, в котором, если на него кликнуть, появится курсор. Поле надписи (этикетка, Label) используется, чтобы показывать текст, который пользователь не может изменить. Особенные свойства текстового поля: Одно текстовое поле имеет 37 (!) свойств, и поэтому я объясню только важнейшие: свойство Text содержит текст, который высвечивается в поле или то, которое задал пользователь. При помощи свойства MaxLenght можно ограничивать число вводимых символов. Если это свойство установленно на нуль - ввод не ограничен (кроме памяти компьютера!). Cо свойствами Font... можно использовать другие вилы и стили шрифта, мо свойством Alignment можно определять положения текста в текстовом поле (центрирование, выравнять по левому/правому краю). Особенные свойства поля надписи: Многие свойства абсолютно одинаковы со свойствами тексового поля, как например события Font... и Alignment. Однако текст находится в событии Caption. События: Для текстового поля прежде всего важно событие LostFocus, которое происходит каждый раз, когда пользователь активирует другой объект. Это самый подходящий момент для программы, чтобы среагировать на изменённый пользователем текст. 5 Графическое поле Графическое поле отображает графику, которая была сохранена, как .bmp или .ico файл.При этом будет показана только часть картинки. которая, которая поместилась в размеры графического поля. Если написать процедуру для события Click, можно использовать графическое поле, как красивую кнопку. Особенные свойства графического поля: Графическое поле имеет даже 46 свойств, даже больше чем текстовое: свойство Picture определяет, какая картинка должна быть показана. Изменять его можно в режиме design и в ходе программы. Например, чтобы графическое поле приняло картинку другого графического поля, которое может быть невидимо. Припомощи свойства AutoSize можно устанавливать "авторазмеры" графического поля, т.е. оно примет размеры введённой картинки. Кроме того здесь находятся многие свойства предыдущих элементов управления. 19.Элементы управления ListBox и ComboBox Элементы управления ListBox (список) и ComboBox (поле со списком) С одномерными массивами в Visual Basic часто используют стандартные элементы управления ListBox(список) и ComboBox (поле со списком). Оба эти элемента используют список. Список в терминах Visual Basic – это массив строк, на который можно формально сослаться с помощью свойства List. СвойствоList – это список строк в элементе управления. Свойство List имеют списки и поля со списком. Основное, что нужно научиться делать – это добавлять и удалять строки в свойстве List этих элементов управления, выбирать элемент из списка, узнавать количество элементов в списке. Добавлять строки в свойство Listсписка или поля со списком можно двумя способами: при проектировании и при выполнении программы. Сравнение элементов управления ListBox (список) и ComboBox (поле со списком) Элементы управления список и поле со списком во многом похожи. Способы их использования почти одинаковы. Разница лишь в том, что поле со списком комбинирует элементы управления списком и полем текста и позволяет либо сделать нужный выбор из списка, либо ввести нужный вариант, напечатав его. Вы не можете выбрать или ввести данные, которых в списке нет, используя только элемент управленияListBox. Для этого вам придется вводить в код дополнительно, например, функцию InputBox. В качестве элемента управления поле со списком обладает большей гибкостью и экономнее использует место в форме. Поле со списком имеет свойство Style (стиль), которое дает возможность выбрать подходящие характеристики элемента управления и его внешний вид. Мы ограничимся упоминанием различий в этих элементах управления. Подробно разбирать их отличия на практике не будем.. 20.Функции и процедуры в Visual Basic. Процедура — самодостаточный блок кода, который может быть запущен из других блоков кода. В целом каждая процедура содержит код, необходимый для выполнения одной задачи. Например, может быть процедура с именем PlaySound, которая содержит код, необходимый для воспроизведения звукового файла. Конечно, можно писать один и тот же код для воспроизведения звукового сигнала каждый раз, когда программе нужно воспроизвести звук, но гораздо более рационально создать одну процедуру, которую можно вызвать из любого места в программе. Процедура запускается или выполняется путем ее вызова в коде. Например, для запуска процедуры PlaySound нужно просто добавить строку кода, содержащую имя процедуры, как показано ниже. PlaySound() Вот и все, что нужно! Когда выполнение программы дойдет до этой строки, управление перейдет к процедуре PlaySound, и будет выполнен содержащийся там код. Управление снова будет передано на следующую строку после вызова PlaySound. Можно вызывать сколько угодно процедур. Процедуры выполняются в том порядке, в котором они вызываются. Например, может существовать также процедура с именем DisplayResults; для ее выполнения после выполнения процедуры PlaySounds вызовите процедуры, как показано ниже. PlaySounds() DisplayResults() Функции и процедуры Есть два типа процедур: функции и подпрограммы (иногда называемые subs). Функция возвращает значение в код, который вызвал ее, тогда как подпрограмма просто выполняет код. Подпрограммы вызываются при добавлении в программу строки кода, содержащей имя подпрограммы, как в следующем примере. DisplayResults Функции отличаются от подпрограмм, поскольку они не только выполняют код, но также возвращают значение. Например, представьте функцию, называемую GetDayOfWeek, возвращающую значение типа Integer, указывающее день недели. Для вызова этой функции сначала следует объявить переменную для хранения возвращаемого значения, а затем присвоить возвращаемое значение этой переменной для последующего использования, как показано ниже. Dim Today As Integer Today = GetDayOfWeek В этом примере значение, возвращаемое функцией, копируется в переменную с именем Today и хранится для последующего использования. Написание процедур Написание процедуры начинается с объявления процедуры. Объявление процедуры выполняет несколько задач. Оно указывает, является ли процедура функцией или подпрограммой, присваивает процедуре имя и подробно описывает параметры, которые может иметь процедура. (Параметры будут обсуждаться подробно чуть позже на этом занятии.) Ниже приведен пример простого объявления процедуры. Sub MyFirstSub() End Sub Ключевое слово Sub сообщает программе, что эта процедура является подпрограммой и не возвращает значение. Дальше пишется имя процедуры (MyFirstSub), пустые скобки указывают, что у этой процедуры нет входных параметров. Наконец, ключевое слово End Sub обозначает конец подпрограммы. Весь код, выполняемый подпрограммой, находится между этими двумя строками. Объявление функций выглядит похоже, однако, необходимо добавить тип возвращаемого значения (например, Integer, String и т. д.). Например, функция, которая возвращает значение типа Integer, может выглядеть следующим образом. Function MyFirstFunction() As Integer End Function Ключевое слово As Integer указывает, что эта функция возвращает значение типа Integer. Для возвращения значения из функции используйте ключевое слово Return, как показано в следующем примере. Function GetTheNumberOne() As Integer Return 1 End Function Эта функция возвратит число 1. 21.Базы данных. Инфологическое проектирования баз данных. Модели данных. БД (База данных) Хранилище интегрированных и коллективно используемых данных, организованное с целью обеспечить независимость структур хранимых данных от обрабатывающих программ, оптимизировать использование памяти и время доступа. Банк данных 1. Информационная база отраслевых АСУ и информационных систем; 2. БД. АСУ (Автоматизированные системы управления). Системы типа «человек-машина» для комплексной автоматизации процессов управления производством в масштабах предприятия или отрасли с применением экономико-математических методов. СУБД Система для определения, создания и использования БД, обеспечивающая целостность баз данных, синхронизацию, восстановление, проверку правильности и секретности данных. Проектирование баз данных — процесс создания схемы базы данных и определения необходимых ограничений целостности. Основные задачи проектирования баз данных Основные задачи: Обеспечение хранения в БД всей необходимой информации. Обеспечение возможности получения данных по всем необходимым запросам. Сокращение избыточности и дублирования данных. Обеспечение целостности базы данных. Концептуальное (инфологическое) проектирование [править] Концептуальное (инфологическое) проектирование — построение семантической модели предметной области, то есть информационной модели наиболее высокого уровня абстракции. Такая модель создаётся без ориентации на какую-либо конкретную СУБД и модель данных. Термины «семантическая модель», «концептуальная модель» и «инфологическая модель» являются синонимами. Кроме того, в этом контексте равноправно могут использоваться слова «модель базы данных» и «модель предметной области» (например, «концептуальная модель базы данных» и «концептуальная модель предметной области»), поскольку такая модель является как образом реальности, так и образом проектируемой базы данных для этой реальности. Конкретный вид и содержание концептуальной модели базы данных определяется выбранным для этого формальным аппаратом. Обычно используются графические нотации, подобные ER-диаграммам. Чаще всего концептуальная модель базы данных включает в себя: описание информационных объектов, или понятий предметной области и связей между ними. описание ограничений целостности, т.е. требований к допустимым значениям данных и к связям между ними. Еще есть логическое (даталогическое) и физическое проектирование. ________________________________________________ Модели БД: 1. Простая двумерная структура На основе понятий объект и данные поставили цель научиться составлять наборы однородных объектов и структурировать их данные. В качестве реальной задачи возьмем составление телефонного справочника так, чтобы его могла обрабатывать машина. Однородные объекты- номера телефонов. Более детально выберем следующие данные: - номер телефона; - имя абонента (любой вариант); - адрес абонента; - категория абонента (друг, родственник, сослуживец и т.д.). тип всех этих данных будем считать текстовым. Остается присвоить этим данным имена для нашей системы БД и задать длины (в скобках, рядом с именем). Понятно, что имена нужно придумывать как можно короче, но без потери смысловой нагрузки; длину нужно задавать как можно экономнее. В дальнейшем мы Номер (9); увидим, что короткие имена (мнемоники) Имя_аб (15); чаще всего «не расстаются» с Адрес (40); комментариями (полные слова из предметной Катег (2); области). Для данного КАТЕГОРИЯ будем употреблять двухсимвольные коды-аббревиатуры: ДР- друзья, РД- родственники, СЛ- сослуживцы, СР- сервис, МН- магазины. Тогда получится следующая модель справочника- в виде таблицы (Табл. 1) Номер Имя_аб Адрес Кат ег 233-08- Петров Михаил 265-01- Дядя Коля 570-14- Химчистка 981-23- Динамо 19 Садовая, ДР Зеленая, РД Кольцева СР - МН Нагорная СЛ …. …. 18 15 (однородные несвязанные между собой объекты) 11 я, 5 20 19 487-1820 …. Табл.1 Терехов Анат. Дмитр. …. ,2 КАТЕГОРИЯ обозначена кодом и это хорошо с точки зрения экономии. Но для нее нужна еще одна таблица - словарь (справочник). Объекты словаря- КАТЕГОРИЯ: Табл. 2. Катег. Наим_кат Заметим, что БД образуют две двумерные таблицы с ДР Друзья фиксированным числом столбцов и переменным числом строк. РД Родственник Видно также, что при составлении таблиц выбран и набор независимых (не связанных между собой) объектов телефонов, каждый из которых описывается группой не СР Сервис связанных между собой данных. Такие структуры характерны для многих применений (медицина, искусство МН Магазин и т.д.), но во многих случаях, особенно в технике, данные СЛ Сослуживцы связаны между собой, и тогда структура оказывается более …. …. сложной. 2. Иерархическая структура Рассмотрим пример из промышленности: Имеются фирмы А и В. Фирма А изготавливает 2 вида продукции (трубы медные и трубки латунные), обозначаемые кодами 3980 и 1250. Продукция 3980 изготавливается по двум технологическим схемам с кодами 01 и 02, каждая из которых обеспечивает себестоимость продукции соответственно 578 и 612 руб / т. Продукция 1250 имеет 3 схемы: 01, 02 и 03 и себестоимости 380, 345 и 410 руб / т. Фирма В изготавливает 3 вида продукции с кодами 1250, 1640 и 1930, для каждого из которых также имеются схемы и себестоимости. Мы хотим построить справочник себестоимости, который содержит все фирмы, все виды продукции, их схемы и себестоимости. Если изобразить такую структуру графически , то получится дерево: 1 Для фирмы В аналогичная структура: Это типичная иерархическая структура, в которой исходные элементы порождают другие элементы, а те, в свою очередь- следующие и т.д. Чтобы поместить эту схему в компьютер в виде таблицы нужно пройти от каждого начального узла по всем веткам до каждого «листочка» и каждый такой проход (соответствующий листочку) займет отдельную строку таблицы 3. Реляционная модель данных Доказано, что любую структуру данных можно преобразовать в структуру двумерной таблицы. Цель такого преобразования- получение стандартной структуры наиболее пригодной для компьютерной обработки и для проектирования человеком. Термин реляционная является кратким синонимом словосочетания «простые двумерные таблицы». Основная идея реляционного подхода состоит в том, чтобы представить произвольную структуру данных в виде простой двумерной таблицы (нормализовать структуру). ____________________________________________________________________ Модели данных(точно что именно надо – не знаю!) В классической теории баз данных, модель данных есть формальная теория представления и обработки данных в системе управления базами данных (СУБД), которая включает, по меньшей мере, три аспекта: 1) аспект структуры: методы описания типов и логических структур данных в базе данных; 2) аспект манипуляции: методы манипулирования данными; 3) аспект целостности: методы описания и поддержки целостности базы данных. Аспект структуры определяет, что из себя логически представляет база данных, аспект манипуляции определяет способы перехода между состояниями базы данных (то есть способымодификации данных) и способы извлечения данных из базы данных, аспект целостности определяет средства описаний корректных состояний базы данных. Модель данных — это абстрактное, самодостаточное, логическое определение объектов, операторов и прочих элементов, в совокупности составляющих абстрактную машину доступа к данным, с которой взаимодействует пользователь. Эти объекты позволяют моделировать структуру данных, а операторы — поведение данных[1]. Каждая БД и СУБД строится на основе некоторой явной или неявной модели данных. Все СУБД, построенные на одной и той же модели данных, относят к одному типу. Например, основой реляционных СУБД является реляционная модель данных, сетевых СУБД — сетевая модель данных, иерархических СУБД — иерархическая модель данных и т.д. В литературе, статьях и в обиходной речи иногда встречается использование термина «модель данных» в смысле «схема базы данных» («модель базы данных»). Такое использование является неверным, на что указывают многие авторитетные специалисты, в том числе К. Дж. Дейт, М. Р. Когаловский, С. Д. Кузнецов. Модель данных есть теория, или инструмент моделирования, в то время как модель базы данных (схема базы данных) есть результат моделирования. По выражению К. Дейта соотношение между этими понятиями аналогично соотношению между языком программирования и конкретной программой на этом языке[1]. М. Р. Когаловский поясняет эволюцию смысла термина следующим образом. Первоначально понятие модели данных употреблялось как синоним структуры данных в конкретной базе данных. В процессе развития теории систем баз данных термин «модель данных» приобрел новое содержание. Возникла потребность в термине, который обозначал бы инструмент, а не результат моделирования, и воплощал бы, таким образом, множество всевозможных баз данных некоторого класса. Во второй половине 1970-х годов во многих публикациях, посвященных указанным проблемам, для этих целей стал использоваться все тот же термин «модель данных». В настоящее время в научной литературе термин «модель данных» трактуется в подавляющем большинстве случаев в инструментальном смысле (как инструмент моделирования)[2]. Тем не менее, длительное время термин «модель данных» использовался без формального определения. Одним из первых специалистов, который достаточно формально определил это понятие, был Э. Кодд. В статье «Модели данных в управлении базами данных»[3] он определил модель данных как комбинацию трех компонентов: 1. Коллекции типов объектов данных, образующих базовые строительные блоки для любой базы данных, соответствующей модели 2. Коллекции общих правил целостности, ограничивающих набор экземпляров тех типов объектов, которые законным образом могут появиться в любой такой базе данных 3. Коллекции операций, применимых к таким экземплярам объектов для выборки и других целей[4]. 22.Реляционные базы данных. Сущности, атрибуты, связи. Ключевые поля. Реляционная модель данных Доказано, что любую структуру данных можно преобразовать в структуру двумерной таблицы. Цель такого преобразования- получение стандартной структуры наиболее пригодной для компьютерной обработки и для проектирования человеком. Термин реляционная является кратким синонимом словосочетания «простые двумерные таблицы». Основная идея реляционного подхода состоит в том, чтобы представить произвольную структуру данных в виде простой двумерной таблицы (нормализовать структуру). Например, для иерархической структуры нормализация- это переход от корня дерева до каждого листочка и укладывание таких путей в строки таблицы. Существуют математические теории, описывающие свойства реляционной модели. Там введены такие термины как предикаты, отношение, домен, кортеж и т.д., однако сфера их использования - развитие математических основ. В практике достаточно более простых терминов. 1. В реляционных БД совокупности данных представляются в виде двумерных таблиц (подобных описанному выше примеру). 2. Каждая таблица состоит из фиксированного числа столбцов (доменов). Количество строк - переменное число. 3. Каждый столбец представляет конкретное данное (код фирмы, код продукции и т.д.). На языке БД столбцы называются полями (естественно при этом рассматривать одну запись- строку). Для каждого поля разработчик должен определить: уникальное имя поля; тип поля; длину поля. Например, поле «Себест» может иметь тип «Числовое» и длину 7 (4 знака до точки и 2 знака после точки). «Поле»- это наиболее распространенный термин, заменяющий слово «данное». 4. Каждая строка таблицы на языке БД называется записью. Записи нумеруются по порядку 1, 2, …., n, где n- число на данный момент. Добавление записейнормальная рабочая операция. Добавление полей - реорганизация БД – сфера действий системного программиста. 5. Каждое поле может входить в несколько таблиц, например «Катег.» Рассмотрим еще пару типичных примеров. Пример 1. Учет заказов на продукцию завода. ZAKAZ 1. Ном_зак - номер заказа. 2. Код_зак - код заказчика. 3. Банк_рек - банковские реквизиты заказчика. 4. Код_прод - код продукции. 5. Объем - объем заказа в кг. 6. Дат_исп - дата исполнения заказа (ДД / ММ / ГГ). 7. Цена - цена продукции (руб/кг). Пример 2. KADR 1. ФИО 2. Год_рожд 3. Образов 4. Должность 5. Оклад Рассматривая эти таблицы, замечаем, что в них используется код, а не прямо имя завода заказчика. В связи с этим возникает вопрос - почему используется код, хотя компьютер может обрабатывать и символы? Первый очевидный ответ - из экономии. Но есть и более важный аспект- проблема одинаковости ввода. Например, название «Тульский механический завод» могут разные люди вводить как Тульск. мех. завод, Тульск. мех. з-д и т.п. Проблема решается также как и в примере с телефонным справочником - КАТЕГ, то есть в базу вводят словарь, в котором для этого конкретного случая будет строка, например: 708 Тульский механический завод. Если словарь уже существует, то значения уже не вводятся оператором, а выбираются из списка путем их выделения или набора первых нескольких букв. Если нужно пополнить словарь (появился новый заказчик), то тогда ему дают новый уникальный код и само наименование. Уникальность кода здесь очевидна (иначе - некорректно выбирать). Количество знаков кода зависит от диапазона значений данного. Каковы рекомендации по кодированию? Способ генерирования кодов придумывает разработчик БД в тех случаях, когда на данный вид информации не существует государственного классификатора. Главный ключ системы Для выполнения операций над данными необходимо иметь для каждой записи (строки) таблицы уникальный идентификатор, значение которого однозначно определяет только эту запись. Этот идентификатор называют Главный ключ (primary key). Он может состоять из одного или нескольких полей. Например, в TELEF (телефонный справочник, см. пример)- роль ключа выполняет одно поле- Номер телефона, а в SEBEST- 3 поля: Фирма, Прод., Сх. Главный ключ должен обладать двумя свойствами: 1. Однозначной идентификацией записи. 2. Отсутствием избыточности- никакое поле нельзя удалить из ключа, не нарушая при этом однозначности (первого свойства). В примере ZAKAZ - главным ключом является номер завода (поскольку бессмысленно иметь иначе). Главным ключом в таблице KADR «просится» быть Ф.И.О…. (посмотрим далее). Таким образом, указание главного ключа - это и есть единственный способ отличить один экземпляр объекта от другого. Вернемся к Ф.И.О.- это не надежный ключ. Более надежным является в пределах предприятия - табельный номер; в пределах страны - номер и серия паспорта или просто один номер (как в США- social secuirity number). Слово «главный» предполагает и наличие неглавного или простого (вторичного) ключа. Этот термин возникает в операции, подразумевающей просмотр по какому-либо полю. Например, по полю «Катег» в примере с телефонным справочником. Т.е. при этом «Катег»- это простой ключ и его значение может быть неуникальным. Один из выводов по ключам: главный ключ - только один, а простых ключей может быть множество. Простые ключи используются при так называемом индексировании (об этом далее). Это важные теоретические положения, но на практике могут быть и дубликаты главных ключей, и файлы (таблицы) без понятия главного ключа. Есть способы мириться с этими отступлениями. Например, в первом случае пользователю предоставляется возможность исправить дублирование или оставить это системе (однако не во всех системах это так). 23Логические схемы сущность-связь. Схема данных. Конструктор запросов QBE. Модели «сущность-связь» Основная статья: ER-модель данных Модель «сущность-связь» (англ. “Entity-Relationship model”), или ER-модель, предложенная П. Ченом[1] в 1976 г., является наиболее известным представителем класса семантических (концептуальных, инфологических) моделей предметной области. ERмодель обычно представляется в графической форме, с использованием оригинальной нотации П. Чена, называемой ER-диаграмма, либо с использованием других графических нотаций (Crow's Foot, Information Engineering и др.). Основные преимущества ER-моделей: наглядность; модели позволяют проектировать базы данных с большим количеством объектов и атрибутов; ER-модели реализованы во многих системах автоматизированного проектирования баз данных (например, ERWin). Основные элементы ER-моделей: объекты (сущности); атрибуты объектов; связи между объектами. Сущность — объект предметной области, имеющий атрибуты. Связь между сущностями характеризуется: типом связи (1:1, 1:N, N:М); классом принадлежности. Класс может быть обязательным и необязательным. Если каждый экземпляр сущности участвует в связи, то класс принадлежности — обязательный, иначе — необязательный. Схема данных Создание схемы данных позволяет упростить конструирование многотаблиц, форм, запросов, отчетов, а также обеспечить поддержание целостности взаимосвязанных данных при корректировке таблиц. Схема данных наглядно отображает таблицы и связи между ними, а также обеспечивает использование связей при обработке данных и целостность БД. Схема данных задает структуру БД. Она является графическим образом БД. Схема данных базы графически отображается в своем окне, таблицы представлены списками полей, а связи - линиями между полями разных таблиц. Схема данных ориентирована на работу с таблицами, отвечающими требованиям нормализации, между которыми установлены связи 1:М и 1:1 с обеспечением целостности БД. Поэтому схема данных отроится в соответствии с информационно-логической моделью. При построении схемы данных Access автоматически определяет по выбранному полю связи тип связи между таблицами. Если поле, по которому нужно установить связь, является уникальным ключом, как в главной таблице, так и в подчиненной Access устанавливает связь «один – к – одному». Если поле связи является уникальным ключом в главной таблице, а в подчиненной таблице является неключевым или входит в составной ключ, Access устанавливает связь «один ко многим» от главной таблице к подчиненной. Связи - объединения. При выборе в качестве поля связи в главной таблице неключевого поля Access сообщает, что тип отношения не может быть определен. В этом случае между таблицами возможно установление только связи - объединения. Связь объединение обеспечивает объединение записей двух таблиц, имеющих одинаковые значения в поле связи. Причем производится объединение каждой записи из одной таблицы с каждой записью из другой таблицы при условии равенства значений в поле связи. Результатом объединения записей, который определяется выбором одного из трех способов, может быть: - объединение только тех записей, в которых связанные поля обеих таблиц совпадают; - объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из первой таблицы, для которых нет связанных во второй, с пустой записью второй таблицы; - объединение тех записей, в которых связанные поля обеих таблиц совпадают, а также объединение всех записей из второй таблицы, для которых нет связанных в первой, с пустой записью первой таблицы. Создание схемы данных начинается в окне БД с выполнения команды Сервис / Схема данных или нажатием соответствующей кнопки. После этого можно выбрать таблицы, включаемые в схему данных, и приступить к определению связей между ними. Устанавливая связи между парой таблиц в схеме данных, надо выделить в главной таблице уникальное ключевое поле, по которому устанавливается связь, и протащить курсор мыши в соответствующее поле подчиненной таблицы. QBE-запросы (Query By Example) — запросы, строящиеся с помощью конструктора запросов, представляющего собой графический инструмент для создания запросов по образцу. Данный метод отбора данных впервые предложен Моше Злуфом (англ. Moshé M. Zloof), сотрудником исследовательского центра IBM в 1970 году. Эксплуатационным преимуществом поиска QBE является то, что для формирования запроса не требуется использовать специализированный язык запросов, синтаксис которого может быть сложен и недоступен конечному пользователю. Пользователю выводится окно, в котором указаны все поля данных, встречающиеся в каждой записи данных; введение информации в конкретное поисковое поле ограничит поиск совпадением (полным или частичным, в зависимости от договорённости реализации) по данному полю. Проверка условий осуществляется только по заполненным условиям на поля, а поля, условия на которые указаны не будут, могут соответствовать чему угодно. Многие практические реализации QBE допускают также не только конъюнктивное соединение условий в заполненных полях, но и другие варианты соединения условий (например, дизъюнкцию, отрицание, существование или несуществование связанных записей и другие). 24.Язык SQL. Запросы на выборку данных. SQL (произносится “SEQUEL”)- структурированный язык запросов (Structured Query Language). Базы данных имеют тенденцию к постоянной интеграции, что привело к необходимости разработки стандартного языка запросов, пригодного для использования на множестве компьютерных платформ. SQL изначально не являлся языком программирования, поскольку на нем пишутся не программы, а запросы к БД. Т.е. SQL- декларативный язык. Это означает, что с его помощью можно сформулировать ЧТО необходимо получить, но нельзя указать КАК это сделать. Операторы типа if, for, do, while и т.п. – отсутствуют. Запрос на языке SQL состоит из одной или нескольких команд SQL, следующих одна за другой и разделенных точкой с запятой. Наиболее важные команды: SELECT Выбрать Вsбрать данные из БД INSERT Добавить Добавить данные в БД UPDATE Обновить Обновить данные в БД DELETE Удалить Удалить данные из БД GRANT Разрешить Предоставить привилегию пользователю REVOKE Отменить Отменить привилегию пользователя COMMIT ЗАФИКСИРОВАТЬ Зафиксировать текущую транзакцию ROLLBACK ПРЕРВАТЬ Прервать текущую транзакцию Инструкция SELECT Инструкция select извлекает информацию из базы данных и возвращает ее в виде таблицы результатов запроса. В кратком введении в SQL, сделанном в главе 2, уже приводились примеры инструкций select. Ниже показано несколько образцов запросов, извлекающих данные об офисах. Вывести список офисов с их плановыми и фактическими объемами продаж. SELECT CITY, TARGET, SALES FROM OFFICES CITY TARGET SALES Denver $300,000.00 $186,042.00 New York $575,000.00 $692,637.00 Chicago $800,000.00 $735,042.00 Atlanta $350,000.00 $367,911.00 Los Angeles $725,000.00 $835,915.00 Вывести список офисов, расположенных в восточном регионе, с их плановыми и фактическими объемами продаж. SELECT CITY, TARGET, SALES FROM OFFICES WHERE REGION = ‘Eastern’ CITY TARGET SALES New York $575,000.00 $692,637.00 25. Язык SQL. Запросы на выборку данных с GROUP BY. Предложение GROUP BY позволяет определить подлинность значений отдельного поля в терминах другого поля и применять функции агрегирования к полученному подмножеству. Это дает возможность комбинировать поля и агрегатные функции в одном SELECT. Например, предположим, что нужно найти наибольший заказ из тех, что получил каждый из продавцов. SELECT snum, MAX (amt) FROM Orders GROUP BY snum При этом результат- несколько строк. snum 1001 1002 1003 … 9891 5160,45 1713,23 выходные данные GROUP BY применяет агрегированные функции отдельно к каждой из серии групп, которые определяются общим значением поля (одно и тоже snum). Справа- МАХ значение на группу (с номером 1001). Возможно, применить GROUP BY к нескольким полям: SELECT snum, odate, MAX (amt) FROM Orders GROUP BY snum, odate; Запрос дает наибольший заказ сделанный каждому продавцу на каждую дату. 26. Язык SQL. Многотабличные запросы на выборку данных. Использование множества таблиц в одном запросе До этого момента рассматривалась техника запросов SQL, базирующаяся на одной таблице, однако основные преимущества запросов заключаются в том, что они могут базироваться на нескольких связанных таблицах- объединениях. При операции соединения (join) таблицы перечисляются в предложении запроса FROM через запятую. Предикат запроса может ссылаться на любой столбец из соединяемых таблиц (обычно WHERE). Имена таблиц предшествуют через точку именам полей. SELECT Customers.cname, Sales people.sname, Sales people.city FROM Sales people, Customers WHERE Sales people. city = Customers.city; Это типичный пример, когда префиксы действительно необходимы (и в одной и в другой таблице поле- city). В дальнейшем префиксы используем по необходимости. В запросе для каждого продавца из Sales people проводится проверка предиката. Операция соединения таблиц посредством ссылочной целостности Допустим, что между таблицами существует связь по полю snum- номер продавца (за каждым покупателем закреплен продавец). Здесь операция соединения может извлечь данные в терминах связи: показать соответствие имен покупателей именами продавцов, их обслуживающих: SELECT Customers cname, Salespeople.sname FROM Customers, Salespeople WHERE Salespeople.snum = Customers.snum; Поля snum не представлены в выходных данных, поскольку они не существенны как результаты. Подобным образом могут быть построены объединения нескольких таблиц (>2). Иногда требуется построить запрос по двум копиям одной таблицы. Здесь возникает проблема с именами. У копии должны быть другие имена. Проблема решается определением временных имен- алиасов в предложении FROM. Рассмотрим пример поиска пар продавцов, имеющих одинаковый рейтинг: SELECT first.sname, second.sname, first.rating FROM Salespeople first, Salespeople second WHERE first.rating = second.rating; SQL не делает копии реально, но внешне это выглядит так, что Salespeople распадается на две копии с именами first и second. После выполнения запроса алиасы утрачивают силу. Выходные данные примера будут включать каждую комбинацию значений дважды из-за симметрии предиката (подставьте реальные имена и увидите). Кроме того, каждая запись присоединяется к себе самой. Есть простой способ исключить трехкратные повторения- сделать предикат асимметричным. SELECT first.sname, first.rating FROM Salespeople first, Salespeople second WHERE first.rating = second.rating; AND first.sname < second.sname; Это уже полезный прием для работы. Алиасы используют не только для копий запросов, но и просто при замене длинных имен короткими. 27. Язык SQL. Модификация данных. SQL - Команды модификации данных К этой группе относятся операторы добавления, изменения и удаления записей. Добавить новую запись в таблицу: INSERT INTO <имя_таблицы> [ (<имя_столбца>,<имя_столбца>,...) ] VALUES (<значение>,<значение>,..) Список столбцов в данной команде не является обязательным параметром. В этом случае должны быть указаны значения для всех полей таблицы в том порядке, как эти столбцы были перечислены в команде CREATE TABLE, например: INSERT INTO publishers VALUES (16,"Microsoft Press","microsoft"); Пример с указанием списка столбцов: INSERT INTO publishers (publisher,pub_id) VALUES ("Super Computer Publishing",17); Модификация записей: UPDATE <имя_таблицы> SET <имя_столбца>=<значение>,... [WHERE <условие>] Если задано ключевое слово WHERE и условие, то команда UPDATE применяется только к тем записям, для которых оно выполняется. Если условие не задано, UPDATE применяется ко всем записям. Пример: UPDATE publishers SET url="superpub" WHERE pub_id=17; В качестве условия используются логические выражения над константами и полями. В условиях допускаются: операции сравнения: > , < , >= , <= , = , <> , != . В SQL эти операции могут применяться не только к числовым значениям, но и к строкам ( "<" означает раньше, а ">" позже в алфавитном порядке) и датам ( "<" раньше и ">" позже в хронологическом порядке). оперции проверки поля на значение NULL: IS NULL, IS NOT NULL операции проверки на вхождение в диапазон: BETWEEN и NOT BETWEEN. операции проверки на вхождение в список: IN и NOT IN операции проверки на вхождение подстроки: LIKE и NOT LIKE отдельные операции соединяются связями AND, OR, NOT и группируются с помощью скобок. Подробно все эти ключевые слова будут описаны и проиллюстрированы в параграфе, посвященном оператору SELECT. Здесь мы ограничимся приведением несложного примера: UPDATE publishers SET url="url not defined" WHERE url IS NULL; Эта команда находит в таблице publishers все неопределенные значения столбца url и заменяет их строкой "url not defined". Удаление записей DELETE FROM <имя_таблицы> [ WHERE <условие> ] Удаляются все записи, удовлетворяющие указанному условию. Если ключевое слово WHERE и условие отстутствуют, из таблицы удаляются все записи. Пример: DELETE FROM publishers WHERE publisher = "Super Computer Publishing"; Эта команда удаляет запись об издательстве Super Computer Publishing. 28.Локальные сети ЭВМ. Локальная сеть (ЛВС или LAN — Local Area NetWork) — сеть, связывающая ряд компьютеров в зоне, ограниченной пределами одной комнаты, здания или предприятия. Для соединения локальных сетей используются следующие устройства, которые различаются между собой по назначению и возможностям: Мост (англ. Bridge) — связывает два фрагмента локальных сетей. Передаёт данные между фрагментами сетей в пакетном виде, не производя в них никаких изменений. Ниже на рисунке показаны три фрагмента локальных сетей, соединённые двумя мостами. Соединение локальных сетей посредством мостов Здесь мосты создали расширенную сеть, которая обеспечивает своим пользователям доступ к прежде недоступным ресурсам. Кроме этого, мосты могут фильтровать пакеты, охраняя всю сеть от локальных потоков данных и пропуская наружу только те данные, которые предназначены для других сегментов сети. Маршрутизатор (англ. Router) объединяет сети с общим протоколом более эффективно, чем мост. Он позволяет, например, расщеплять большие сообщения на более мелкие куски, обеспечивая тем самым взаимодействие локальных сетей с разным размером пакета. Маршрутизатор может пересылать пакеты на конкретный адрес (мосты только отфильтровывают ненужные пакеты), выбирать лучший путь для прохождения пакета и многое другое. Чем сложней и больше сеть, тем больше выгода от использования маршрутизаторов. Мостовой маршрутизатор (англ. Brouter) — это гибрид моста и маршрутизатора, который сначала пытается выполнить маршрутизацию, где это только возможно, а затем, в случае неудачи, переходит в режим моста. Шлюз (англ. GateWay), в отличие от моста, применяется в случаях, когда соединяемые сети имеют различные сетевые протоколы. Поступившее в шлюз сообщение от одной сети преобразуется в другое сообщение, соответствующее требованиям следующей сети. Таким образом, шлюзы не просто соединяют сети, а позволяют им работать как единая сеть. C помощью шлюзов также локальные сети подсоединяются к мэйнфреймам — универсальным мощным компьютерам 29.Технологии клиент-сервер. Технологии FS, RDA и DBS. Технология и модели “клиент - сервер”. “Клиент - сервер” – это модель взаимодействия компьютеров в сети. Как правило, компьютеры неравноправны: одни владеют и распоряжаются информационновычислительными ресурсами, другие- имеют возможность пользоваться ими- файловой системой, почтовой службой, службой печати, базой данных. Компьютер, управляющий тем или иным ресурсом, принято называть сервером этого ресурса, а компьютер, желающий им воспользоваться- клиентом. Например, если ресурс- файлы, то сервер называется файл- сервер, если БД, то сервер БД. Один и тот же компьютер, в принципе может иметь роль и сервера и клиента. Например, при наличии большой ЭВМ (например 15-400), компьютер может работать сервером для клиентов- ПК и посылать запросы большой ЭВМ. Этот же принцип распространяется и на взаимодействие программ. Так, SQLориентированную СУБД называют сервером БД или SQL –сервером, а программы, обращающиеся к нему- SQL – клиентами. Первоначально (до ПК), СУБД имели централизованную структуру (Большая ЭВМтерминалы)- это не являлось “клиентом- сервером”, поскольку вся обработка сосредотачивалась в центральной ЭВМ. Характерной особенностью технологии “клиент - сервер” является распределенная обработка, реализованная в программе- сервере и программах- клиентах, с взаимодействием согласно некоторому определенному протоколу. При написании программы (приложения) в предметной области используется следующий основной принцип К-С- технологии. Функции интерактивного приложения разделяются на 4 группы, имеющие различную природу: Ввод и отображение данных; Прикладные функции предметной области (например, для банковской системыоткрытие счета, перевод денег с одного счета на другой и т.п.); Фундаментальные функции хранения и управления информационными ресурсами (базами данных, файловыми системами и т.д.); Служебные функции- связывающие первые три группы. Конкретные реализации, в зависимости от накопления перечисленных компонентов, могут быть отнесены к одной из четырех моделей: Модель файлового сервера (File Server - FS); Модель доступа к удаленным данным (Remote Data Access - RDA); Модель сервера БД (Data Base Server - DBS); Модель сервера приложений (Application Server - AS). Модель FS. Схема запросов к файловой системе. FS- модель не так давно была исключительно популярной среди разработчиков как базовая для локальных сетей ПК (Fox PRO, Clipper, Clarion, Paradox и т.п.). В случае многопользовательской СУБД- на рабочем месте выполняется как прикладная программа, так и копия СУБД, а базы данных находятся в разделяемых файлах, находящихся на FS. При обращении к БД, СУБД направляет запрос к FS. В ответ FS по сети направляет требуемый блок данных. Получив его, СУБД выполняет действия, декларированные в прикладной программе. Технологический недостаток моделиВысокий сетевой график, низкая безопасность данных (защита на уровне файлов системы) и узкий спектр манипуляций с данными. Применение FS как сервера БДошибочно в принципе. Модель RDA (доступ к удаленным данным). Схема запросов к файловой системе. Модель RDA существенно отличается от FS- модели характером доступа к информационным ресурсам- (SQL- сервер). Коды Клиент направляет запрос к информационным ресурсам. Ядро СУБД сервера обрабатывает запросы и возвращает клиенту результат, оформленный как блок данных. Инициатор манипуляций- клиент. RDA- модель избавлена от недостатков централизованной системы и FS-системы. Перенос компоненты представления существенно разгружает сервер, отводя ему роль полной обработки запросов и транзакций. Язык SQL становится стандартным средством общения клиент – сервер. Но RDA- модель также не лишена недостатков: Взаимодействие «клиент-сервер»- загружает сеть; Совмещенные представления прикладного компонента затрудняет администрирование. Модель сервера БД (DBS). Реализована в Informix, Ingres, Sybase, Oracle. Ее основу составляет механизм хранимых процедур - средства программирования SQL- сервера. Процедуры хранятся в словаре БД, разделяются между клиентами. Язык хранимых процедур- это процедурное расширение SQL- уникальное для каждой системы. В виде набора хранимых процедур оформлен прикладной компонент. Достоинства DBS- модели: Централизованное администрирование прикладных функций; Снижение графики (вместо SQL- запросов по сети направляются вызовы хранимых процедур); Возможности разделения процедуры между несколькими приложениями. Недостатки: Ограниченность средств написания хранимых процедур; В большинстве СУБД отсутствуют средства отладки хранимых процедур. На практике чаще всего используются смешанные модели, когда поддержка целостности БД и некоторые простейшие прикладные функции поддерживаются DBSмоделью, а более сложные функции выполняются на клиенте (RDA- модель). Модель AS- сервер приложений. (Application server). Характерной особенностью AS- модели является реализация прикладного компонента (группы процессов, выполняющих прикладные функции) на отдельном сервере приложений. Модель сервера приложений. В трехзвенной схеме появляется еще один стандартный интерфейс API. В прикладной компоненте используются универсальные механизмы ОС. AS-модель является фундаментом для так называемых ТРМ (Transaction Processing Monitors)- мониторов транзакций. 30. Технологии клиент-сервер. Многоуровневые технологии AS. Протоколы TCP/IP и HTTР. WWW сервера и Интернет. СЕРВЕР ПРИЛОЖЕНИЙ (AS) В AS -модели процесс, выполняющийся на компьютере-клиенте, отвечает обычно за интерфейс с пользователем (т. е. реализует функции первой группы). Обращаясь за выполнением услуг к прикладному компоненту, этот процесс играет роль клиента приложения (Application Client - АС). Прикладной компонент реализован как группа процессов, выполняющих прикладные функции, и называется сервером приложения (Application Server - AS). Все операции над информационными ресурсами выполняются соответствующим компонентом, по отношению к которому AS играет роль клиента. Из прикладных компонентов доступны ресурсы различных типов - базы данных, очереди, почтовые службы и др. RDA- и DBS-модели опираются на двухзвенную схему разделения функций. В RDAмодели прикладные функции приданы программе-клиенту, в DBS-модели ответственность за их выполнение берет на себя ядро СУБД. В первом случае прикладной компонент сливается с компонентом представления, во втором — интегрируется в компонент доступа к информационным ресурсам. В AS-модели реализована трехзвенная схема разделения функций, где прикладной компонент выделен как важнейший изолированный элемент приложения, для его определения используются универсальные механизмы многозадачной операционной системы, и стандартизованы интерфейсы с двумя другими компонентами. AS-модель является фундаментом для мониторов обработки транзакций (Transaction Processing Monitors - ТРМ), или, проще, мониторов транзакций, которые выделяются как особый вид программного обеспечения. В заключение отметим, что часто, говоря о сервере базы данных, подразумевают как компьютер, так и программное обеспечение - ядро СУБД. При описании архитектуры «клиент—сервер» под сервером базы данных мы имели в виду компьютер. Ниже сервер базы данных будет пониматься как программное обеспечение - ядро СУБД. Отдельные участки Интернет представляют собой сети различной архитектуры, которые связываются между собой с помощью маршрутизаторов. Передаваемые данные разбиваются на небольшие порции, называемые пакетами. Каждый пакет перемещается по сети независимо от других пакетов. Сети в Интернет неограниченно коммутируются (т.е. связываются) друг с другом, потому что все компьютеры, участвующие в передаче данных, используют единый протокол коммуникации TCP/IP (читается "ти-си-пи / айпи"). На самом деле протокол TCP/IP — это два разных протокола, определяющих различные аспекты передачи данных в сети: протокол TCP (Transmission Control Protocol) — протокол управления передачей данных, использующий автоматическую повторную передачу пакетов, содержащих ошибки; этот протокол отвечает за разбиение передаваемой информации на пакеты и правильное восстановление информации из пакетов получателя; протокол IP (Internet Protocol) — протокол межсетевого взаимодействия, отвечающий за адресацию и позволяющий пакету на пути к конечному пункту назначения проходить по нескольким сетям. Схема передачи информации по протоколу TCP/IP такова: протокол ТСР разбивает информацию на пакеты и нумерует все пакеты; далее с помощью протокола IP все пакеты передаются получателю, где с помощью протокола ТСР проверяется, все ли пакеты получены; после получения всех пакетов протокол ТСР располагает их в нужном порядке и собирает в единое целое. Каждый компьютер, подключенный к сети Интернет имеет два равноценных уникальных адреса: цифровой IP-адрес и символический доменный адрес. Присваивание адресов происходит по следующей схеме: международная организация Сетевой информационный центр выдает группы адресов владельцам локальных сетей, а последние распределяют конкретные адреса по своему усмотрению. IP-адрес компьютера имеет длину 4 байта. Обычно первый и второй байты определяют адрес сети, третий байт определяет адрес подсети, а четвертый — адрес компьютера в подсети. Для удобства IP-адрес записывают в виде четырех чисел со значениями от 0 до 255, разделенных точками, например: 145.37.5.150. Адрес сети — 145.37; адрес подсети — 5; адрес компьютера в подсети — 150. Доменный адрес (англ. domain — область), в отличие от цифрового, является символическим и легче запоминается человеком. Пример доменного адреса: barsuk.les.nora.ru. Здесь домен barsuk — имя реального компьютера, обладающего IP-адресом, домен les — имя группы, присвоившей имя этому компьютеру, домен nora — имя более крупной группы, присвоившей имя домену les , и т.д. В процессе передачи данных доменный адрес преобразуются в IP-адрес. Механизм такого преобразования подробно описан в . Основные возможности, предоставляемые сетью Интернет Интернет предоставляет своим пользователям разнообразные услуги и возможности (сервисы). Перечислим основные. 1. World Wide Web — главный информационный сервис. World Wide Web (WWW, "Всемирная паутина") — гипертекстовая, а точнее, гипермедийная информационная система поиска ресурсов Интернет и доступа к ним. Гипертекст — информационная структура, позволяющая устанавливать смысловые связи между элементами текста на экране компьютера таким образом, чтобы можно было легко осуществлять переходы от одного элемента к другому. На практике в гипертексте некоторые слова выделяют путем подчёркивания или окрашивания в другой цвет. Выделение слова говорит о наличии связи этого слова с некоторым документом, в котором тема, связанная с выделенным словом, рассматривается более подробно. Гипермедиа — это то, что получится, если в определении гипертекста заменить слово "текст" на "любые виды информации": звук, графику, видео. Такие гипермедийные ссылки возможны, поскольку наряду с текстовой информацией можно связывать и любую другую двоичную информацию, например, закодированный звук или графику, Так, если программа отображает карту мира и если пользователь выбирает на этой карте с помощью мыши какой-либо континент, программа может тут же дать о нём графическую, звуковую и текстовую информацию. Система WWW построена на специальном протоколе передачи данных, который называется протоколом передачи гипертекста HTTP (читается "эйч-ти-ти-пи", HyperText Transfer Protocol). Всё содержимое системы WWW состоит из WWW-страниц. WWW-cтраницы — гипермедийные документы системы World Wide Web. Создаются с помощью языка разметки гипертекста HTML (Hypertext markup language). Язык HTML позволяет добавлять к текстовым документам специальные командные фрагменты — тэги (англ. tag — "этикетка, ярлык") таким образом, что становится возможным связывать с этими документами другие тексты, графику, звук и видео, задавать заголовки различных уровней, разделять текст на абзацы, строить таблицы и т.д. Например, заголовок документа может иметь такой вид: <TITLE> Клуб любителей персиков </TITLE> Одну WWW-страницу на самом деле обычно составляет набор гипермедийных документов, расположенных на одном сервере, переплетённых взаимными ссылками и связанных по смыслу (например, содержащих информацию об одном учебном заведении или об одном музее). Каждый документ страницы, в свою очередь, может содержать несколько экранных страниц текста и иллюстраций. Каждая WWW-страница имеет свой "титульный лист" (англ. "homepage") — гипермедийный документ, содержащий ссылки на главные составные части страницы. Адреса "титульных листов" распространяются в Интернет в качестве адресов страниц. Личные страницы — такие WWW-страницы, которые принадлежат не фирмам и не организациям, а отдельным людям. Содержание и оформление такой страницы зависит только от её автора. При работе с системой WWW пользователи имеют дело с программами-клиентами системы, называемыми браузерами. Браузеры (англ. browse — листать, просматривать) — программы, с помощью которых пользователь организует диалог с системой WWW: просматривает WWW страницы, взаимодействует с WWW-cерверами и другими ресурсами в Интернет. Существуют сотни программ-браузеров. Самые популярные браузеры: Netscape Navigator и Microsoft Internet Explorer. Браузеры WWW умеют взаимодействовать с любыми типами серверов, используя при этом их собственные протоколы. Информацию, полученную от любого сервера, браузер WWW выводит на экран в стандартной, удобной для восприятия форме. При этом переключения с одного протокола на другой для пользователя часто остаются незамеченными. Протокол HTTP В «сердце» web находится протокол передачи гипертекста (HTTP), являющийся протоколом прикладного уровня. Описание HTTP можно найти в RFC 1945 и RFC 2616. Протокол HTTP реализуется с помощью двух программ: клиента и сервера, которые, находясь на разных оконечных системах, обмениваются HTTP-сообщениями. Порядок обмена и содержание сообщений описаны в протоколе. Перед тем как углубиться в изучение HTTP, сначала освоим терминологию, используемую в контексте web. Каждая web-страница, или документ, состоит из объектов. Объект представляет собой обычный файл в формате HTML, изображение в формате JPEG или GIF, Javaапплет, аудиоклип и т. п., то есть единицу, обладающую собственным универсальным указателем ресурса (Uniform Resource Locator, URL). Как правило, web-страницы состоят из базового HTML-файла и объектов, на которые он ссылается. Так, если webстраница включает базовый HTML-файл и пять изображений, то она состоит из шести объектов. Ссылки на объекты, относящиеся к web-странице, представляют собой URLадреса, включенные в базовый HTML-файл. URL состоит из двух частей: имени хоста сервера, на котором находится объект, и пути к объекту. Так, например, для URL _www.someSchool.edu/someDepartment/picture.gif именем хоста является фрагмент _www.someSchool.edu, а путем к объекту — фрагмент someDepartment/picture.gif. Браузером называется агент пользователя web; он отображает web-страницы, а также выполняет множество дополнительных служебных функций. Кроме того, браузеры представляют клиентскую сторону протокола HTTP. Таким образом, термины «браузер» и «клиент» в контексте web будут употребляться как эквивалентные. В число наиболее популярных браузеров входят Netscape Navigator и Microsoft Internet Explorer. Web-сервер содержит объекты, каждый из которых идентифицируется своим URLадресом. Кроме того, web-серверы представляют серверную сторону протокола HTTP. К наиболее популярными web-серверам следует отнести Apache и Microsoft Internet Information Server. Протокол HTTP определяет, каким образом клиенты (например, браузеры) запрашивают web-страницы, а серверы осуществляют передачу этих страниц. Более подробный разговор о взаимодействии клиента и сервера мы проведем позднее, однако основную идею можно понять из рис. 2.4. Когда пользователь запрашивает webстраницу (например, совершает щелчок на гиперссылке), браузер посылает серверу HTTP-запрос объектов, составляющих web-страницу. Сервер получает запрос и высылает ответные сообщения, содержащие требуемые объекты. В 1997 году практически все web-браузеры и web-серверы стали поддерживать протокол HTTP версии 1.0, описанный в документе RFC 1945. В 1998 году начался переход к версии 1.1, которая была описана в документе RFC 2616. Версия 1.1 имеет обратную совместимость с версией 1.0, то есть любой сервер или браузер, использующий версию 1.1, может в полной мере взаимодействовать с браузером или сервером, поддерживающим версию 1.0. Как HTTP 1.0, так и HTTP 1.1 используют TCP в качестве протокола транспортного уровня. HTTP-клиент сначала устанавливает ТСР-соединение с сервером, а после создания соединения клиент и сервер начинают взаимодействовать с протоколом TCP через интерфейс сокетов. Как было сказано ранее, сокеты представляют собой «двери» между процессами и протоколом транспортного уровня. Клиент посылает запросы и принимает ответы через свой интерфейс сокетов, а сервер использует интерфейс сокетов для получения запросов и их выполнения. После того как web-запрос минует сокет клиента, он оказывается «в руках» протокола TCP. Вспомним, что одной из функций протокола TCP является обеспечение надежной передачи данных; это означает, что каждый запрос, посылаемый клиентом, и каждый ответ сервера доставляются в виде, точно соответствующем отправленному. Здесь проявляется одно из достоинств многоуровневой коммуникационной модели: протоколу HTTP не нужно контролировать надежность передачи и обеспечивать повторную передачу пакетов при искажениях. Вся «черновая» работа будет проделана протоколом TCP и протоколами более низких уровней. Необходимо отметить, что после завершения обслуживания клиентов сервер не сохраняет о них никакой информации. Если, например, какой-либо клиент сделает два запроса одного и того же ресурса подряд, сервер выполнит их, не выдав клиенту никакого оповещения о дублирующем запросе. Говорят, что протокол HTTP является протоколом без запоминания состояния (stateless protocol) соединения. 31. Структурное программирование. Тестирование. Структурное программирование. Общепринятого точного определения структурного программирования нет. Как концепция оно привлекло внимание после того, как Корадо Бойман и Джузеппе Якопини в 1966г. было доказано, что программу для решения любой логической задачи можно составить только из трех структур: следование, ветвление и повторение (цикл). Далее было указано, что неограниченное использование оператора goto нарушает соответствие между текстом и логикой работы программы (то есть программа плохо читается). Можно так определить структурное программирование: это программирование, ориентированное на общение с людьми, а не с машиной. Для этого программа должна удовлетворять следующим требованиям: - текст программы должен быть композицией трех основных элементов: следование, ветвление и цикл; - употребление goto следует избегать всюду, где это возможно. Наихудшее применение goto – переход на оператор, расположенный выше в тексте программы; - при написании программы желательно придерживаться следующих рекомендаций: используйте осмысленные имена для объектов; избегайте схожих имен; избегайте использования промежуточных переменных; во избежание неоднозначности употребляйте скобки в выражениях; по возможности избегайте специфических особенностей языка; не игнорируйте предупреждающие сообщения компилятора; игнорируйте все предложения по повышению эффективности, пока программа не будет правильной; используйте комментарии для записи спецификаций в начале модуля; комментируйте объявления переменных (для чего они предназначены); помните особенности внутреннего представления данных в ЭВМ и диапазоны значений типов переменных; - текст программы нужно структурировать, то есть писать так, чтобы можно было легко выделять блоки программы; - каждый модуль должен иметь один вход и один выход. Защитное программирование (защита от дурака) – это контроль входных данных с целью обнаружения ошибок в них. Оно используется для следующих целей: - устойчивость программы в целом; - худшее, что может сделать модуль, – это получить неверные входные данные и выдать неверный, но правдоподобный результат. Защитное программирование требует разумного подхода, так как, доведенное до крайности, оно может чрезвычайно усложнить программу. Тестирование программного обеспечения. Тестирование – это процесс выполнения программы с намерением найти ошибки. Если цель – показать отсутствие ошибок, то их будет найдено немного, если цель – показать наличие ошибок, то их будет найдено значительно больше. Отладка – это процесс установления точной природы уже найденной ошибки и ее исправление. Результат тестирования является исходными данными для отладки. Фундаментальные принципы тестирования отражены в следующих аксиомах тестирования. 1. Хорош тот тест, для которого высока вероятность обнаружить ошибку, а не тот, который демонстрирует правильную работу программы. 2. Одна из самых сложных проблем при тестировании – решить, когда надо закончить, то есть как выбрать минимум тестов, дающих максимальную отдачу. 3. Невозможно тестировать свою собственную программу. Тестирование должно быть разрушительным процессом. 4. Необходимая часть любого теста – описание ожидаемых выходных данных и результатов, то есть ожидаемые результаты тестирования нужно определять заранее, до написания программы. 5. Нужно избегать не воспроизводимых тестов, то есть не задавать в качестве входных воздействий заранее не спланированные значения, которые часто невозможно повторить при нахождении ошибок. Тесты следует документировать. 6. Нужно готовить тесты как для правильных, так и для неправильных входных данных. 7. Нужно детально изучать результаты каждого теста. 8. По мере роста числа ошибок, обнаруженных в программе, растет относительная вероятность существования в ней необнаруженных ошибок. 9. Тестирование нужно поручать самым способным программистам. 10. Никогда нельзя изменять программу с целью облегчения ее тестирования. Существует два похода к тестированию. 1. Предполагает составлять тесты только на основе внешних спецификаций. 2. Предполагает составлять тесты, изучая только логику программы. Проектирование тестов. 1. Руководствуясь внешними спецификациями, нужно подготовить тест для каждой ситуации, вызывающей внешние эффекты, для каждой границы областей допустимых значений входных и выходных данных, для всех недопустимых условий. Если входных параметров немного и они имеют мало различных значений, имеет смысл перебрать все входные комбинации. Если входные аргументы ограничены некоторым диапазоном значений, то проверяют работу на границах области допустимых значений и в нескольких внутренних точках. Многие программы имеют функциональные границы. (Например, модуль выполняет сортировку чисел. Функциональные границы: массив пуст или содержит один элемент, массив уже отсортирован, все элементы массива – одинаковые). 2. Нужно проверить текст программы и добавить тесты с целью охвата всех условных переходов. 3. Для каждого цикла необходимо составить тесты соответствующие однократному выполнению тела цикла, максимальному числу итераций, обходу тела цикла. 4. По тесту программы необходимо выявить чувствительность к особым значениям входных данных и добавить тесты. 32.Объектно- ориентированное программирование. Объе́ктно-ориенти́ рованное, или объектное, программи́ рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы. Основные понятия: Абстракция Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик.[1] Инкапсуляция Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя.[1] Наследование Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом.[1] Полиморфизм Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.[1] Класс Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области. Объект Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса или копирования прототипа (например, после запуска результатов компиляции и связывания исходного кода на выполнение). Прототип Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка. В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект — это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией. Сущность: Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования. Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию