Главная страница

Ответы на билеты (1-ый семестр ВФ). 1. Определение информатики, составные части и краткая история развития 3


Скачать 1.09 Mb.
Название1. Определение информатики, составные части и краткая история развития 3
АнкорОтветы на билеты (1-ый семестр ВФ).doc
Дата06.11.2017
Размер1.09 Mb.
Формат файлаdoc
Имя файлаОтветы на билеты (1-ый семестр ВФ).doc
ТипДокументы
#10159
КатегорияИнформатика. Вычислительная техника
страница8 из 10
1   2   3   4   5   6   7   8   9   10

Ключевые слова (Keyword) используются в фортране и имеют свое функциональное предназначение, находясь, как правило, в неисполняемой части программы (описательной). Так, указание REAL L указывает, что значение переменной L – действительное.

Зарезервированные слова (reserved word) могут использоваться только в контексте, предусмотренном правилами (семантикой) языка.

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

Наиболее характерными типами данных являются следующие.

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

Числовые типы: целые – Integer; действительные – REAL (с фиксированной и плавающей точкой); комплексные (COMPLEX) и с двойной точностью (DOUBLE PRECISION) – только в фортране; булевские, или логические, типы – TRUE, FALSE.

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

Массивы (array, dimension), структурированные типы данных – однородное множество данных, в котором каждый элемент идентифицируется его положением по отношению к первому элементу.

Все языки имеют три типа выражений. Арифметические выражения задают порядок действия над элементами данных и состоят из операндов, круглых скобок и знаков операций, традиционных для всех языков +, -, *,/,** или ^. Логические выражения (булевские) состоят из операндов, логических операций и операций отношения (сравнение 2-х операндов). Символьные выражения (литеры) порождают значения, имеющие литерный тип данных.

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

Операторы в алгоритмических языках могут быть:

а) простыми (присваивания)

б) ввода-вывода (read, write, print)

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

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

См. предыдущий вопрос.

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

Императивное программирование — это парадигма программирования, которая, в отличие от декларативного программирования, описывает процесс вычисления в виде инструкций, изменяющих состояние программы. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер. Развитие языков программирования происходит по ряду направлений. С одной стороны, происходит значительное расширение возможностей традиционных (императивных) языков программирования, таких как FORTRAN, Pascal, C, которые иногда называют языками высокого уровня, так как они не связаны с кодом конкретной машины, но, тем не менее, они ориентированы на так называемую «архитектуру фон Неймана» и связаны с кодированием предварительно разработанного математического алгоритма решаемой задачи. При реализации программы на компьютере требуются программные средства для перевода ее в код конкретного компьютера – трансляторы. Все популярные языки программирования используют латинский алфавит, ряд специальных символов, которые имеются на клавиатуре, а также английские слова и выражения (real, integer, if, then, else, do и т.п.), представляющие собой ключевые, или зарезервированные слова. Ключевые слова (Keyword) используются в Фортране и имеют свое функциональное предназначение, находясь, как правило, в неисполняемой части программы (описательной). Зарезервированные слова (reserved word) могут использоваться только в контексте, предусмотренном правилами (семантикой) языка. Ряд языков (например, ADA) могут содержать так называемые предопределенные слова, значения которых могут переопределяться пользователями. Программы оперируют с объектами данных. Объект данных – комбинация данных, атрибутов, описывающих их свойства, и методов, раскрывающих их поведение. Объектам данных, а также программам или отдельным их частям и т.п. сопоставляются имена (или идентификаторы), правила образования которых несколько различны в разных языках. Все типы данных разделяются на две категории – на константы, не изменяемые в процессе работы программы, оформленные по определенным правилам, и переменные.

Все языки имеют три типа выражений:

Арифметические выражениязадают порядок действий над элементами данных и состоят из операндов (константы, переменные и т.п.), круглых скобок и знаков операций, традиционных (с очень небольшими отличиями) для всех языков +, -, *, /. Для Фортрана и Бейсика в стандарте предусмотрены знаки возведения в степень – **, ^. Арифметические операции могут быть унарными (unary), содержащими один операнд – U**2, бинарными (binary), содержащими два операнда – a + b, и тернарными (ternary, три операнда) в языках С, С++ и Java.

Логические выражения (булевские) состоят из операндов (констант, переменных, элементов массивов и т.п.), логических операций (not, and, or и т.п.) и операций отноше­ния. Операции отноше­ния выполняют сравнение двух операндов, а с помощью логических операций составляются более сложные логические выражения. Результатом выполнения логических выра­жений являются значения True или False.

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

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

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

Условные операторы и циклы: ( .eq.( =) ; .ne.(<>) ; .gt.(>) .lt.). В основе создаваемых языков, как правило, лежит некоторая основополагающая идея или, как говорят теоретики программирования, парадигма.

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

Операторы в алгоритмических языках могут быть:

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

б) ввода-вывода, в качестве которых наиболее часто используются термины read, write, print;

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

На рисунке представлены разновидности структурных операторов (на примере Паскаля).

  1. Основные принципы процедурно-ориентированного (модульного) программирования, разновидности модулей (на примере Фортрана)

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

Структура модуля и пример:

MODULE имя

[определения]

...

[CONTAINS

процедуры модуля]

END [MODULE [имя]]

MODULE global

REAL, DIMENSION(100) :: a, b, c

INTEGER :: list(100)

LOGICAL :: test

END MODULE global

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

Пример модуля cartesian с процедурой swap:

MODULE cartesian

TYPE point

REAL :: x, y

END TYPE point

CONTAINS

SUBROUTINE swap( p1, p2 )

TYPE(point), INTENT(INOUT):: p1, p2

TYPE(point) :: tmp

tmp = p1

p1 = p2

p2 = tmp

END SUBROUTINE swap

END MODULE cartesian

В этом модуле дается описание типа pointкак структуры, содержащей два поля x, yтипаREAL, а также процедура swap с двумя параметрами p1, p2, из которых каждый описан имеющим тип pointи атрибут INTENT(вид параметра) со значением INOUT(входной IN и выходной OUT одновременно, или изменяемый). Тип pointзадан и для локальной переменнойtmp. Символом :: отделяется перечисление свойств переменных от списка переменных.

Использование cartesian. Использование описаний и процедур модуля должно идти после объявления о намерении использовать модуль (оператор USE) виспользующей процедуре.

PROGRAM graph

USE cartesian

TYPE(point) :: first, last

...

CALL swap( first, last)

...

END PROGRAM graph

Две разновидности модулей: первый модуль – подпрограмма функции, которая определяется следующим образом: t FUNCTION f(a1,a2…an), где t – тип функции: Integer, Real, Double Precision, Complex, Logical; по умолчанию Real или Integer, определяется первой буквой имени функции; FUNCTION – ключевое слово; f – имя функции; a1,a2, …, an – формальные параметры. Структура:

FUNCTION Name(a1, a2, …, an)

исполнимая часть

Name=Result

Return

End

После выполнения основной (исполнимой) части имени функции присваивается значение полученного результата ее работы (Result). Оператор Return передает результат в вызывающую программу (End –завершение текста подпрограммы при трансляции).

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

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

Программа SUBROUTINE оформляется следующим образом:

SUBROUTINE S(a1,a2, …, an)

Тело подпрограммы

Исполнительная часть

RETURN

END

где SUBROUTINE – ключевое слово; S – имя подпрограммы (не имеет типа и никак не связано с входными и выходными параметрами); a1,a2, …, an – формальные параметры, используемые при работе подпрограммы, включая и выходные параметры (результаты вычислений). Формальные и фактические параметры должны быть согласованы между собой (так же, как и в подпрограмме функции) по типу, количеству и порядку следования. Естественно выходные (вычисляемые) параметры фигурируют в главной программе только в виде имен (не имеющих значений до начала работы модуля). RETURN и END – выполняют те же функции, что и в подпрограмме функции.

  1. Основные концепции структурного программирования, причины его появления, иерархия структурных фрагментов (на примере Паскаля)

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

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

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

3. Разработка программы ведётся пошагово, методом «сверху вниз».

Перечислим некоторые достоинства структурного программирования:

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

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

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

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

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

ООП — подход к программированию, в котором основными концепциями являются понятия объектов и классов

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

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

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

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

  1. Разновидности и краткие характеристики машинно-независимых языков программирования

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

Машинно-независимые языки можно разбить на:

1. Проблемно–ориентированные языки. С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно–ориентированные языки. Эти языки, ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме. Проблемных языков очень много, например:
1   2   3   4   5   6   7   8   9   10


написать администратору сайта