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

Voprosy_k_ekzamenu_po_informatike

.pdf
Скачиваний:
40
Добавлен:
09.06.2015
Размер:
2.24 Mб
Скачать

ВОПРОСЫ К ЭКЗАМЕНУ ПО КУРСУ «ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ». (2014/2015 УЧ. Г. СП. «МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ И АДМИНИСТРИРОВАНИЕ ИНФОРМАЦИОННЫХ СИСТЕМ», ФАКУЛЬТЕТ КНИИТ)

1.

Понятие информатики, информации, кодирования информации........................

3

2.

Понятие алгоритма, рекурсивные функции. ..........................................................

7

3.

Понятие алгоритма, системы текстовых замен......................................................

12

4.

Способы описания языков программирования: БНФ-нотации, синтаксические

 

 

диаграммы. ................................................................................................................

14

5.Классификация языков программирования, элементы языка программирования С/С++: алфавит, слова, константы. ........................................................................ 16

6.

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

18

7.

Операции в С/С++, выражения, порядок вычисления выражений. .....................

20

8.

Структура программы на С/С++, пример программы...........................................

23

9.

Типы операторов в С/С++, оператор пустой, составной, оператор-выражение,

 

 

оператор возврата......................................................................................................

24

10.

Оператор условной передачи управления в С/С++, примеры.............................

26

11.

Оператор цикла с параметром в С/С++, его использование, примеры. .............

27

12.

Оператор цикла с предусловием и постусловием в С/С++, особенности

 

 

использования............................................................................................................

28

13.Оператор безусловного перехода, операторы продолжения и завершения,

 

 

примеры использования. ..........................................................................................

29

14.

Оператор-переключатель в С/С++, примеры. .......................................................

30

15.

Базовые типы данных в С/С++, преобразование типов, стандартные функции.31

16.

Операции, используемые в С/С++, перечислимый тип в С/С++. .......................

33

17.

Ввод/вывод данных в С. ..........................................................................................

35

18.

Ввод/вывод данных в С++.......................................................................................

38

19.

Производные типы данных, массивы, работа с массивами. ................................

39

20.

Указатели, работа с указателями в С/С++. ............................................................

41

21.

Строковый тип в С/С++, стандартные функции для работы со строками. ........

42

22.

Работа со структурами в С/С++. .............................................................................

45

23.

Объединения в С/С++, отличие от структур. ........................................................

46

24.

Файлы прямого и последовательного доступа к данным, форматированный и

 

 

неформатированный ввод/вывод. ............................................................................

47

25.

Работа с файлами в С/С++, примеры. ....................................................................

49

26.

Понятие подпрограммы, назначение подпрограмм, использование

 

 

подпрограмм. .............................................................................................................

51

27.

Подпрограммы в С/С++, функции, возвращающие значение и не

 

 

возвращающие значение, примеры. ........................................................................

52

 

1

 

28.

Передача параметров в подпрограмму, параметры входные и выходные,

 

 

параметры, передаваемые по значению и по адресу. ............................................

53

29.

Использование подпрограмм, параметры формальные, локальные, глобальные,

 

обращения к подпрограммам, фактические параметры........................................

55

30.

Передача параметров массивов в подпрограмму, примеры. ...............................

56

31.

Передача параметров-функций в подпрограмму. .................................................

57

32.

Рекурсивные функции, примеры. ...........................................................................

58

33.

Понятие структурного программирования, этап проектирования – композиция

 

и декомпозиция, понятие статической и динамической структуры программы,

 

спецификация программы. .......................................................................................

60

34.

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

 

 

общий вид, правила консеквенции..........................................................................

62

35.

Правила вывода для операторов С/С++: пустого, присваивания, составного...

64

36.

Правила вывода для операторов ветвления...........................................................

66

37.

Правила вывода для циклов с предусловием и постусловием. ...........................

67

38.

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

68

39.

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

69

40.

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

70

41.

Функции для работы с файлами прямого доступа к данным. .............................

71

42.

Шаблоны функций, определение и назначение. ...................................................

72

43.

Шаблоны функций, особенности их использования. ...........................................

74

2

1. ПОНЯТИЕ ИНФОРМАТИКИ, ИНФОРМАЦИИ, КОДИРОВАНИЯ ИНФОРМАЦИИ.

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

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

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

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

3

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

Алфавит языка логики высказываний. Пропозициональные буквы

(пропозициональные переменные): p, q, r, s, t, p_1, q_1, r_1, s_1, t_1, ...

Логические знаки (логические союзы): — знак отрицания, — знак конъюнкции, — знак дизъюнкции, — знак строгой дизъюнкции, — знак импликации, — знак эквивалентности.

Технические знаки: ( — левая скобка, ) — правая скобка.

Унарные булевы функции.

Бинарные булевы функции.

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

4

Информационная система. В информационной системе (A, R, I) два изображения r1 и r2 называются семантически эквивалентными, если они несут одинаковую абстрактную информацию I(r1) = I(r2). Простейший пример информационной системы, которая является фундаментальной как в математике, так и в информатике, является логика высказываний.

Высказывание, по определению Аристотеля, это языковое образование, в отношении которого имеет смысл говорить о его истинности или ложности.

Не всякое языковое образование можно назвать высказыванием. Например, «Высказывание этого предложения является ложным» - парадокс, так как высказывание ссылается само на себя.

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

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

Информация может быть представлена функцией y = f (x, t), где t – время, х – точка, в которой измеряется некоторое поле, y – значение величины этого поля. Различают непрерывную информацию и дискретную.

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

Дискретная информация. Установив какой-то шаг изменения скалярных величин x и t при определении поля y, получают так называемое дискретное представление информации. Дискретную информацию называют универсальной, т.к. любую непрерывную можно аппроксимировать дискретной с заданной степенью точности.

Информация и теория кодирования. Теория информации связана с количественной оценкой информации. Это направление получило развитие благодаря трудам Клода Э. Шеннона, который нашёл фундаментальные ограничения на обработку сигнала в таких операциях, как сжатие данных, надёжное сохранение и передача данных. Теория кодирования изучает свойства кодов (системы для преобразования информации из одной формы в другую) и их пригодность для конкретной задачи. Коды используются для сжатия данных, в криптографии, для обнаружения и коррекции ошибок, а в последнее время

5

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

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

Содержательный подход. Количество информации, заключенное в сообщении, определяется объемом знаний, которое оно несет приемнику информации. Формула Хартли: I = log2N

Пример. В лотерейном барабане 32 шара. Сколько информации содержит сообщение о первом выпавшем номере?

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

2I = 32, отсюда I = 5.

Алфавитный подход. Позволяет определить количество информации, заключенной в тексте. Количество информации во всем тексте I может быть определено как I = i * K, где К – количество символов в тексте.

Пример. Книга, набранная на компьютере, имеет 150 страниц, на странице 40 строк, в каждой строке 60 символов. Каков полный объем информации?

Решение. Мощность компьютерного алфавита равна 256. Один символ несет один байт информации. Объем всей информации: 150 * 40 * 60 = 360 000 байт.

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

Пример. В коробке 50 шаров: 40 белых и 10 черных. Определить количество информации в сообщении о том, что при первой попытке выбран черный шар.

Решение. Вероятность попадания при выборе черного шара p = 10/50 = 0,2. Количество информации i = log2(1/0,2) = log25=2,32.

6

2. ПОНЯТИЕ АЛГОРИТМА, РЕКУРСИВНЫЕ ФУНКЦИИ.

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

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

Свойства алгоритма: массовость, результативность, детерминированность, дискретность, правильность.

1)Массовость – возможность использования алгоритма для классов объектов данных, допустимых в качестве исходных, может создаваться для одного понятия.

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

3)Детерминированность – это есть четкое понятие последовательности шагов. Каждый шаг алгоритма должен быть строго определен и не может допускать различных толкований.

4)Дискретность – свойство алгоритма, которое характеризует его структуру.

5)Понятность – наличие некоторого алгоритма, описывающего процесс выполнения других алгоритмов на наличие некоторого исполнителя (человека, машины).

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

7

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

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

Определение рекурсии. Функция в математике определяется однозначно y = f(x1, x2, … xn), если существует закон, по которому каждому набору значений аргументов x1, x2, … xn ставится в соответствие одно значение y. Закон может быть произвольным, им может быть алгоритм, определяющий способ получения значения функции, такую функцию называют вычислимой. Рекурсивные функции – это частный класс вычислимых функций, а алгоритмы, являющиеся законами их определения, называются алгоритмами, сопутствующими рекурсивным функциям.

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

1) Функция любого числа переменных, равная нулю.

y = φ1(x), w = φ3(x, y, z), например, φ1 (5) = 0, φ3 (2, 5, 7) = 0 и т.д. φ () = φ0.

Сопутствующий алгоритм: если знак функции имеет вид φn, то любой совокупности значений аргументов данной функции ставится в соответствие значение ноль.

2)Тождественные функции n независимых аргументов вида ψn,i где n є N, 1≤ i ≤ n, n – количество аргументов, i = номер одного из них.

w = ψ3,2 (x,y,z), w = ψ3,2 (2,8,5) = 8.

Сопутствующий алгоритм: если знак функции имеет вид ψn,i , то значением ее считать значение i-го аргумента, считая слева направо.

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

Сопутствующий алгоритм: если знак функции λ, то значением ее считать число, непосредственно следующее за значением аргумента. Обозначают

λ(x) = x/, λ(5) = 6, 5/ = 6.

8

1) Оператор подстановки (суперпозиции). Φ = F( f1,f2,f3,…fn).

Сопутствующий алгоритм: значения функций f1,f2,….fn принять за аргументы и вычислить значение функции F.

Например, i (y) = λ(λ(y)) = λ(y) /) = y// => i (5) = λ(λ(5)) = λ(6) = 7.

Оператор подстановки обозначают буквой S и записывают построение функции

Φиз F и fi так: Φ ::= S [ F; f1,f2,….fn ] , например, i (y) ::= S [ λ(x); (λ(y))].

2)Оператор рекурсии обозначают буквой R и его применение записывается в виде:

f ::= R [f1,f2; x, (y)],

где f - определяемая функция, зависящая от n аргументов, функция, которую мы строим. f1 – функция n-1 независимой переменной, f2 – функция n+1 независимой переменной, из них n -1 совпадают с параметрами функции f1, еще два – это дополнительные аргументы x и y. x – называют главным, он войдет в определяемую функцию, а y – вспомогательным, он используется при выполнении оператора рекурсии. Оператор рекурсии задает функцию с помощью двух условий, в которые входят f1 и f2 : f (0) = f1, f(i/) = f2 (i, f(i))

Сопутствующий алгоритм: Значением получаемой функции для нулевого значения главного дополнительного аргумента считать значение функции f1 – (первое условие), а для каждого последующего значения главного дополнительного аргумента считать значение второй функции f2 при предыдущем значении главного аргумента и при значении вспомогательного, совпадающего с предыдущим значением определяемой функции f (второе условие).

Например, построим функцию предыдущее от x, обозначив ее pr(x), с помощью функции рекурсии так:

pr(x) ::= R [φ0, ψ2,1 (x,y) ; x, (y) ],

где φ0, ψ2,1 - базовые рекурсивные функции. Эта функция определяется условиями: pr(0) = φ0 и pr(i/) = ψ2,1 (i, pr(i)), т.е. pr(0) = φ0 = 0, pr(1) = ψ2,1 (0, pr(0)) = 0, pr(2) = ψ2,1 (1, pr(1)) = 1, и т.д. Здесь pr(0) = 0, а не 1, так как рекурсивные функции определены на множестве целых неотрицательных функций.

3) Оператор минимизации называется оператором построения по первому нулю. Знак функции µ, применение этого оператора:

f ::= μ [f1 ;(x)] ,

где x – вспомогательный, исчезающий аргумент. Оператор минимизации по заданной функции n+1 аргумента строит функцию n аргументов.

Сопутствующий алгоритм: придавать вспомогательному аргументу последовательные значения, начиная с нуля до тех пор, пока не окажется, что f1 = 0, тогда это значение вспомогательного аргумента принять за значение

9

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

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

Классификация рекурсивных функций. Рекурсивные функции,

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

Оказывается, что многие известные математические функции являются рекурсивными: y = x +1 совпадает с базовой функцией λ(x) и следовательно рекурсивна. Доказательство того, что функция w = x + y является рекурсивной, может быть получено, если с помощью подстановки функции z + 1 вместо z в функцию ψ3,3(x,y,z), получим функцию f*(x,y,z) = z + 1, а затем с помощью рекурсии получим:

S(x,0) = ψ1,1(x) = x; S(x,1) = S(x,0) + 1 = x +1; S(x,2) = S(x,1) + 1 = x +2; и т.д. S(x,y) = x + y

(значение S на предыдущем шаге z + 1).

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

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

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

10