Узбекское агенство почты и телеокоммуникаций
Ташкентский электротехнический институт связи
Кафедра Информатика
Конспект лекции по курсу «Информатика»
1 часть
Информатика – научное направление, занимающееся изучением законов, методов и способов накапливания, обработки и передачи информации с помощью ЭВМ и др. технологических средств: Группа дисциплин, занимающихся различными аспектами применения и разработки ЭВМ: прикладная математика программирование, программное обеспечение, искусственный интеллект, архитектура ЭВМ и вычислительные сети.
Т.е. основной объект, с которым оперирует информатика это информация.
1. Информация – совокупность знаний о практических данных и зависимостях между ними. Является одним из видов ресурсов, используемых человеком в трудовой деятельности, быту. В вычислительной технике информация - это содержание, присваиваемое данным, посредством соглашений, распространяющихся на эти данные, подлежащие вводу в ЭВМ, хранимые в ее памяти, обрабатываемые на ЭВМ и выдаваемые пользователям.
Сообщение - это упорядоченная последовательность символов, предназначенная для передачи информации.
Во все времена людям надо было считать. В туманном доисторическом прошлом они считали на пальцах или делали насечки на костях. Примерно около 4000 лет назад, на заре человеческой цивилизации, были изобретены уже довольно сложные системы исчисления, позволяющие осуществлять торговые сделки, рассчитывать астрономические циклы и др. Несколько тысячелетий спустя появились первые ручных вычислительные инструменты. А в наши дни сложнейшие вычислительные задачи, как и множество др. операций, казалось бы, не связанных с числами, решаются компьютером – комплексом технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач.
Ни одна другая машина в истории не привнесла в наш мир столь быстрых и глубоких изменений. Благодаря компьютерам стали возможны такие замечательные достижения, как посадка аппаратов на поверхность Луны и исследование планет Солнечной системы. Компьютеры создали тысячи удобств и услуг в нашей повседневной жизни. Они управляют анестезионной аппаратурой в операционных, диагностируют, изобретают «видеотрюки» для кинематографа, улучшают качество телевизионного. изображения, управляют телефонными станциями, движением автомобилей, выполняют роль охраны домов и организаций, управляют полетом самолетов и космических кораблей, воспроизводят музыку и управляют работой всего оркестра, без промаха позволяют поразить любую движущуюся цель, подготавливают к печати книги, создают рисунки, управляют сложными технологическими производствами и др. Благодаря локальным и глобальным сетям связи, появлению Internet - единой общемировой компьютерной сети, появилась возможность обмена информацией на больших расстояниях; пересылки электронной почты, телеконференций – обмен мнениями с помощью электронных писем по поводу тех или иных тем, рассылка новостей по тем или иным темам в виде электронных писем. С помощью Internet создана всемирно распределенная база гипертекстовых документов WWW или Web. Каждый пользователь может поместить свою информацию и пользоваться любой информацией, находящейся в базе. Простота использования WWW привела к тому, что в Internet стал подключаться самый, что ни на есть, массовый пользователь – домохозяйки и бизнесмены, феминистки и революционеры, гитаристы и трансвестисты – всем им сеть Internet стала полезной, а многим жизненно необходима. На серверах WWW стала размещаться самая разнообразная информация – сведения о фирмах, реклама товаров, советы по эксплуатации и техническая документация на товары и т.д. Политические партии и общественные организации публикуют в Web материалы о своей деятельности. На WWW серверах университетов можно прочесть научные труды их сотрудников, сведения о приеме и выпуске студентов, учебные планы и т.д. Имеется также куча информации по финансам и бизнесу, промышленности, спорту, культуре, развлечениям и т.д. Пересылая номера кредитных карточек по WWW можно совершить покупки, заказать авиа билет, использовать платные услуги и т.д. Внутри корпоративные сети, в которых используется технология WWW, получили название Intranet. Сети Intranet могут сообщаться с Internet и это очень удобно. Например, при этом сотрудник фирмы может из любого места планеты получить доступ к внутрифирменным данным. Кроме того, Internet используется как транспорт (связующее звено между отдельными частями внутри корпоративной сети).
Несмотря на столь бурный прогресс в наши дни, закладка фундамента компьютерной революции происходила медленно и далеко не гладко. Отправной точной этого процесса можно считать изобретение счетов, сделанное более 1500 лет назад, по-видимому, в странах Средиземноморья. Этим нехитрым устройством, состоящим из набора костяшек, нанизанных на стержни, люди пользовались для своих расчетов. Вплоть до XVII в., счеты как вычислительный инструмент оставались практически вне конкуренции. Европейские мыслители той эпохи были увлечены идеей создания счетных устройств. Одним из самых плодотворных изобретателей был Джон Непер – шотландец – изобретатель логарифмов и логарифмической линейки, ускоряющей процесс вычисления. А позднее он изобрел инструмент, получивший название "костяшки Непера", который состоял из набора сегментированных стерженьков, которые можно располагать так, что, складывая числа в прилегающих друг к другу по горизонтали сегментах, мы получим результат их умножения. Однако изобретения Непера вскоре были вытеснены вычислительными устройствами, в основном, механическими, первым их изобретателем стал француз Блез Паскаль. Его машина "паскалина" позволяла легко складывать. Другие операции выполнялись при помощи довольно неудобной процедуры повторных сложений. Первая машина, позволявшая легко производить вычитание, умножение и деление была изобретена в том же XVII в. в Германии Лейбницем. Он изготовил механический калькулятор, а также заложил основы двоичной системы. исчисления, которая позднее нашла свое применение в автоматических вычислительных устройствах. Следующей ступенью в развитии вычислительных устройств стала аналитическая машина Беббиджа. Беббидж попытался построить универсальное вычислительное устройство. Он впервые догадался, что компьютер должен содержать память и управляться с помощью программ, которые собирался задавать посредством перфокарт (по аналогии с ткацкими станками). Однако, довести до конца эту работу Беббидж не смог - она оказалась слишком сложной для техники того времени. В 1941г немецкий ученый К Цузе построил небольшой компьютер на основе электронных реле, в основу принципа работы которых были заложены идеи Бэббиджа, а в США в 1943г на из одном предприятий IBM г-н. Эйкен создал более мощный компьютер "Марк-1". Но электромеханические реле работали ненадежно, поэтому с 1943 г., в США группа специалистов под руководством Д. Моъли и П. Экерта начало конструировать «ENIAC» на основе электронных ламп. Но он был неудобен тем, что для задания методов расчета (программы) в нем приходилось несколько дней подсоединять нужным образом провода. В 1949г. английским исследователем М. Уилксом был построен компьютер на основе принципа Джона Фон Неймана, согласно которому управляющая программа хранилась в своей памяти. В 40х-50х гг. компьютеры создавались на основе электронных ламп, поэтому они были дорогими громоздкими и ненадежными. В 1948г изобретение транзисторов привело к уменьшению размеров компьютеров в сотни раз и повышению их надежности. В 1959 г. Р. Найс (будущий основатель фирмы INTEL) изобрел способ, позволяющий создавать на одной пластине кремния транзисторы и все необходимые соединения между ними. Полученные электрические схемы стали называться интегральными схемами или чипами. В 1968 г. фирма Burrougns выпустила первый компьютер на основе интегральной схемы, а в 1970 г. фирма INTEL начала продавать интегральные схемы памяти. В 1970 г. был сделан еще один важный шаг на пути к ПК. Э. Хофф из фирмы INTEL сконструировал интегральную схему, аналогичную по своим функциям центральному процессору большого компьютера. Так появился первый микропроцессор INTEL-4004, который обрабатывал одновременно только 4 бита информации (процессоры больших компьютеров обрабатывали 16 или 32 бита одновременно). Но в 1973 г. INTEL выпустила 8 битный микропроцессор INTEL 8008, а в 1974 г. – его усовершенствованную версию INTEL-8080, который до конца 70-х стал стандартом для микрокомпьютерной индустрии. В начале микропроцессор использовались в разных спец. устройствах, калькуляторах, а в 1975г. появился первый ПК «Альтаир 8800» на основе МП INTEL-8080. В 1979 г.ф. IBM решила попробовать себя на рынке ПК. В качестве основного МП был выбран 16-разр. МП In-8088, который позволял работать с 1мб памяти, а его программное обеспечение было поручено фирме Microsoft. В августе 1981 г. новый компьютер под названием IBM PC впервые появился на рынке ПК, а года через два занял ведущее место.
Большинство (более 90%) современных компьютеров являются IBM PC-совместимыми ПК. Слово "совместимость" означает:
1) программную совместимость – все программы, разработанные для IBM PС будут работать и на IBM PС – совместимых компьютерах.
2) аппаратную совместимость - подавляющее большинство устройств для компьютеров IBM PС и более новых версий (IBM PC XT, IBM PC XT), годится и для современных.
Важнейшую роль в развитии IBM PC - совместимых компьютеров, сыграл заложенный в них фирмой IBM принцип открытой архитектуры: фирма обеспечила возможность его сборки из независимо изготовленных частей, при этом методы сопряжения к нему внешних устройств не держались в секрете, а были доступны всем желающим.
1) Полная программная совместимость этих компьютеров привела к появлению сотен тысяч рассчитанных практически все сферы человеческих деятельности.
2) Открытость рынка этих компьютеров повлекла за собой острейшую конкуренцию, а значит максимально быстрые темпы внедрения технических новинок, обеспечивающих повышение возможностей при сохранении относительно низких цен и интеграции компонентов.
3) Модульное устройство IBM совместимых компьютеров обеспечили их компактность, надежность, возможность их легкой модернизации. В настоящее время IВМ PC - совместимые компьютеры по всем основным показателям (быстродействие, емкость оперативной и дисковой памяти) в сотни раз превосходят первоначальную модель IВМ РС, а стоят дешевле. Более 90% всех производимых в мире компьютеров - IВМ РС - совместимы. Производством компонент и устройств для IВМ РС - совместимых компьютеров занимаются тысячи фирм в числе которых такие известные как INTEL, TOSHIBA, FUJITSU, SIEMENS, HITACHI, HEWLETT-PACKARD, PHILLIPS, SAMSUNG, LG. Особую роль среди производителей компонент играет фирма INTEL - лидер в области разработки и производства МП, с ним конкурируют фирмы AMD, Cyriх, IВМ и др. Фабрики для производства компонент и устройств для IВМ PC - совместимых компьютеров в большинстве случаев располагаются в Юго–Восточной Азии и Ирландии, но наиболее высокотехнологичные производства имеются в США, Европе, Японии. Фирмы с мировым авторитетом, производящие высококачественные компьютеры, это - Соmpaq, IВМ, Hewlett-Packard, AST, Micron, Dell. Крупнейшим разработчиком программного обеспечения для IBM РС - совместимых компьютеров является фирма Microsoft - создатель ОС MS DOS, Windows, Windows-95, Windows редактора документов Word, табличного редактора ЕХСЕL.
ЭВМ является электронным цифровым устройством потому, что любая информация обрабатывается с помощью электрических сигналов и представляется в ЭВМ с помощью чисел. В ЭВМ для записи чисел используется двоичная система исчисления. Двоичная система используется в компьютерах, потому что электрическими сигналами очень просто обозначить двоичные цифры: 0 - нет сигнала и 1 - есть сигнал (напряжение или ток).
Кодирование это отождествление данных с их кодовыми комбинациями, установление соответствия между элементом данных и совокупностью символов, называемой кодовой комбинацией. Любую информацию можно разделить на небольшие элементарные части. Например, текст в книге состоит из букв и других символов. Буква - это элементарная часть текстовой информации. Информации называется закодированной, если любая элементарная часть ее представлена в виде числа. Такие числа называются кодами. Текст можно закодировать, если каждую букву заменить кодом, например, номером буквы в алфавите. ЭВМ может обрабатывать информацию только в закодированном виде. Минимальной единицей информации является бит (bit). Один бит информации - это одна двоичная цифра: 0 или 1. Это очень маленькое количество информации, поэтому в компьютерах для обработки элементарных частей информации используется более крупная единица - байт (byte). Один байт - это информация, которая кодируется восьмиразрядным двоичным кодом.
Один байт - это не только единица информации, это элементарная ячейка памяти ЭВМ. Память ЭВМ состоит из последовательности таких ячеек. Каждая ячейка (байт) имеет адрес - номер ячейки и содержимое - двоичный код, который хранится в ней. когда процессор ЭВМ обрабатывает информацию, он находит по адресу в памяти нужную ячейку, читает из нее содержимое, выполняет необходимые действия и записывает результат в другую ячейку памяти.
Память ЭВМ измеряется в байтах, но чаще для этого используются другие единицы: килобайт (Кбайт или КБ) и мегабайт (Мбайт или МБ):
1 Кбайт = 2^10 байт = 1024байта
1 Мбайт = 2^10 Кбайт = 1024 Кбайта
Стандартная величина оперативной памяти персонального компьютера обычно составляет 640 Кбайт. Много это или мало? Одна строка текста в книге содержит примерно 60 символов. На одной странице помещается примерно 50 строк. Поэтому одна страница содержит примерно 60*50=3000 символов или ~3 Кбайта информации. Значит, в оперативной памяти может поместиться 640/3~200 страниц книжного текста. Мощные ПК могут иметь оперативную память величиной до нескольких Мбайт. Мы выяснили, что каждый символ текстовой информации хранится в одном байте памяти ЭВМ. А каким образом компьютер обрабатывает числовую информацию? Это зависит от того, какой процессор используется в компьютере. Каждый процессор предназначен для обработки двоичных кодов определенной длины. В самых первых персональных компьютерах использовалось процессоры, которые одной командой могли обрабатывать только один байт информации. Эти компьютеры были восьмиразрядными. Большое количество современных компьютеров являются 16-разрядными. В этих компьютерах применяются процессоры, которые одной командой могут обрабатывать 2 байта информации. В 16-разрядных ЭВМ для хранения и обработки целых чисел используется 2 байта памяти. Какие целые числа могут обрабатывать такие ЭВМ? Вспомним, что целые числа могут быть положительными и отрицательными. Как закодировать знак числа? Для этого можно использовать один из 16 битов, например, самый левый бит. Если он равен 0, то можно считать число положительным, а если он равен 1, то число будет отрицательным. Ниже дана схема хранения целых чисел (реальное представление отрицательных чисел несколько сложнее, но для нас это несущественно):
2 байта = 16 битов |
|
бит знака числа |
15 битов для абсолютной величины числа |
По этой схеме целое число будет иметь максимальную абсолютную величину, если все 15 битов будут равны 1:
(111 1111 1111 1111(2)+1)-1=1000 0000 0000 0000(2)-1=2^15-1=32767
Максимальное целое число, которое может обрабатывать процессор 16-разрядной ЭВМ, равно 32767. если вы хотите обрабатывать целые числа большей величины, то для их хранения нужно более 2 байтов памяти. Процессор не может обрабатывать такую информацию одной командой, поэтому вы должны использовать специальные программы для обработки целых чисел больше 32767.
Все, что мы сказали про обработку больших целых чисел, относится и к действительным (дробным) числам. Однако обычный 16-разрядный процессор (например, i80286) не умеет обрабатывать действительные числа. Для этого можно использовать специальные программы, т.е. эмулировать арифметику с действительными числами, при этом, конечно, уменьшается скорость вычислений. в тех же случаях когда нужно проводить большие численные расчеты, желательно оснастить компьютер дополнительным специализированным процессором, который называется числовым сопроцессором - Numeric Co-processor (например, i80287).
Для хранения действительных чисел в памяти ЭВМ могут использоваться ячейки из 4,6,8 и 10 байтов, а сами числа представляются в экспоненциальной форме. Например, число 184. 525 (вместо десятичной запятой используем точку!) записывается в виде 0. 184525Е+3. Здесь 184525 - это мантисса числа, а 3-это порядок числа (Е+3 означает умножить на 10^3).
Приведем возможную схему хранения действительных чисел в ячейке из 4 байтов, где нужно хранить мантиссу числа со знаком и порядок числа тоже со знаком:
4 байта = 32 бита |
|
7 битов для порядка |
25 битов для мантиссы числа |
По этой схеме максимальная абсолютная величина порядка числа равна 2^6-1= 63, а максимальная величина мантиссы равна 2^24-1=16777215. Мы видим, что мантисса действительного числа не может содержать более 8 десятичных цифр. Компьютер при вычислениях отбрасывает лишние цифры в мантиссе, поэтому все вычисления с действительными числами ЭВМ всегда выполняет приближенно, или с ошибкой.
Ошибки вычислений накапливаются, поэтому при решении задач, требующих очень больших вычислений с действительными числами, нужно принимать специальные меры для уменьшения ошибок, иначе полученное решение будет весьма далеким от правильного. Одной из таких мер может быть вычисление с двойной точностью, при этом действительные числа хранятся в ячейках памяти из 8 байтов, а мантисса числа содержит 15 цифр.
Поскольку как сказано выше информатика – это научное направление, занимающееся изучением законов, методов и способов накапливания, обработки и передачи информации с помощью ЭВМ и других технологических средств, компьютеры, являясь средством изучения предмета информатики (информации) составляют ее неотъемлемую часть. Информатизация – это реализация комплекса мер, направленных на обеспечение полного и своевременного использования достоверных знаний во всех общественно – значимых видах человеческой деятельности. Трудно переоценить роль ЭВМ в процессе информатизации, поскольку последняя на современном этапе развития науки и техники осуществляется исключительно посредством ЭВМ. Поэтому мы считаем необходимым изучить устройство ЭВМ и принцип его работы.
Рассмотрим на примере IBM PC устройство персонального компьютера.
ПК состоит из следующих основных элементов: процессор, монитор, клавиатура, и дополнительные устройства. Клавиатура служит для ввода символов в компьютер, следовательно, является устройством, служащим для ввода информации пользователем в компьютер. Клавиатура IBM PC выпускается нескольких типов (101 и более клавиш). Монитор, или дисплей дает возможность отображения информации, т.е. служит для вывода на экран текстовой и графической информации и работает, соответственно, в двух режимах текстовом и графическом. В текстовом режиме экран условно разделен на столбцы и строки. В графическом режиме, кроме текстовой информации на экран выводится и график. В этом режиме экран состоит из точек (пиксели). Например, экран с разрешающей способностью 640´200 состоит из 640 точек по горизонтали и 200 по вертикали. Основные типы мониторов, их разрешающая способность и гамма используемых цветов в разных режимах приведены в следующей таблице.
Адаптер |
Цвет |
Текст |
Типы мониторов графика |
MDA |
ч-б. |
80´20 |
640´200 - 2 цв. |
CGA |
цветной |
80´25 - 16 цв. |
640´200 – 2 цв. |
Hercules |
ч-б. |
80´25 – 2 цв. |
720´348 – 2 цв. |
EGA |
цветной |
80´25 – 16 цв. 80´43 – 16 цв. |
640´350 – 16 цв. |
VGA |
цветной |
80´25 – 16 цв. |
640´480 – 16 цв. |
SVGA |
цветной |
80´25 – 16 цв. |
800´600 – 16 цв. |
Процессор, являясь основным устройством ЭВМ, состоит из устройств, в котором расположены микропроцессор, оперативная память, жесткий диск, контроллеры, устройство для работы с дискетами.
Микропроцессор – выполняет функции управления компьютером и все вычислительные действия. Микропроцессор или микрочип – целая электрическая фабрика, состоящая из сотен тысяч микроскопических электронных схем, выгравированных на поверхности крошечного кремниевого кристалла. Работой микропроцессора управляют электроимпульсы, которые открывают и закрывают его тысячи и миллионы раз в секунду. Каждое открытие или закрытие представляет собой единицу информации, закодированную в виде 0 или 1.Скорость его до 100 млн. и с выше действий в секунду. Он обеспечивает работу программ и управляет работой других устройств компьютера. В IBM PC обычно встраиваются микропроцессоры фирмы INTEL. Компьютеры отличаются друг от друга типами микропроцессоров.
Существуют микропроцессоры INTEL 8088, 80286, 80386 SX, 80386, 80486, Pentium, Pentium PRO, PENTIUM II, PENTIUM III (скорость выполнения действий PRO на 40% больше PENTIUM).
Оперативная память хранит работающие в компьютере программы и информацию. Информация переносится с постоянной памяти в оперативную, полученные результаты при необходимости записывается на жесткий диск.
Процессор INTEL 8088 обладает объемом оперативной памяти в 1 Мб, 80286 – 4 Мб, 80386 – 16 Мб. Байт – единица измерение информации
1 Кбайт = 210 байт, 1 Мбайт = 210 Кбайт
Оперативная память состоит из двух частей. Первая часть – 640Кб – предназначена для прикладных программ ОП. Вторая часть – внешняя память – используется для пользователя.
Для многих программ объема в 640 Кб оказывается недостаточно. С созданием I-80286 появилась возможность расширения памяти без исполнения дополнительных блоков памяти. Этот микропроцессор может работать в обычном и защищенном режиме 640 Кб до 16 Мбайт.
Жесткий диск используется для постоянного хранения используемых программ и информации. Это программы операционной системы (ОС), редакторы, системы программирования, прикладных программы, информация и др. Объем жестких дисков различный. У ЭВМ с IBM PC XT – 20 Мб, IBM PC AT – 40 Мб, 80386 SX, 80386 DX, 80486 SX – 110-120 Мб, 80486 DX – 120-540, 640, 850 Мб. Существуют также диски с объемом 1-30 Гб. В необходимых случаях можно заменить жесткий диск.
Контроллеры – (электрические схемы) управляют работой устройств, из которых состоит компьютер.
Периферийные устройства ЭВМ:
Принтер – предназначен для вывода информации на бумагу. Обычно принтеры могут выводить не только текстовую информацию, но также рисунки и графики. Одни принтеры позволяют печатать только в одном цвете (черном), другие могут выводить также и цветные изображения. Существуют несколько видов принтеров:
§ Матричные принтеры. Сейчас эти принтеры сильно потеснены струйными и лазерными, так как обеспечивают значительно худшее качество печати, сильно шумят при работе и малопригодны для цветной печати.
§ Струйные принтеры сейчас являются одним из наиболее распространенных типов принтеров для IBM PC. В отличии от матричных принтеров струйные работают с гораздо меньшим шумом, обеспечивают лучшее качество печати и самую дешевую цветную печать приемлемого качества.
§ Лазерные принтеры обеспечивают наилучшее (близко к типографическому) качество черно-белой печати, а цветные лазерные принтеры – также и очень высокое качество цветной печати. Лазерные принтеры обеспечивают самую высокую среди всех принтеров скорости печати и не требуют специальной бумаги.
Мышь – манипулятор, использующийся для ввода данных. Мышь значительно облегчает диалог пользователя с компьютером и поэтому сейчас является неотъемлемой частью ПК.
Модем – это устройство для обмена информацией с другими компьютерами через телефонную сеть. Для всех пользователей, желающих использовать глобальные электронные сети типа Internet, работать с электронной почтой, получать извне офиса доступ к локальной сети своей фирмы, посылать и получать факсы с помощью компьютера необходим модем.
Сканер – вводит информацию с бумаги в виде изображения в компьютер.
Плоттер – устройство, выводящее на бумагу графики.
Сетевой адаптер – дает возможность подсоединения компьютеров к местной сети.
Средства мультимедиа. «Мультимедиа» означает возможность работы с информацией в различных видах, а не только в цифровом виде. Прежде всего, здесь имеются в виду звуковая и видеоинформация. К средствам мультимедиа относятся: звуковая карта, колонки, дисковод для компакт-дисков и некоторое программное обеспечение.
Дискеты используются для записи информации с одного компьютера в другой и для хранения информации. Обычные дискеты в 5,25 (133 мм) и 3,5 (89 мм) дюймов. 5,25 дюймовые дискеты имеют различные объем памяти 180, 360 Кб, 1,2, 2 Мб. 3,5 дюймовые дискеты имеют объем 0,72, 1,44, 242, 88 Мб.
Компьютер, согласно принципу фон Неймана должен иметь следующие устройства:
§ арифметико-логическое устройство, выполняющее арифметические и логические операции;
§ устройство управления, которое организует процесс выполнения программ;
§ запоминающее устройство, или память для хранения программ и данных;
§ внешние устройства для ввода-вывода информации.
Память компьютера должна состоять из некоторого количества, пронумерованных ячеек, в каждой из которых могут находиться или обрабатываемые данные или инструкции программ. Все ячейки памяти должны быть одинаково легко доступны для других устройств компьютера.
Вот каковы должны быть связи между устройствами компьютера (одинарные линии показывают управляющие связи, двойные – информационные).
![]() |
Принцип работы компьютера. В общих чертах работу компьютера можно описать так. Вначале с помощью какого-либо внешнего устройства в память компьютера вводится программа. Устройство управления считывает содержимое ячейки памяти, где находится первая инструкция (команда) программы, и организует ее выполнение. Эта команда может задавать выполнение арифметических или логических операций, чтение из памяти данных для выполнения арифметических или логических операций или запись их результатов в память, ввод данных из внешнего устройства в память или вывод данных из памяти на внешнее устройство.
Как правило, после выполнения одной команды устройство управления начинает выполнять команду из ячейки памяти, которая находится непосредственно за только что выполненной командой. Однако этот порядок может быть изменен с помощью команд передачи управления (перехода). Эти команда указывают устройству управления, что ему следует продолжить выполнение программы, начиная с команды, содержащейся в некоторой ячейке памяти. Такой «скачок» или переход, в программе может выполняться не всегда, а только при выполнении некоторых условий, например. если некоторые числа равны, в результате предыдущей арифметической операции получился нуль и т.д. Это позволяет использовать одни и те же последовательности команд в программе много раз (т.е. организовывать циклы). выполнять различные последовательности команд в зависимости от выполнения определенных условий и т.д., т.е. создавать сложные программы.
Таким образом, управляющие устройства выполняют инструкции программы автоматически, т.е. без вмешательства человека. Оно может обмениваться информацией с оперативной памятью и внешними устройствами компьютера. Поскольку внешние устройства, как правило, работают значительно медленнее, чем остальные части компьютера, управляющее устройство может приостанавливать выполнение программы до завершения операции ввода-вывода с внешним устройством. Все результаты выполненной программы должны быть ею выведены на внешние устройства компьютера, после чего компьютер переходит к ожиданию каких-либо сигналов внешних устройств.
Особенности современных компьютеров. Следует заметить, что схема устройства современных компьютеров несколько отличается от приведенной выше. В частности, арифметическо-логическое устройство и устройство управления, как правило, объединены в единое устройство – центральный процессор. Кроме того, процесс выполнения программ может прерываться для выполнения неотложных действий, связанных с поступившими сигналами от внешних устройств компьютера – прерываний. Многие быстродействующие компьютеры осуществляют параллельную обработку данных на нескольких процессорах.
Как происходит обработка информации в ЭВМ?
Любая информация представляется в ЭВМ в виде чисел и располагается в оперативной памяти, так происходит потому, что цифровую информацию очень удобно кодировать, а значит, ее удобно хранить и обрабатывать.
За единицу представления информации в ЭВМ принимают один бит (от binary digit). Бит может принимать значения 0 или 1.
Бит – очень маленькая единица информации, она удобна для хранения информации в компьютере, но неудобна для ее обработки.
Обработкой информации в компьютере занимается специальная микросхема – процессор, который может одновременно обрабатывать группу битов. Поэтому за единицу обработки или передачи информации принимается один байт, который представляет собой последовательность из восьми битов. Байты могут объединяться по два, четыре, восемь байтов и образовывать неполное стандартное, длинное слово (ячейка) соответственно. Каждая ячейка может содержать число или команду, записанных с помощью единиц и нулей. Способ представления чисел посредством числовых знаков (цифр) называют системой счисления (СС). Правила записи и действий над числами в СС, используемых в цифровой вычислительной технике, определяют арифметические основы цифровых ЭВМ.
В ЭВМ находят широкое применение системы счисления с основанием, являющимся целой степенью числа 2, т.е. двоичная, восьмеричная и шестнадцатеричная.
Для записи двоичных чисел используются две цифры: 0 и 1. Сложение и умножение выполняются по следующим правилам:
Сложение |
Вычитание |
Умножение |
0+0=0 |
0-0=0 |
0´0=0 |
0+1=1 |
1-0=1 |
0´1=0 |
1+0=1 |
1-1=0 |
1´0=0 |
1+1=10 |
10-1=1 |
1´1=1 |
Действия над многозначными числами выполняются по принципу поразрядного сложения и умножения по этим таблицам.
Пример:
1)
+ |
1 |
0 |
0 |
т.е. |
+ |
4 |
1 |
0 |
1 |
5 |
|||
1 |
0 |
0 |
1 |
|
9 |
2)
- |
1 |
0 |
0 |
0 |
т.е. |
- |
8 |
|
1 |
1 |
1 |
7 |
|||
|
|
0 |
0 |
1 |
|
1 |
3)
* |
1 |
0 |
1 |
|
1 |
1 |
|
|
1 |
0 |
1 |
1 |
0 |
1 |
|
1 |
1 |
1 |
1 |
4)
1 |
0 |
1 |
0 |
1 |
1 |
1 |
|
|
1 |
1 |
|
|
1 |
1 |
1 |
|
1 |
0 |
0 |
|
|
|
|
|
|
1 |
1 |
|
|
|
|
|
|
|
1 |
1 |
|
|
|
|
|
|
1 |
1 |
|
|
|
|
|
|
|
0 |
|
|
|
Двоичная система счисления позиционная, также как и восьмеричная, шестнадцатеричная, т.е. значение цифры зависит от занимаемого ею положения. Для записи чисел в восьмеричной системе используют 8 цифр: 0,1,2,3.4,5,6,7.
Действия над ними, также определяются таблицами сложения и умножения. Для записи чисел в шестнадцатеричной системе используют шестнадцать цифр: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Изображение целых десятичных чисел в различных системах показано в таблице 1.1.
Таблица 1.1
десятичное число |
восьмеричное число |
шестнадцатеричное число |
двоичное число |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 |
0 1 2 3 4 5 6 7 8 9 А В С Д Е F 10 |
000 001 010 011 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 |
Итак. в двоичной системе (основание системы 102 =210 ) младший разряд это разряд единиц, а каждый следующий в 102 раз больше, т.е. если говорить о десятичном эквиваленте в 210 раза больше. Проверим результат примера 3 исходя из предыдущих соображения: в младшем разряде одна единице + в следующем разряде: одна двойка + в следующем одна четвертка + в следующем одна восьмерка, следовательно, число 11112=
=110+210+410+810=1510 все.
Разберем пример 4: 101012: 11=111
101012 = 1×16 + 0×8 +4×0×2+1=2110
112=1+2=310.
Следовательно, мы делили 21 на 3, записанных в двоичной системе, в результате получим 1112=14+2×1 +1=7, т.е. действие выполнено верно.
Любое число А=аn an-1…..a1a0, записанное в позиционной системе с основанием q может быть предоставлено в виде суммы.
Например:
16210=1×10210+6×1010+2,
AB116=A×10102+B×1016+1
738=7×108+3
где q –
основание системы счисления (оно во всех системах представляется как 10) -
цифры этой системы счисления.
Принцип позиционности положен в основу правила перевода чисел из одной системы в другую. При этом надо учесть, что числу 102 в двоичной системе соответствует число 210 в десятичной (102=210). Аналогично 108=810 , 1016=1610.
Например, числа: 25,038; 18,610; 101,102; А9В16 можно представить в виде разложения, а затем перевести в десятичную систему так:
Перевод из восьмеричной и шестнадцатеричной систем в двоичную и обратно заключается в простой замене цифр тремя (тирада) или четырьмя (тетрада) двоичными знаками. Именно поэтому сначала восьмеричная, а потом и шестнадцатеричная С.С. используются как промежуточная между нашей десятичной и машинной двоичной С.С.
Пример 1. восьмеричное число
шестнадцатеричное
число
Пример 2.
Целые числа представляются в ЭВМ в виде последовательности двоичных нулей и единиц, перед которой записывается 0, – если число положительное и 1 – если отрицательное.
Вещественные числа представляются в нормальной форме, принято, что десятичная запятая у всех чисел стоит в одном и том же месте.
Например:
12,6=+0,126*102
-1,86=-0,186*101
0,0021=0,21*10-2
и записываются так: +0,126 Е 2; -0,186 Е 1; 0,21 Е-2.
Такая форма представления чисел называется формой с плавающей точкой, первая часть числа называется мантиссой, а вторая – характеристикой. Для работы с действительными числами имеется дополнительный процессор, который называется математическим сопроцессором. У процессоров 486 и PENTIUM математический сопроцессор встроен внутрь основного.
Целое число в четырех байтовой ячейке схематично представляется так:
Знак числа |
ЧИСЛО |
|||
0 |
1 |
2 |
………….. |
31 |
Число же с плавающей запятой представляются так:
Знак числа |
характеристики |
мантисса |
||||
0 |
1 |
|
7 |
8 |
………….. |
31 |
Характеристика это 64 + порядок. Представление разрядов порядка показано ниже в таблице
Порядок |
Разряды порядка (представленные в ячейке) |
-64 |
0000000 |
-63 |
0000001 |
…………. |
…………. |
-1 |
0111111 |
0 |
1000000 |
1 |
1000001 |
………… |
…………. |
63 |
1111111 |
При записи команды в ячейке определенное число разрядов отводится для записи кода операции (КОП)
КОП |
Адрес |
и адреса (адресов) числа, над которым эту операцию надо выполнить. Число адресов команд современных ЭВМ может быть различным, т.е. имеется одно, двух, трех, четырехадресные команды. В любом случае в команде должно быть отражено:
- какую операцию (КОП) выполнить: сложение, деление, сдвиг, сравнение и т.д.
- над какими величинами
- куда поместить результат.
Для работы с отрицательными числами используется несколько отличная от обычной арифметика. Двоичные числа могут изображаться 3мя кодами: прямым, обратным и дополнительным. Кодирование чисел используется для того, чтобы с помощью устройства, выполняющего только сложение (двоичный сумматор) можно было выполнить все арифметические операции.
Прямой код используется при умножении и сложении, обратный – при вычитании, дополнительный – при делении и сложении относительных (отрицательных и положительных) чисел.
В прямом коде положительные числа записываются как обычно, а отрицательные имеют единицу в старшем бите, выражающую знак минус.
Например: 9910 ® 01100011; 1410 ® 000011102; 10001110 ® -1410 прямой.
В обратном коде положительное число совпадает с прямым кодом, в отрицательном с в знаковом записывается 1, а в мантиссе 0 заменяется на 1. а единица на ноль.
Например, (-14) ® 11110001;
В дополнительно коде положительное число записывается как в прямом коде, а отрицательное – как в обратном, но компьютер к младшему разряду прибавляет единицу. Тогда вычитание можно заменить сложением. Например -14®10001110.
99-14=85
+ |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
|
|
|
1 |
0 |
1 |
0 |
1 |
0 |
1 |
Кроме того, применяются модифицированные прямой, обратный, и дополнительный коды, когда знак числа записывают двумя двоичными разрядами,
Как уже говорилось, любая информация в ЭВМ представляется в цифровой форме.
Поэтому для всеобщего пользования устанавливается международный стандарт кодирования информации – таблица кодов.
Для кодирования 1 символа отводится один байт, т.е. с его помощью можно закодировать 256 различных символов, т.к. самое большое число записывается в 8 битах 1111111=255.
Международный стандарт ASCII определяет первую половину этой таблицы, вторая половина отводится для национального стандарта. Стандарт ASCII первые 32 кода таблицы оставляет для так называемых управляющих кодов, которые отданы на усмотрение производителей компьютерных систем и применяются для управления компьютерами.
Таблица кодов ASCII
32 |
Пробел |
47 |
/ |
62 |
> |
96 |
‘ |
33 |
! |
48 |
0 |
63 |
? |
97 |
a |
34 |
“ |
49 |
1 |
64 |
@ |
98 |
b |
35 |
# |
50 |
2 |
65 |
A |
99 |
c |
36 |
$ |
51 |
3 |
66 |
B |
100 |
d |
37 |
% |
52 |
4 |
67 |
C |
… |
… |
38 |
|
53 |
5 |
68 |
D |
122 |
z |
39 |
¢ |
54 |
6 |
69 |
E |
123 |
{ |
40 |
( |
55 |
7 |
… |
… |
124 |
| |
41 |
) |
56 |
8 |
90 |
Z |
125 |
} |
42 |
* |
57 |
9 |
91 |
[ |
126 |
~ |
43 |
+ |
58 |
: |
92 |
\ |
127 |
|
44 |
, |
59 |
|
93 |
] |
|
|
45 |
- |
60 |
; |
94 |
^ |
|
|
46 |
. |
61 |
= |
95 |
_ |
|
|
имея под рукой кодовую таблицу символов, можно легко определить, какие слова закодированы следующими байтами.
67 79 77 80 85 84 69 82
99 111 109 112 117 116 101 114
C O M P U T E R
c o m p u t e r
Аналогичным образом кодируются цветовая и графическая информации.
Одним байтом можно закодировать 256 различных цветов, что достаточно для рисованных изображение типа тех, что мы видим в мультфильмах. Если для кодирования цвета одной точки использовать 3 байта, то количество возможных цветов достигнет 16,5 миллионов. Цвет любой точки можно представить в виде комбинации трех основных цветов: красного, зеленого, синего.
Первый байт выделяется красной составляющей, второй – зеленой, третий – синей. чем больше значение байта цветовой составляющей, тем ярче этот цвет, например: красный (255, 0, 0), пурпурный (255, 0, 255), зеленый (0, 255, 0), голубой (0, 255, 255).
Это режим позволяет хранить, обрабатывать и передавать изображения, не уступающие по качеству наблюдаемым в живой природе.
При кодировании графической информации рисунок разбивается на точки и начиная с его левого верхнего угла, по строкам слева на право кодируется цвет каждой точки. Также можно кодировать звуки.
Чтобы различать, где с помощью байтов закодирован текст, а где музыка и рисунки существует строго определенный формат записи информации, ее заголовок и указывается где она начинается и заканчивается. Таким образом, мы приходим к понятию о файле.
Наименьшая единица хранения информации, содержащая последовательность байтов и имеющая уникальное имя называется файлом.
По имени файла компьютер определяет, где находится файл, какая информация в нем содержится, в каком формате она записана, какими программами ее можно обработать и т.д. Например, nc.exe, del11.bmp, primer.txt, wr.doc. Для удобства работы с файлами на диске создаются каталоги. Если внутри одного каталога лежит другой, то их имена отделяются друг от друга обратной косой чертой (\).
Например: c:\Проекты\Космос\Венера\имя файла
На диске С в каталоге Проекты имеется каталог Космос, у которого в каталоге Венера расположен интересующий нас файл.
Как уже говорилось без программного обеспечения компьютер – это «железка».
Программное обеспечение – это совокупность разработанных для компьютера программ решения различных задач. Разработка П.О. – это трудоемкое дело, требующее высокой квалификации и глубокого знания не только вычислительной техники и программирования, но и тех сфер деятельности, для которых предназначена разрабатываемая программа.
В П.О. выделяют: 1) программы для управления работой компьютера, распределения его ресурсов, поддержки диалога с пользователем и выполнение работ, связанных с обслуживанием компьютера. 2) Для решения прикладных задач из других областей.
Первая из указанных групп получила название системного программного обеспечения, вторая – прикладного программного обеспечения.
Основная часть системного программного обеспечения получила название операционной системы (ОС).
Ответим на вопрос «как вводится операционная система?»
При включении компьютера начинает работать программы BIOS, которые на заводе записываются в специальной микросхеме называемой ПЗУ. Это постоянная память, которая не стирается при выключении. Микросхему устанавливают так, чтобы ее память заняла нужные адреса. Работа программ, записанных в микросхеме BIOS (базовая система ввода – вывода), отображается на черном экране бегущими белыми строчками. В этот момент компьютер проверяет свои устройства.
Прежде всего, выполняется проверка оперативной памяти (сколько ее и вся ли она в порядке). Проверяется наличие жестких дисков и дисковода гибких дисков, а также наличие клавиатуры. Если происходит ошибка, – появляется сообщение о неисправности, если все в порядке, то, заканчивая свою работу, программа BIOS дает команду загрузить с жесткого диска в оперативную память операционную систему. С этого времени всю работу с процессором и другими устройствами выполняет операционная система. Операционная система настолько тесно связана с оборудованием, что без нее современные ПК практически не могут использоваться. В мире существует множество различных ОС. На IBM совместимых ПК наиболее широко использовались различные версии MS DOS, используются Microsoft Windows 95, 98, 2000, OS 2, 3.0, Warp, UNIX и т.д.
К операционной системе предъявляются следующие требования, она должна:
- быть общепризнанной и использоваться как стандартная система на многих компьютерах.
- работать с многочисленными аппаратными устройствами, выпущенными разными фирмами, в том числе и в далеком прошлом;
- обеспечивать возможность запуска самых разных программ, написанных разными организациями;
- предоставлять средства для проверки, настройки, обслуживания компьютера, его устройств и программ, которые на нем установлены.
Поэтому одна из основных компонентов ос называется управляющей программой, кроме нее в составе ОС могут быть выделены: интерпретатор команд; файловая система, системы программирования, вспомогательные программы обслуживания технического оборудования и архивов данных на магнитных дисках.
q Интерпретатор команд обеспечивает диалог пользователя с системой, воспринимает и расшифровывает его команды, обеспечивает их выполнение, вызывая необходимую в каждой конкретной ситуации программу.
q Файловая система обеспечивает выполнение операций поиска и ввода – вывода данных.
q Система программирования включает трансляторы с языков программирования. средства отладки программ.
q Вспомогательные программы обслуживания позволяют проводить тестирование оборудования, проверку качества магнитных дисков, выполнять копирование, выводить программы и данные на печать.
q Прикладное программное обеспечение ПК насчитывает тысячи программ самого различного назначения. Каждая из них реализуется как комплекс программ и называется программным пакетом.
Например, редакторы документов: Лексикон, Microsoft Word, Corel Word Perfect, издательская система Page Maker фирмы Adobe, графический редактор Corel Draw, бухгалтерские программы, системы управления базами данных и многие другие.
Операционную систему дополняют программные модули – утилиты, драйверы, программные оболочки.
Драйверы
Специальный класс системных программ, которые расширяют возможности ОС.
Например, позволяет работать с тем или иным внешним устройством, например, ввод русских символов с клавиатуры. Большинство ОС содержит немало драйверов в комплекте поставки; программа установки ОС задействует те драйверы, которые указаны пользователем и которые нужны для поддержки устройств и функции ОС. Вводя символ, мы пользуемся услугами драйвера клавиатуры; для форматирования дискеты – системной утилитой FORMAT.
Утилиты.
К системным программам относится большое количество так называемых утилит – программ вспомогательного назначения.
Чаще всего используются следующие типы утилит
§ программы по обслуживанию компьютера – Утилиты Нортона по «лечению» и оптимизации дисков, восстановлению случайно удаленной информации.
§ антивирусные программы
§ программы резервирования – позволяют быстро скопировать нужную для вас информацию с жесткого диска на дискету и т.д.
Программные оболочки обеспечивают более удобный и наглядный способ общения с компьютером, чем штатные средства ОС. Наиболее популярные оболочки: NORTON COMMANDER, XTree Pro, Probold, Norton Desktop, Norton Navigator и т.д.
Как уже говорилось, чтобы решить задачу на ЭВМ, надо составить программу. Однако, для этого надо знать как решать задачу, т.е. должен быть известен алгоритм ее решения. Алгоритм – это последовательность формул и правил четко и однозначно определяющих решение задачи, т.е. получение результата по заданным исходным данным за конечное число шагов. Любой алгоритм должен обладать следующим основными свойствами:
§ Однозначностью (свойство детерминированности), т.е. при одних и тех же исходных данных один и тот же результат, независимо от исполнителя.
§ Массовостью, т.е. позволять получать результаты при различных исходных данных.
§ Дискретностью, т.е. обладать возможностью разбиения алгоритма на простейшие для выполнения исполнителем действия. В зависимости от поставленных целей и технических возможностей для решения задачи алгоритм можно представить либо в текстуальной форме, либо в графической форме, либо в алгоритмической форме. Чтобы разработать алгоритм, нужно хорошо представить себе ход решения задачи. Очень полезно решить задачу на бумаге для простейшего случая. Чтобы четко уяснить последовательность правил.
Пример 1. Составить алгоритмы для вычисления суммы квадратов двух чисел, вводимых с клавиатуры.
Напишем алгоритм в текстуальной форме:
1) ввести два числа a и b;
2) вычислить S=a2+b2;
3) напечатать слово “сумма=”, и значение S;
4) прекратить счет;
Алгоритм такой структуры, когда блоки исполняются в порядке следования – “структура следования” – называется линейным.
Пример 2. Составить программу для решения квадратного уравнения общего вида ax2+bx+c=0. как известно, это уравнение имеет действительные корни, если дискриминант D=b2-4ac не отрицателен.
Напишем алгоритм решения задачи в текстуальной форме:
1) ввести в память числовые значения переменных a, b, c;
2) вычислить D=b2-4ac;
3) если D<0 вывести сообщению “уравнение не имеет решения“ и перейти на пункт 7;
4)
если D ³ 0, вычислить ;
5)
вычислить ;
6)
напечатать ;
7) прекратить счет.
Очевидно, что такой способ описания алгоритмов применим только для простейших задач.
Графическое представление алгоритма, которое принято называть блок-схемой является более наглядным. Отдельные действия алгоритма в этом случае изображаются при помощи различных геометрических фигур (блоков), а связи между ними указываются стрелками. Конфигурация и размеры блоков, а также порядок построения схем определяется стандартом, которого придерживаются при окончательном оформлении программной документации. Приведем основные из них:
Наименование |
Обозначение |
Пояснения |
|
|
Вычислительная операция или группа операций |
|
|
Печать результатов на бумаге |
Решение |
|
Разветвление в алгоритме, проверка условия |
|
|
Общий ввод – вывод данных |
|
|
Начало цикла |
|
|
Ввод – вывод данных на дисплей |
|
|
Начало, конец алгоритма Вход, выход в подпрограмму |
|
|
Обращение к подпрограмме.
|
Блок схемы удобны при анализе программ, при их оптимизации, а так же для того чтобы познакомить другого человека со структурой программы.
Использование этих блоков рассмотрим на примере построения блок-схем алгоритмов, рассмотренных выше задач 1.1. и 1.2. (рис. а, рис. в)
|
а) б)
S
конец
Рис. 1. Блок схема алгоритма задачи 1.1.
В этом
алгоритме использована структура СЛЕДОВАНИЕ (рис. 1, б). Оно означает, что два
действия должны быть выполнены последовательно, структура имеет один вход и
один выход.
а) б)
Рис 2. Блок-схема алгоритма задачи 1.2.
В блок-схеме алгоритма (рис. 2, а) используются базовые структуры СЛЕДОВАНИЕ и РАЗВЕТВЛЕНИЕ. Структура РАЗВЕТВЛЕНИЕ (рис. 2, б) обеспечивает проверку условия и в зависимости от результата (да или нет) выбор одного из альтернативных путей работы алгоритма, каждый из путей ведет к общему выходу. Алгоритм, в состав которого входит базовая структура разветвления (рис 2 б, в), называется разветвляющимся.
Пример 3. Построить блок-схему алгоритма вычисления Y при X=0.5; 0.7; …; 2.1 и
Задача состоит в
многократном вычислении Y по заданной формуле при
различных значениях X. Вычисления X
надо поручить ЭВМ, для этого использовать формулу
, и ввести начальное
значение X0=0.5 и h=0.2.
Многократное повторение обеспечивает базовую структуру ЦИКЛА. Различают следующие
структуры цикла: цикл – ПОКА, цикл – ДО, модифицированный цикл. Операторы,
повторяющиеся в цикле, называются телом цикла.
|
а) б) в)
Рис. 3. Структура ЦИКЛА: а) цикл – ПОКА; б) цикл – ДО; в) – модифицированный цикл
На рисунке (рис 4) представлены несколько схем циклического алгоритма данной задачи, где используются рассмотренные структуры: цикл – пока (рис 3, а), цикл – до (рис. 3, б), модифицированный цикл (рис. 3, в).
![]() |
![]() |
![]() |
|||||||||||||
![]() |
|||||||||||||||
![]() |
|||||||||||||||
![]() |
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
Да
![]() |
Рис. 4. Блок-схема алгоритма задачи
Различают итерационные и конечные циклы. В конечном цикле количество повторений заранее известно, а в итерационном – процесс повторений заканчивается при достижении некоторого значения или некоторой заданной точности.
Алгоритмическая форма представления алгоритма предполагает запись его на одном из алгоритмических языков. Алгоритм в такой форме обычно называют программой. Алгоритмические языки близки к естественному и правила построения конструкций в них более «жесткие».
Программа на алгоритмическом языке не может выполняться непосредственно ЭВМ, перевод программы с алгоритмического языка на машинный выполняется, как уже было отмечено, специальная программа – транслятор. В этой программе «заложены» все правила алгоритмического языка и правила перевода его на машинный. Вот поэтому при составлении программы на алгоритмическом языке надо строго придерживаться правил этого языка, иначе транслятор не поймет ее.
В настоящее время языки программирования делят на процедурные (Бейсик, Паскаль, С), логические (ЛИСП, пролог и др.) и объектно-ориентированные (C++, JAVA и др.).
При создании относительно небольших программ удобно использовать процедурные языки программирования, логические языки используются при теоретическом исследовании алгоритмов, в работах по изучению искусственного интеллекта, в операциях с базами данных, в создании систем управления войсками и промышленными объектами; а объектно-ориентированные языки программирования лучше всего подходят при разработке больших программ (например, компьютерных игр). Несмотря на серьезные различия, все языки программирования имеют аналогичные средства реализации основных операций. При создании любой программы можно использовать язык программирования любого типа, хотя трудоемкость работы при использовании разных языков будет различаться.
Подготовка и решение задач на ЭВМ распадается на ряд этапов.
Первым этапом является постановка задачи и ее математическое описание. Сюда мы относим четкую формулировку задачи, определение исходных данных и результатов, какие должны быть введены и получены, математическое описание, т.е. построение математической модели, а также выбор метода решения задачи, согласованного с возможностями используемой ЭВМ.
Вторым этапом является составление алгоритма решения задачи. На этом этапе процесс конкретизируется и детализируется до последовательности арифметических и логических проверок.
Третьим этапом является программирование, т.е. написание алгоритма на конкретном языке.
Четвертым этапом является отладка программы. Отладка заключается в проверке программы, выявлении и устранении ошибок, допущенных при наборе (вводе) программы или в ее логической структуре.
Пятым этапом является проведение машинного счета по отлаженной программе.
Шестым этапом является анализ результатов машинного счета.
В главе I мы в основном остановимся подробно на втором и третьем этапах подготовки задачи.
Как бы не различались задачи, решаемые на ЭВМ, при разработке алгоритмов в большинстве задач часто встречаются определенные типы алгоритмов, построенных на основе базовых структур: следования, разветвления и цикла.
Ниже мы предлагаем блок-схемы алгоритмов решений задач наиболее часто встречающихся на протяжении всего обучения в институте.
Задача 5.1. Вычислить значение функции Y для аргумента изменяющегося в интервале [a, b] с шагом h, если
и
, h,
a, b – заданы.
Заметим, что правая сторона y=f(x) может иметь довольно сложную структуру.
Очевидно, что требуется построить алгоритм циклической структуры. Количество повторений цикла можно вычислить в данном случае по формуле
,
где a, b – начальное и конечное значения аргумента;
h – шаг изменения аргумента;
[ ] – целая часть выражения
Перед первым выполнением цикла задается начальное значение аргумента – переменной X – блок и проверяется область определения. Приведем две схемы цикла для заданной задачи: итерационный (рис. 5, а) и конечных (рис. 5, б).
a) б)
Рис. 5. Блок-схема алгоритма задачи 5.1.
Задача 5.2. Вычислить значение функции для заданных
значений xi:
x={0.9; -0.216; 1.0; -4.2; -6.8}; a=0.343
Количество вычислений по формуле равно 5, т.к. надо вычислить y1, y2, y3, y4, y5 для x1=0.9; x2=-0.216; x3=1.0; x4=-4.2; x5=-6.8. Переменная цикла I, таким образом, должны принимать последовательные значения от 1 до 5.
Начало
![]() |
|||
![]() |
Конец
Рис. 6. Блок-схема алгоритма задачи 5.2.
Задача 5.3. Вычислить сумму квадратов значений переменной X
Накопление суммы осуществляется в переменной Y, с помощью формулы Y=Y+x2, которая, обратите внимание, в обычной математической записи не имеет смысла. Перед началом счета переменные имеют нулевое значение.
Начало
Ввод нового значения х
Накопление суммы
Конец
Рис. 7.
Задача 5.4. Вычислить y=n!, где n – задано. Известно, что n! = 1 2 3 4…n, т.е. накопление произведений целых чисел от 1 до n. Поэтому алгоритм аналогичен предыдущему за исключением начального значения переменной P=1.
Начало
![]() |
Конец
Рис. 8.
Задача 5.5. Вычислить полином n – й степени
где x и ai – заданы
Здесь удобно организовать алгоритм, используя схему Горнера
В результате, вычисления сведутся к повторению вычислений сумм вида S=S*x+a
т.е. S0 = a1
S1 = S0 * x+a1
S2 = S1 * x+a2
S3 = S2 * x+a3
и т.д.
Начало
![]() |
[Ввод коэффициентов многочленов]
![]() |
|||||
![]() |
|||||
![]() |
|||||
![]() |
|||
![]() |
S
![]() |
Конец
Рис. 9
Задача 5.6. Напечатать все отрицательные элементы произвольной последовательности чисел
A = {a1, a2, … a100}
Процесс заключается в проверке знака вызванного по порядку элемента последовательности. Если он положительный, то переходим к проверке следующего элемента, если он отрицательный, то сначала элемент печатается, а потом проверка продолжается.
Начало
![]() |
да
![]() |
|||||
![]() |
|||||
|
Конец
Рис. 10
Задача 5.7.Найти максимальный элемент массива А. Массив – это упорядочение множество однородных элементов, объединенных одним именем.
Например: A={10; -1; 26; -18}
Элементы массива отличаются индексами. Так, в примере A1 = 10; A2 = -1; A3 = 26; A4 = -18.
Алгоритм нахождения минимального элемента отличается от приведенного только условием в блоке 5, т.е. должно быть
Начало
{ввод массива A}
{Amax – переменная для хранения максимальных элементов}
{Сравнение максимального из предыдущих
элементов массива с выбранным}
Да
Нет
{Пересылка большего в переменную Amax}
Конец
Рис. 11
Задача 5.8. Упорядочить массив А(N) из n элементов в порядке возрастания. Алгоритм содержит циклы: один по переменной j, другой – i. Такие циклы называются вложенными. В начале просматриваются все элементы массива А и среди них находится минимальное значение – аmin (блок 4 – 6), номер минимального элемента запоминается. После окончания внутреннего цикла происходит перестановка элементов. первый элемент а, записывается на место минимального элемента, а значение минимального элемента аmin – на место первого. Далее параметр внешнего цикла увеличивается на 1 (i=2). Описанная процедура повторяется со всеми элементами массива, начиная со второго (параметр внутреннего цикла изменяется от 2 до n).
Конец
В теории ЭВМ широкое применение находит аппарат математической логики, особенно – ее раздел называемый алгеброй логики. Алгебра логики занимается исчислением высказываний. Высказывания обозначаются заглавными буквами латинского алфавита и могут быть истинными (TRUE) или ложными (FALSE).
Например: снег белый – A, уголь красный – B, (A=1; B=0). Значение истинности высказывания равно 1, если оно истинно и равно 0, если оно ложно. Из одного или нескольких простых высказываний можно составлять сложные высказывания. Это объединение происходит с помощью специальных логических операций, названия и обозначения которых приведем в таблице.
Таблица 5.1.
Название операции |
Условное обозначение операции |
Название логического элемента |
Условное обозначение логического элемента |
Дизъюнкция (логическое сложение) |
Ú |
Схема «ИЛИ» дизъюнктор |
|
Конъюнкция (логическое умножение) |
Ù Ù |
Конъюктор Схема «И» |
|
Инверсия (отрицание) |
ù |
Инвертор схема «НЕ» |
|
Кроме указанных имеются и другие операции такие как равнозначность, импликация, операция Шеффера и т.д.
Логические элементы – основной строительный материал ЭВМ. Имеющиеся в составе ЭВМ помимо логических элементов хранения двоичной информации (триггеры), также могут быть синтезированы на основе логических элементов.
Логические элементы совместно с триггерами составляют 70% - 80% от общего количества элементов ЭВМ и в основном определяют понятия «элементная база» ЭВМ.
Значения истинности логических операций представим в таблице 5.2.
Таблица 5.2.
A |
B |
ùA |
AÙB |
AÚB |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
Не вдаваясь в
логические тонкости, дадим простое геометрическое толкование логических
операций.
C= C=AÙB C=AÚB
Высказывание А изображено на рис. 12 в виде некоторой
области, ограниченной замкнутым контуром. Очевидно высказывание (не А) будет
тогда изображаться множеством всех остальных точек квадрата. Конъюнкции двух
высказываний будет представляться пересечением двух областей А и В, т.к. С=1
только при А=1 и В=1, а это имеет место только для точек одновременно
принадлежащих области А и области В.
Дизъюнкция С=АÚВ будет изображаться областью, являющейся объединением областей А и В, т.к. С=1, если А=1 и В=0 или А=0 и В=1 или А=1 и В=1.
Для этих указанных операций справедливы следующие основные законы и привила:
Коммутативный закон: АÙВ=ВÙА; АÚВ=ВÚА.
Ассоциативный закон: АÙ(ВÙС)=(АÙВ)ÙС; (АÚВ) (А С).
Дистрибутивный закон: АÙ(ВÚС)=АÙВÚАÙС; АÚ(ВÙС)=АÚВÙАÚС.
Правила преобразования логических выражений:
1.
2. АÙ1=А; АÙ0=0
3. АÚ0=А; АÚ1=1
4. АÚ=1; АÙ
=0
5. А (В А)=1; (А В) (А В)=1
6. АÚА=АÙА=А
7. АÚ(АÙВ)=А; АÙ(АÚВ)=А
При вычислении значения логического выражения определено следующее старшинство выполнения логических операций инверсия (отрицание), конъюнкция, дизъюнкция.
В состав логического выражения могут входить выражения, которые получаются в результате объединения двух арифметических выражений знаками меньше (<), больше (>), не меньше (£), не больше (³). При вычислении логического выражения они выполняются в первую очередь. Результаты операции отношения являются логическими константами TRUE или FALSE.
Алгебра логики может быть использованы для математического описания геометрических объектов. Например, выражение x2+y2<R2 определяет множество точек, лежащих в круге радиуса R.
Пример 1. Вычислить значение z для заданных значений переменных, указать порядок выполнения операций в нем Z=x2+y2£4Ùy<1.5Ùy>2x-2; если x=1; y=1.
2. Описать с помощью логического выражения область, образованную линиями: y=2-x2; y=-1; y=1, так чтобы оно было истинным, если точка М (x, y) принадлежит области, и ложным в противном случае.
Решение.
1. Проставим порядок выполнения операций в логическом выражении и сделаем необходимые вычисления.
Ответ: Z=TRUE
2. Построим в прямоугольной системе координат заданные линии: параболу y=2-x2, прямую y=-1, прямую y=1, и заштрихуем область, которой принадлежит точка M (x, y) (рис. 1.)
![]() |
Запишем логическое выражение для переменной Z, которая будет принимать значение TRUE для всех точек заштрихованной области:
Как видим, область представляет собой пересечение полуплоскостей, ограниченных построенными линиями.
Набор простых логических элементов И, ИЛИ, НЕ являясь функционально полным, позволяет реализовать любую цифровую ЭВМ. Существуют и другие наборы логических элементов, обладающие функциональной полнотой. В качестве примера можно назвать наборы, содержащие только один тип логических элементов – ИЛИ – НЕ, либо И – НЕ, реализующих операции логическое сложение с отрицанием либо логическое умножение с отрицанием (операцию Шеффера).
Это также носило отражение в эволюции ЭВМ по поколениям. Так, например в ЭВМ первого и второго поколения использовался преимущественно функционально полный набор логических элементов И, ИЛИ, НЕ, в ЭВМ третьего и четвертого поколения элементы – И – НЕ либо ИЛИ – НЕ. Это обстоятельство обусловлено совершенствованием технологии изготовления элементной базы.
Логические элементы в составе ЭВМ выполняют логические операции конъюнкции, дизъюнкции, инверсии и прочие над входной информацией, представленной в двоичной форме. Реализация произвольного вычислительного процесса, содержащего арифметические операции – сложение, вычитание, умножение, деление и пр. или логические процедуры – поиск, сортировка, сдвиг и др. также осуществляется схемами, состоящими из логических элементов. Таким образом, логические элементы ЭВМ образуют универсальную среду, обеспечивающую арифметическую и логическую обработку логической информации. С технической реализации логических элементов вы познакомитесь на последующих курсах.
Задача 5.8. Упорядочить массив А(N) из n элементов в порядке возрастания. Алгоритм содержит циклы: один по переменной j, другой – i. Такие циклы называются вложенными. В начале просматриваются все элементы массива А и среди них находится минимальное значение – аmin (блок 4 – 6), номер минимального элемента запоминается. После окончания внутреннего цикла происходит перестановка элементов. Первый элемент а, записывается на место минимального элемента, а значение минимального элемента аmin – на место первого. Далее параметр внешнего цикла увеличивается на 1 (i=2). Описанная процедура повторяется со всеми элементами массива, начиная со второго (параметр внутреннего цикла изменяется от 2 до n).
Сегодня практически все программы создаются с помощью языков программирования. Теоретически программу можно написать и средствами обычного человеческого языка – это называется программированием на метаязыке, но автоматически перевести такую программу в машинный код пока невозможно из-за высокой неоднозначности естественного языка. Языки программирования – искусственные языки. Строгой классификации не существует. Условно языки программирования разделяют на языки: 1) Машинно-ориентированные; 2) процедурно-ориентированные или операторные 3) командные языки баз данных. Объективно-ориентированные языки для использования в современных информационных системах. Машинно-ориентированные языки предназначены для символической записи машинных команд, их называют автокодами или языками Ассемблера. Язык Ассемблера позволяет создавать наиболее эффективные программы, однако, очень трудоемок и требует высокой квалификации программиста. Программирование на этом языке называют программированием на низком уровне (хотя программы получаются высокого качества). Ко второй группе относятся FORTRAN, BASIC, COBOL, PASCAL, C, PROLAG и многие другие. Их также называют языками высокого уровня. Каждой команде на языке высокого уровня обычно оператору соответствует несколько машинных команд или целая подпрограмма в машинном коде. Раньше предполагалось, что тот или иной язык уместно использовать в той предметной области, для которой он изобретался. FORTRAN – для математических расчетов, COBOL – для коммерческих, C – для системного программирования. Однако бурное развитие информационной технологии привело с сглаживанию возможностей языков, и теперь многие из них могут считаться универсальными. Например, интересна эволюция языка программирования BASIC. Он был задуман как универсальный язык для начинающих. Первые версии этого языка содержали небольшое количество самых необходимых команд. Однако современные варианты языка не только не уступают по возможности таким языкам как Си, Паскаль, но иногда и превосходят их. Например, VISUAL BASIC используется даже в суперсовременных системах, основанных на так называемой технологии “клиент – сервер”. Одновременно BASIC стал своеобразным “эсперанто” в мире информационной технологии.
Паскаль - один из наиболее распространённых языков программирование 80-90х годов.
Язык разработал швейцарский учёный Николас Вирт. Первая версия языка была разработана в 1968 г - язык назван в честь великого французского математика и механика Блеза Паскаля. Но международный стандарт языка появился только в 1982г.
Язык Паскаль разработан с учётом принципов структурного программирования.
Алфавит языка Турбо Паскаль включает буквы, цифры, шестнадцатеричные цифры, специальные символы, пробелы и зарезервированные слова.
Буквы - это буквы латинского алфавита от a до z и от A до Z , а также знак подчеркивания _ (код ASCII 95). В Турбо Паскале нет различия между прописными и строчными буквами алфавита, если только они не входят в символьные и строковые выражения.
Цифры - арабские цифры от 0 до 9.
Специальные символы.
+ - * / = , ‘ . : ; < > [ ] ( ) { } ^ @ $ #
< > <= >= := ( * * ) ( . . ).
2.- эти пары символов нельзя разделить пробелами.
Идентификаторы в Турбо Паскале - это имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ и полей в записях. Идентификаторы могут иметь произвольную длину, но значащими являются только первые 63 символа. Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры. Буквой считается символ подчеркивания и может состоять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор.
Константы - в качестве констант в Турбо Паскале могут использоваться целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств и признак неопределенного указателя NIL.
Константа - идентификатор, обозначающий некоторую неизменную величину (значение данных) определенного типа. Объявления констант начинается зарезервированным словом CONST.
Например:
const M= 14.0;
Переменные. Переменной называют элемент программы, который предназначен для хранения, коррекции и передачи данных внутри неё. Раздел объявления переменных начинается зарезервированным словом Var, вслед за которым располагаются конкретные переменные. Для объявления переменной необходимо указать имя переменной и её тип.
Например:
Var
A: integer;
B, C: real;
D, E, F, G: CHAR;
Типы переменных.
С помощью объявления имен устанавливается её тип. В стандарте языка предопределены четыре стандартных типа переменных:
integer (целый); значения - все целые числа ;
real ( вещественный );
boolean ( логический); значения true или false;
char ( символьный ); значения - элементы конечного и упорядоченного множества символов. В разделе объявления переменных, наряду с предопределенными типами, могут быть использованы новые (определенные программистом) типы, а также типы, которые уже были объявлены ранее.
Например:
TYPE
DAY = (MON, TUE, WED, THU, FRI, SAT, SUN) ;
MONTH = (‘июнь’, ‘июль’, ‘август’);
Var
A, GF, DE = BOOLEAN; {предопределенный тип}
ASA, FFF = ‘A’ . . ‘F’; { новый тип}
ASSA = DAY;
{переменным ASSA и SAAS присваивается соответствующие ранее определенные типы данных}
SAAS = MONTH;
Все переменные подразделяются на глобальные (переменные, объявленные вне процедур и функции) и локальные (переменные, объявленные внутри процедур и функций). Среди глобальных переменных не может быть двух с одинаковым идентификатором. Среди локальных переменных, в пределах одой процедуры или функции , не может быть двух с одинаковым идентификатором. В тексте программы любой глобальный идентификатор переменной может дублировать любой локальный идентификатор переменной, т.к. в различных местах памяти и даже при одинаковых именах они не могут влиять на значения друг - друга.
Описать идентификатор - это значит указать тип связанного с ним объекта программы ( константы или переменной).
INTEGER - целочисленные данные, занимают 2 байта ; диапазон возможных значений от - 32768 до 32767 ; данные представляются точно;
REAL - вещественные данные, занимают 6 байт; диапазон возможных значений модуля от 2.9Е - 39 от 1.7Е + 38; точность представленных данных11…12 значащих цифр;
CHAR - символ, занимает 1 байт ;
STRING - строка символов, занимает MAX+1 байт, где MAX - максимальное число символов в строке;
BOOLEAN - логический тип, занимает 1 байт и имеет два значения: FALSE (ложь) и TRUE (истина).
Типы данных в Турбо Паскаль 7.0 делятся на пять основных классов:
1. Простые типы;
2. Структурированные типы;
3. Ссылочные типы;
4. Процедурные типы;
5. Объектные типы;
К простым типам относятся:
1. Целочисленные типы,
2. Логический тип,
3. Символьный тип,
4. Перечисляемый тип,
5. Интервальный тип,
6. Вещественный тип.
7. Целочисленные типы:
Short Int (короткое целое), INTEGER (целое), Long Int (длиной целое), BYTE (длиной в байт) и WORD (длиной в слово).
Верхнее граничное значение различных переменных целочисленных типов задается в Турбо Паскале 7.0, как константа и имеет соответствующее имя:
Max Int = 32767 = 215 - 1
Max Long Int = 2147483647 = 231 - 1
Логический тип. (булевый тип) Boolean, Byte Bool, Word Bool и Long Bool являются логическими переменными и могут принимать только два значения TRUE (истина) и FALSE (ложь).
Для булевых переменных , принимающих одну из двух допустимых значений, разрешены только две операции сравнения “=” (равно) и “< >” (неравно).
AND – логическое “и”
OR – логическое “или”
XOR – логическое “исключающее или”
NOT – логическое “не”
Для идентификаторов констант FALSE и TRUE имеют место следующие отношения:
FALSE < TRUE Ord ( FALSE ) =0 Ord ( True )=1
SUCC ( FALSE ) = TRUE PRED ( TRUE ) = FALSE
Символьный тип. CHAR – представляет собой тип данных, предназначенных для хранения одного символа (буквы, знака или кода).
В переменную этого типа может быть помещен любой из 256 символов расширенного кода ASCII. Это буквы [‘A’ . . ‘Z’ , ‘a’ . . ‘z’] , цифры [‘0’ . . . ‘9’], знаки препинания и специальные символы.
Перечисляемый тип. - упорядоченный набор идентификаторов, заданных путем их перечисления , указывается в круглых скобках.
Например:
TYPE
DAY = (Monday, . . ., . . ., . . . , Sunday) ;
Перечисляемые типы могут использоваться в логических выражениях :
IF MONTH = MAY THEN Writeln (‘май‘); к ним могут быть также применимы операции сравнения:
IF DAY > FRIDAY THEN Writeln (‘ выходной день’);
Интервальный тип данных определяется посредством задания подмножества значений одного из ранее определённых типов. Диапазон значений переменной интервального типа задаётся с помощью любого простого типа данных за исключением вещественного. При задании диапазона указывается наибольшее и наименьшее значения, которые может принимать переменная соответствующего типа.
Вещественный тип
Существуют вещественные (REAL) типы с одинарной точностью (SINGLE), с двойной точностью (DOUBLE), с повышенной точностью (EXTENDED) и сложный (COMP).
Выражения и функции в Т. П. 7.0
1. Арифметические операции:
2. Отношения
3. Логические (булевы)
4. Операции над множествами
Стандартные функции.
Sin(x), cos (x), Arctan (x) аргумент задаётся в радианах
Abs (x) - вычисление абсолютного значения Х;
EXP(x) - е возводится в степень Х;
Ln (x) - вычисление натурального логарифма Х;
SQR (x) - Х возводится к квадрат ;
SQRT (x) - вычисление квадратного корня из Х;
arcsin x = arctg (x/)
arscos x = arctg (/x)
arcctg x = arctg (1/x)
a x =e =e xlna
На Паскале это запишется следующим образом: EXP (x*ln(a));
logab=ln b/ln a, следовательно, на Паскале это запишется ln(b)/ln(a).
Функции TRUNC, ROUND, Chr, Ord принято называть функциями преобразования типов. TRUNC (x) - х имеет тип real.. Результатом является. целая част Х.
Пример 1.
TRUNC (6.7) = 6, TRUNC (-6.7)= -6 .
ROUND (x) -x имеет тип real. Результатом является ближайшее к Х целое число;
Пример 2. ROUND (4.8) = 5, ROUND (4.5) = 5.
Chr(I) - I имеет порядковый тип integer. Результатом является символ, порядковый номер которого на множестве символов, равен I;
Пример 3.
Chr (66) = B.
Ord (C) - имеет порядковый тип. Результатом является номер (код) С в упорядоченной последовательности элементов;
Пример 4. Ord (‘B’)=66, Ord (FALSE)=0. Для функции Ord и Chr на множестве символов справедливо соотношение Chr Ord(C) =C, функции PRED, SUCC принято называть функциями порядковых типов.
Pred (K) - K имеет порядковый тип. Результатом является предшествующих К элемент на порядковом множестве. Функция Pred (К) считается неопределённой, если К является первым по порядку элементом множества.
Пример 5.
Pred (‘B’) = ‘A’,
Pred (10) =9.
Succ (K) - K имеет порядковый тип. Результатом является следующий по порядку за К элемент на порядковом множестве элемент.
Пример 6.
Succ (‘A’) =’B’
Succ (false) = true
Функции Odd, Eoln, Eof является булевыми, так как результат этих функции имеет тип boolean. Odd (x) - x имеет целый тип. Если Х нечётное то результат принимает значения true, если X чётное - false. Eoln(X) - X- файловая переменная .Результат принимает значение true ,если при чтении текстового файла достигнут конец текущей строки. В остальных случая результат равен false. Eof(x) - X - файловая переменная .Результат принимает значение true , если при чтении текстового файла достигнут конец файла ,иначе false.
PI – 3,1415
INT – возвращает целую часть аргумента
FRAC – возвращает значение переменное деление целочисленной
MOD – получение остатка от целочисленного деления.
DIV – деление целочисленное.
DEC (X[, N]) – уменьшает содержимое переменное X на значение выражения N (если N не задано, то на1); тип переменной Х и выраженное N–integer.
INC (X [,N] ) увеличивает значение Х и N (если N не задано, то на 1).
Над символами и строками символов определение единственная операция - сцепление двух строк. Операция обозначается символом ‘+’.
ST: = ‘TURBO ‘ + ’-‘ + ’ ПАСКАЛЬ’’
TURBO-ПАСКАЛЬ.
Раздел объявлений и соглашений
PROGRAM Заголовок программы;
{ … } Глобальные директивы компилятора;
USES Подключаемые библиотеки;
LABEL Подраздел объявление глобальных меток;
CONST Подраздел объявление глобальных констант
TYPE Подраздел объявление глобальных типов;
VAR Подраздел объявление глобальных переменных
Раздел текстов процедур и функций
PROSEDURE
(FUNCTION) заголовок процедуры (функции)
LABEL подраздел объявление локальных меток;
CONST подраздел объявление локальных констант
TYPE подраздел объявление локальных типов;
VAR –...– локальных переменных;
Begin
Основной блок процедуры или функции.
END:
Раздел основного блока программы
Begin
Основной блок программы
END.
Составной оператор-это последовательность произвольных операторов программы, заключенная в операторные скобки - зарезервированные слова begin ... end.
Язык Турбо Паскаль не накладывает никаких ограничений на характер операторов, входящих в составной оператор. Среди них могут быть и другие составные операторы -Турбо Паскаль допускает произвольную глубину их вложенности:
begin
....
begin
....
begin
....
....
end;
.......
end;
....
end;
Форма записи оператора имеет вид:
Переменная: = выражение
Знак:= операция присваивания.
Действия оператора состоит в том, что вначале вычисляется значение выражения и после этого вновь вычисленное значение присваивается переменной. Переменная и выражение должны иметь один и тот же тип.
Примеры:
A:=0;
K:=2*K+M+SQR(x+4);
L:=K=M
В этом примере переменной L присваивается значение TRUE, если значение K равно М, или FALSE в противном случае.
Фрагмент программы
Var
A, B : Integer;
REZ : Real;
Begin
REZ:=A+B;
При выполнении этого оператора вычисляется значение выражения справа (оно имеет целый тип). Вычисленное значение преобразуется к вещественному типу и после этого присваивается переменной REZ.
A:=REZ;
Переменная REZ – вещественного типа, а A – целого, поэтому операция присваивания ошибочка, т.к. в Паскале запрещено присваивать значение выражения вещественного типа переменной целого типа.
Для ввода информации используются две процедуры вида:
READ([C1,]C2,.........Ck)
READ([C1,]C2,..........Ck)
Для вывода используются :
WRITE(...............);
WRITE( );
отличаются тем, что без ln курсор остается в этой же строке , a c ln переходит на другую строку.
WRITE( ); Выводит строку на экран и оставляет курсор в конце только что выведенной строки текста .
WRITELN ( );осуществляет перевод строки и устанавливает курсор в начало следующего строки экрана.
По оператору READLN вызывается встроенная процедура ввода данных, и программа останавливается в ожидании ввода. Необходимо набрать на клавиатуре нужное число и нажать клавишу ENTER.
Программа для вычисления длины окружности, площади круга, которая будет читать из файла INPUT значения радиуса, а результаты с соответствующими комментариями выведет из файла OUTPUT.
PROGRAM T (input, output);
Сonst
p=3.14159;
Var
R:Real;
L,S:Real
Begin
{ввод радиуса}
Real ( R);
L:=2*P*R;
S:=P*SQR ( R)
WRITELN (‘длина окружности =,’см’);
WRITELN (‘площадь круга=,’кв.см’);
end.
Перед операторной скобкой end точка с запятой не ставится. Если же она стоит перед end, то это означает наличие пустого оператора после второго оператора WRITELN.
Ввод. Стандартный файл ввода имеет имя INPUT, вывода – имя OUTPUT. Эти имена передаются в виде параметров в заголовке программы.
Ввод в языке Паскаль может быть только бесформатный. Можно вводить данные только целого, вещественного и символьного типов. Форматный вывод данных можно осуществить для вывода числовой информации с помощью процедуры WRITE. Например, оператор WRITELN (Const:7:2) указывает, что на экран должно быть выведено содержимое (значение) действительной переменной CONST. Число будет занимать 7 позиций с двумя знаками после запятой. Для вывода целой части переменной CONST отводится 4 позиции, т.к. одну позицию занимает десятичная точка (7 позиций всего, 2 позиции после запятой, 1 позиция для десятичной точки и 7-2-1=4 позиции для вывода целой части). Если при выводе значения некоторой переменной с помощью оператора WRITELN выводимое число не будет помещаться в указанный формат (т.е. если число действительных разрядов в переменной окажется больше числа разрядов, выделенных для вывода переменной на экран), то часть значения переменной, расположенная перед десятичной точкой, будет выведена на экран полностью. при этом число позиции справа от десятичной точки (число позиций предназначенных для вывода дробной части числа) остается равным указанной в формате величине. Если у выводимого значения имеется дробная часть, не укладывающаяся в заданное число позиций, число округляется. Округление не изменяет самого значения переменной, а касается только процесса вывода этого значения. Если в выводимом числе дробная часть отсутствует, оно выводится в экспоненциальной форме с достаточным для точного изображения числом позиций. Если мы хотим выдать значение действительного числа без дробной части (и без экспоненты), то необходимо указать следующий формат: WRITELN (Const:7:0);
Составить программу (линейная структура). Вычислить значение
если х
= +0,31 y = 2,05
PROGRAM P1;
USES CRT; {открывается библиотека или модуль CRT, в которой есть процедура очистки экрана}.
VAR
X, Y, A, C, B: REAL;
begin
Clr Scr; {очистка экрана}
WRITE (`Введите X, Y`); {курсор остается в этой же строке} Если WRITELN ( ); то курсор переходит на следующую строку.
READLN (X,Y);
C:=SQR(Y)+EXP(X);
B:=ln(ABS(Y))/SIN(C);
A:=SQR(COS(3,75+SQRT(C));
WRITELN(‘A=’,A:7:4);
READLN; {ждет нажатия ENTER}
END.
Вычислительный процесс называется разветвляющимся, если в зависимости от выполнения определенных условий он реализуется по одному из нескольких, заранее возможных направлений. Каждое отдельное направление называется ветвью вычислений. Выбор той или иной ветви осуществляется в результате проверки некоторых условий и определяется свойствами исходных данных и промежуточных результатов. При составлении программы должны быть учтены все возможные ветви вычислений. Для программной реализации таких вычислений в языке имеются специальные операторы передачи управления, которые дают возможность перейти из одного места программы в другое и изменить последовательный порядок выполнения ее операторов. Если такой переход осуществляется только при выполнении какого либо условия, то он называется условным, если переход осуществляется в любом случае, то он называется безусловным.
Форма записи оператора: GOTO <метка>
Оператор перехода – простой оператор, указывающий, что дальнейшая работа программы должна продолжаться с оператора, на котором стоит метка. Метка – идентификатор или целое число (без знака) от 0 до 9999. Все используемые в программа метки перечисляются в разделе LABEL. Применение оператора безусловного перехода является нежелательным, т.к. присутствие этого оператора в программе нарушает ее структурную целостность.
Условный оператор позволяет проверять некоторое условие и в зависимости от результатов проверки выполнит то или иное действие. Таким образом, условный оператор- это средство ветвления вычислительного процесса.
Структура условного оператора имеет следующий вид:
IF <условие> THEN <опер1> ELSE <опер2> ,
где IF , THEN, ELSE - зарезервированные слова (если, то, иначе);
<условие> произвольное выражение логического типа;
<опер1> , <опер2>- любые операторы языка Турбо Паскаль.
Принцип: Если результат TRUE (истина ), то выполняется <опер1>, a <опер2> пропускается если результат есть FALSE (ложь), наоборот, <опер1> пропускается, в выполняется <опер2>,
Например,
var
x, y, max: integer ;
begin
....
if x > max then
y:=max
else
y: =x;
При выполнение этого фрагмента переменная Y получит значение переменное Х, если только это значение не превышает мах, в противного случае У станет равно МАХ.
Часть ELSE <опер2> условного оператора может быть опущена. Тогда при значении TRUE условного выражения выполняется <опер1> , в противном случае этот оператор пропускается:
var
x,y, max : integer;
begin
....
if x> max then
max :=x;
y:=x;
В этом примере переменная У всегда будет иметь значение переменной х, а в МАХ запоминается максимальное значение Х.
Возможные варианты:
I. IF s then A else B;
II. IF s then A ;
III. IF усл.
Begin
<опер1>;
....
<опер N > ;
end;
IV. IF усл. Then
begin
<опер1>;
....
<оперN>;
end
else
begin
<опер1>
....end;
Структурно
IF условие |
|
THEN |
ELSE |
опер 1 |
опер 1 |
…… |
…… |
опер N |
опер N |
2. Используя оператор условного перехода, составить программу определения принадлежности точки Р(х, y) заштрихованной области, не включая границ.
if (x < 0) AND (x > -A) AND
Ветвление по многим направлением
Выражение CASE.... OF используется для обработки ситуации с несколькими исходами, когда условие может принимать более двух значений. С помощью этого оператора можно выбрать вариант из любого кол-ва вариантов.
CASE S of
C1: опер1;
C2..C7: опер2; диапазон от С2 до С7.
С8,C9: begin опер3;
.....
опер к;
end;
....
CN : оперN ;
else опер N+1
end; CASE
S - выражение порядкового типа, значение которого вычисляется.
C1,...., CN+1- Const с которыми сравниваются значение выражение .S.
опер1,..., опер N+1- операторы из которых выполняется тот, с константой которого совпадает значение выражения S.
Пример.
Case I of
0,2,4,6,8:writeln(‘ четное у’);
1,3,5,7,9:writeln(‘ нечетное у’) ;
10.......100:writeln(‘ от 10 до 100’);
else
writeln(‘ отражает число или>100’)
end;
Структурированная конструкция
CASE порядковая переменная OF |
||||
Значение 1 |
Значение 2 |
Значение 3 |
… |
ELSE |
оператор 1..1 |
оператор 2..1 |
оператор 3./1 |
… |
оператор Е..1 |
… |
… |
… |
… |
… |
оператор 1..N |
оператор 2..N |
оператор 3..N |
… |
оператор Е..N |
Порядковая переменная -значение которой при выполнении определяет ветвь опер. Case of.
Иcпользование действительных переменных в качестве порядковых не допускается.
Case порядок переменных OF
значение 1:
Begin
опер 1-1;
опер 1-N;
end;
значение 2:
Begin
опер 2-1
опер 2-N;
end;
………….
значение N:
Begin
опер K-1;
опер K-N;
end;
else
Begin
опер E-1;
опер E-N;
end;
Пример
Case trunc (ln(x*x+A*B))MOD 7 of
0: writeln (‘ понедельник - первый день’);
1:writeln (‘ вторник- первый день’);
. . . . . . . . . . . .
6:writeln (’ воскресение -выходной ’)
end;
В языке Турбо Паскаль 7.0 имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы.
FOR ... TO (DOWNTO) ... DO
называется перечисляемым циклом или циклом со счетчиком.
FOR , TO , DO - зарезервированные слова ( для, до, выполнить);
FOR параметр
цикл
:
=
начальное значение
TO
конечное
значение
DO
оператор
параметр цикл
параметр цикла
- переменная типа INTEGER (любого порядкового типа).
начальное значение
начальное
значения - выражение того же типа;
конечное значение
- выражение
того же типа;
оператор
произвольный оператор
Турбо Паскале 7.0.
При выполнении оператора FOR
вначале вычисляется выражение начальное значение
и
осуществляется присваивание
параметр цикла
: =
начальное значение
. После этого
повторяется:
-
проверка условия параметр цикла
=
конечное значение
;
если условие, не выполнено, оператор FOR завершает свою работу;
-
выполнение оператора оператор
;
-
наращивание переменной параметр цикла
на единицу.
шаг = +1 |
Другая форма оператора:
FOR параметр
цикл
:
=
начальное значение
DOWNTO
конечное
значение
DO
оператор
шаг = -1 |
Пример,
S: =0;
if n
=0 then
for i : =1 to n do S: = S+i
else
for i : = -1 downto n do
S: = S+i;
1. Параметр цикла, начальное и конечное значения должны быть одинакового типа, их тип может быть любым скалярным типом (стандартным, перечисляемым, ограниченным), кроме вещественного.
2. Очередное значение параметра цикла вычисляется автоматически с помощью функции SUCC в сочетании с TO или PRED в сочетании с DOWNTO.
3. Нельзя изменять внутри цикла значение переменной параметр цикла, выражение 1, выражение 2 .
4. Нельзя входить в цикл с помощью оператора GO TO минуя оператор FOR, так как значение параметр цикла, выражения 1 , выражения 2, будут не определены.
5. По окончании выполнения цикла значение переменной параметр цикла не определено и не может быть непосредственно использовано в дальнейших вычислениях;
6. После служебного слова DO может стоять только один оператор; если в цикле нужно выполнить группу операторов, TO их заключают в операторные скобки begin .. end.
7. Из составного оператора, входящего в состав оператор цикла, можно выйти до GO TO , тогда последнее значение параметра цикла сохранится.
Два других оператора повторение лишь проверяют условие выполнение или повторения цикла, но не связаны с изменением счетчика цикла.
WHILE условие
DO
оператор
где WHILE,
DO, зарезервированные слова (пока, выполняется условие,
делать);
условие
выражение логического
типа
оператор
- произвольный оператор.
Если выражение условие
имя значение TRUE, то выполняется
оператор
, после чего
вычисление выражение
условие
и его проверка
повторяются. Если
условие
имеет значение FALSE, оператор WHILE прекращает свою
работу.
WHILE условие DO
begin
оператор1;
……………
оператор2;
end;
WHILE условие DO |
|
|
оператор1. |
|
………… |
|
оператор2. |
PROGRAM SUMMA;
WHILE i 50 DO
var begin
i, sum : integer; i: = i+1
begin sum: = sum+i;
sum: =0; end;
i : =0; WRITELN (‘сумма от 1 до 50=’, sum);
end.
До тех пор, пока значение переменной не превзошло определенной величины выполнить следующие операции ....’’.
Оператор REPEAT … UNTIL - цикл с послесловием .
REPEAT < тело цикл > UNTIL <условие>.
REPEAT, UNTIL - зарезервированное слова (повторять до тех пор пока не будет выполнено условие);
<тело цикла>- произвольная последовательность. операторов.
<условие> - выражение логического типа.
Оператор <тело цикл> выполняется хотя бы один раз, после чего вычисляется выражение <условие>: если его значение ’FALSE’ операторы <тело цикл> повторяются , иначе оператор REPEAT ...UNTIL завершает свою работу.
Перед UNTIL “;” можно не ставить.
Для управления циклическими операторами FOR, WHILE и REPEAT в Турбо Паскаль существуют две процедуры:
BREAK - реализует немедленный выход из цикла; действие процедуры заключается в передаче управления оператору, стоящему сразу за концом циклического оператора;
CONTINVE - обеспечивает досрочное завершение очередного прохода цикла; эквивалент передачи управления в самый конец циклического оператор.
REPEAT (begin ... end не нужны,
оператор1; но не запрещено).
оператор N;
UNTIL условие;
Пример
VAR
i, sum : integer ;
begin
sum: =0;
i : =0;
REPEAT
i: = i+1;
sum: = sum +i ;
UNTIL i = 50
WRITELN (‘ сумма чисел от 1 до 50=’, sum)
end.
Между конструкциями REPEAT ... UNTIL и WHILE ... DO имеются следующие отличия:
§ В конструкции WHILE ... DO проверка условие выхода выполняется в начале, а не в конце цикла, поэтому, если условие не удовлетворяется до начала выполнения цикла, TO тело цикла игнорируется и выполняется оператор, стоящий сразу окончание тело цикла.
§ В конструкции WHILE ... DO условие выхода удовлетворяется, если выражение, определяющее условие выхода, ложно, а в конструкции REPEAT ... UNTIL- если это выражение истинно.
§ Между зарезервированными словами REPEAT ... UNTIL может размещаться несколько инструкций.
![]() |
|||
![]() |
|||
WHILE условие DO REPEAT ... UNTIL.
Программа с FOR ... TO ... DO
VAR
i, SUM : integer ;
begin
SUM: =0;
FOR i : =1 TO 50 DO
SUM : =SUM+i ;
WRITELN (‘ сумма от 1 до 50 = : ’,sum ) ;
end
Массив - это упорядоченный набор переменных одного типа. Массивы содержат фиксированное число компонент, которое задается при определении переменных типа массив.
Тип индекса в описании заключается в квадратные скобки и относится к простому. Ограничений на количество индексов нет. Индекс задает место элемента в массиве. Тип компоненты массива может быть любым.
VAR
a : array [1..10] of real;
b : array [0..50] of Char;
c : array [-3..4 ] of Boolean;
При описании массива используются зарезервированные слова ARRAY и
of (массив из) за словом ARRAY в квадратных скобках указывается тип-диапазон, с помощью которого компилятор определяет общее число элементов массива. За словом OF указывается тип элементов, образующих массив.
VAR
MAS: ARRAY [1..15] of real;
{описан массив из 15 веществ чисел}
WORK: ARRAY [(MON, TUE, WED)] of integer;
( описан массив из трех целых чисел, индексы элементов массива имеют перечисляемый тип и принимают значения названий дней недели MON, TUE , WED).
B: array [‘A’ ..’Z’] of boolean;
{описан массив элемент булевого типа, тип индексов - ограниченный символьный}.
С: array [1..3, 1..5] of real;
{описан двумерный массив с вещественных чисел, содержащий три строки и пять столбцов.}
D: array [(BLAK, WHITE)] of 11 .. 20;
{описан массив D целых чисел с индексами BLAK, WHITE}. Каждый элемент массива может принимать значения от 11 до 20. }
Объявить одномерный массив можно следующим образом :
VAR имя массива: ARRAY [начальное индекс... конечный индекс] of тun данных;
VAR MATRIX: ARRAY [1..5] of real;
INDEX : ARRAY [2..7] of integer;
NAME : ARRAY [1..5] of String [25].
Его элементы являются строки, которые могут иметь длину до 25 символов включительно.
Переменные любого типа данных, кроме файловых типов, могут использоваться для создания массивов.
Способы задания одномерных массивов.
I. С клавиатуры
VAR m : myarray ;
i : integer ;
begin
WRITELN (‘b’ , n, ‘чисел’);
FOR i := 1 TO n DO {ввод массива с клавиатуры}.
Readln (m[i]) ;
end;
begin
for i := 1 TO n DO
WRITE (m[i]:3) ;
WRITELN;
end;
II. Заполнение одномерного массива с помощью генератора случайных чисел.
VAR i: integer;
BEGIN
FOR i:=1 TO n DO
m[i]:= -25 + Random (dd);
{Random выбирает случайное число на отрезке от 0 до dd-1, тогда i-му элем, массива будет присвоена сумма выбранного случайного числа и –25, таким образом, массив будет заполняться случайными числами от –25 до –25+(dd-1), т.е. до 26+dd}
Procedure Print (m: myarray);
{процедура вывода (распечатки массива)}
…….
begin
Randomize; {включение генератора случайных чисел}
Init 2(A); {обращение к процедуре заполнения массива}
Print (A); {обращение к процедуре вывода заполненного массива}
Readln;
end.
Const
N=3;
A: array [1…N, 1…N] of real = ((5, -7, 2),(3, 4, 15),(6, 7, 8));
B: array [1…N, 1…N] of real = ((9, 7, 7, -4),(5, -6, 7, 76),(9, 8, 7);
G: array [1…N] of real = (5, 8, -9);
var
i, j, k: integer;
D: array [1…N] of real;
C: array [1…N, 1…N] of real;
max : real
begin
for i:=1 to n do
begin {начало цикла i}
for j:=1 to N do
begin {начало цикла j}
C [i, j]:=0;
for k:=1 to N do
C [i, j]: =c[i, j]+A[i, k]*B[k, j]; {-это цикл k}
write (`C[`, i,`,`, `j`,) =`, C[i, j]: 6:2,`` );
end {конец цикла I}
WRITEN’; {переход на новую строку}
END; {конец цикла i}
{пустая строка}
WRITELN;
{вывод матрицы А}
for i:=1 to N do
begin
for j:=1 to N do
write (`A(`,i,`,`j,`)=`,A[i, j]:6:2,``);
writeln;
end;
max:=a[1,1];
for i: =1 to n do
for j: =1 to n do
if a[i, j]>max then max:=a[i, j];
writeln (`max=`, max:6:2);
readln; {ждет нажатия клавиши}
end.
III. Третий способ задания – это чтение чисел из файла. Можно заранее создавать типизированный файл одномерных массивов (например, по тридцать элементов), а затем считывать из него сразу целый массив и работать с ним. Воспользуемся текстовым файлом, т.к. его удобнее создавать. Пусть в файле написано несколько строк, а в каждый из них по 30 целых чисел.
Program Example_
cost n = 30; {n – количество элементов}
Type myarray = Array [1…n] of integer;
Var A: myarray;
F: text;
Procedure Init 3 (Var m: myarray);
{процедура заполнения массива}
Var i :integer;
Begin
For i:=1 to n do
Read (f,m[i]) {чтения из файла очередного числа}
End;
Procedure Print (m: myarray);
{процедура вывода массива}
Begin
{связываем файловую переменную с конкретным внешним файлом}
Assign (F,’’);
Reset (F); {открываем его для чтения}
While Not Eof (F) Do
Begin
{считываем очередную строку}
Init3 (A); {обращение к процедуре заполнения массива}
Print (A);
Вычисление конечных сумм.
Задача сводится к нахождению суммы некоторого количества
слагаемых при
различных значениях параметра суммирования x. Каждое
слагаемое суммы зависит от параметра x и номера n, определяющего место этого слагаемого в сумме. Обычно
формула общего члена суммы принадлежит к одному из следующих трех типов:
;
;
.
В случае а) для вычисления членов суммы целесообразно использовать рекуррентные соотношения, т.е. выражать последующий член суммы через предыдущий.
В случае b) применение рекуррентных соотношений нецелесообразно. Каждый член суммы вычисляется по общей формуле.
В случае с) член суммы целесообразно представить в виде
двух сомножителей, один из которых вычисляется по рекуррентному соотношению, а
другой непосредственно. Например, если , то полагаем
и вычисляем
рекуррентное значение
, а
- непосредственно.
Пример.
Общий член суммы относится к типу с): cn=(-1)n – целесообразно вычислять рекуррентно (cn= -cn-1);
удобно вычислять
непосредственно.
Таким образом
Вычисление суммы рационально организовать в цикле, когда при каждом прохождении цикла номер члена суммы изменяется на 1. а сумма изменяется на ее nй член, т.е. Sn=Sn-1+an, где Sn, Sn-1 – сумма n или n-1 членов.
Вычисления проводятся по формуле .
S справа и слева имеют разные значения: справа предыдущее (Sn-1), слева последующее.
Пример.
Общий член суммы относится к типу а).
Выразим (n+1)-й член через n-й:
Вычисление суммы будем осуществлять с помощью
рекуррентной формулы
Большое место среди циклов с неизвестным числом повторений занимают циклы, когда в процессе повторения тела цикла образуется последовательность значений
y1, y2…,
yn, … сходящихся к некоторому пределу а,
т.е. .
Каждое новое значение yn в такой последовательности определяется с учетом предыдущего yn-1 и является по сравнению с ним более точным приближением к исходному результату а. Циклы, реализующие такую последовательность приближений (итераций), называют итерационными. В итерационных циклах условие продолжения цикла основывается на свойстве безграничного приближения значений yn к пределу а при увеличении n. Итерационный цикл заканчивают, если для некоторого значения n выполняется условие.
где e - допустимая погрешность вычисления результата.
Примером итерационного циклического процесса может служить задача вычисления суммы бесконечного ряда.
Пример.
Вычислить с погрешностью e=10-4 значение функции s=cos x, используя разложение косинуса в ряд:
пусть
Во-первых, нужно определить значение очередного слагаемого tn, во-вторых, осуществить накопление суммы по итерационной формуле.
Для определения tn из-за наличия факториала целесообразно воспользоваться рекуррентным соотношением
Определим jn
Начальное значение t0 =1
Программа имеет вид:
PROGRAM COSINUS;
VAR
N: integer;
EPS, S, T, F, X, Y: REAL;
BEGIN
READ (X, EPS);
S:=0;
T:=1;
N:=1;
WHILE ABS(T)>EPS DO
BEGIN
S:=S+T;
F:=-SQR(X)/(2*N*(2*N-1));
T:=T*F;
N:=N+1
END;
Y:=COS(X);
WRITELN (‘S=’, S, ‘Y=’, Y)
END.
В программе использованы простые переменные: S – очередное значение суммы ряда; T – очередное значение члена ряда; F - очередное значение сомножителя jn. Для организации цикла по накоплению суммы используется оператор цикла с предусловием, в котором условие |t|>e является условием продолжения цикла.
Подпрограмма – это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы.
Процедуры предназначены для выполнения некоторой последовательности действий.
Procedure <имя> [(<список формальных параметров>)] этот часть заголовка может отсутствовать
<описательная часть>
Begin
<тело процедуры>
End;
Результат выполнения процедуры – это одно или несколько значений. Оно (или они) передаются в основную программу как значение ее параметра. При вызове процедуры ее формальные параметры заменяются фактическими в порядке их следования.
Фактические параметры – это параметры, которые передаются процедуре при обращении к ней. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Формальные параметры – это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия. Все формальные параметры делятся на два вида: параметры – переменные и параметры – значения.
Параметры – переменные – перед ними стоит служебное слово VAR. Они передаются по ссылке тогда, когда необходимо передать некоторые новые значения в точку вызова процедуры из программы.
Параметры – значения – перед ними слово VAR не ставится и идет передача по значению. Внутри процедуры можно производить любые действия с данными формальными параметрами, но их изменения не отражаются на значениях соответствующих фактических параметров.
Пример, программы, использующей процедуру вывода строки черточек для оформления таблицы.
Procedure Line 30;
Var
i: integer;
begin
for i:=1 to 30 do
write (‘-‘);
writeln;
end;
основная программа
Var
x:integer;
y:integer;
begin
writeln (‘таблица логарифмов чисел от 1 до 10’);
Line 30; {нарисовать линию}
for x:=1 to 10 do begin
y:=ln (x) {функция вычислитель. логарифмов Х}
writeln (x:3, y:8:3);
end;
Line 30; {нарисовать линию}
end.
Пример программы, которая сравнивает два числа и определяет, которое из них больше, а которое меньше.
Procedure printmaxmin (x, y: integer);
begin
if x>y
then writeln (x, ‘больше;’, y, ‘меньше’)
else writeln (y, ‘больше;‘, x, ‘меньше’)
end;
Вызвать процедуру. Для этого нужно написать ее имя и список аргументов.
Var a, b, c, d: integer;
begin
a:=5; b:=3;
printmaxmin (a, b);
c: =7; d:=13;
printmaxmin (c, d);
a: =5; d:=15;
printmaxmin (a + d, 16);
readln;
end.
Функции – это инструкция, имеющая имя и результат, который может быть присвоен переменной или входить в выражение. Выполнение функции происходит при появлении в тексте программы ее имени. Различают функции разновидности функций: встроенные функции, функции создаваемые программистом и библиотечные функции.
Различие между процедурами и функциями заключаются в следующем. Функция это процедура, результатом работы которой являются некоторые значения. Функция, как и процедура, может иметь список параметров, следующих за именем функции в круглых скобках. Процедура в отличии от функции, в конце заголовка отсутствует элемент, задающий тип возвращаемого значения, - т.к. процедура никакого значения в явном виде не возвращает. Имя процедуры используется только для ее вызова, а имя функции содержит значение.
В теле функции обязательно должен быть хотя бы один оператор присваивания, где в левой части стоит имя функции, а в правой – ее значение. Иначе, значение не будет определено.
Function <имя>
[(<список формальных параметров>)]:<min
результат>; эта часть заголовка может отсутствовать описательная часть
Begin
<тело процедуры>
<имя>:=<значение>;
end;
Структура программы, содержащей подпрограмму функция.
Program 11;
const …; {определение констант}
var …; {объявление локальных переменных}
begin {n/n}
… {тело функции}
имя:=… {возвращение результата}
end; {n/n}
begin {основная программа}
…
{любое число вызовов функции}
…
end. {<1}
Пример.
Составить программу, подчитывающую число сочетаний без повторения из N элементов по К элементов по формуле
Program Example;
Var n, k: integer;
a1, a2, a3, c: Longint;
Function factorial (n: integer): Longint;
Var i: integer;
rez: Longint;
Begin
rez:=1;
for i:=1 to n do rez:=rez*i;
factorial:=rez;
end;
Begin
Writeln (‘Вв. n и k для подсчета числа Сnk:’);
Readln;
End.
Пример. Заданы три числа. Найти наибольшее из них.
Function max (a, b, c: integer): integer;
var M: integer {условно наибольшее}
begin
{сначала найдем наибольшее из чисел а и b}
if a>=b then m:=a else m:=b;
{а теперь сравним “m “ c “c”}
if m>=c then max:=m else max:=c
end; {max}
вызов max
var x, y, z, ma: integer;
…
x:=3; y:=5; z:=7; ma:=max(x, y, z)
x:= max(ma, x + y, z + 1)
{можно вызывать и так:}
writeln (max(x+y, 12, (abs(x-y))*3)
Результат функции может фигурировать в качестве элемента выражения выводимого на печать. Фактическим параметром может быть константа или даже выражение, в котором присутствует вызов какой-то другой функции.
Пример. Составить программу ввода и вывода двумерного массива A размерностью NxM.
Program L;
const n=3; m=3;
Type dmyarray = Array [1...n, 1..m] of integer;
var A: dmyarray;
Procedure Init (var x: dmyarray);
{процедура формирования массива}
var i, j: integer;
begin writeln (‘Вводить элемент массива’)
for i:=1 to n do
for j:=1 to m do
read (x[i, j]);
end;
procedure print (x: dmyarray);
{процедура вывода массива на экран}
var i, j: integer;
begin
for i:=1 to n do
begin
{вывод i-ой строки массива}
for j:=1 to m do write (x[i, j]:5);
writeln; {переход на начало следующей строки}
end;
end;
begin {основная программа}
Init (A); {вызов процедуры формирования массива}
writeln (‘массив А:’);
print (A); {вызов процедуры вывода}
readln;
end.
Модуль GRAPH языка Turbo Pascal Версии 7.0 – мощное средство для создания графических образов. Эта библиотека поддерживает большинство типов видеокарт и имеет прямой доступ к видеопамяти Direct Access. Возможна поддержка следующих типов видеокарт:
VGA – Video Graphic Array (наиболее используемый видеоадаптер)
SVGA – Super Video Graphic Array (наиболее используемый видеоадаптер)
АТТ400 – малоизвестный адаптер
CGA – Chrome Graphic Adapter (применялся на устаревших моделях компьютеров)
MCGA – Mono Chrome Adapter (имеет только 2 цвета)
EGA – Expanded Graphic Array
EGA64 – Expanded Graphic Array 64k
EGA mono – Expanded Graphic Array monochrome
IBM8514 – адаптер, производимый фирмой IBM. Пожалуй, единственный адаптер, поддерживающий разрешение 1024х768 при 256 цветах (конечно, есть и адаптер SVGA256.BGI, но он входит в разряд драйверов типа “USER driver”, то есть его приходится устанавливать особым способом; об этом будет написано далее).
В программе достаточно указать в списке подключаемых библиотек – GRAPH и свободно пользоваться “услугами” этой библиотеки.
Вот следующая программа, работающая с модулем GRAPH
Program Graph_Work;
Uses Graph;
Begin
End.
Эта программа ничего де делает. Но чтобы “заставить” ее, что-либо сделать, к примеру, нарисовать круг, нужно не просто воспользоваться оператором CIRCLE, специально для этого предназначенного, а выполнить следующие действия:
Перевести экран в графический режим (попусту загрузить драйвер в память)
Нарисовать необходимые образы
Перевести экран в исходный режим (то есть выгрузить драйвер из памяти)
Следующая программа выполняет все эти действия:
Program Graph_Work;
Uses Graph;
Var
GraphicDriver, GraphicMode: Integer;
Begin
InitGraph(GraphicDriver, GraphicMode, ‘C:\Turbo\Bin’);
Circle (200, 200, 100);
CloseGraph;
End.
{путь C:\Turbo\Bin может быть и другим в зависимости от месторасположения графического драйвера}
Да, эта программа рисует круг, но он исчезает так быстро, что вы не успеваете его разглядеть. Для того, чтобы им хорошенько налюбоваться, нужно перед оператором CloseGraph поставить оператор ReadKey. Но одно “но”. Оператор ReadKey – это оператор, который входит в модуль CRT. Поэтому надо добавить в список модулей (в данном случае упомянут только один модуль GRAPH) модуль CRT. Программа примет следующий вид:
Program Graph_Work;
Uses Graph, Crt;
Var
GraphicDriver, GraphicMode: Integer;
Begin
Gm:=Detect;
InitGraph (GraphicDriver, GraphicMode, ‘C:\Turbo\Bin’);
Circle (200, 200, 100);
ReadKey;
CloseGraph;
End.
{путь C:\Turbo\Bin может быть и другим в зависимости от месторасположения графического драйвера.}
Вероятно, вы заметили, что при инициализации графики посредством оператора InitGraph используются переменные GraphicDriver, GraphicMode. Это так называемые служебные переменные, которые автоматически принимают нужные значения, и поэтому следует только описать их в разделе VAR и не заботиться об их определении в теле программы.
Итак, мы уже в графическом режиме и теперь можем перейти к графике непосредственно.
Начнем с цветов. Для определения цвета используется оператор SETCOLOR. Это системный оператор модуля Graph, т.е. он позволяет установить цвет и изменить этот цвет лишь повторным применением этого оператора.
По умолчанию используется драйвер EGAVGA.BGI, который позволяет использовать только 16 системных цветов DOSа и все цвета, номер которых выше 16, будут дублироваться.
Формат оператора: SETCOLOR (цвет);
Теперь, когда мы умеем переключать цвета, попробуем нарисовать что-либо на экране.
Экран представляет собой плоскость, состоящую из элементов изображения, называемых пикселями. Пиксель – это точка, имеющая координаты и цвет.
Экран компьютера немного отличается от привычной системы координат (декартовой). Здесь используется только четвертая четверть, причем вниз направлена положительная ось OY, а право – положительная ось OX.
Что бы нарисовать точку с координатами (X; Y) и цветом С, следует воспользоваться оператором PUTPIXEL.
Формат оператора: PUTPIXEL (X,Y,C);
Что бы узнать какого цвета эта точка, существует функция GETPIXEL. Она принимает значение того цвета, каким обладает точка с координатами (Х, Y).
Формат функции: С:=GETPIXEL(X, Y);
где С – переменная, в которую записывается номер цвета точки.
Палитру цветов, используемых в Паскале, можно получить с помощью программы DEMO1.
Program Demo1;
Uses Graph, Crt;
Var i, gd, gm: Integer;
Begin
Gm: =Detect;
Initgraph (gd, gm, ‘C:\Turbo\Bin’);
For i:=0 To 15 Do
Begin
Setfillstyle (1, i);
Bar (i*20, 0, i*20+20, 15);
End;
ReadKey;
Closegraph;
End.
Теперь, когда мы умеем рисовать простейшие элементы, можно приступить к созданию более сложных образов. Начнем с рисования линий. Рисование линий осуществляется оператором LINE.
Формат оператора: LINE (X1, Y1, X2, Y2);
Вероятно, вы заметили, что в параметрах оператора нет установок цвета. Дело в том, что цвет задается ранее упомянутым оператором SETCOLOR.
Существует разновидность оператора LINE – оператор LINETO.
Формат оператора: LINETO (X, Y);
Этот оператор отличается от оператора LINE тем, что не задаются координаты первой точки, она принимается за (0, 0), если не был использован оператор MOVETO . Последний передвигает логическое начало линии в точку с координатами (Хм, Yм).
Формат оператора: MOVETO (Xм, Yм)
Скорее всего, вам придется рисовать прямоугольники, для этого вам придется воспользоваться оператором RECTANGLE.
Формат оператора: RECTANGLE (X1, Y1, X2, Y2);
Чтобы нарисовать закрашенный прямоугольник, следует воспользоваться оператором BAR, который имеет следующий формат:BAR (X1, Y1, X2, Y2);
Но оператор BAR несколько оригинален: чтобы корректно нарисовать прямоугольник, следует задать такие параметры, как цвет заливки и способ заливки. С цветом заливки все ясно, разберемся со способом. Существует огромное количество способов заливки: в клеточку, в линеечку, в косую полоску под разными углами, в решетку, мелкими точками, которые могут быть либо редкими, либо частыми. В конце концов, можно самому задать способ заливки. Чтобы задать способ и цвет заливки используется дополнительный оператор SETFILLSTYLE.
Формат оператора: SETFILLSTYLE (S, C);
где S- это способ заливки, а С – это цвет заливки.
Покажем способы заливки, принятые в Паскале как стандартные, с помощью программы.
Program Demo2;
Uses Graph, Crt;
Var i, gd, gm: Integer;
BEGIN
Gm: =Detect;
Initgraph (gd, gm, ‘C:\Turbo\Bin’);
Setfillstyle (1,15);
Bar (0, 0, 640, 480);
For i: =0 To11 Do
Begin
Setfillstyle (i, i+2);
Bar (i*40, 0, i*40+40, 35);
End;
ReadKey;
Closegraph;
End.
Для построения таблиц и диаграмм вам понадобиться рисовать параллелепипеды. Воспользуйтесь оператором BAR3D.
Формат оператора: BAR3D (X1, Y1, X2, Y2, DEPTH, TOP);
Практически он повторяет оператор BAR, но появляются новые параметры, как DEPTH и TOP.DEPTH – устанавливает глубину параллелепипеда. TOP – это тип BOOLEAN и при TOP=FALSE рисуется параллелепипеда без прорисовки задних стенок, а при TOP=TRUE параллелепипеда рисуется вместе с задними стенками. Существует еще один оператор, для которого необходимо применение процедуры SETFILLSTYLE. Это оператор FLOODFILL. Он позволяет закрашивать область изображения, ограниченную каким-либо одним цветом.
Формат оператора:FLOODFILL (X, Y, C);
где (X, Y) – это координаты точки, от которой начинается заливка области, а С – это цвет границы между закрашиваемым контуром и остальным изображением.
Важно! Чтобы цвет границы имел один постоянный цвет, который бы не менялся по обходу контура. При несоблюдении этого условия может привести к заливке всего экрана заданным цветом.
Теперь, когда мы научились рисовать прямые линии, можно приступить к созданию более плавных изображений. Например, чтобы нарисовать круг, у вас есть два способа: либо нарисовать его “вручную”, с помощью процедур синуса и косинуса, либо используя оператор CIRCLE, который значительно ускоряет этот процесс.
Формат оператора:CIRCLE (X, Y, R);
где R – радиус желаемого круга, а (X, Y) – центр этого круга.
В некоторых случаях вам может не понадобиться рисовать целый круг, а будет нужна лишь только дуга. Этого можно достичь оператором ARC.
Формат оператора: ARC (X, Y, R, START, END);
где (X, Y) – это координаты центра дуги, R – это радиус дуги, START и END – это соответственно начальные и конечные углы дуги, измеряемые в градусах.
В некоторых случаях нам нужна мгновенная очистка экрана. Воспользуйтесь оператором CLEARDEVICE. Этот оператор не имеет параметров.
Program Functions;
Uses Crt, Graph;
Var Gd, Gm: integer;
X, Y: read;
Begin
Gm:=Detect;
InitGraph (Gd, Gm, ‘’);
SetColor (15);
Line (160,0,169,230);
Line (0,120,320,120);
Line (480,0,480,230);
Line (330,120,640,120);
Line (160,240,160,480);
Line (0,360,320,360);
Line (480,240,480,480);
Line (330,360,640,360);
{FUNCTION Y=X (1-X)}
X: = -0.6
Repeat
if x<>1 then Y:=X*(1-X)*(1-x) else y:=0;
PutPixe (160+Round (20*X), 120+Round (80*y), 12);
X:=X+0.001;
Until X>=1.85;
{FUNCTION Y=Xsin2x}
X:=-6.28;
Repeat
Y:=X*sin(2*X);
PutPixe (480+Round(20*X),120+Round(20*Y),12);
X:=X+0.001;
Until X>=6.28;
{FUNCTION Y=Sin}
X:=-6.28;
Repeat
Y:=X*sin(X)*sin(X);
PutPixel (480+round (20*X), 360+Round (20*Y), 12);
X:=X=0.001;
Until X>=6.28;
{FUNCTION Y=Xsin4x/4}
X: = -6.28;
Repeat
Y:=X*sin(4*X)/4;
PutPixel (160+Round (20*X), 360+Round (40*y), 12);
X: =X+0.001;
Until X>=6.28;
ReadKey;
CloseGraph;
End.
Program Functions; {Рисует функцию Y=X}
Uses Crt, Graph;
Var Gd, Gm: integer;
X, Y: real;
Begin
Gm: = Detect;
InitGraph (Gd, Gm,”);
SetColor (15);
Line (320, 0, 320, 480);
Line (0, 240, 640, 240);
Line (320, 0, 315, 5);
Line (320, 0, 325, 5);
Line (640, 240, 635, 235);
Line (640, 240, 635, 245);
OutTextXY (625, 245, ‘X’);
OutTextXY (325, 0, ‘Y’);
OutTextXY (325, 245, ‘0’);
X:= -20;
Repeat
Y:= X*X;
X:= X+0.02;
PutPixel (320+Round (10*X), 100+Round (Y), 15);
Until X>=20;
ReadKey;
CloseGraph;
End.
ПЕРЕМЕЩЕНИЕ ПРЯМОУГОЛЬНИКА НА ЭКРАНЕ
Program Movie_Square;
Uses Crt, Graph;
Const MaxX=640;
MaxY=480;
A=100;
B=100;
Var Gd, Gm: Integer;
X, Y, Kx, Ky: Real;
Begin
Gm:= Detect;
InitGraph (Gd, Gm, “);
X:=0;
Y:=0;
Kx:=1;
Ky:=1;
Repeat
X:= X + Kx;
Y:= Y + Ky;
If X+A>= MaxX then Kx:= -Kx;
If Y+B>= MaxY then Ky:= -Ky;
If X<=0 then Kx:= -Kx;
If Y<=0 then Ky:= -Ky;
SetColor (15);
Rectangle (Round (X), Round (Y), Round (X+A), Round (Y+B));
Delay (100);
SetColor (0);
Rectangle (Round (X), Round (Y), Round (X+A), Round (Y+B));
Until KeyPressed;
CloseGraph;
End.
1. Ф.Л. Бауэр, Г. Гооз. Информатика (в 2-х частях) М.: Мир, 1990
2. Фролов Г.Ф., Кузнецов Э.Н. Элементы информатики.
3. Персональный компьютер для всех: в 4 книгах: под редакцией проф. Совельева-М:1991
4. Практикум по основам программирования языка Паскаль 1999г.
5. Поляков Д.В., Круглов И.Ю. Программирования среде Турбо Паскаль
Москва; издательство МАИ ‘’РОСВУЗНАУКА’’,1992
6. А. Саттаров,Б.Курмонбоев Информатика ва хисоблаш техникаси осослари.
Тошкент; ”Укитувчи”1996
7. Информатика базовый курс/под ред. С.В. Симонова, СПб,2000г.