Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика ЭИС, 2 семестр.docx
Скачиваний:
1
Добавлен:
12.01.2020
Размер:
56.13 Кб
Скачать

Билет №1 Понятие алгоритма. Характеристики и свойства

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

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

  • последовательную декомпозицию задачи, выделение автономных этапов вычислительного процесса и разбивку каждого этапа на отдельные шаги;

  • формальную запись содержания каждого этапа и/или шага;

  • определение общего порядка выполнения этапов и/или шагов;

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

Алгоритмы обладают целым рядом свойств:

Понятность для исполнителя - содержание предписания о выполнении только таких действий, которые входят в систему команд исполнителя.

Дискретность (прерывность, раздельность) - выполнение команд алго­ритма последовательно, с точной фиксацией моментов окончания выполнения одной команды и начала выполнения следующей.

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

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

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

Характеристики подразделяются на временные и объёмные.

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

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

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

Объем текста алгоритма (программы) определяется количеством операторов, использованных для записи алгоритма.

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

Билет № 2 Структурное программирование

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

Характерными принципами структурного программирования являются:

· нисходящее программирование – способ разработки программ, при котором программи­рование ведется методом «сверху вниз», от общего к деталям;

· модульное программирование, при котором относительно независимые подзадачи про­граммируются в виде отдельных программных модулей;

· использование при программировании трех структур управления (следование, выбор, повторение). Структура следование предполагает естественную последовательность выполнения операторов. Структура выбор задается схемой «если – то – иначе» (условный оператор if). Структуре повторения сопоставлен оператор цикла;

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

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

Следование– это линейная последовательность действий:

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

Ветвление – алгоритмическая альтернатива. Управление передается одному из двух блоков в зависимости от истинности или ложности условия. Затем происходит выход на общее продолжение

:Цикл с предусловием

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

Пока условие истинно, выполняется серия, образующая тело цикла.

Второй тип циклической структуры – цикл с постусловием:

Цикл с постусловием

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

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

Иногда в литературе структурное программирование называют программированием без goto. Действительно, при таком подходе нет места безусловному переходу. Неоправданное использование в программах оператора goto лишает ее структурности, а значит, всех связанных с этим положи­тельных свойств: прозрачности и надежности алгоритма. Хотя во всех процедурных языках программирования этот оператор присутствует, однако, придерживаясь структурного подхода, его употребления следует избегать.

Соединяться алгоритмы могут двумя способами: последовательным и вложенным.

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

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

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

• конструкции одного уровня вложенности записываются на одном вертикальном уровне (начинаются с одной позиции в строке);

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

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

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

• «сверху вниз»: сначала строится основной алгоритм, затем вспомогательные алгоритмы;

• «снизу вверх»: сначала составляются вспомогательные алгоритмы, затем основной.

Первый подход еще называют методом последовательной детализации, второй – сборочным методом.

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

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

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

Билет № 3 Визуальное программирование

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

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

Объектно-ориентированное программирование удачно использует концепцию визуального программирования.

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

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

В настоящее время распространено большое количество систем визуального программирования. Это системы программирования для языков C++, Basic, Pascal/Delphi. Кроме языков программирования, визуальный подход используется и в других системах (Visual FoxPro, Paradox для Windows, программы пакета Microsoft Office).

Использование визуального проектирования интерфейса предоставляет программисту (пользователю) следующие преимущества:

  • возможность легкого изменения размеров и расположения компонентов на форме (с помощью простых манипуляций мышью);

  • в процессе проектирования постоянно виден результат – изображение формы и расположенных на ней компонентов (не надо запускать приложение для проверки внешнего вида окна и последующего изменения программного кода для подбора более удачного размера и расположения компонентов);

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

Визуальное проектирование интерфейса приложения состоит из следующих этапов:

  • размещение нужных компонентов на форме;

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

  • написание, при необходимости, обработчиков событий.

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

Билет № 11 Типы данных в C++

Типы данных в C/C++ разделяются на основные и производные. К основным типам относят: 

  1. void (пустой тип), 

  2. int (целый тип), 

  3. float (вещественные числа с плавающей точкой), 

  4. double (вещественные числа с плавающей точкой двойной точности), 

  5. char (символьный тип),

  6. bool - логический.

Составные типы

Для формирования других типов данных используют основные типы + так называемые спецификаторы. Типы данных, созданные на базе стандартных типов с использованием спецификаторов, называют составными типами данных. В C++ определены четыре спецификатора типов данных:

  1. short - короткий; 

  2. long - длинный; 

  3. signed-знаковый; 

  4. unsigned-беззнаковый.

Производные типы – это: 

  • массивы

  •  функции

  •  классы

  •  указатели 

  •  ссылки

  •  структуры  

  • объединения

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

Данные типа char в памяти компьютера всегда занимают 1 байт. Это связа­но с тем, что обычно под величину символьного типа отводят столько памяти, сколько необходимо для хранения любого из 256 символов клавиатуры. Сим­вольный тип может быть со знаком или без знака. В величинах со знаком signed char можно хранить значения в диапазоне от -128 до 127. Соответствен­но значения переменных типа unsigned char могут находиться в диапазоне от 0 до 255. При работе с символьными данными нужно помнить, что если в выражении встречается одиночный символ, он должен быть заключен в одинарные кавычки. Последовательность символов, то есть строка, при использовании в выражени­ях заключается в двойные кавычкиНапример: ‘F’ , ‘3’ , “Иван”, “235” 

Целочисленный тип

Данные типа int в памяти компьютера могут занимать либо 2, 4 или 8 байт. Это зависит от разрядности процессора. По умолчанию все целые типы считаются знаковыми, то есть спецификатор signed (знаковый ) можно не указывать. Спецификатор unsigned (беззнаковый) позволяет представлять только положительные числа. 

Диапазоны значений целочисленных типов

Тип данных

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

Размер(байт)

int  signed int  signed long int

-2147483648 ... 2147483647

4

unsigned int  unsigned long int

0 ... 4294967295

4

short int  signed short int

-32768 ... 32767

2

unsigned short int

0... 65535

2

long long int

−(263−1)...(263−1)−(263−1)...(263−1)

8

unsigned long  long int

0...(264−1)0...(264−1)

8

Вещественный тип

Внутреннее представление вещественного числа в памяти компьютера отлича­ется от представления целого числа. Число с плавающей точкой представлено в экспоненциальной форме: ±mE±p±mE±p где m - мантисса (целое или дробное число с десятичной точкой), р- порядок (целое число). Для того чтобы перевести чис­ло в экспоненциальной форме к обычному представлению с фиксированной точкой, необходимо мантиссу умножить на десять в степени порядок. Например, −6.42E+2=−6,42∗102−6.42E+2=−6,42∗102 

Диапазоны значений вещественных типов Диапазоны значений символьных типов

Тип данных

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

Размер (байт)

float

3.4E-38 ... 3.4E+38

4

double

1.7E-308... 1.7E+308

8

long double

3.4E-4932 ... 3.4E+4932

10

Тип данных

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

Размер

char

-128...+127

1 байт

unsigned char

0...255

1 байт

signed char

-128...127

1 байт


Длина мантиссы определяет точность числа, а длина порядка его диапазон.

Данные типа float занимают 4 байт, из которых 1 двоичный разряд отводится под знак, 8 разрядов - под порядок и 23 - под мантиссу. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится. Данные типа double занимают 8 байт, в них под порядок -11 разрядов и под мантиссу -52 разряда соответственно. Спецификатор типа long перед именем типа double указывает, что под величину отводится 10 байт. 

Соседние файлы в предмете Информатика