Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Alg1.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
101.84 Кб
Скачать

39. Бесконечные циклы и их организация

В программировании бесконечным циклом называется цикл, написанный таким образом, что условие выхода из него никогда не выполняется. О программе, вошедшей в бесконечный цикл, иногда говорят, что она зациклилась. Использование этого глагола вышло далеко за пределы программирования, и он зачастую применяется с совершенно другим смыслом. Бесконечный цикл с использование оператора цикла for:  for ( ; ; ) printf(" this loop will run forever. \n"); Хотя можно использовать части инициализации и увеличения, наиболее типично использование for( ; ; ) без выражений для создания бесконечного цикла. На самом деле конструкция for( ; ; ) не обязательно создает бесконечный цикл, поскольку в теле цикла может присутствовать оператор break, при достижении которого цикл оканчивает работу.  Оператор цикла while.  // вариант 1  while(true) {     /* что-нибудь делаем */.  }    // вариант 2  while(1) {     /* что-нибудь делаем */ } Оператор цикла do-while // вариант 1  do {    /* что-нибудь делаем */ } while(true)   // вариант 2 do {    /* что-нибудь делаем */ } while(1) 40.Недостатки линейного программирования. Структурный подход. Недостатки линейного программирования: 1)Использование данных и методов не по назначению. 2)Плохая наглядность исходного алгоритма в тексте программы. 3)Высокая сложность модификации имеющегося кода. Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом. Основное положение структурного программирования следующее: любой алгоритм может быть представлен комбинацией базовых алгоритмических структур трех видов : линейной структуры, разветвляющейся структуры, циклической структуры. Причем подобная структура должна иметь один вход и один выход. Это положение означает, что на каждом шаге нисходящего проектирования следует составлять алгоритм одного из трех видов 41. Сущность модульного (структурного) программирования. Суть модульного программирования состоит в разбиении сложной задачи на некоторое число более простых подзадач и составлении программ для их решения достаточно независимо друг от друга. Модульность является одним из основных принципов построения программных проектов. В общем случае модуль - отдельная функционально законченная программная единица, некоторым образом идентифицируемая и объединяемая с другими, средство определения логически связанной совокупности объектов, средство их выделения и изоляции. Модуль является средством декомпозиции не только структур управления, но и структур данных. Этому в значительной мере способствовало развитие понятия "тип данных". 42. Достоинства структурного программирования. 1) повышается надежность программ (благодаря хорошему структурированию при проектировании, программа легко поддается тестированию и не создает проблем при отладке); 2) повышается эффективность программ (структурирование программы позволяет легко находить и корректировать ошибки, а отдельные подпрограммы можно переделывать (модифицировать) независимо от других); 3) уменьшается время и стоимость программной разработки; 4) улучшается читабельность программ. 43. Планирование структурированной программы. Иерархическая структура программы. 44.Метод программирования «сверху вниз». Программирование "сверху вниз", или нисходящее программирование – это методика разработки программ, при которой разработка начинается с определения целей решения проблемы, после чего идет последовательная детализация, заканчивающаяся детальной программой. Является противоположной методике программирования «снизу вверх». При нисходящем проектировании задача анализируется с целью определения возможности разбиения ее на ряд подзадач. Затем каждая из полученных подзадач также анализируется для возможного разбиения на подзадачи. Процесс заканчивается, когда подзадачу невозможно или нецелесообразно далее разбивать на подзадачи. В данном случае программа конструируется иерархически - сверху вниз: от главной программы к подпрограммам самого нижнего уровня, причем на каждом уровне используются только простые последовательности инструкций, циклы и условные разветвления. 45.Понятие функции. Вызов функции. Функция представляет собой самостоятельный фрагмент текста программы, предназначенный для выполнения некоторой задачи. Функция имеет уникальное имя, которое используется для ее вызова. В языке C функция играет такую же роль, как и функции, подпрограммы и процедуры в других языках программирования – она позволяет один и тот же фрагмент программы использовать многократно. Использование функций придает программе модульную структуру, облегчает чтение кода и внесение в него исправлений. Для обращения к функции используется имя функции. Формат вызова: Имя_функции (список), где список представляет собой список фактических аргументов, передаваемых в функцию. Этот список может быть и пустым, но наличие круглых скобок обязательно. Фактический аргумент может быть величиной любого простого типа, структурой, объединением, перечислением или указателем на объект любого типа. Массив и функция не могут быть использованы в качестве фактических аргументов, но можно использовать указатели на эти объекты. 46. Прототип функции, его описание и назначение. Если нужно вызвать функцию до ее определения в этом файле или определение функции находится в другом исходном файле, то вызов функции следует предварить ее объявлением, т. е. задать прототип функции, который позволит компилятору выполнить проверку типов аргументов и возвращаемого значения. Формат прототипа: <класс памяти> <тип>имя (список формальных параметров); В отличие от определения функции, в прототипе за заголовком сразу же следует точка с запятой, а тело функции отсутствует. Правила использования остальных элементов формата такие же, как при определении функции. Имена формальных параметров при объявлении функции можно не указывать, а если они указаны, то их область действия распространяется только до конца объявления. Таким образом, прототип – это явное объявление функции, которое предшествует определению функции. Тип возвращаемого значения при объявлении функции должен соответствовать типу возвращаемого значения в определении функции. Хороший стиль программирования требует задания прототипа во всех случаях. 47. Описание функции. Заголовок и тело функции. Описания стандартных функций в программе не указываются. Описания пользовательских функций должны присутствовать в программе обязательно. Описания специальных функций, если они используются, также указываются в программе. Формат описания функции Описание функции состоит из двух основных частей - заголовка функции и тела функции. Заголовок функции содержит указание типа возвращаемого значения, название функции и список формальных параметров, обрамлённый круглыми скобками. Если функция не должна возвращать никакого значения, то её тип обозначают void. Тело функции может состоять из простых и/или составных операторов, обращений к другим функциям и заключается в фигурные скобки. Формат определения: <тип> имя (список формальных параметров) { тело функции } 48. Возвращение значения функцией. Функция может возвращать значение любого типа. Если тип не задан, то по умолчанию функция возвращает значение типа int. Функция не может возвращать массив, но может возвращать указатель на любой тип, в том числе и на массив.  Возвращаемое функцией значение - это значение параметра, указанного в скобках оператора return. Оператор return состоит из ключевого слова return, Выражения, обрамлённого круглыми скобками, и заканчивается знаком ; (точка с запятой). Полноформатный оператор return:    return (Выражение ); // Оператор return В качестве выражения в круглых скобках может быть указана константа, переменная или вызов функции. Тип значения, возвращаемого с помощью оператора return, должен совпадать с типом возвращаемого значения функции, указанным в заголовке. В случае если этого совпадения нет, значение выражения, указанного в операторе return, приводится к типу возвращаемого значения, указанному в заголовке описания функции. В случае если такое преобразование невозможно, на этапе компиляции программы редактор MetaEditor выдаст сообщение об ошибке. 49. Локальные и глобальные переменные. Существуют локальные и глобальные переменные. Так вот, переменные, объявленные внутри функции, называются локальными. Локальные переменные имеют свои области видимости, этими областями являются функции, в которых объявлены переменные. Таким образом, в разных функциях можно использовать переменные с одинаковыми именами, что в свою очередь очень удобно. Разделение переменных на глобальные и локальные соответствует одному из главных правил программирования, а именно – принципу наименьших привилегий. Глобальные переменные объявляются вне тела какой-либо функции, и поэтому область видимости таких переменных распространяется на всю программу. Обычно глобальные переменные объявляются перед главной функцией, но можно объявлять и после функции main(), но тогда данная переменная не будет доступна в функции main(). 50. Аргументы и параметры функции. Аргументы -это фактические значения передаваемые в функцию  Параметры функции являются формальными т.к. Существуют только при выполнении функции , после выхода из нее удаляются. Параметры принимают значения фактических аргументов. 51. Передача аргументов в функцию. Существует два метода, с помощью которых машинный язык может передавать аргумент подпрограмме (функции). Первый способ – передача параметра по значению. Этот метод копирует значение аргумента в формальный параметр функции. Поэтому любые изменения этого параметра внутри функции не имеют никакого влияния на соответствующий аргумент вызова. double FirstMethod(int i,int j) Второй способ – передача аргумента по ссылке. В этом случае ссылка на параметр (а не его значение) передается параметру функции. Внутри функции она используется для того, чтобы обратиться к фактическому параметру, указанному в вызове. Это означает, что изменения параметра будут влиять на аргумент, использованный для вызова функции. double SecondMethod(int &i,int &j) 52. Рекурсивно-определенные функции. Вычисление факториала числа. Функция, которая прямо или косвенно вызывает сама себя, называется рекурсивной. Например: unsigned long factorial( int val ) {    if ( val > 1 )      return val * factorial( val-1 );    return 1; } Функция вычисляет факториал числа. Такая функция обязательно должна определять условие окончания, в противном случае рекурсия будет продолжаться бесконечно. Подобную ошибку так иногда и называют – бесконечная рекурсия. Рекурсия обрывается по достижении val значения 1. 53. Процедурные и объектно-ориентированные языки программирования. Процедурное программирование подразумевает возможность создания в рамках программы локальных переменных, функций и процедур. Любая программа оперирует данными и содержит код для обработки этих данных. В языках , поддерживающих парадигму процедурного программирования, приоритет остается за кодом для обработки данных.  Основная идея, положенная в основу объектно-ориентированного программирования, проста и элегантна и состоит в том, чтобы подчинить код, используемый для обработки данных, этим самим данным.ООП - это парадигма программирования, согласно которой программа состоит из объектов, обменивающихся сообщениями. 54. Причины создания объектно-ориентированного программирования. Объектно-ориентированный подход помогает: • уменьшить сложность программного обеспечения; • повысить надежность программного обеспечения; • обеспечить возможность модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов; • обеспечить возможности повторного использования отдельных компонентов программного обеспечения. Причины популярности ООП:  1. ООП может повлечь рост производительности и улучшение надежности программ  2. Возможности создавать больш программные компоненты для повторного использования. 55.Принципы объектно-ориентированного программирования

Любой объектно-ориентированный язык программирования базируется на трех механизмах, которые называются инкапсуляцией, полиморфизмом и наследованием.  Под инкапсуляцией подразумевается объединение, связывание в одно целое данных и программного кода для обработки данных. Полиморфизм позволяет использовать единый унифицированный интерфейс для выполнения однотипных действий с различными данными. В С++ полиморфизм реализуется через перегрузку функций, методов и операторов.  Наконец, наследование позволяет одному объекту получать свойства другого объекта. Это исключительно полезный механизм, который позволяет существенно сокращать объем программного кода, обеспечивать преемственность различных версий программ и лежит в основе принципа классификации объектов. 56. Методы, свойства, события. Сущность и определения. 57. Объекты и классы, их определения. Класс – это просто новый тип данных (как char, int или long), с которым связаны некие данные и методы для их обработки. Объект – это экземпляр типа, или класса. Реализация (instantiation) означает факт создания экземпляра некоторого класса. Поле – переменная, описанная в классе. Метод – функция или процедура, описанная в классе. Члены класса – поля(статические — принадлежат самому классу) и методы. Типы отношений между классами • агрегация (aggregation); 1 ко многим • ассоциация (association); многое ко многим • наследование (inheritance); • метаклассы (metaclasses). Классы порождаются от метаклассов. Как правило, в системе только один. В java один метакласс - Class 58. Компонентная модель. Компоненты среды C++ Builder. Компонентная модель - это новый, особенный способ организации программирования, основной парадигмой которого является экстенсиональный подход. Суть компонентной модели в том, что составные части системы на ее основе, называемые компонентами, декларируют свою способность к взаимодействию друг с другом при помощи интерфейсов. В C++ builder Компоненты разделяются на видимые (визуальные) и невидимые (невизуальные). Визуальные компоненты появляются во время выполнения точно так же, как и во время проектирования. Примерами являются кнопки и редактируемые поля. Невизуальные компоненты появляются во время проектирования как пиктограммы на форме. Они никогда не видны во время выполнения, но обладают определенной функциональностью (например, обеспечивают доступ к данным, вызывают стандартные диалоги Windows 95 и др.)  Для добавления компонента в форму можно выбрать мышью нужный компонент в палитре и щелкнуть левой клавишей мыши в нужном месте проектируемой формы. Каждый компонент C++ Builder имеет три разновидности характеристик: свойства, события и методы. Свойства являются атрибутами компонента, определяющими его внешний вид и поведение. Страница событий (Events) инспектора объектов показывает список событий, распознаваемых компонентом.  Метод является функцией, которая связана с компонентом, и которая объявляется как часть объекта.

35

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]