Основы алгоритмизации и программирования.ppt
- Количество слайдов: 126
Основы алгоритмизации и программирования
Машинный код процессора Процессор компьютера — это большая интегральная микросхема. Все команды и данные он получает в виде электрических сигналов. Фактически процессор можно рассматривать как огромную совокупность достаточно простых электронных элементов — транзисторов. В электронике транзисторы имеют три применения: для создания усилителей, в электронных схемах, обладающих автоколебательными свойствами, и в электронных переключателях. Последний способ и применяется в цифровой вычислительной технике. В процессоре компьютера транзисторы сгруппированы в микроэлементы, называемые триггерами и вентилями. Триггеры имеют два устойчивых состояния (открыт — закрыт) и переключаются из одного состояния в другое электрическими сигналами. Этим устойчивым состояниям соответствуют математические понятия 0 или 1. Вентили немного сложнее — они могут иметь несколько входов и служат для простейших арифметических и логических операций. Команды, поступающие в процессор по его шинам, на самом деле являются электрическими сигналами, но и их тоже можно представить как совокупности нулей и единиц, то есть числами. Разным командам соответствуют разные числа. Поэтому реально программа, с которой работает процессор, представляет собой последовательность чисел, называемую машинным кодом.
Алгоритм и программа Управлять компьютером нужно по определенному алгоритму. Алгоритм — точно определенное описание способа решения задачи в виде конечной (по времени) последовательности действий. Такое описание еще называется формальным. Представления алгоритма в виде, понятном компьютеру, служат языки программирования. Текст программы специальными служебными приложениями, которые называются трансляторами, либо переводится в машинный код, либо исполняете
Свойства алгоритмов Однозначность (детерминированность)-все предписания алгоритма должны быть точны и исключать многозначность толкования. Дискретность - алгоритм может быть расчленен на непустые группы предписаний. Результативность - каждая группа предписаний, входящих в алгоритм , обеспечивает или решение отдельного этапа задачи или определяет окончание всего процесса. Массовость -каждый алгоритм должен быть пригоден для решения всех задач данного класса задач.
Виды алгоритмов. Линейный- все предписания , входящие в алгоритм упорядочены, результат выполнения каждого предписания, является исходным для выполнения последующих предписаний. Ветвящийся –предписания входящие в алгоритм могут выполняться в зависимости от определенных ранее условий. Циклический- группы предписаний входящих в алгоритм могут выполняться конечное число раз, пока не будет выполнено определенное условие.
Линейный алгоритм Схема Предписание 1 Предписание 2 Предписание m
Алгоритм с ветвлением Схема да Предписание i Условие выполнено? нет Предписание j+1 Предписание j
Циклический алгоритм Схема Да Набор предписаний нет Условие Выполнения цикла
Решение квадратного уравнения Дано: ax 2 +bx+c=0 1. Ввод коэффициентов a, b, c. 2. Если а=0, если нет вычисляем D=b 2 -4 ac 3. Если D>=0 тогда решение х1, 2= выход иначе переходим к п. 6 4. Если b=0 тогда решение x= , выход 5. Если с=0 решений бесконечно много, выход 6. Решений нет, выход
Схема алгоритма Ввод коэффициентов a. b, c да нет a=0 b=0 c=0 нет да x= D=b 2 -4 ac D>=0 x 1, 2= Решений бесконечно много Решения существуют Решений нет
Языки программирования — искусственные языки. От естественных они отличаются ограниченным числом «слов» , значение которых понятно транслятору, и очень строгими правилами записи команд (операторов). Совокупность подобных требований образует синтаксис языка программирования, а смысл каждой из команд, других конструкций языка — его семантику. Процесс поиска ошибок в программе называется тестированием, процесс устранения ошибок — отладкой.
Компиляторы и интерпретаторы С помощью языка программирования создается не готовая программа, а только текст, описывающий ранее разработанный алгоритм. Чтобы получить работающую программу, надо этот текст либо автоматически перевести в машинный код (для этого служат программыкомпиляторы) и затем использовать отдельно от исходного текста, либо сразу выполнять команды языка, указанные в тексте программы (этим занимаются программыинтерпретаторы).
Интерпретаторы Интерпретатор берет очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. Только после того, как текущий оператор успешно выполнен, интерпретатор перейдет к следующему. При этом, если один и тот же оператор должен выполняться в программе многократно, интерпретатор всякий раз будет выполнять его так, как будто встретил впервые. Для выполнения такой программы на другом компьютере там также должен быть установлен интерпретатор. Интерпретатор моделирует некую виртуальную вычислительную машину, для которой базовыми инструкциями служат не элементарные команды процессора, а операторы языка программирования.
Интерпретаторы Текст программы Команда 1 Команда 2. …………… Компилятор Кодированная структура
Компиляторы полностью обрабатывают весь текст программы (он иногда называется исходный код). Они просматривают его в поисках синтаксических ошибок, выполняют определенный смысловой анализ и затем автоматически переводят (транслируют) на машинный язык — генерируют машинный код. Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы. В результате законченная программа получается компактной и эффективной, работает в сотни раз быстрее программы, выполняемой с помощью интерпретатора, и может быть перенесена на другие компьютеры с процессором, поддерживающим соответствующий машинный код.
Компиляторы Внешняя Информация На языке программирования Программа транслятор Внутрекомпьютерная Информация В компьютерных кодах
Уровни языков программирования Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Имеется в виду, что операторы языка близки к машинному коду и ориентированы на конкретные команды процессора (ассемблер). С помощью языков низкого уровня создаются очень эффективные и компактные программы, так как разработчик получает доступ ко всем возможностям процессора. С другой стороны, при этом требуется очень хорошо понимать устройство компьютера, затрудняется отладка больших приложений, а результирующая программа не может быть перенесена на компьютер с другим типом процессора. Языки программирования высокого уровня значительно ближе и понятнее человеку, нежели компьютеру. Особенности конкретных компьютерных архитектур в них не учитываются, поэтому создаваемые программы на уровне исходных текстов легко переносимы на другие платформы, для которых создан транслятор этого языка.
Поколения языков программирования В первое поколение входят языки, созданные в начале 50 -х годов, когда первые компьютеры только появились на свет. Это был первый язык ассемблера, созданный по принципу «одна инструкция — одна строка» . В конеце 50 -х — начало 60 -х годов появилось второе поколение языков. Тогда был разработан символический ассемблер, в котором появилось понятие переменной. Благодаря его возникновению заметно возросли скорость разработки и надежность программ. Появление третьего поколения языков программирования принято относить к 60 -м годам. В это время родились универсальные языки высокого уровня, с их помощью удается решать задачи из любых областей. С начала 70 -х годов по настоящее время продолжается период языков четвертого поколения. Они обычно ориентированы на специализированные области применения, где хороших результатов можно добиться, используя проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области. Рождение языков пятого поколения произошло в середине 90 -х годов. К ним относятся также системы автоматического создания прикладных программ с помощью визуальных средств разработки, без знания программирования.
Языки программирования высокого уровня FORTRAN (Фортран). Это первый компилируемый язык, созданный Джимом Бэкусом в 50 -е годы. СОВОL (Кобол). Это компилируемый язык для применения в экономической области и решения бизнес-задач, разработанный в начале 60 -х годов. На этом языке создано очень много приложений, которые активно эксплуатируются и сегодня. Аlgоl (Алгол). Компилируемый язык, созданный в 1960 году. Он был призван заменить Фортран, но из-за более сложной структуры не получил широкого распространения. Раsсаl (Паскаль). Язык Паскаль, созданный в конце 70 -х годов основоположником множества идей современного программирования Никлаусом Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программ и имеются возможности, позволяющие успешно применять его при создании крупных проектов.
Языки программирования высокого уровня Basic (Бейсик). Для этого языка имеются и компиляторы, и интерпретаторы, а по популярности он занимает первое место в мире. Он создавался в 60 -х годах в качестве учебного языка и очень прост в изучении. С (Си). Данный язык был создан в лаборатории Веll. Он планировался для замены ассемблера. Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70 -е годы написано множество прикладных и системных программ и ряд известных операционных систем (Unix). С++ (Си++). Си++ – это объектно-ориентированное расширение языка Си, созданное Бьярном Страуструпом в 1980 году. Множество новых мощных возможностей, позволивших резко повысить производительность программистов, наложи лось на унаследованную от языка Си определенную низкоуровневость, в результате чего создание сложных и надежных программ потребовало от разработчиков высокого уровня профессиональной подготовки.
Языки программирования высокого уровня Java (Джава, Ява). Этот язык был создан компанией Sип в начале 90 -х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Но главная особенность этого языка — компиляция не в машинный код, а в платформно-независимый байт-код (каждая команда занимает один байт). Благодаря наличию множества Javaмашин программы на Java можно переносить не только на уровне исходных текстов, но и на уровне двоичного байткода, поэтому по популярности язык Ява сегодня занимает второе место в мире после Бейсика. Особое внимание в развитии этого языка уделяется двум направлениям: поддержке всевозможных мобильных устройств и микрокомпьютеров, встраиваемых в бытовую технику (технология Jini) и созданию платформнонезависимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами (технология. Java Beans).
Языки программирования высокого уровня С# (Си Шарп). В конце 90 -х годов в компании Microsoft под руководством Андерса Хейльсберга был разработан язык С#. В нем воплотились лучшие идеи Си++, а также достоинства Java. Правда, С#, как и другие технологии Microsoft, ориентирован на платформу Windows. Язык С# предназначен для быстрой разработки. NET-приложений, и его реализация в системе Microsoft Visual Studio. . NET содержит множество особенностей, привязывающих С# к внутренней архитектуре Windows и платформы . NET.
Языки программирования для Интернета Языки являются интерпретируемыми, их называют скрипт-языками. НТМL. Язык для оформления документов. Он очень прост и содержит элементарные команды форматирования текста, добавления рисунков, задания шрифтов и цветов, организации ссылок и таблиц. Регl. Средство эффективной обработки больших текстовых файлов, генерации текстовых отчетов и управления задачами. По мощности Реrl начительно превосходит языки типа Си. РНР. Расмус Лердорф, активно использовавший Регl-скрипты, в 1995 году решил улучшить этот язык, упростив его и дополнив встроенными средствами доступа к базам данных. В результате появилась разработка Реrsопаl Сопtепts Раgе/Forms Intrepreter (PHP/FI). Тсl/Тk. Язык Tcl ориентирован на автоматизацию рутинных процессов и состоит из мощных команд, предназначенных для работы с абстрактными нетипизированными объектами. VRML. Cоздан для организации виртуальных трехмерных интерфейсов в Интернете. Он позволяет описывать в текстовом виде различные трехмерные сцены. ХМL. В августе 1996 года WWW-консорциум приступил к подготовке универсального языка разметки структуры документов, базировавшегося на технологии SGML. Сегодня он служит основой множества системных, сетевых и прикладных приложений.
Языки моделирования При создании программ и формировании структур баз данных нередко применяются формальные способы их представления — формальные нотации, с помощью которых можно визуально представить таблицы баз данных, поля, объекты программы и взаимосвязи между ними в системе, имеющей специализированный редактор и генератор исходных текстов программ на основе созданной модели. Такие системы называются САSЕсистемами. В них активно применяются нотации IDEF, а в последнее время все большую популярность завоевывает язык графического моделирования UML.
Прочие языки программирования PL/1 (ПЛ/1). Компилируемый язык программирования Programming Language One. По своим возможностям ПЛ/1 значительно мощнее многих других языков (Си, Паскаля). Этот язык продолжает поддерживаться компанией IBM. Smalltalk (СМОЛТОК) Данный язык оригинален тем, что его синтаксис очень компактен и базируется исключительно на понятии объекта. В языке отсутствуют операторы или данные. LISP(Лисп). Интерпретируемый язык программирования. Ориентирован на структуру данных в форме списка и позволяет организовывать эффективную обработку больших объемов текстовой информации. Ргоlоg (Пролог). Программа на этом языке, в основу которого положена математическая модель теории исчисления предикатов, строится из последовательности фактов и правил. Аdа (Ада). Структура самого языка похожа на Паскаль. В нем имеются средства строгого разграничения доступа к различным уровням спецификаций. Forth (Форт). Язык, обладающий мощными средствами программирования, который можно эффективно реализованным на компьютерах с небольшими объемами памяти, а компилятор мог бы выдавать очень быстрый и компактный код, то есть служил заменой ассемблеру.
Структурное программирование
Технология программирования В настоящее время производство программ поставлено на промышленный уровень, поэтому значительную роль при этом играет использование такой технологии программирования, которая обеспечила бы создание высококачественного программного продукта Технология программирования- это система методов, способов и приемов обработки и выдачи информации. Одной из распространенных методик создания программной продукции в настоящее время является структурное программирование.
Структу рное программи рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70 -х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
Цели структурного программирования: 1) повысить надежность программ; для этого нужно, чтобы программа легко поддавалась тестированию и не создавала проблем при отладке. Достигается это хорошим структурированием программы при ее проектировании; 2) повысить эффективность программ, которая может быть достигнута при структурировании программы, при разбиении ее на модули так, чтобы можно было бы легко находить и корректировать ошибки, а также чтобы текст любого модуля с целью повышения эффективности его работы можно было переделать независимо от других;
Цели структурного программирования: 3) уменьшить время и стоимость программной разработки. Достижимо при повышении производительности труда программиста; 4) улучшить читабельность программ; это значит, что необходимо избегать использования языковых конструкций с неочевидной семантикой, стремиться к локализации действия управляющих конструкций и использования структур данных, разрабатывать программу так, чтобы ее можно было бы читать от начала до конца без управляющих переходов на другую страницу.
Базовые структуры В соответствии с данной методологией любая программа представляет собой структуру, построенную из трёх типов базовых конструкций: ◦ последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы; ◦ ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; ◦ цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
Базовые структуры Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Базовые структуры Разработка программы ведётся пошагово, методом «сверху вниз» . Сначала пишется текст основной программы, в котором, вместо каждого связного логического фрагмента текста, вставляется вызов подпрограммы, которая будет выполнять этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки» , которые ничего не делают. Полученная программа проверяется и отлаживается. После того, как программист убедится, что подпрограммы вызываются в правильной последовательности (то есть общая структура программы верна), подпрограммы-заглушки последовательно заменяются на реально работающие, причём разработка каждой подпрограммы ведётся тем же методом, что и основной программы.
Структура следование Запись A; B Действия А и В могут быть: - отдельным оператором; - вызовом с возвратом некоторой процедуры; - другой управляющей структурой.
Структура ветвление. Схема Запись IF P then A else B; Проверка P представляется предикатом, т. е. функцией, задающей логическое выражение или условие, значением которого может быть истина или ложь.
Обобщение ветвления Неполная структура применяется , когда отсутствует действие, выполняемое при ложном значении логического выражения.
Обобщение ветвления Несколько альтернатив В зависимости от значения Р выполняется одно из действий А, В, …Z. После чего происходит переход к выполнению следующей управляющей структуры.
Повторения Действие А будет повторяться до тех пор, пока значение предиката будет оставаться истинным. Поэтому в действии А должно изменяться значение переменных, от которых зависит Р. В противном случае произойдет зацикливание. Вычисление предиката производится до начала выполнения действия А и может случиться так, что действие А не будет выполняться ни разу.
Достоинства структурного программирования Структурное программирование позволяет значительно сократить число вариантов построения программы по одной и той же спецификации, что значительно снижает сложность программы и, что ещё важнее, облегчает понимание её другими разработчиками. В структурированных программах логически связанные операторы находятся визуально ближе, а слабо связанные — дальше, что позволяет обходиться без блок -схем и других графических форм изображения алгоритмов (по сути, сама программа является собственной блок-схемой). Сильно упрощается процесс тестирования и отладки структурированных программ.
Высокоуровневые языки программирования
Высокоуровневые языки программирования Разрабатываются для быстроты и удобства использования программистами. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания. Высокоуровневые языки стремятся не только облегчить решение сложных программных задач, но и упростить использование программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием, в то время как их исходный код остаётся, в идеале, неизменным. Примеры : C++, Visual Basic, Java, Python, Ruby, Perl, Delphi (Pascal)
Минусы Высокоуровневых языков В частности, она не позволяет создавать простые и точные инструкции к используемому оборудованию. Программы, написанные на языках высокого уровня, проще для понимания программистом, но менее эффективны, чем их аналоги, создаваемые при помощи низкоуровневых языков. Одним из следствий этого стало добавление поддержки того или иного языка низкого уровня (язык ассемблера) в ряд современных профессиональных высокоуровневых языков программирования.
Объе ктно-ориенти рованное программи рование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, — прототипов). Например, объект "человек" может иметь поля "имя", "фамилия" и иметь методы "есть" и "спать". Соответственно, мы можем использовать в программе операторы Человек. Имя: ="Иван" и Человек. Есть(пища)
Объе ктно - ориентированное программирование В основе концепции объектно-ориентированного программирования лежит понятие объекта - некоей субстанции , которая объединяет в себе поля (данные) и методы (выполняемые объектом действия). Например, объект "человек" может иметь поля "имя", "фамилия" и иметь методы "есть" и "спать". Соответственно, мы можем использовать в программе операторы Человек. Имя: ="Иван" и Человек. Есть(пища) Примеры. Java , C++ , Object Pascal (Delphi) , Visual С, Java. Script
понятия ООП Класс Инкапсуляция Наследование Полиморфизм
Структура данных «класс» Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов.
Наследование Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование призвано отобразить такое свойство реального мира, как иерархичность
Полиморфизмом называют явление, при котором один и тот же программный код (полиморфный код) выполняется по-разному в зависимости от того, объект какого класса используется при вызове данного кода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода класса-предка с обязательным сохранением сигнатуры метода. Это обеспечивает сохранение неизменным интерфейса класса-предка и позволяет осуществить связывание имени метода в коде с разными классами — из объекта какого класса осуществляется вызов, из того класса и берётся метод с данным именем. Такой механизм называется динамическим (или поздним) связыванием.
Определение ООП Объектно-ориентированный подход заключается в следующем наборе основных принципов: Всё является объектом. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение — это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия. Каждый объект имеет независимую память, которая состоит из других объектов.
Определение ООП Каждый объект является представителем (экземпляром) класса, который выражает общие свойства объектов. В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.
Замечание Распространено мнение, что программы на языках высокого уровня можно написать один раз и потом использовать на компьютере любого типа. В действительности же это верно только для тех программ, которые мало взаимодействуют с операционной системой, например, выполняют какие-либо вычисления или обработку данных. Большинство же интерактивных (а тем более мультимедийных) программ обращаются к системным вызовам, которые сильно различаются в зависимости от операционной системы.
Язык программирования «ПАСКАЛЬ»
Структура окна компилятора
Команды меню Файл Правка Поиск Новый Открыть Сохранить как Сохранить все Изменить директорию Печатать Выход-ALT+X Отменить Восстановить Найти Обновить Искать снова Вырезать Shift+Del Копировать Ctrl+Ins Вставить Shift+Ins Очиcтить Ctrl+Del Перейти к указ. номеру Показать посл. Ошибку Найти ошибку… Найти процедуру Показать буфер
Команды меню Запуск Компиляция Отладка Запуск По шагам Трассировать Выполнить до курс. Остановить процессы Параметры…. Компиляция Сборка Полная сборка Место назначения Начальный файл Очистить нач. файл Контр. Точки Стек вызовов Регистр Наблюд. Выражения Вывод Экран пользователя Вычисления/модифик. Добавить выражение. . Установить контр. точку
Команды меню Опции компилятора Объемы памяти Компоновщик Отладчик Каталоги Инструм. Средства Загрузить опции Сохранить как Окно Мозаикой Каскадом Закрыть все Обновить экран Изм. Разм. /Перем. Масштабирование Предыдущее Закрыть Список окон Помощь Содержимое Указатель Поиск по теме Пред. Тема Использ. справки Файлы… Директивы компилятора Зарезервиров. Слова Элементы языка Сообщения об ошибках
Структура языка При записи алгоритма решения задачи на Языке Turbo Paskal используется набор знаков. Язык L: A-АЛФАВИТ-фиксированный набор основных символов данного языка L: все буквы латинского алфавита и символ подчеркивания (_); десятичные цифры 0, 1, 2, 3, …. , 9; Знаки препинания. , : ; разделители () , [], {}, ’ ‘, |, ^, : =; $, #, (* *), @ Знаки математических действий и отношений +, , *, /, <, >, =, <=, >=, <>. Словарь : Имена констант, переменных, выражений, операторов, функций, процедур и модулей называют идентификаторами Синтаксис-система правил, определяющих допустимые конструкции из символов Алфавита.
Словарь(зарезервированные слова). And | array | begin | boolean |char | case, file, | const | div |downto |else | end |for|, interface, Function |goto |if |integer |label |mod|, library, Nil |not |of |or |packed |procedure, unit, uses, |Program |real |record |repeat |set |string |then |to |type |until |var |while |with|xor -это ограниченный набор слов, смысл их строго фиксирован, нельзя использовать их для обозначения переменных, констант и т. д.
Элементарные конструкции К ним относятся: константы, переменные, указатели стандартных функций, идентификаторы Идентификатор-последовательность букв и цифр, начинающаяся с буквы(дл 63 симв). Константы - это данные, значения которых не изменяются в процессе работы программы. Арифметические константы - представление целых и вещественных числовых данных. Для веществ. Констант используется форма записи с фиксированной точкой и экспоненциальная. 5797, 456; 5. 79645600000 E+03;
Типы данных Элементы данных относятся к одному из конечного множества типов. Тип- это множество значений и совокупность операций, допустимых над этими значениями. Типы данных - простые, структурированные, ссылочные, процедурные, объектные. К простым(скалярным) относятся - стандартные (целочисленный, логический, символьный, вещественный) и пользовательские (перечисляемый, интервальный) типы данных.
Типы данных Вещественные типы: real Var c, d, t: real; Целочисленные типы, integer Var d 1, d 2: integer; Логический тип: Var b 1, b 2, b 3, b 4: Boolean; Символьный: переменные(с. т. ) - Char могут принимать значения 1 -го из символов с кодами от #0 до #255. VAR Ch: Char;
Операции В Паскале применяются условные знаки и служебные слова для описания операций. Логические операции: not, and, or, xor Выражения: not A; A and B, A xor B(или), тип A, B и результата- логический целый Мат-е : * , /, +, -, div, mod Сравнения: =<> > < >= <= Встроенные процедуры и функции являются частью языка и могут вызываться по имени
Правила выполнения арифметических операций Операц ия Тип операнда Тип Пример Результ результ ат первый второй ата +, *, - Integer 2+27 29 +, *, - Integer Real 2 -3. 5 -1. 5 +, *, - Real Integer Real 3. 0 -27 -24. 0 +, *, - Real 2. 5*2. 5 6. 25 / любой Real 8/2 4. 0
Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число, биты которого (двоичные разряды) формируются из битов операндов по правилам, указанным в таблице
Логические операции над логическими данными дают результат логического типа по правилам, указанным в таблице
Структура программы на Паскале Заголовок Program < имя( название) и/или (параметры связи с ОС или пусто)> ; Раздел описаний; Раздел операторов.
Встроенные функции Функция Тип аргумента Х Результат Sqr(x) Real или Integer Квадрат х Sqrt(x) Real или Integer Корень квадратный из х Abs(x) Real или Integer Модуль х Sin(x) Real или Integer Синус х Cos(x) Real или Integer Косинус х Pred(x) Integer Следующее целое после х Succ(x) Integer Предыдущее целое до х Trunc(x) Real или Integer Отбрасывает дробную часть Round(x) Real или Integer Округляет по правилам математики
Раздел описаний: Раздел меток - Label 1, 2, 10, 21; Раздел констант Const pi=3. 1415; cn=‘My name is’; Const <идентификатор>: <тип>=<значение>; Seg: word=$8800; Раздел типов объектов Type <имя типа> =
Константы В качестве констант в Турбо Паскале могут использоваться целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств и признак неопределенного указателя NIL
Константы Целые числа записываются со знаком или без него по обычным правилам и могут иметь значение от -2147483648 до +2147483647. Следует учесть, что, если целочисленная константа выходит за указанные границы, компилятор дает сообщение об ошибке. Такие константы должны записываться с десятичной точкой, т. е. определяться как вещественные числа.
Константы Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части. Экспоненциальная часть начинается символом е или Е, за которым могут следовать знаки «+» или «-» и десятичный порядок. Символ е (Е) означает десятичный порядок и имеет смысл «умножить на 1. 0 в степени» . Например, 3. 14 Е 5 - 3. 14 умножить на 10 в степени 5; -17 е-2 - минус 17 умножить на 10 в степени минус 2.
Константы Если в записи вещественного числа присутствует десятичная точка, перед точкой и за ней должно быть хотя бы по одной цифре. Если используется символ экспоненциальной части е (Е), за ним должна следовать хотя бы одна цифра десятичного порядка. Шестнадцатеричное число состоит из шестнадцатеричных цифр, которым предшествует знак доллара $ (код 36 в ASCII). Диапазон шестнадцатеричных чисел - от $0000 ДО $FFFF.
Константы Логическая константа - это либо слово FALSE (ложь), либо слово TRUE (истина). Символьная константа - это любой символ ПК, заключенный в апострофы: 'z' - символ z; 'Ф' - символ Ф. Если необходимо записать собственно символ апострофа, он удваивается: '''' - символ ' (апостроф). Допускается использование записи символа путем указания его внутреннего кода, которому предшествует символ # (код 35), например: #97 - символ а; #90 - символ Z; #39 - символ '; #13 - символ CR.
Константы Строковая константа - любая последовательность символов (кроме символа CR -возврат каретки), заключенная в апострофы. Если в строке нужно указать сам символ апострофа, он удваивается, например: 'Это - строка символов; 'That' 's string. '. Строка символов может быть пустой, т. е. не иметь никаких символов в обрамляющих ее апострофах. Строку можно составлять из кодов нужных символов с предшествующими каждому коду символами #, например, строка #83#121#109#98#11#108 эквивалентна строке ' Symbol'.
Константы В строке можно чередовать части, записанные в обрамляющих апострофах, с частями, записанными кодами. Таким способом можно вставлять в строки любые управляющие символы, в том числе и символ CR (код 13), например: #7'Ошибка !'#13'Нажмите любую клавишу. . . '#7. Конструктор множества - список элементов множества, обрамленный квадратными скобками, например: [1, 2, 4. . 7, 12] [blue, red] [] [true]
Раздел операторов Begin Упорядоченный список операторов и комментариев end.
Пример программы ◦ ◦ ◦ ◦ Program comfun; var x, y: real; Begin write('Введите х: '); readln(x); if x<=0 then y: =sqr(x)-5*x+6 else if sqr(x)-5*x+6<>0 then y: =1/(sqr(x)-5*x+6) else begin writeln('При х=', x: 5: 2, ' функция f(x) не определена. '); readln; halt; end; writeln('Ответ: y=f(', x: 5: 2, ')=', y: 5: 2); readln; End.
Общие сведения об операторах Все операторы языка Pascal подразделяются на три группы: 1. 2. 3. ввода-вывода простые структурные Операторы ввода-вывода являются обращением к стандартным встроенным процедурам write(список); writeln(список); readln(список)’;
Операторы ввода Имеются две встроенные процедуры Read(<список переменных>), readln(<список переменных>) При выполнении read(x 1, x 2, . . xn) программа прерывается и компьютер ждет ввода с клавиатуры значений переменных из списка x 1, . . xn. Значения- константы соответствующих типов должны при вводе разделяться пробелами. Набор данных завершается нажатием клавиши ввода Enter Readln отличается от read только тем, что при завершении ввода курсор перемещается в начало следующей строки. Var C: char; a, d: real; b: integer; Read(a, b, c, d) поток данных 30. 55 5 z 25. 15 Read(a, b, ) - верно Read(3, c) - неверно
Операторы вывода Имеются две встроенные процедуры write(<список выражений>), writeln(<список выражений>) Оператор write(x 1, x 2, . . xn) печатает на экране значения выражений из списка x 1, x 2. . xn. writeln переводит курсор в начало следующей строки. Вещественное число (c) выводится в ‘экспоненциальной’ форме: число c=1657. 789 write(c); рез-т вывода - 1. 65778900 E+03 Форматы данных позволяют вещественное число выдать на экран в естественной форме. Пусть m, n – целые числа. Write(c: m: n) выводит на экран значение переменной ‘c’ в виде десятичной дроби, причем m определяет общее число выводимых символов (цифры, точку и знак числа), n – кол-во цифр после запятой Пример: var d: real; d: = 879. 567 writeln(d: 8: 3) рез-т: 879. 567 writeln(d: 7: 2) р-т: 879. 56 writeln(d) 8. 7956700 E+02 Write(d: 8) – вывод в нормализованном виде с выравниванием по правой границе поля длиной 8
Простые операторы Операторы не содержащие в себе никаких других операторов называются простыми. К ним относятся операторы присваивания, безусловного перехода, вызова процедуры пустой оператор. (: =) – предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной , идентификатор которой расположен в левой части.
Оператор присваивания Синтаксис А: =В , где : = обозначение оператора; А-идентификатор переменной , описанной в разделе var; В-выражение , содержащее другие переменные, константы, функции, описанные в соответствующих разделах описательной части программы. Оператор предписывает выполнить выражение, заданное в его правой части, и присвоить результат переменной , идентификатор которой расположен в левой части.
Оператор присваивания a : = 2+7; в результате получим значение а=9 с : = а-4; с становится равным 5 с : = с+3; значение с увеличивается на 3 и становится равным 8 с+1 : = 2 -а; неверно
Комментарии записываются в фигурных скобках; Program mul; var a, b: Integer; begin Read. Ln(a, b); Write(a*b); end. {Объявление переменных целого типа a и b} {Ввод с клавиатуры чисел a и b} {Вывод результата}
Оператор Безусловного перехода Меткой помечается оператор, которому передается управление. Метка должна быть описана в разделе описания меток программы, в которой она используется. Областью действия метки является тот блок, в котором она используется; Оператор безусловного перехода (или оператор перехода к метке) служит для передачи управления помеченному оператору Синтаксис Goto “метка”; Оператор позволяет принудительно изменять порядок выполнения программы, часто применяется для “досрочного” выхода из операторов цикла.
Ограничения переход возможен только в пределах блока. Метка может содержать как цифровые, так и буквенные символы. Пример: ……. Begin Sum: =SB; If Sum> 5*SB then GOTO M 1 else Sum: =SВ end; M 1: writeln(sum); ……… Оператор GOTO следует применять как можно реже, так как применение его усложняет понимание логики программы.
СТРУКТУРНЫЕ ОПЕРАТОРЫ Представляют собой структуры, построенные из других операторов по строго определенным правилам. Все структурные операторы подразделяются на три группы: составные, условные и повтора
Составной оператор Служит для записи в свое тело других операторов, последовательность которых рассматривается в данном случае как один оператор. Представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками begin и end; Формат: Begin <оператор1; > ………… <оператор n; > End; .
УСЛОВНЫЕ ОПЕРАТОРЫ Условный оператор включает в себя операторы, которые выполняются или не выполняются в зависимости от записанного в операторе условия. Синтаксис 1) IF <условие>then <оператор1 > else<оператор2>; 2) IF <условие>then <оператор2>; где <условие>- выражение логического типа; Если условие верно (True), выполняется <оператор1>; Если условие не верно (False), выполняется <оператор2>.
Схема выполнения . Вход Проверка условия Р False(ложь) Оператор В True (истина) Оператор А
ОПЕРАТОРЫ ЦИКЛА Рассмотренные ранее операторы задают явно те операции , которые выполняются один раз и не более одного раза. Поэтому эффективность использования компьютера для программ , составленных с помощью таких операторов ничтожна. Дело в том, что процесс написания и ввода таких программ превосходит по времени с выполнением вычислений компьютером. Для повышения эффективности использования компьютера в структуре практических всех языков программирования используют операторы повторений или цикла. Цикл- это последовательность операторов, которая может выполняться более одного раза
Структура цикла . Истина Оператор S Условие А Ложь
ОПЕРАТОРЫ ЦИКЛА В структуре Паскаля содержатся три вида операторов цикла, совпадающих по функциям, но имеющих разную конструкцию. Цикл с известным заранее числом повторений Цикл с проверкой условия по завершению работы вычисляемого оператора (постусловие) Цикл с проверкой условия до начала вычислений (предусловие)
Цикл с известным числом повторений Синтаксис for i: =N 1 to N 2 DO S for i: =N 1 downto N 2 DO S Для переменной I принимающей начальное значение N 1 до тех пор пока оно не станет равным N 2 выполнять оператор S. Шаг изменения переменной I равен 1. Переменная I целого или порядкого типа. Отличие в первой записи значение переменной увеличивается , а во второй уменьшается.
Примеры использования 1. 2. 3. 4. 5. For i: =15 to 20 do writeln(i: 3); For i: =20 downto 15 do writeln(i: 3); For ch: =‘a’ to ‘c’ do writeln(ch: 2); For ch: =‘c’ downto ‘a’ do writeln(ch: 2); Var z: (z 1, z 2, z 3); for z: =z 1 to z 3 do writeln;
ОПЕРАТОРЫ ЦИКЛА С УСЛОВИЕМ Если неизвестно число повторений цикла, но известно условие завершения цикла, применяются операторы repeat и while. While <условие> do <оператор>; Цикл с предусловием: проверка условия перед каждым выполнением <оператора>, Repeat <операторы> Until <условие>; Цикл с постусловием: проверка условия после каждого выполнения <операторов>. <Условие>- выражение Логического типа(Boolean). Обратите внимание, что в последней записи допускается несколько операторов.
Процедуры и функции Процедура - это поименованное сложное действие, которое представляет собой совокупность операторов, вычисляющих некоторое число результатов в зависимости от некоторого числа аргументов. Процедура , функция (общее название - подпрограмма) определяется в разделе описаний основной программы или другой процедуры(функции). Процедура(функция) имеет ту же структуру, что и основная программа, т. е. состоит из заголовка, описательной части и выполняемой части
Процедуры Процедура в Турбо Паскале имеет собственное имя. Упоминание этого имени в тексте программы приводит к активизации процедуры и называется ее вызовом. Сразу после активизации процедуры начинают выполняться входящие в нее операторы, после выполнения последнего из них управление возвращается обратно в основную программу и выполняются операторы, стоящие непосредственно за оператором вызова процедуры (рис. 2. 2).
Синтаксис заголовка процедуры: PROCEDURE < имя процедуры > [( <список Формальных параметров >)]; Например: PROCEDURE PR 1 ( A, B, C : INTEGER; VAR S: REAL); - Здесь PR 1 – имя процедуры, а А, В, С, S – имена переменных, являющихся параметрами.
Вызов процедуры Вызов осуществляется в следующей форме: <имя процедуры > [(<список фактических параметров>)]; для приведенного заголовка процедуры можно написать такой оператор вызова: PR 1 (A, B, C, S);
Описание функции. Функция предназначена для вычисления какого- либо одного значения и используется в выражениях аналогично стандартным функциям. Синтаксис заголовка функции: FUNCTION < имя функции >[(<список формальных параметров>)]: <тип результата>; пример: FUNCTION PRF (A, B, C: INTEGER) : REAL; Для вызова функции используется указатель функции (имя функции со списком фактических параметров), который обязательно должен быть частью какого-либо выражения
Пример функции FUNCTION FACT (N: INTEGER): REAL; BEGIN IF N=1 THEN FACT: =1 ELSE FACT: = N* FACT(N-1); END.
Отличие описания функции от процедуры: результатом обращения к функции может быть одно единственное значение; идентификатор результата не указывается в списке формальных параметров; в выполняемой части функции , хотя бы один раз , имени функции должно быть присвоено значение результата ( чаще всего перед выходом из функции); после списка формальных параметров задается тип результата; после обращения к функции управление передается на выполнение следующей операции данного выражения (в соответствии с приоритетом).
Обрабатываемые структуры данных в паскале
Структуры данных в Pascal Типы Данных в Паскале могут образовывать сложные структуры. Каждая структура определяется организацией, типами используемых данных, размерами. Каждая структура , должна быть также описана в разделах описательной части, например в Var В Паскале используются следующие структуры: Массив, для текстов Строка; Запись; Множество; Файл; Стековые структуры.
Массив –это структурированный тип данных, состоящий из фиксированного числа элементов одинакового типа. Тип упорядоченных элементов массива называется базовым. Отношение порядка между элементами массива задается индексированием. Каждому элементу массива ставится в соответствие один или несколько индексов(1 -мерный, 2 -мерный массив: 1 -индекс-№строки, 2 -индекс- №столбца). Примеры: Вектор (а 1, а 2, а 3, …. , а 100) Строка (‘с’, ’т’, ’р’, ’о’, ’к’, ’а’) Двоичная последовательность (0, 1, 1, 0, 0, 0), число 125=1 *102+2 *101+5 *100
Описание типа массива <имя типа> = ARRAY [ <сп. инд. типов> ] OF <тип> Здесь <имя типа> - правильный идентификатор; ARRAY, OF - зарезервированные слова (массив, из); <сп. тд. типов> - список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса; <тип> - любой тип Турбо Паскаля.
Описание типа массива Требование к индексной переменной: -скалярность, кроме real ; -ограниченность; -перечислимость. Тип компонент: любой тип допускаемый синтаксисом языка (могут быть данные любого типа, включая структурированные).
Описание типа массива Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например: var а, b : array [1. . 10] of Real;
Описание типа массива В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например: var а, b: array [1. . 5] of Single; begin . . . a : = b; . . . end. После этого присваивания все пять элементов массива А получат те же значения, что и в массиве В. Однако над массивами не определены операции отношения. Нельзя, например, записать if a = b then. . .
Тип индекса Перечислимый целый 1. . 100; Перечислимый литерный In=(‘A’, ’B’, ’C’); Булев (логический); Литерный Примеры : Array[1. . 100] of < integer>; Array [In] of < integer>; Array [Boolean ] of < char>;
Формат массива TYPE <имя типа>=array[тип индекса]of <тип компонент>; Var <идентификатор>: <имя типа>; 2. Var matr: array[1. . 4, 1. . 5]of integer; tratr: array[1. . 4, 1. . 5, 1. . 7] of byte; 3. Контроль корректности значений индексов с помощью $R+ 1.
Строки Строка- это последовательность символов кодовой табл. , или- структура, состоящая из элементов простого типа. Строковый тип- string, относится к стандартным типам данных Формат: Type<имя тип>=string[махдл. стр-ки]; Var <идент-р>: <имя тип>; Строковые данные могут быть константой Const Adr=‘пр независимости’;
Строки Тип STRING (строка) в Турбо Паскале широко используется для обработки текстов. Он во многом похож на одномерный массив символов ARRAY[O. . N] OF CHAR, однако, в отличие от последнего, количество символов в строкепеременной может меняться от 0 до N, где N - максимальное количество символов в строке. Значение N определяется объявлением типа STRING [N] и может быть любой константой порядкового типа, но не больше 255. Турбо Паскаль разрешает не указывать N, в этом случае длина строки принимается максимально возможной, а именно N=255.
Пример строковой переменной 2. Var <идентиф>: string[мак длин строк]; Объем памяти =макс длина +1 байт Особенность T-Pascal - к каждому символу строки возможен доступ по его номеру, указав имя строковой переменной, а также порядковый номер символа в строке.
Строки Строка в Турбо Паскале трактуется как цепочка символов. К любому символу в строке можно обратиться точно так же, как к элементу одномерного массива ARRAY [0. . N] OF CHAR, например: var st : String; begin . . . if st[5] = 'A' then. . . end.
Записи Запись - это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.
Структура записи Структура объявления типа записи такова: <имя типа> = RECORD <сп. полей> END Здесь <имя типа> - правильный идентификатор; RECORD, END - зарезервированные слова (запись, конец); <сп. полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой.
Структура записи Пример: Var kсн: RECORD Re: real; Im: real end; Type kсн=RECORD Re: real; Im: real end; Var x, y: kсн;
Множества - это наборы однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется Турбо Паскалем. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (множество, не содержащее элементов, называется пустым). Именно непостоянством количества своих элементов множества отличаются от массивов и записей.
Множества Два множества считаются эквивалентными тогда и только тогда, когда все их элементы одинаковы, причем порядок следования элементов в множестве безразличен. Если все элементы одного множества входят также и в другое, говорят о включении первого множества во второе. Пустое множество включается в любое другое.
Множества Примеры в Паскале [ ] пустое множество; [2, 5, 7, 6] перечислимое множество целых чисел ; [‘a’, ’c’, ‘d’, ‘f’, ‘g ‘] множество литер; [красный, желтый , зеленый ] множество, состоящее из трех элементов перечислимого типа; [1. . 100] перечислимое множество целых чисел.
Обозначение в паскале Set of <тип элементов > Тип элементов = любой , базовый тип допустимый в Паскале, кроме REAL. Примеры: Type Gr =1. . 100; week: (Mo, Tu, We, Th, Fr, Sa, Su); Var Mes: Set of week ; Shet: Set of Gr; Bool : Set of boolean;
Файлы Под файлом понимается либо именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, электронного «виртуального» диска), либо логическое устройство - потенциальный источник или приемник информации. Любой файл имеет три характерные особенности. Вопервых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Турбо Паскаля, кроме файлов. В-третьих, длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.
Файловые типы -файлы с типом записей : ААА: file of type; type любой тип кроме файлового. -текстовые файлы: type text =string[100]; var ААА : text; -файлы без типа (нетипизированные): fff: file ; Тип переменной любой кроме файла; Содержит компоненты одного типа, который определяет тип всей структуры; Размер переменной (длина файла) неопределена.


