Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Алгоритмизация и программирование - файл 1.doc


Алгоритмизация и программирование
скачать (320 kb.)

Доступные файлы (1):

1.doc320kb.13.12.2011 22:49скачать

содержание
Загрузка...

1.doc

Реклама MarketGid:
Загрузка...


Южно – уральский профессиональный институт

Кафедра информационных технологий и дизайна

КОНТРОЛЬНАЯ РАБОТА

по дисциплине «ИНФОРМАТИКА»

Алгоритмизация и программирование.

Студент гр. СВМ – 101,

Факультет информатики

и вычислительной техники ______________________ М.А.Северина

«___» _________________ 2007

Преподаватель ______________________ Т.М.Матюнина

«___» _________________ 2007

Челябинск

2007

Содержание

Глава 1. Алгоритмизация . . . . . . . . 4

Глава 2. Языки программирования и типы данных . . . 6

2.1. Языки программирования . . . . . . 6

2.2. Типы данных . . . . . . . . 13

2.2.1.Порядковые типы . . . . . . . 15

2.2.2.Вещественные типы . . . . . . 19

2.2.3.Тип «дата-время» . . . . . . . 19

2.2.4.Строковые типы . . . . . . . 20

Глава 3. Технология программирования . . . . . 22

3.1. Программное средство . . . . . . 22

Список литературы . . . . . . . . . 31


Глава 1. Алгоритмизация

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

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

^ Алгоритмический язык – это система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения. Алгоритмический язык, с одной стороны близок к обычному языку (алгоритмы на этом языке могут записываться и читаться как обычный текст), с другой стороны, алгоритмический язык может включать в себя и математическую символику: числа, обозначения величин и функций, знаки операций и др.

В общем виде алгоритм на алгоритмическом языке записывается так:

алг имя алгоритма

дано условия применимости алгоритма

надо цель выполнения алгоритма

нач начало алгоритма

| тело алгоритма (последовательность команд)

кон конец алгоритма

Примерами вычислительных алгоритмов служат стандартные методы решения математических, физических задач, задач теории вероятности и др. Вообще само слово «алгоритм» происходит от algorithmi – латинской формы написания имени великого математика IX века аль-Хорезми, сформулировавшего правила выполнения арифметических действий. Поэтому первоначально под алгоритмами понимали только правила выполнения четырех арифметических действий над числами. В дальнейшем это понятие стали использовать для обозначения действий, приводящих к решению поставленной задачи.

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

Линейными являются алгоритмы, состоящие из одной серии простых команд.

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

При разработке алгоритмов необходимо соблюдать определенные требования:

1.Конечность. Работа алгоритма должна заканчиваться за конечное число шагов.

2.Определенность. Все предписания алгоритма должны допускать однозначную трактовку и быть понятны исполнителю алгоритма.

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

4.Вывод. Алгоритм должен давать результат.

5.Эффективность. Общее время работы алгоритма должно быть в разумных пределах.

Под алгоритмизацией понимают процесс разработки алгоритма решения какой-либо задачи. В качестве примера может служить процесс разработки алгоритма нахождения наибольшего общего делителя.

Процесс разработки алгоритма включает в себя следующие этапы:

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

  2. Построение математической модели исходной задачи (описание исходной задачи с использованием математических формул).

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

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


Глава 2. Языки программирования и типы данных

2.1.Языки программирования

Программирование возникло задолго до появления компьютеров. Первым программистом считается дочь известного поэта лорда Байрона Ада Лавлейс – ученица английского математика Чарльза Бэббиджа, разработавшего в XIX веке проект вычислительной машины. В честь Ады Лавлейс один из языков программирования был назван в ее имением, впоследствии широко применяемый в Министерстве обороны Соединенных Штатов Америки.

В настоящее время языков программирования несколько десятков, а то и сотен. Я рассмотрела лишь некоторые из них.

Как известно, ЭВМ способна выполнять программу, написанную на машинном языке, который представляет собой последовательность нулей и единиц. Такие программы пишутся на языках программирования низкого уровня.

^ Язык программирования низкого уровня – это язык программирования, структура команд которого определяется форматом команд и данных машинного языка, а также архитектурой ЭВМ.

Ярким представителем языка программирования низкого уровня является Ассемблер (Assembler), который был разработан в 50-е годы прошлого века и позволяет писать программы с использованием специальных обозначений машинных кодов – мнемоники. Ассемблер широко применяется в программах, где необходимо высокое быстродействие.

Однако составлять программы на таком языке – дело очень хлопотное и неблагодарное. Поэтому были созданы языки программирования высокого уровня.

^ Язык программирования высокого уровня – это язык программирования, средства которого допускают описание задачи в наглядном, легко воспринимаемом виде.

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

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

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

Ада (Ada) – назван в честь Августы Ады Байрон, графини Лавлейс, дочери лорда Байрона, которая была сотрудницей Чарльза Бэббиджа, изобретателя аналитической машины, и написала для нее практически законченную программу вычисления коэффициентов Бернулли. Кроме того она ввела многие понятия (цикл, условный оператор), которые теперь составляют базу программирования. Сам язык Ада является универсальным языком программирования, поддерживающим методологии разработки снизу вверх и сверху вниз, раздельную компиляцию, настраиваемые пакеты, абстрактные типы данных, параллельное программирование и работу в реальном времени, средства для низкоуровневого программирования, контролируемую точность вычислений, возможность гибкой настройки на конкретную платформу и многое другое. В настоящее время Ада является основным языком программирования Министерства обороны США.

Алгол (Algorithmic Language – алгоритмический язык) – универсальный язык для программирования вычислительных задач. Ему свойственна близость к математической символике.

Бейсик (Beginer All-Purpose Symbolic Code – универсальный символический код для начинающих) – язык для создания программ и их решения ЭВМ в режиме диалога. Он был разработан в середине 60-х годов профессорами Дармутского колледжа Джоном Кемени и Томасом Курцом. Бейсик является одним из самых простых и распространенных в мире языков программирования. В середине 80-х годов фирмой Microsoft был реализован язык QuickBasic (последняя версия 4.5). Это полностью компилируемый язык, с нормальными структурными конструкциями, пользовательскими типами данных, причем еще и совместимый со старыми версиями. С появлением Windows и моды на визуальные средства разработки изменился и Basic. Его новая версия, названная Visual Basic, была отлично приспособлена для написания несложных программ с развитым пользовательским интерфейсом. Visual Basic на равнее с Visual C является весьма популярным средством разработки под Windows.

Делфи (Delphi) оказался одним из первых продуктов, который сделал процесс программирования простым и понятным даже начинающим разработчикам. Это было связано с появлением в начале 90-х операционных систем со встроенным графическим интерфейсом. Действительно, процесс разработки программы в Delphi предельно упрощен. В первую очередь это относится к созданию интерфейса, на который уходит 80% времени разработки программы. Вы просто помещаете нужные компоненты на поверхность Windows-окна (в Delphi оно называется формой) и настраиваете их свойства с помощью специального инструмента (Object Inspector). С его помощью можно связать события этих компонентов (нажатие на кнопку, выбор мышью элемента в списке и т.д.) с кодом его обработки – и простое приложение готово. При этом разработчик получает в свое распоряжение мощные средства отладки (вплоть до пошагового выполнения команд процессора), удобную контекстную справочную систему, средства коллективной работы над проектом и т.д. – всего не перечислить.

Кобол (Common Business Oriented Language – коммерческий язык) – язык, используемый в первую очередь для программирования экономических задач.

Лисп – язык для построения программ с использованием методов искусственного интеллекта. Имеется несколько реализаций ЛИСП-трансляторов для персональных компьютеров разных классов. Особенность этого языка состоит в удобстве динамического создания новых объектов. В качестве порождаемых программой объектов могут фигурировать и сами программы (функции), которые внешне ничем не отличаются от данных. Это открывает возможности, которых нет в других языках программирования, такие как построение адаптирующихся и самоизменяющихся программ и др. Память в Лиспе используется динамически: когда создается новый объект, для него из «свободной» памяти берется ровно столько ячеек, сколько нужно для хранения всех элементов; при этом не требуется заблаговременного резервирования памяти. При уничтожении объекта занятая им память автоматически освобождается. Другая особенность языка Лисп – функциональный способ записи программ, который, в частности, стимулирует составление рекурсивных алгоритмов, отличающихся выразительностью и компактной записью. С использованием языка Лисп разрабатывается большинство экспериментальных систем искусственного интеллекта – для анализа визуальных сцен, управления работами, анализа текстов на естественном языке и др.

Паскаль (Philips Automatic Sequence Calculator). Этот язык был разработан швейцарским ученым Никлаусом Виртом в 1969 году как учебный язык, но спустя некоторое время приобрел популярность как отличный инструмент для решения серьезных задач. Программирование на Паскале обеспечивает высокую надежность программ. Программы на паскале понятны любому программисту и в то же время они легко транслируются в эффективные машинные коды. Паскаль, наряду с Бейсиком, считается так же учебным языком; он принят во многих учебных заведениях как базовый язык для изучения программирования. Так, в США с 1983 года Паскаль введен в учебные курсы всех средних школ для учащихся, специализирующихся в области информатики. По мере своего развития язык Паскаль постоянно совершенствовался и приобретал новые свойства и сейчас более известен язык Турбо Паскаль, разработанный фирмой Borland.

ПЛ/1 (PL/I – Programming Language I) задумывался как универсальный язык высокого уровня для решения любых задач – от вычислительных до системных. Он объединил в себе лучшие черты своих предшественников – Алгола, Фортрана, Кобола и других, но привнес и множество новых, мощных и отчасти революционных решений. В своей основе ПЛ/1 является процедурно-ориентированным языком. Программа ПЛ/1 состоит из блоков. Начало, конец и вложенность блоков определяются явно. Поддерживается разграничение областей видимости переменных, включая перекрытие одинаковых имен. Имеются средства организации мультизадачности с управлением приоритетами и синхронизацией подзадач. Язык содержит мощные средства событийной обработки ошибок, причем обработчики могут динамически включаться, отключаться и переназначаться, а также иметь индивидуальные области действия. Существуют переменные типа «метка» и их массивы, что позволяет строить сложные системы косвенных переходов, управляемых данными. В смысле переходов ПЛ/1 вообще очень гибок – допускаются межблочные переходы, вложенные и рекурсивные подпрограммы, а также дополнительные точки входа в них с собственными списками параметров. Даже в тело цикла можно войти, минуя его заголовок.

Пролог – язык, который наряду с языком Лисп применяется при разработке систем искусственного интеллекта. В основе этого языка аппарат математической логики. Язык Пролог позволяет разрабатывать на основе ЭВМ экспертные системы, базы знаний и системы обработки естественного языка. Программа на Прологе содержит, во-первых, набор предикатов-утверждений, которые образуют проблемно-ориентированную базу данных. Другой тип выражений – это правила, имеющие вид условий «чтобы было X, где X и Y – любые предикаты или переменные. Работа программы начинается с ввода предиката – утверждения или вопроса, который возбуждает перебор имеющихся в базе данных предикатов и правил, пока не будет достигнуто доказательство истинности или ложности исходного утверждения.

Си (C) – язык, специально разработанный для написания системных программ и переноса записи программного обеспечения с одной ЭВМ на другую. Этот язык был создан сотрудником фирмы Ball Labs Денисом Ритчи в 1972 году и послужил главным инструментом для создания операционных систем UNIX и MS-DOS. Как и все языки, язык C постепенно совершенствовался. Уже в начале 80-х годов Бьерн Страуструп в AT&T Bell Labs стал разрабатывать расширение языка C под условным названием «C с классами», дающий возможности определять и использовать новые типы данных. Первый коммерческий транслятор нового языка, получившего название C++, появился в 1983 году. Он представлял собой препроцессор, транслировавший программу в код на C. Однако фактически рождением языка можно считать выход в 1985 году книги Страуструпа «The C++ Programming Language». Именно с этого момента C++ начинает набирать всемирную популярность.

Главным достоинством C++ является возможность создания и использования в программе своих собственных полноценных типов данных, «настроенных» на конкретную задачу. Например, работая в среде Turbo C++, программист может использовать такие концепции: окно редактора или отладчика; текст в текущем окне; меню команд; режим компиляции. Над ними могут выполняться, например, такие действия: открыть новое окно или закрыть ненужное; выбрать другое текущее окно; переместить окно или изменить его размер; выполнить вертикальный сдвиг текста в окне; упорядочить расположение окон на экране; выбрать нужную команду меню с помощью мыши; изменить режим компиляции; сохранить текущий режим компиляции.

Фортран (Formula Translator - переводчик формул) был разработан в середине 50-х годов программистами фирмы IBM. В основном он используется для программ, выполняющих естественнонаучные и математические расчеты.

Ява (Java) – язык для программирования Internet, позволяющий создать безопасные, переносимые, надежные, объектно-ориентированные интерактивные программы с параллельно выполняющимися подпроцессорами. Язык Ява жестко связан с Internet, потому что первой серьезной программой, написанной на этом языке, был браузер Всемирной паутины.

В последнее время, говоря о программировании в Internet, часто имеют в виду создание публикаций с использованием языка разметки гипертекстовых документов HTML. Применение специальных средств (HTML-редакторов) позволяет не только создавать отдельные динамически изменяющиеся интерактивные HTML-документы используя при этом данные мультимедиа, но и редактировать целые сайты.

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

  • Назначение разрабатываемой программы – нужна ли она временно или будет использоваться постоянно, планируется ли передавать ее другим организациям, будут ли разрабатываться ее новые версии;

  • Требуемая скорость работы программы, соотношение ее диалоговых и вычислительных компонентов;

  • Ожидаемый размер программы – можно ли ее создавать как единое целое или придется разбирать на отдельные взаимодействующие модули, требуется ли минимизировать размер памяти, занимаемый программой во время работы;

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

  • Предусматривается ли возможность переноса программы на другие типы ЭВМ;

  • Основные типы данных, с которыми придется иметь дело, необходимость поддержки работы с действительными числами, строками, списками и другими типами структур;

  • Необходимость в специальном программировании некоторых функций для работы с внешними устройствами;

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

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

^ 2.2.Типы данных

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

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

Delphi характеризуется разветвленной структурой типов данных (рис. 1). Я рассмотрела простые и строковые типы данных.

К простым типам данных относятся порядковые и вещественные типы, а также типы дата-время.

Порядковые типы отличаются тем, что каждый из них имеет конечное количество возможных значений. Эти значения можно определенным образом упорядочить (отсюда – название типов) и, следовательно, с каждым из них можно составить некоторое целое число – порядковый номер значения.



Рис. 1 Типы данных в Delphi
^ Вещественные типы, строго говоря, тоже имеют конечное количество значений, которое определяется форматом внутреннего представления вещественного числа. Однако это количество настолько велико, что сопоставить с каждым из них целое число (его номер) не представляется возможным.

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

^ 2.2.1.Порядковые типы

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

К порядковым типам можно применять следующие функции:

    • Ord (X). Для целых типов функция Ord (X) возвращает само значение X. Применение Ord (X) к логическому, символьному и перечисленному типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 255 (символьный), от 0 до 65535 (перечисленный). Тип-диапазон сохраняет все свои свойства базового порядкового типа, поэтому результат применения к нему функции Ord (X) зависит от свойства этого типа.

    • Pred (X). Функция Pred (X) возвращает предыдущее значение порядкового типа, которое соответствует порядковому номеру Ord (X) – 1, т.е. Ord (Pred (X)) = Ord (X) – 1.

    • Succ (X). Функция Succ (X) возвращает следующее значение порядкового типа, которое соответствует номеру Ord (X) + 1, т.е. Ord (Succ (X)) = Ord (X) + 1.

Целый тип

Целый тип выражается десятичными числами без дробной части. Для переменных целого типа компилятор отводит определенное место в памяти от 1 до 8 байт. В таблице 1 приводятся названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений.

Таблица 1

Название

Длина (байт)

^ Диапазон значений

Byte

1

0…255

ShortInt

1

-128…+127

SmallInt

2

-32768…+32767

Word

2

0…65535

Integer

4

-2147483648…+2147483647

LongInt

4

-2147483648…+2147483647

LongWord

4

0…4294967295

Int64

8

-9×1018…+9×1018

Cardinal

4

0…2147483647


К целым типам применимы следующие стандартные функции: abc(x), sqr(x), random(x), ord(x), succ(x), pred(x), odd(x) (проверка на нечетность, результат – логического типа).

Логический тип

К логическим относятся типы Boolean, ByteBool, Bool, WordBool и LongBool. Типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool – по 2 байта, LongBool – 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант – False (ложь) или True (истина). Для них характерны правила:

Ord (False) = 0

Ord (True) <> 0

Succ (False) = True

Pred (True) = False

Символьный тип

Символьный тип – это конечный упорядоченный набор символов. Значениями символьного типа является множество всех символов клавиатуры.

Язык Delphi поддерживает два символьных типа: Ansichar и Widechar. Тип Ansichar – это символы в кодировке ANSI (назван по имени American National Standard Institute – Американский институт стандартизации, предложивший этот код), которым соответствуют целые числа в диапазоне от 0 до 255. Тип Widechar – это символы в кодировке Unicode, им соответствуют числа от 0 до 65535.

Значением переменной символьного типа может быть любой отображаемый символ: буква русского или латинского алфавита, цифра, знак препинания и специальный символ, например «новая строка»

К переменным символьного типа можно применять операции отношения, так как символы в таблице кодировки упорядочены в алфавитном порядке со сдвигом на порядковый номер первой буквы (отдельно строчные и прописные), а также определения порядкового номера символа ord (<символ>) и символа по порядковому номеру chr (<выражение>).

Таким образом, можно записать:

‘0’<‘1’<..<‘9’<..<‘A’<‘B’<..<‘Z’<‘a’<‘b’<..<‘z’

Символам русского алфавита соответствуют числа большие, чем символам латинского алфавита, при этом справедливо следующее:

‘А’<‘Б’<‘В’<..<‘Ю’<‘Я’<‘а’<‘б’<‘в’<..<‘э’<‘ю’<‘я’

Перечисленный тип

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

Type

Colors = (red, white, blue);

Соответствие между значениями перечисленного типа и порядковыми номерами этих значений устанавливается очередностью перечисления: первое значение в списке получает номер 0, второе – 1 и т.д. Максимальная мощность перечисленного типа составляет 65536 значений, поэтому фактически перечисленный тип задает некоторое подмножество целого типа Word и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т.д.

Между значениями перечисленного типа и множеством целых чисел существует однозначное соответствие, заданное функцией Ord (X). В Delphi допускается и обратное преобразование: Любое выражение типа Word можно преобразовать в значение перечисленного типа, если только значение целочисленного выражения не превышает мощности этого типа.

К данным перечисленного типа применимы операции отношения.

Тип-диапазон

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

<имя переменной> : начальное значение .. конечное значение

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

В стандартную библиотеку Delphi включены две функции, поддерживающие работу с типами-диапазонами:

  • High (X) – возвращает максимальное значение типа-диапазона, к которому принадлежит переменная Х;

  • Low (Х) – возвращает минимальное значение типа-диапазона.

^ 2.2.2.Вещественные типы

Язык Delphi поддерживает шесть вещественных типов: Real, Single, Double, Extended, Comp, Currency.Типы различаются между собой диапазоном допустимых значений, количеством значащих цифр и количеством байтов, необходимых для хранения данных в памяти компьютера (табл. 2).

Таблица 2

Название

Длина (байт)

^ Количество значащих цифр

Диапазон значений

Real

8

15…16

5,0×…1,7×

Single

4

6…8

1,5×…3,47×

Double

8

15…16

5,0×…1,7×

Extended

10

19…20

3,4×…1,1×

Comp

8

19…20

- 1

Currency

8

19…20

±922 337 203 685 477,5807


Для работы с вещественными типами данными могут использоваться стандартные математические функции: sin(x), cos(x), arctan(x), ln(x), exp(x), sqr(x), sqrt(x), abs(x), frac(x), int(x), random, random(x), randomize.

^ 2.2.3.Тип «дата-время»

Тип дата-время определяется стандартным идентификатором TDateTime и предназначен для одновременного хранения и даты, и времени. Во внутреннем представлении он занимает 8 байт и является вещественным числом с фиксированной дробной частью: в целой части числа хранится дата, а в дробной – время. Дата определяется как количество, прошедших с 30 декабря 1899 г., а время – как часть суток, прошедших с 0 часов. Количество суток может быть отрицательным, однако значения меньшие -693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями преобразования даты к строковому типу.

Над данными типа TDateTime определены те же операции, что и над вещественными числами, а в выражениях этого типа могут участвовать константы и переменные целого и вещественного типов.

^ 2.2.4.Строковые типы

Язык Delphi оперирует с символьной информацией, которая может быть представлена как отдельными символами, так и строками (последовательностью символов).

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

Тип Shortstring представляет собой статически размещаемые в памяти компьютера строки длинной от 0 до 255 символов.

Тип Longstring представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти.

Тип Widestring представляет собой динамически размещаемые в памяти строки, длина которых ограничена только объемом свободной памяти. Каждый символ строки типа Widestring является Unicode-символом.

В языке Delphi для обозначения строкового типа допускается использование идентификатора ^ String. Тип String эквивалентен типу Shortstring.

В тексте программы последовательность символов, являющаяся строкой (строковой константой), заключается в одинарные кавычки.

Используя операции =, <, >, <=, >= и <>, переменную типа ^ String можно сравнить с другой переменной типа String или со строковой константой. Строки сравниваются посимвольно, начиная с первого символа. Если все символы сравниваемых строк одинаковые, то такие строки считаются равными. Если в одинаковых позициях строк находятся разные символы, большей считается та строка, у которой в этой позиции находится символ с большим кодом.

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

Глава 3. Технология программирования

^ 3.1.Программное средство

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

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

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

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

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

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

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

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

При разработке ПС человек имеет дело с системами. Под системой будем понимать совокупность взаимодействующих друг с другом элементов. ПС можно рассматривать как пример системы. Логически связанный набор программ является другим примером системы. Любая отдельная программа также является системой. Понять систему – значит осмысленно перебрать все пути взаимодействия между ее элементами.

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

При разработке ПС мы не всегда можем точно знать обо всех связях между элементами системы из-за возможных ошибок. Поэтому полезно уметь оценивать сложность системы по числу ее элементов – числу потенциальных путей взаимодействия между ее элементами, т.е. n!, где n – число ее элементов. Систему называют малой, если n < 7 (6!=720 <1000), систему называют большой, если n > 7. При n = 7 имеем промежуточный класс систем. Малая система всегда проста, а большая может быть как простой, так и сложной. Задача технологии программирования – научиться делать большие системы простыми.

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

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

Чтобы понять природу ошибок человека при переводе, рассмотрим этапы перевода:

  1. Получение информации;

  2. Запоминание полученной информации в своей памяти;

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

  4. Фиксация представлений с помощью пишущего механизма.

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

Учитывая особенности действий человека при переводе, можно указать следующие пути борьбы с ошибками:

  1. Сужение пространства перебора;

  2. Обеспечение однозначности интерпретации представления информации;

  3. Контроль правильности перевода.

Разработка ПС носит творческий характер (на каждом шаге приходится делать какой-либо выбор, принимать какое-либо решение), а не сводится к выполнению последовательности регламентированных действий.

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

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

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

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

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

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

^ Легкость применения - это характеристики ПС, которые позволяют минимизировать усилия пользователя по подготовке исходных данных, применению ПС и оценке полученных результатов, а также вызывать положительные эмоции определенного или подразумеваемого пользователя.

Эффективность – это отношение уровня услуг, предоставляемых ПС пользователю при заданных условиях, к объему используемых ресурсов.

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

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

Функциональность и надежность являются обязательными критериями качества ПС. Остальные критерии используются в зависимости от потребностей пользователей в соответствии с требованиями к ПС.

Рассмотрим общие принципы обеспечения надежности ПС. В технике известны четыре подхода к обеспечению надежности:

  1. Предупреждение ошибок;

  2. Самообнаружение ошибок;

  3. Самоисправление ошибок;

  4. Обеспечение устойчивости к ошибкам.

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

а) борьба со сложностью;

б) обеспечение точности перевода;

в) преодоление барьера между пользователем и разработчиком;

г) обеспечение контроля принимаемых решений.

Этот подход связан с организацией процессов разработки ПС, т.е. с технологией программирования.

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

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

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

Для борьбы со сложностью систем известны два общих метода:

  1. Обеспечение независимости компонента системы;

  2. Использование в системах иерархических структур.

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

Обеспечение точности перевода направленно на достижение однозначности интерпретации документов различными разработчиками, а также пользователями ПС. Это требует придерживаться при переводе определенной последовательности действий:

  1. Понять задачу;

  2. Составить план (включая цели и методы решения);

  3. Выполнить план (проверяя правильность каждого шага);

  4. Проанализировать полученное решение

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

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


Список литературы:

  1. Голицына О.Л., Попов И.И. Основы алгоритмизации и программирования: учеб. пособие. – М.: Форум: Инфра-М, 2004. - 432 с.

  2. Микрюков В.Ю. Алгоритмизация и программирование. – Ростов-на-Дону: Феникс, 2007. – С.20 – 46.

  3. Нестеренко А.В. ЭВМ и профессия программиста. – М.: Просвещение, 1990. – 123 с.

  4. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник для среднего профессионального образования. – М.: Издательский центр «Академия», 2003. – 432 с.







Скачать файл (320 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации