По принципам программирования

Часть 1

1)  Язык программирования – это искуственный язык, созданный для взаимодействия с машиной, в частности, с компьютером. Языки программирования, если в качестве признака классификации взять синтаксис образования его конструкций, можно условно разделить на классы: · машинные языки - языки программирования, воспринимаемые аппаратной частью компьютера (машинные коды); · машинно-ориентированные языки - языки программирования, которые отражают структуру конкретного типа компьютера (ассемблеры);

2)  Императивная (или процедурная):

Императивная или процедурная парадигма основана на принципе выполнения инструкций шаг за шагом, как создание рецепта приготовления. Он основан на принципе машины фон Неймана.

Набор инструкций управления потоком выполнения управляет порядком, в котором выполняются инструкции, описывающие шаги. С , то Паскаль, то Fortran и COBOL, являются примерами языка программирования, который реализует императив парадигма .

Логика:

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

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

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

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

Объектно-ориентированный:

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

Он знакомит с понятиями объекта и наследования. Объект содержит переменные и функции, связанные с субъектом.

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

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

Различные языки программирования были расширены, чтобы сделать возможным объектно-ориентированное программирование; это случай C ++ (производный от языка C), Simula, Smalltalk , Swift и Java — языки программирования в объектно-ориентированной парадигме.

Функциональный:

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

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

Функциональная парадигма была представлена языками Lisp и ISWIM. А также в отношении рекурсивных функций в Algol 60 в 1960-х годах. Такие языки, как Ruby и Scala, поддерживают несколько парадигм, включая функциональную парадигму, в то время как Haskell поддерживает только функциональную парадигму, а OCaml отдает предпочтение функциональной парадигме. разделяет с объектной парадигмой и небольшую дозу императива.

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

4) По степени зависимости от аппаратных средств

 Языки низкого уровня

 Языки высокого уровня

 По принципам программирования

 Процедурные

 Непроцедурные

 Объектно-ориентированные

 По ориентации на класс задач

 Универсальные

 Специализированные

По степени зависимости от аппаратных средств Языки программирования низкого уровня (машинно-ориентированные) — языки, в которых команды и данные учитывают архитектуру компьютера. Такие языки ориентированы на конкретный тип компьютера и учитывают его аппаратные особенности. Практически каждый тип компьютера имел собственный язык программирования низкого уровня. Одна и та же программа не могла выполняться на компьютере другого типа, что существенно ограничивало возможность обмена программами. Программы для первых ЭВМ разрабатывали именно на «машинных» языках. Это был сложный процесс, поэтому вскоре появились языка символьного кодирования. Команды подавались уже не двоичным кодом, а символами. Преобразование символьного кода в машинные команды осуществляется автоматически. Обычно команды современных языков программирования записывают английскими буквами с использованием символов, содержащихся на клавиатуре. Но в компьютере хранятся и выполняются команды, которые представлены физическими сигналами (например, двумя уровнями окончательной магнитной индукции, двумя значениями электрического напряжения, наличием и отсутствием светового луча и т.д.). Значение физических сигналов отождествляются с математическими значениями 0 и 1, то есть двоичными символами. Программы, которые представлены совокупностью 0 и 1, называют машинными или машинным кодом. Он указывает, какую именно действие следует выполнить процессору. Используются различные структуры команд. Чаще всего команды состоят из операционной и адресной частей. В операционной части отмечается, действие (операцию) следует выполнить, а в адресной — выполнить над какими именно данными. Упрощенно команду двоичным или шестнадцатеричным кодом можно записать соответственно так: 10100011 10110111 11000101 АЗ В7 С5 В нашем случае код АЗ может быть операционной частью и означать, например, операцию Добавить, а В7 и С5 — адресной частью, которая определяет место хранения данных, над которыми следует выполнить операцию. Уже на первых этапах развития вычислительной техники началась разработка языков, доступных для широкого круга пользователей и не связанных с конкретным компьютером. Первым языком высокого уровня, получившим признание программистов, был Fortran. Процесс разработки программ несколько облегчился, когда к языкам символьного кодирования начали включать макрокоманды, реализуемые последовательностью из нескольких машинных команд. К разновидностям языков символьного кодирования принадлежат языки ассемблер и машинных кодов. Языки программирования высокого уровня (машинно-независимые) — языки, на которых программы могут использоваться на компьютерах различных типов и которые более доступны человеку, чем языки низкого уровня. Первым языком высокого уровня, который получил широкое признание среди программистов мира, был Fortran. Он был разработан корпорацией IBM (США) в 1954 году. Язык Фортран приближен к языку алгебры и ориентирован на решение вычислительных задач. В 1960 году группой ученых разных стран создан язык Algol-60, тоже ориентированный на решение вычислительных задач.

По принципам программирования

По принципам программирования различают процедурные, непроцедурные языки и языки объектно-ориентированного программирования. Процедурные языки основаны на описании последовательной смены состояния компьютера, то есть значения ячеек памяти, состояния процессора и других устройств. Они манипулируют данными в пошаговом режиме, используя пошаговые инструкции. В процедурных языках выдерживают четкую структуризацию программ, поэтому их еще называют языками структурного программирования. К таким языкам относятся Fortran, Algol, Pascal, BASIC и др. Процедурные языки полностью удовлетворяют потребности разработки небольших программ и программ средней сложности. Но в начале 80-х годов XX века объем и сложность программ достигли уровня, который требовал новых концептуальных подходов к программированию. Непроцедурные языка эффективны для программирования поиска данных в больших объемах, а также для программирования задач, процесс решения которых невозможно описать точно (перевод, распознавание образов). В этих языках сама процедура поиска решения встроена в интерпретатор языка. К таким языкам относятся языки функционального и логического программирования. В конце XX в. была презентована новая методика программирования, получила название объектно-ориентированного программирования (ООП). То есть начали развиваться языки, содержащие конструкции, позволяющие определять объекты, принадлежащие к классам и имеющие средства для работы с абстрактными типами данных. К таким языкам относятся C ++, Java, C #, Python и др. Сегодня языки ООП практически вытеснили с рынка профессионального программирования процедурные языки.

По ориентации на класс задач

Языки программирования делятся на универсальные и специализированные. Универсальные языки предназначены для решения широкого класса задач. К таким языкам относятся PL/1, Algol, Pascal, С и др. Особым классом универсальных языков является визуальные среды программирования: VisualBasic, Delphi и др. Специализированные языки учитывают специфику предметной области. В настоящее время существуют десятки специализированных языков программирования, например, языки веб-программирования, языки скриптов и др. Язык скриптов используется для создания небольших вспомогательных программ, например Javascript — для создания динамических объектов на веб-страницах. Языки разметки содержат шаблоны и средства описания содержания, структуры и формата электронных документов, например язык HTML обеспечивает разметку гипертекстового документа. Языка для работы с базами данных обеспечивают создание и сопровождение баз данных. Отметим, что не все из перечисленных языков в классическом понимании являются языками программирования. Так, язык HTML является языком разметки гипертекста, но его также часто называют языком программирования. День программиста отмечается в 256-й день года (в високосный год это 12 сентября, а в не-високосный — 13 сентября). Выбор объясняется тем, что это число символическое, оно тесно связано с компьютерами, но не ассоциируется с конкретными лицами или кодами специальностей. Число 256 соответствует количеству символов, которые можно представить с помощью одного байта. Начиная с 60-х годов XX века развитие языков программирования происходит как путем специализации, так и путем универсализации. Одним из первых специализированных языков был COBOL, разработанный в США в 1961 году и ориентированый на решение экономических задач. Впоследствии появились десятки различных специализированных языков, например, Simula — язык моделирования, LISP — язык для информационно-логических задач, RPG — речь для решения учебных задач и тому подобное. - Источник: Классификация языков программирования

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

К языкам высокого уровня относят Фортран , ПЛ/1 , Бейсик , Паскаль , Си , Ада и др. Язык низкого уровня , [low-level language ] - Язык программирования, предназначенный для определенного типа ЭВМ и отражающий его внутренний машинный код (см. ниже также “машинный язык “, “ машинно-ориентированный язык “ и “ язык ассемблера “).

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

 

Транслятор (англ. translator — переводчик) — это программа-переводчик. Она преобразует программу, написанную на одном из языков программирования, в бинарный файл программы, состоящей из машинных команд, либо непосредственно выполняет действия программы.Трансляторы реализуются в виде компиляторов, интерпретаторов, препроцессоров и эмуляторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.

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

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

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

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

7)   Трансляция, компиляция и интерпретация

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

8) С помощью свойства Name (Имя) можно задать или определить строковое выражение, обозначающее имя объекта. Для следующих объектов это свойство имеет значение String, предназначенное для чтения и записи: AdditionalData, BoundObjectFrame, CheckBox, ComboBox, CommandButton, CustomControl, Form, Image, Label, Line, ListBox, Module, ObjectFrame, OptionButton, OptionGroup, Page, PageBreak, Rectangle, Report, Section, SmartTagProperty, SubForm, TabControl, TextBox и ToggleButton.

Тип данных — категоризация абстрактного множества возможных значений, характеристик и набор операций для некоторого атрибута (IEEE Std 1320.2-1998). Тип данных — категоризация аргументов операций над значениями, как правило, охватывающая как поведение, так и представление (ISO/IEC 19500-2:2003).

Диапазон — это значения от и до, которые может хранить определенный тип данных. Диапазон целочисленной переменной определяется двумя факторами: её размером (измеряется в битах) и её знаком (который может быть signed или unsigned).

Функция выдает порядковый номер найденного значения в диапазоне, т.е. фактически номер строки, где найден требуемыый артикул. Функция ИНДЕКС выбирает из диапазона A1:G13 значение, находящееся на пересечении заданной строки (номер строки с артикулом выдает функция ПОИСКПОЗ) и столбца (нам нужен регион, т.е. второй столбец). Ссылки по теме. Использование функции ВПР (VLOOKUP) для поиска и подстановки значений.

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

9) В C++ определено семь основных типов данных: символьный, символьный двубайтовый, целочисленный, с плавающей точкой, с плавающей точкой двойной точности, логический (или булев) и «не имеющий значения». Для объявления переменных этих типов используются ключевые слова char, wchar_t, int, float, double, bool и void соответственно.

Примеры программ с использованием этих типов данных, их размер и диапазон допустимых значений. Для представления символов в C++ типу данных char отводится один байт, в одном байте — 8 бит, тогда возведем двойку в степень 8 и получим значение 256 — количество символов, которое можно закодировать. Таким образом, используя тип данных char можно отобразить любой из 256 символов. Все закодированные символы представлены в таблице ASCII .

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

11) Операции отношения используются при организации условий и ветвлений. Результатом этих операций является 1 бит, значение которого равно 1, если результат выполнения операции — истина, и равно 0, если результат выполнения операции — ложь. Логические операции и операции сравнения в языке Си оперируют понятиями "истина" и "ложь". Причем "истина" соответствует значению 1, а "ложь" - значению 0. Оба этих вида операций применяются к арифметическим операндам, то есть числам. Операции отношения. Операции отношения позволяют сравнить два значения и возвращают 1 (если выражение истинно) или 0 (если выражение ложно). В языке Си есть следующие операции сравнения

12) Арифметическое выражение – это запись математической формулы с использованием констант, переменных, функций, знаков арифметических операций и круглых скобок.

Стандартные математические функции ABS (X) – абсолютная величина X.ARCTAN (X) – вычисление угла в радианах, тангенс которого равен X.COS (X) – вычисление косинуса угла в радианах.EXP (X) – Вычисление ex.LN (X) – вычисление натурального логарифма от X.PI – вычисление числа Пи.RANDOM –.

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

14) Структура программы. Программа на языке С++ состоит из директив препроцессора, указаний компилятору, объявлений переменных и/или констант, объявлений и определений функций.

15) Препроцессор лучше всего рассматривать как отдельную программу, которая выполняется перед компиляцией. При запуске программы, препроцессор просматривает код сверху вниз, файл за файлом, в поиске директив. Директивы — это специальные команды, которые начинаются с символа # и НЕ заканчиваются точкой с запятой.

Директива #include

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

#include <filename>, которая сообщает препроцессору искать файл в системных путях (в местах хранения системных библиотек языка С++). Чаще всего вы будете использовать эту форму при подключении заголовочных файлов из Стандартной библиотеки C++

#include "filename", которая сообщает препроцессору искать файл в текущей директории проекта. Если его там не окажется, то препроцессор начнет проверять системные пути и любые другие, которые вы указали в настройках вашей IDE. Эта форма используется для подключения пользовательских заголовочных файлов

Директива #definе

Директиву #define можно использовать для создания макросов. Макрос — это правило, которое определяет конвертацию идентификатора в указанные данные.

Есть два основных типа макросов: макросы-функции и макросы-объекты.

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

Макросы-объекты можно определить одним из следующих двух способов:

#define идентификатор

Или:

#define идентификатор текст_замена

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

16) В С++ используется механизм потокового ввода/вывода. Поток - механизм преобразования значений различного типа в последовательность символов (вывод) и наоборот (ввод), в значение переменной. Вывод: Помещение (направление) данных в поток вывода осуществляется с помощью оператора << который также иногда называют экстрактор (extractor).

17) Операторы условного и безусловного перехода. Условный оператор (полная и сокращенная форма). Форма организации действий, при которой в зависимости от выполнения некоторого условия совершается одна или другая последовательность действий, называется ветвлением.

18) Составной оператор — это объединение нескольких произвольных команд в один оператор. Для записи составного оператора используют операторные скобки – это зарезервированные слова begin … end. Внутри команды (операторы) разделяются символом «точка с запятой» . Символом «;» перед заключительным end можно пренебречь.

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

19) Циклические конструкции применяют для повторения некоторого блока кода на основании условия цикла. В языке С используются циклические конструкции while , for и do - while .

20) Цикл с предусловием — цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно).

Цикл с постусловием отличается от цикла while тем, что условие в нём проверяется после выполнения цикла, то есть этот цикл будет повторён как минимум один раз (в отличие от цикла while, который может вообще не выполняться). Синтаксис цикла. do { тело цикла } while(условие); Предыдущий пример с использованием цикла do будет выглядеть как. int i = 0; do { printf("%d\n", i); i++; } while(i < 10); Давайте рассмотрим пример использования цикла с постусловием и предусловием. Пусть нам необходимо проинтегрировать функцию

21) Мо́дульное программи́рование — это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определённым правилам. Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Принцип модульного программирования заключается в том, что исходную задачу разбивают на более простые подзадачи. Это разбиение по возможности стараются выполнить так, чтобы в качестве отдельных подзадач фигурировали задачи, для решения которых уже имеются готовые ( разработанные ранее) программы

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

Заголовок модуля. В заголовке модуля определяется имя модуля. Имя модуля используется при ссылке на модуль в предложении использования. Это имя должно быть уникальным, так как два модуля с одним именем не могут одновременно использоваться

Раздел реализации модуля заключен между словами implementation и end. Но если присутствует слово begin перед end, и операторы между этими словами, то получившийся составной оператор, похожий на тело главной программы, становится разделом инициализации модуля. Данный модуль не содержит разделов реализации и инициализации. Процедуры и функции могут использоваться в модулях наравне с другими Pascal - объектами.

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

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

Различие

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

Заголовок функции содержит слово “function”, идентификатор (собственное имя функции), вариативно список параметров и обязательно — тип результата. В теле функции обязательно прописывается оператор, присваивающий значение имени функции, которое она вернет в качестве результата. Заголовок процедуры содержит слово “procedure”, идентификатор (имя процедуры) и вариативно список параметров. Вызов функции осуществляется в составе выражений там, где эти выражения применяются, вызов процедуры требует отдельного оператора. Вызов процедуры осуществляется только по имени, имя функции же связано с ее значением. На схемах алгоритмов вызов функции изображается в блоке вывода или в блоке процесса, вызов процедуры — в специальном блоке “предопределенный процесс”.

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

Сущность/назначение

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

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

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

24)

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

25) Выполнение рекурсивной функции происходит в два этапа: I этап: прямой (рассматривается тело функции), при этом весь маршрут последовательных рекурсивных вызовов компьютер запоминает в специальной области памяти, называемой стеком. II этап: обратный ход – восстанавливается цепочка вычислений, сохраненных в стеке, и выдается результат рекурсивных вызовов.

26)

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

 

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

Стек вызовов

Рекурсия без ветвления

Рекурсия с ветвлением

Косвенная рекурсия

Рекурсивный поиск в массивах

Сортировка слиянием

Стандартные средства Java для работы с массивами

27) Указатели — это с самого начала переменные, уже в которых хранится адрес других переменных. Чтобы пользоваться указателями, вам нужно использовать два оператора: * — показывает значение переменной по заданному адресу (показывает, кто живет в этом номере). Если вы используете оператор *, то вы занимаетесь операцией разыменование указателя.

28) Соответственно, основная операция для указателя - это косвенное обращение по нему к той переменной, адрес которой он содержит. В Си имеется специальная операция * - звездочка, которую называют косвенным обращением по указателю.

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

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

Объединения

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

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

◘ для инициализации объекта, если в каждый момент времени только один из многих объектов является активным;

◘ для интерпретации представления одного типа данных в виде другого типа.

Массивы структур

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

Перечисление

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

30)

31)

 

32)Сортировка методом простого выбора – это алгоритм последовательного обмена минимального и первого элементов неотсортированной части массива.

33) Понятие динамических структур данных. Динамические структуры данных – это структуры данных, память под которые выделяется и освобождается по мере необходимости.

34) Линейные связные списки являются простейшими динамическими структурами данных. Из всего многообразия связанных списков можно выделить следующие основные: однонаправленные (односвязные) списки; двунаправленные (двусвязные) списки; циклические (кольцевые) списки. В основном они отличаются видом взаимосвязи элементов и/или допустимыми операциями.

35) https://tproger.ru/translations/stacks-and-queues-for-beginners/

36)

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

38)

39) Обход графа — это поэтапное исследование всех вершин графа. Для решения таких задач используются два основных алгоритма: поиск в глубину (depth-first search или DFS) и поиск в ширину (breadth-first search или BFS).

40) Алгоритм Флойда – Уоршелла – динамический алгоритм вычисления значений кратчайших путей для каждой из вершин графа. Метод работает на взвешенных графах, с положительными и отрицательными весами ребер, но без отрицательных циклов, являясь, таким образом, более общим в сравнении с алгоритмом Дейкстры, т. к. последний не работает с отрицательными весами ребер, и к тому же классическая его реализация подразумевает определение оптимальных расстояний от одной вершины до всех остальных.

41) Алгоритм Дейкстры позволяет найти кратчайший путь между двумя любыми вершинами графа (или кратчайший путь сети между заданным исходным и любым другим узлом). Граф — это совокупность двух множеств: точек (называются вершинами) и путей между ними (изображаются линиями и называются рёбрами).

42) Основные операции в двоичном дереве поиска[править | править код]. Базовый интерфейс двоичного дерева поиска состоит из трёх операций: FIND(K) — поиск узла, в котором хранится пара (key, value) с key = K. INSERT(K, V) — добавление в дерево пары (key, value) = (K, V).

43)

 


Дата добавления: 2021-07-19; просмотров: 121; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!