Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GOSY / 1 блок-все-шпора(печать)

.pdf
Скачиваний:
37
Добавлен:
09.05.2015
Размер:
1.57 Mб
Скачать

1. Язык программирования: понятие оператора, программы, программы линейного типа. Алгоритмизация решения задачи. Блок-схемы алгоритмов. Стандартные алгоритмические конструкции. Языки программирования: обзор, классификация, примеры. Среда программирования, еѐ основные функции и компоненты. Интерпретаторы и компиляторы. Отладка, тестирование и трансляция программ. Отладка и тестирование программ в среде Delphi.

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

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

Необх. св-ва:

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

2.Детерменированность (определенность) – существ-ние на каж. шаге алгора 1значного выбора и отсутствие не1значных конструкций.

3.Результативность (конечность) – за конеч. число шагов алгор. должен всегда давать рез-т.

Сравнит. св-ва:

1.Массовость опр-ся классом данных, к кот-м применим данный алгор. Чем > область примен-я, тем выше массовость.

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

3.Рекурсивность – многократность использования отдельных частей алгора (циклы, процедуры, функции,…).

4.Эффективность. Для опред-я эфф-ти алгора небх. опред-ть числовой критерий эфф-ти так, чтобы алгор с >им критерием считался бы >ее эфф-ным. Или наоборот, эфф-ным будет считаться алгор с <им значением дан. критерия. Наиболее распространенные способы задания: словесный, табличный и блоксхема.

Словесное описание позвол. описать алг-м с пом-ю слов и предложений. Табличное задание служит для представления алгоритма в виде таблицы и расчетных формул.

Блок-схема – это графическое представление алг-ма, каждое действие алг-ма записыв-ся соответствующей геометрической фигурой.

начало

Конец

Начало алг-ма

Конец алг-ма Арифметическое действие или группа действий

1

Выбор действия в зависимости от истинности или ложности; в программе соотв.

Операторам условного перехода и конструкциям цикла while и Repeat. Повторение действий заданное кол-во раз;

КЦ

в программе соответствует конструкции цикла FOR.

 

ввод значений переменных с клавиатуры вывод значений переменных и текста на экран

направление вычисления сверху вниз или слева направо направление вычисления снизу вверх и справа налево

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

Линейный алгоритм не содержит логических условий и им одну ветвь вычислений

начало

Ввод a,b,c

S:=a+b

S:= S+c

Вывод

конец

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

Циклический алгоритм содержит многократно повторяемые части. Составить алгоритм и написать программу, которая выводят y=x2 в диапазоне от -10 до 10, с шагом 0,5.

2

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

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

1.Постановка задачи.

2.Разработка алгоритма.

3.Программирование алгоритма на языке программирования.

4.Набор программ в среде программирования.

5.Запуск программы и ее отладка.

6.Тестирование работы программы.

7.Использование программы для решения задач.

Отладка программы – исправление ошибок: логических и синтаксических (проверка работоспособности программы).

Тестирование – проверка правильности функции программы во всех режимах. Тестирование производится с помощью специальных тестовых задач. Оператор – специальная совокупность служебных слов, идентификаторов и специальных знаков выполняющих определенные действия, специальная конструкция языка программирования. Оператор всегда указывает на выполнение какой-то конструкции. Операторы описывают те алгоритмические действия, которые должны выполняться. Операторам могут предшествовать метки, которые можно использовать для ссылок в операторах перехода goto. Метка – это последовательность цифр в диапазоне от 0 до 9999 или идентификатор.

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

3

Процедурный язык – программа строится как алгоритм действия (процедура)

компьютера. Примеры: Fortran, C, Basic, Pascal.

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

Существует два основных вида операторов: простые операторы и структурные операторы.

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

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

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

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

Ввод данных

Для ввода исходных данных чаще всего используется процедура ReadLn: ReadLn(A1,A2,...AK); Процедура производит чтение К значений исходных данных и присваивает эти значения переменным А1, А2, ..., АК.

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

Enter.

Не допускается разделение вводимых чисел запятыми! Вывод данных

4

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

Write(A1,A2,...AK); WriteLn(A1,A2,...AK);

Первый из этих операторов производит вывод значений переменных А1, А2,...,АК в строку экрана. Второй оператор, в отличие от первого, не только производит вывод данных на экран, но и производит переход к началу следующей экранной строки. Если процедура writeln используется без параметров, то она просто производит пропуск строки и переход к началу следующей строки.

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

Форма представления значений в поле вывода соответствует типу переменных и выражений: величины целого типа выводятся как целые десятичные числа, действительного типа - как действительные десятичные числа с десятичным порядком, символьного типа и строки - в виде символов, логического типа - в виде логических констант TRUE и FALSE.

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

Для величин действительного типа элемент списка вывода может иметь вид А:К:М, где А - переменная или выражение действительного типа, К - ширина поля вывода, М - число цифр дробной части выводимого значения. К и М - выражения или константы целого типа. В этом случае действительные значения выводятся в форме десятичного числа с фиксированной точкой. Пример записи операторов вывода:

var rA, rB: Real; iP,iQ:Integer; bR, bS: Boolean;

chT, chV, chU, chW: Char; begin

. . .

WriteLn(rA, rB:10:2); WriteLn(iP, iQ:8); WriteLn(bR, bS:8); WriteLn(chT, chV, chU, chW);

5

end.

Основные типы языков программирования.

Развитие языков программирования привело к формированию двух основных направлений – процедурного и декларативного программирования.

Процедурное программирование основано на представлении алгоритма работы программы в терминах процедур работы компьютера как устройстваавтомата (проверка условия, цикл и т.д.). Построение такой программы требует определенных знаний о функционировании и составе ЭВМ. Развитие этого подхода привело к созданию методов структурного, объектноориентированного и визуального программирования. К процедурным языкам следует отнести языки Basic, Pascal, Fortran, Си.

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

1) Функциональные языки. Конструкции в функциональном языке определяются в терминах поиска значения функции по ее описанию. К функциональным языкам относят например различные варианты языка язык Lisp. Программа в языке Lisp фактически является списком, который содержит другие списки и т.д. Определение функции здесь связано с поиском соответствия между элементом и списком в котором этот элемент содержится.

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

1)Процедурные - основаны на понятии процедуры – алгоритма действия для исполнителя. Таким образом, конструкции процедурного языка считают исполнителем сам компилятор и конструкции формируются в терминах работы исполнителя;

2)Объектно – ориентированные. Объектно – ориентированный подход позволил объединить лучшие свойства реляционного и процедурного языков на основе реляционного и процедурного языков. Это наиболее качественный и современный язык программирования. Основывается на понятии объекта(

С++, Visual C, Visual Basic, Delphi, Object Pascal).

Трансляция программ: компиляторы и интерпретаторы.

6

Спомощью языка программирования создается не готовя программа, а только

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

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

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

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

Обзор языков программирования высокого уровня.

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

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

Примеры языков программирования высокого уровня:

7

1)FORTRAN (Фортран) – первый компилируемый язык, созданный Д. Бэркусом в 50-е годы. Основным критерием при разработке компиляторов Фортрана являлась эффективность исполняемого кода. Хотя в Фортране впервые был реализован ряд важнейших понятий программирования, удобство создания программ было принесено в жертву возможности получения эффективного машинного кода.

2)COBOL (Кобол) – компилируемый язык для применения в экономической области и решения бизнес-задач, разработанный в начале 60-х годов. Он отличается большой «многословностью» - его операторы иногда выглядят как обычные английские фразы. Реализованы очень мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях.

3)ALGOL (Алгол) – компилируемый язык, созданный в 1960 году. Он был призван заменить Фортран, но из-за более сложной структуры не получил широкого распространения. В 1968 году была создана версия Алгол 68 с высокими возможностями, но для нее не удалось своевременно создать хорошие компиляторы.

4)PASCAL (Паскаль) – создан в конце 70-х годов основоположником многих идей современного программирования Н. Виртом, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов.

5)BASIC (Бейсик) – для него имеются и компиляторы, и интерпретаторы, а по популярности он занимает первое место в мире. Он создавался в 60-х годах в качестве учебного языка и очень прост в изучении.

6)C (Си) – создан в лаборатории Bell для замены ассемблера. Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70-х годах была написана операционная система Unix.

7)C++ (Си++) – это объектно-ориентированное расширение языка Си, созданное Б. Страуструпом в 1980 году. Множество новых возможностей наложилось на определенную низкоуровневость.

8)JAVA (Джава, Ява) – созданный компанией Sun в начале 90-х годов на основе Си++, призван упростить разработку приложений на основе Си++ путем исключения из него низкоуровневых возможностей. Главная особенность – компиляция не в машинный код, а платформно-независимый байт-код. Этот код может выполняться с помощью интерпретатора – виртуальной Java-машины JVM (Java Virtual Machine), версии которых созданы сегодня для любых платформ.

В процессе развития ЯВУ определились несколько направлений, по которым они развивались. Они разделились на компиляторы и интерпретаторы

8

Исторически сложилось два подхода к созданию трансляторов. В первом подходе транслятор переводит программу по командам (построчно), после чего она исполняется. Такие трансляторы называют интерпретаторами.

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

Возможность определения ошибки в программе до еѐ исполнения.

Проще создать исполняемую программу в файле.

Более развитый лексический анализ, учитывающий взаимодействие операторов.

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

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

Текстовый редактор – служит для написания текста программы на языке программирования;

Компилятор – анализ программы и перевод ее в двоичный код;

Компановщик;

Загрузчик.

Всостав среды программирования входит: редактор, меню, панели инструментов. Delphi многооконная система.

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

Вглавном окне располагается главное меню Delphi, набор пиктографических командных кнопок и палитра компонентов.

Главное меню содержит средства для управления проектом.

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

Инспектор объектов содержит две страницы - Properties (Свойства) и Events (События). Страница properties служит для установки нужных свойств компонента, страница Events позволяет определить реакцию компонента на то или иное событие.

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

9

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

Верификация – процесс проверки работоспособности и правильности программы. Верификацию делят на отладку и тестирование.

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

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

Любая система программирования имеет транслятор.

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

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

Debug

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

Понятия отладки и тестовой проверки программы.

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

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

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

Рассмотрим пример, связанный с проектом Project1. Добавим в обработчик списка действий AddAction следующие описание и оператор:

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

10

Соседние файлы в папке GOSY