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

ВОПРОСЫ ГОСУДАРСТВЕННОГО ЭКЗАМЕНА

.pdf
Скачиваний:
22
Добавлен:
12.04.2015
Размер:
4.23 Mб
Скачать

81

К оглавлению ↑

3. Семантический подход к языкам программирования

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

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

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

Семантика языка программирования – правила, определяющие какие операции, и в какой последовательности должна выполнять ЭВМ, работающая по программе.

Базовые средства описания данных.

Базовые средства описания действий.

Дополнительные возможности в языках.

Перегрузка процедур и функций

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

 

82

 

 

К оглавлению ↑

int sum(int a, int b)

 

function sum(var a, b: integer) : integer; overload;

{

 

begin

return a + b;

 

result := a + b;

}

 

end;

float sum(float a, float b)

 

function sum(var a, b: real) : real; overload;

{

 

begin

return a + b;

 

result := a + b;

}

 

end;

Однако JavaScript не имеет такой возможности, так как этот язык не является типизированным.

Множественное наследование

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

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

Шаблонные функции

Шаблоны (англ. template) — средство языка, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например, типам данных, размерам буферов, значениям по умолчанию).

T sum<T>(T a, T b)

 

На Delphi аналога нет (точнее он есть, но его

{

 

реализация слишком сложна).

return a + b;

 

 

}

 

 

Console.WriteLine(sum<int>(1, 2));

 

 

Console.WriteLine(sum<real>(1, 2));

 

 

 

Обработка исключений

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

Для Object Pascal: 1.Защищенный блок начинается зарезервированным словом try (попытаться [выполнить]) и завершается словом end. Существуют два типа защищенных блоков - except (исключить) и finally (в завершение), отличающихся способом обработки исключения. В блоке except порядок выполнения операторов таков: сначала выполняются операторы секции try... except; если операторы выполнены без возникновения исключительной ситуации, работа защищенного блока на этом прекращается, и управление получает оператор, стоящий за end; если при выполнении части try возникло исключение, управление получает соответствующий обработчик в секции except, а если таковой не найден - первый из операторов, стоящих За словом else. 2.В блоке finally операторы В секции finally. . .end получают управление всегда, независимо от того, возникло ли исключение в секции try.. .finally или нет. Если исключение возникло, все операторы в секции try.. .finally, стоящие за “виновником” исключения, пропускаются, и управление получает первый оператор секции

83

К оглавлению ↑ finally... end. Если исключения не было, этот оператор получает управление после выполнения последнего оператора секции try.. .finally.

try {

try

//код с возможной ошибкой

операторы

} catch (Exception e) { //обработка ошибки

except

обработчик исключения

} finally { //код, который выполняется всегда

else операторы

end;

}

 

try { //пример: деление на ноль

try

d = 2 / 0;

операторы

} catch (DivideByZeroException e) {

finally

Console.WriteLine(“Деление на ноль!”);

операторы

}

end;

Литература: [3], [4].

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

Операторы действия, ветвление, циклы, подпрограммы на примере любого языка программирования.

Операторы действия

Инструкция или оператор – наименьшая автономная часть языка программирования; команда. Программа обычно представляет собой последовательность инструкций.

Например C#: if, if-else, while, do-while, for, switch-case, return и т.д. Также операторам можно считать объявление переменной (int a).

Оператор ветвления

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

if (a == b)

if a = b then

{

begin

}

end else begin

else

{

end;

 

}

 

Оператор цикла

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

84

К оглавлению ↑

В Object Pascal циклы бывают: c предусловие(while), с постусловием (repeat .. until), цикл с параметром (for).

for (int i = 0; i < 10; i++)

for i := 0 to 10 do

{

begin

}

 

 

end;

 

 

while (true)

while условие do

{

begin

}

end;

 

Repeat

 

...

 

Until условие выхода;

Подпрограмма

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

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

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

void print(string str)

PROCEDURE <имя процедуры> (<список

{

формальных параметров>);

 

Console.WriteLine(str);

BEGIN

 

 

 

}

<Операторы тела процедуры>

 

 

END;

 

 

 

 

 

 

 

 

 

FUNCTION

<имя

функции>

(<список

 

формальных параметров>):

 

 

<тип возвращаемого значения>;

 

 

BEGIN

 

 

 

 

<Операторы тела функции>

 

 

END;

 

 

 

 

 

 

 

 

Литература: [1], [2].

85

К оглавлению ↑

5. Структурные типы данных в языках программирования

Массивы, строки, файлы, записи, множества на примере любого языка программирования.

Массивы

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

Массивы бывают одномерные и двумерные.

Описание массивов:

Статическое (размер фиксирован и определён до начала программы)

Динамическое (размер можно задать в ходе выполнения программы)

Пример, описывающий массив целых чисел из 10 элементов:

int[] array = new int[10];

Статические массив из 10 символов

 

var

 

arr: array [1..10] of integer;

 

Динамический массив

 

var DinMass: array of Real;

 

Для работы с массивом надо выделить место в

 

памяти с помощью процедуры:

 

SetLength(DinMass, n);

 

n - количество элементов в массиве.

 

 

 

Двумерный динамический массив

 

Type Mas = array of array of Real;

 

Var a: Mas;

 

Двумерный статический массив:

 

Var a: array [1..M, 1..N] of integer;

Строки

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

Обращение к элементу массива происходит как в массиве. Например, str[i]

К строкам можно применять операцию сцепления "+", операции отношения =, <, <, и др.

Функции: копирование (copy), нахождение длины строки (length), поиск подстроки в строке (pos), удаление подстроки (delete), функции преобразования значения строки в число и обратно.

Пример:

string str = “Hello, World!”;

Var str: String;

 

 

Файлы

86

К оглавлению ↑

Под файлом понимается именованная область внешней памяти ПК (жесткого диска, гибкого диска,

диска CD-ROM).

Типы файлов:

типизированные файлы <имя> : File of <тип>; (указан тип компоненты)

текстовые файлы <имя> : TextFile; (совокупность строк переменной длины)

нетипизированные файлы <имя> : File; (отличаются тем, что для них не указан тип компонентов)

Доступ осуществляется с помощью связывания файла с файловой переменной AssignFile. Открытие файла для чтения - Reset. Перезапись - Rewrite. Открытие для дозаписи - Append. Read - считывание. Write - запись. CloseFile - закрытие.

Для текстовых также применяются процедуры readln и writeln.

При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением Read и write, которые заменяются соответственно высокоскоростными процедурам BlockRead , BlockWrite.

Пример программы чтения строк из файла:

StreamReader f = new StreamReader(“file.txt”);

var

while (!f.EndOfStream)

f: textfile; s: string;

{

begin

Console.WriteLine(f.ReadLine());

assignfile(f, “file.txt”);

}

reset(f);

f.Close();

while not(eof(f)) do

 

readln(f, s);

 

closefile(f);

 

end.

Записи (структуры)

Записи- это структурированный тип, состоящий из фиксированного числа компонент (называемых полями) разного типа.

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

Обращение к компоненту записи: <имя переменной>.<имя поля> Любая обработка записей (в том числе ввод и вывод) производится путем обращения к отдельным полям.

public struct Point

Type V= record

{

P1 : T1;

public double x;

P2 : T2;

public double y;

. . .

}

Pn : Tn;

 

end;

 

где V- имя записи, Pi - имя поля , Ti - тип поля

 

 

87

К оглавлению ↑

Множества

Множества - это наборы однотипных логически связанных друг с другом объектов.

Элементы множества не пронумерованы, не упорядочены. Действия можно выполнять только над множеством в целом. Множество может содержать от 0 до 255 элементов.

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

Операции над множествами:

Объединение "+". Пересечение "*". Разность "-". Операции отношения. Операция вхождения (x in M).

Пример (аналог на C#):

enum Colors

type

{

colors = (red, green, blue);

Red = 0,

var

Green = 0,

c: set of colors

Blue = 255

begin

};

c := [red];

 

end.

 

Или :

 

Var cl: set of (red, green, blue);

Литература: [1], [2].

6. Этапы развития технологии программирования

1 этап: методологии программирования нет. 2 этап: структурное программирование. 3 этап: модульное программирование. 4 этап: объектно-ориентированное программирование.

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

Эволюция технологии проектирования программ - это

эволюция методологий проектирования программ;

эволюция языков программирования.

Эволюцию технологии программирования рассмотрим на примере развития архитектуры

программы, отражающей в общем виде развитие средств программирования.

1 этап

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

88

К оглавлению ↑

Проблемы, возникшие на данном этапе:

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

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

2 этап

Методология - структурный подход.

Архитектура программы имеет следующий вид:

Проблемы, возникшие на данном этапе:

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

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

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

Проблемы, решенные на данном этапе:

Появился метод проектирования программ – метод пошаговой детализации.

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

3 этап

Методология - модульный подход.

Архитектура программы имеет следующий вид:

Проблемы, возникшие на данном этапе:

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

либо полностью доступные, либо полностью недоступные данные. Проблемы, решенные на данном этапе:

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

Частично решена проблема зашиты данных внутри модуля.

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

89

К оглавлению ↑

необходимо мобильное (избирательное) ограничение доступности данных;

все больше внимания стали уделять проектированию данных, а уже потом алгоритма для их

оперирования Все это потребовало разработки новой методологии проектирования программ, которая

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

 

 

 

 

Данные

 

 

 

 

Алгоритм

 

4 этап

 

 

 

Методология - объектноориентированный подход.

Архитектура программы имеет следующий вид:

Проблемы, возникшие на данном этапе:

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

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

Проблемы, решенные на данном этапе:

Данный подход не отрицает два предыдущих, а основывается на них: o программа состоит из модулей

o модули содержат описание классов и объектов («активных» данных) o методы (алгоритмы) активных данных строятся на основе

В программе может отсутствовать область общих глобальных данных

Основой при конструировании программы служат «активные» данные.

Защита в описываемых «активных» данных стала более мобильная.

Литература: [2], [4].

90

К оглавлению ↑

КОМПЬЮТЕРНАЯ АЛГЕБРА

1. Представление математических объектов в системах компьютерной алгебры

Арифметические вычисления, вычисления с дробями в общем виде.

Представление и работа с алгебраическими объектами.

Представление целых чисел.

В сист. рассматриваются точные аналит. преобраз-я и никакие округления или др. искажения целых чисел недопустимы. Необходимо рассматривать целые числа произвольной длины. Для представления выбирают в качестве основания некоторое число N и представляют числа, по аналогии с обычной десятичной сист.,отн-но этого основания (с помощью цифр от 0 до N-1) с добавлением знакового бита. Н-р, на 32-битовых компьютерах можно выбрать в качестве N 109, или

230, или 231.

Представление дробей.

Обыкновенные дроби представляются в виде пары целых чисел: числителя и знаменателя (p/q,q≠0). Не нужно их заменять приближенными значениями с плавающей точкой. Н-р: умножение

дробей a/b и c/d, представленных в несократимом виде: . НОД (a,d); НОД (b,c); a’=a/НОД(a,d); b’=b/НОД(b,c); c’=c/НОД(b,c); d’=d/НОД(a,d); p=a’c’; q=b’d’.

Представление полиномов.

Все сист. могут работать с полиномами произв. числа переменных. Их можно +,-,*,/, операция упрощения. Представление матем. объектов (полиномов) наз-ся каноническим, если две различные записи соответствуют всегда двум различным объектам. Представление наз-ся нормальным, если представление нуля моноида единственно. Представление наз-ся разреженным, если нулевые члены явно в нем не представлены. (мы пишем 8x3+7 вместо 8x3+0x+7) Представление наз-ся плотным, если в нем явно представлены все члены. Наиболее очевидным компьютерным представлением полинома anxn+an-1xn-1+…+a1x+a0 явл-ся его представление таблицей коэффициентов [an,an- 1,…,a0].-плотное представление.

Представление рациональных ф-ций.

Большинство вычислений используют не только полиномы, но и их отношения, т.е. рациональные ф-ции. Если представить рацион. ф-цию как полином (числитель), деленный на другой полином (знаменатель), то получается нормальное представление, т.к. ф-ция есть нуль тогда и только тогда, когда ее числитель есть нуль. Естественно потребовать, чтобы в канон. представлении не существовало какого-либо общего делителя числителя и знаменателя. В общем случае приходим к представлению с минимально возможной степенью числителя (или знаменателя). Правила для рацион. ф-ций: 1.-в выражении не д.б. рацион. коэфф-тов; 2.-никакое целое число не может делить как числитель, так и знаменатель; 3.- старший коэфф-т знаменателя выражения д.б. положительным.

Представление алгебраич. ф-ций.

Под алгебраич. объектами (числами и ф-циями) понимают реш-е полиномиальных ур-ий. Н-р,

- алгебраич. число, как реш-е ур-я x2-3=0. Различают три класса алгебраич. выраж-й: 1.- простые

радикалы (н-р, , ). Две проблемы – однозначность представления (н-р, , ее универсальное реш-е очень сложно) и взаимная зависимость радикалов – корни различных