Вопросы к япу:
1 билет
Понятие информации - это сведения об объектах и явлениях окружающей среды, их параметрах, свойствах и состояниях, которые уменьшают имеющуюся о них степень неопределенности, неполноты знаний. Связанные между собой сведения, изменяющие наши представления о явлении или объекте окружающего мира.
Информация и данные. Данные могут рассматриваться как признаки или записанные наблюдения, которые по каким-то причинам не используются, а только хранятся. В том случае, если их используют для уменьшения неопределенности (получения сведений) о каком-либо объекте, данные превращаются в информацию. Данные существуют объективно и не зависят от человека и объема его знаний. Одни и те же данные для одного человека могут превратиться в информацию, т.к. они способствовали уменьшению неопределенности знаний человека, а для другого человека так и останутся данными.
Носитель данных - материальный объект, используемый для записи и хранения информации. К н. д. относятся: перфокарты и перфоленты, магнитные ленты и диски, оптич. диски, флэш-память, фотографич. материалы (фотобумага, фотоплёнка) и др., на которые информация записывается посредством изменения их механич., магнитных, оптич. и иных свойств или формы.
Двоичное кодирование информации применяется для различных данных двоичное кодирование текстовой информации заключается в присвоении буквенным, цифровым и другим обозначениям определенного кода. Он записывается в компьютерной памяти цепочкой из нулей и единиц. Порядок кодирования алфавита в двоичный код с помощью стандарта ASCII является наглядным примером.
Представления числовой информации. Числа записываются с использованием особых знаковых систем, которые называют системами счисления.
Понятие системы счисления как способа представления чисел. Система счисления – это способ представления числа символамиспециального алфавита. Символы специального алфавита называют цифрами. Системы счисления бывают: непозиционные, позиционные. В непозиционных системах счисления значение числа определяется как сумма или разность цифр в числе, т.е. позиция цифры не влияет на величину числа. В позиционных системах счисления величина, которая обозначается цифрой, зависит от места, т.е. позиции цифры в числе.
10-ая, 2-ая, 8-ая, 16-ая системы счисления как примеры позиционных систем
Десятичная система счисления Это одна из самых распространенных систем счисления. Именно её мы используем, когда называем цену товара и произносим номер автобуса. В каждом разряде (позиции) может использоваться только одна цифра из диапазона от 0 до 9. Основанием системы является число 10. Для примера возьмем число 503. Если бы это число было записано в непозиционной системе, то его значение равнялось 5+0+3 = 8. Но у нас — позиционная система и значит каждую цифру числа необходимо умножить на основание системы, в данном случае число “10”, возведенное в степень, равную номеру разряда.
Двоичная система счисления Двоичная позиционная система счисления имеет основание 2 и использует для записи числа 2 символа (цифры): 0 и 1. В каждом разряде допустима только одна цифра — либо 0, либо 1. Восьмеричная система счисления 8-я система счисления, как и двоичная, часто применяется в цифровой технике. Имеет основание 8 и использует для записи числа цифры от 0 до 7.
Шестнадцатеричная система счисления Рассматриваемая система имеет основание 16 и использует для записи числа: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B. C, D, E, F, где буквы равны 10, 11, 12, 13, 14, 15 соответственно.
2 билет
Общие понятия алгоритмизации
Разработка алгоритма решения задачи (алгоритмизация) - один из самых сложных и ответственных этапов. Он включает формализацию процесса обработки данных и представление его в форме, позволяющей упростить дальнейшее кодирование алгоритма, т.е. его запись на одном из алгоритмических языков. Алгоритмизация включает выделение предполагаемых этапов процесса обработки данных и запись их в определенной форме и последовательности, например, в виде схем алгоритмов. При разработке алгоритма возможен выбор существующего алгоритма или программы для решения всей задачи или ее части. В составе современных систем программирования имеются библиотеки подпрограмм, например, для решения систем алгебраических или дифференциальных уравнений, разработки интерфейса пользователя.
Понятие алгоритма
Алгоритм – это последовательность команд, выполнение которых приводит к решению поставленной задачи. Простым языком: это определенные действия, с указанной последовательностью, которые приводят нас к результату.
3 билет
Способы задания алгоритмов
Существуют три способа задания алгоритмов: описательный (словесный), графический (блок-схемный) и операторный (программный). При словесном способе алгоритм задается в произвольном изложении на естественном языке. Каждому типу действий в блок-схеме соответствует определённый символ – блок. При использовании программного способа описания — алгоритм записывается на одном из языков программирования. Алгоритм, записанный на языке программирования, называется программой. В этом случае алгоритм представляется в виде последовательности операторов языка.
Блок-схемы - распространённый тип схем (графических моделей), описывающих алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединённых между собой линиями, указывающими направление последовательности.
Обозначение элементов блок-схемы
4 билет
Краткая история и классификация языков программирования
Первые языки программирования были очень примитивными и мало чем отличались от формализованных упорядоченных последовательностей единиц и нулей, понятных компьютеру.
Для того, чтобы облегчить общение человека с ЭВМ были созданы языки программирования типа Ассемблер. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические обозначения, которые легче запомнить. Язык программирования приблизился к человеческому языку, и отдалился от языка машинных команд. Один из первых языков программирования – Фортран (Formula Translation) был создан в середине 50-х годов. Благодаря своей простоте и тому, что на этом языке накоплены большие библиотеки программ Фортран и в наши дни остается одним из самых распространенных. Он используется для инженерных и научных расчетов, для решения задач физики и других наук с развитым математическим аппаратом. Для решения экономических задач был создан язык программирования - Кобол.
Снобол – алгоритмический язык для обработки текстовой информации, Лисп - алгоритмический язык для обработки символов. Лисп находит широкое применение в исследованиях по созданию искусственного интеллекта.
В 1968 г. был объявлен конкурс на лучший язык программирования для обучения студентов.
Для этого конкурса Никлаус Вирт создал язык Паскаль, достаточно простой, удобный, с наличием мощных средств структурирования данных. Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков.
Для обучения младших школьников Самуэлем Пайпертом был разработан язык Лого. Он отличается простотой и богатыми возможностями.
Широкое распространение в школах в качестве обучающего языка получил язык Бейсик, позволяющий взаимодействовать с ЭВМ в режиме непосредственного диалога. Спустя много лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования.
СИ является одним из универсальных языков программирования.
В 80-х г. 20 века был создан язык Ада. Этот язык в дополнение к классическим свойствам, обеспечивает программирование задач реального времени и моделирования параллельного решения задач.
По наиболее распространенной классификации все языки программирования делят на языки низкого, высокого и сверхвысокого уровня.
В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ.
Следующую, существенно более многочисленную группу составляют языки программирования высокого уровня. Это Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.
К языкам сверхвысокого уровня можно отнести лишь Алгол-68 и APL. Повышение уровня этих языков произошло за счет введения сверхмощных операций и операторов.
Другая классификация делит языки на вычислительные и языки символьной обработки. К первому типу относят Фортран, Паскаль, Алгол, Бейсик, Си, ко второму типу - Лисп, Пролог, Снобол и др.
В современной информатике можно выделить два основных направления развития языков программирования: процедурное и непроцедурное.
Процедурное программирование возникло на заре вычислительной техники и получило широкое распространение. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий. Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.
Непроцедрное (декларативное) программирование появилось в начале 70-х годов 20 века, но стремительное его развитие началось в 80-е годы, когда был разработан японский проект создания ЭВМ пятого поколения, целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки. В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь разлагаются на еще более простые и т.д. Один из основных элементов в функциональных языках - рекурсия, то есть вычисление значения функции через значение этой же функции от других элементов. Присваивания и циклов в классических функциональных языках нет.
В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Построение логической программы вообще не требует алгоритмического мышления, программа описывает статические отношения объектов, а динамика находится в механизме перебора и скрыта от программиста.
Можно выделить еще один класс языков программирования - объектно-ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Объектно-ориентированные языки, благодаря богатому пользовательскому интерфейсу, предлагают человеку решить задачу в удобной для него форме. Примером такого языка может служить язык программирования визуального общения Object Pascal.
Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript.
5 билет
Понятие программирования компиляция и интерпретация
Термин программирование означает процесс и искусство создания компьютерных программ с помощью специальных языков программирования.
В широком смысле слова, программирование есть формализация предопределенного состояния, по реакции на событие, реализуемого средствами математики или естественных наук.
В узком смысле слова, программирование рассматривается как кодирование алгоритмов на заданном языке программирования. В более широком смысле программирование - процесс создания программ, то есть разработка программного обеспечения. 6 билет
Инструментальная система технологии программирования - это интегрированная совокупность программных и аппаратных инструментов, поддерживающая все процессы разработки и сопровождения больших ПС в течение всего его жизненного цикла в рамках определенной технологии.
Современные системы программирования обычно предоставляют пользователям мощные и удобные средства разработки программ. В них входят:
· компилятор и/или интерпретатор;
· интегрированная среда разработки;
· средства создания и редактирования текстов программ;
· обширные библиотеки стандартных программ и функций;
· отладочные программы, т.е. программы, помогающие находить и устранять ошибки в программе;
· диалоговая среда для пользователя;
· многооконный режим работы;
· мощные графические библиотеки; утилиты для работы с библиотеками
· встроенный ассемблер;
· встроенная справочная служба.
Популярные инструментальные системы программирования – Turbo Basic, Quick Basic, Turbo Pascal, Turbo C, Delphy, Builder.
Язык Бейсик был создан в 1965 г. Дж. Кемени и Т.Курцем как язык для начинающих, облегчающий написание простых программ. Существуют много разных версий Бейсика – от очень простых до усовершенствованных, с дополнительными языковыми конструкциями.
Язык Паскаль был разработан в 1970г. Никласом Виртом как язык обучения студентов программированию. Паскаль вырабатывает навыки строгого стиля программирования (называемого структурным программированием), упрощающего разработку сложных программ. Мощным языком программирования является расширенный вариант этого языка – Turbo Pascal.
Язык Си (разработан Деннисом Ритчи в 1972 г.) соединяет свойства языка высокого уровня с возможностями эффективного использования ресурсов компьютера, которые обычно достигаются только при программировании на языке Ассемблера. Язык Сипозволяет создавать сложные и весьма эффективные программы.
В последнее время получили распространение системы программирования, ориентированные на создание Windows-приложений, например, Borland Delphi.
· пакет Borland Delphi (Дельфи) —наследник семейства компиляторов Borland Pascal, предоставляющий удобные средства визуальной разработки. Его быстрый компилятор позволяет эффективно и быстро решать практически любые задачи прикладного программирования.
· пакет Microsoft Visual Basic — удобный и популярный инструмент для создания Windows-программ с использованием визуальных средств. Содержит инструментарий для создания диаграмм и презентаций.
· пакет Borland C++ — одно из самых распространённых средств для разработки DOS и Windows приложений.
7 билет
Программное обеспечение
Программное обеспечение (англ. software) – это совокупность программ, обеспечивающих функционирование компьютеров и решение с их помощью задач предметных областей. Программное обеспечение (ПО) представляет собой неотъемлемую часть компьютерной системы, является логическим продолжением технических средств и определяет сферу применения компьютера.
Классификация
ПО современных компьютеров включает множество разнообразных программ, которое можно условно разделить на три группы (рис. 3.1):
1. Системное программное обеспечение (системные программы);
2. Прикладное программное обеспечение (прикладные программы);
3. Инструментальное обеспечение (инструментальные системы).
Системное программное обеспечение (СПО) – это программы, управляющие работой компьютера и выполняющие различные вспомогательные функции, например, управление ресурсами компьютера, создание копий информации, проверка работоспособности устройств компьютера, выдача справочной информации о компьютере и др. Они предназначены для всех категорий пользователей, используются для эффективной работы компьютера и пользователя, а также эффективного выполнения прикладных программ.
Прикладное программное обеспечение (ППО) предназначено для решения задач пользователя. В его состав входят прикладные программы пользователей и пакеты прикладных программ (ППП) различного назначения.
К инструментальному программному обеспечению относят: системы программирования – для разработки новых программ, например, Паскаль, Бейсик. Обычно они включают: редактор текстов, обеспечивающий создание и редактирование программ на исходном языке программирования (исходных программ), транслятор, а также библиотеки подпрограмм; инструментальные среды для разработки приложений, например, C++, Delphi, Visual Basic, Java, которые включают средства визуального программирования; системы моделирования, например, система имитационного моделирования MatLab, системы моделирования бизнес-процессов BpWin и баз данных ErWin и другие.
8 билет
Основные элементы языков с++ и питон (структура языка, алфавит, лексемы, управляющие и разделительные символы, идентификаторы, зарезервированные и ключевые слова, константы, символьные константы, управляющие последовательности, комментарии)
С++
Программа на языке С/С++ состоит из:
Директив процессора Описаний Функций
Главная функция носит имя main и должна быть обязательно.
Директивы препроцессора – определяют действия по преобразованию программы перед компиляцией, а также включают инструкции, которым компилятор следует во время компиляции; Объявления – описания переменных, функций, структур, классов и типов данных; Описание функций, выполняемых в проекте. В языке С++ существует только один вид подпрограмм – подпрограмма-функция. Функция состоит из заголовка и тела функции. Заголовок состоит из:
Типа результата, возвращаемого функцией; Имени функции; Списка параметров, необходимых для выполнения функции.
Тело функции заключается в операторные скобки {}, и содержит описание локальных данных и операторы функции. Алфавит языка C++ включает:
большие латинские буквы от A до Z малые латинские буквы от a до z цифры от 0 до 9
знаки препинания: , . ; : ! ?
скобки: ( ) [ ] { }
знаки математических операций: + - * / < > =
специальные символы:
\ (обратная наклонная черта)
(волна или тильда)
& (амперсант)
# (решетка или диез)
’ (апостроф или одиночная кавычка)
” (двойная кавычка)
^ (стрелка)
% (процент)
_ (знак подчеркивания)
Большие и малые буквы считаются различными. Знак подчеркивания считается буквой. Русские буквы нельзя использовать в предложениях языка C++, их можно применять в комментариях и в Элементы языка программирования 3 строках символов, заключенных в двойные кавычки, а также как одиночные символы, заключенные в апострофы.
Управляющие символы — символы которые выталкиваются в поток вывода, с целью форматирования вывода или печати некоторых управляющих знаков С++.
Ключевые слова - это зарезервированные слова, которые имеют специальное значение для компилятора и используются только в том смысле, в котором они определены (операторы языка, типы данных и т.п.).
Идентификатор - это имя программного объекта, представляющее собой совокупность букв, цифр и символа подчеркивания.
Константы относятся к фиксированным значениям, которые программа может не изменять, и они называются литералами. Они могут быть любого из основных типов данных и могут быть разделены на целые числа, числа с плавающей запятой, символы, строки и логические значения.
Символьная константа — это один символ, например: ‘z’. В качестве символьных констант также могут использоваться управляющие коды, не имеющие графического представления. При этом код управляющего символа начинается с символа ‘\’ (обратный слеш).
В С++ есть два типа комментариев. Один – такой же, как и в С, использующий символы /* для обозначения начала и */ для обозначения конца комментария. Между этими парами символов может находиться любой текст, занимающий одну или несколько строк: вся последовательность между /* и */ считается комментарием.
Питон
Любая Python-программа состоит из последовательности лексем (допустимых символов), записанных в определенном порядке и по определенным правилам.
Лексемы включают в себя:
комментарии; литералы; знаки пунктуации; идентификаторы; ключевые слова.
Для составления программы необходимо объединить лексемы в синтаксические конструкции.
Алфавит языка Python:
Латинские прописные буквы A, B, C, …, X Y, Z
Латинские строчные буквы a, b, c, …, x, y, z
Арабские цифры 0, 1, 2, …, 7, 8, 9 Знаки арифметические, препинания, скобки и другие. Лексема (token) – это минимальная единица языка, имеющая самостоятельный смысл. Они формируют базовый словарь языка, понятный компилятору.
Всего существует пять видов лексем:
Ключевые слова (keywords) Идентификаторы (identifiers) Литералы (literals) Операции (operators) Знаки пунктуации (разделители, punctuators)
Управляющие символы
\n
| (newline) перевод каретки на следующую строку
| \r
| (return) перевод каретки на в начало текущей строки
| \t
| (tab) табуляция (отступ, красная строка)
| \b
| (backspace) перевод каретки на один символ назад
| Идентификатор - обычное имя, которое дается ссылке на какой-либо объект. Любой идентификатор имеет некоторые правила и соглашения наименования:
Правила:
может состоять из букв (ASCII или Unicode), знаков подчеркивания _ или цифр 0-9; цифра не может быть на первом месте; чувствителен к регистру: UserName, username и USERNAME - разные идентификаторы; не должен совпадать с каким-либо из ключевых слов языка Python
Некоторые слова имеют в Python специальное назначение и представляют собой управляющие конструкции языка. Список ключевых слов:
'False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass',
'raise', 'return', 'try', 'while', 'with', 'yield'.
Константы - это фиксированные значения, которые нельзя изменить после инициализации. В Python нет специального способа определения констант, и он обычно выражается в именах переменных в верхнем регистре.
Комментарии предназначены для пояснения кода для разработчика (Python их пропускает) и начинаются с символа #, действуя до конца строки.
9 билет
Структура программы на языках с++ и питон
С++
Программа на языке С/С++ состоит из:
Директив процессора Описаний Функций
Главная функция носит имя main и должна быть обязательно.
Директивы препроцессора – определяют действия по преобразованию программы перед компиляцией, а также включают инструкции, которым компилятор следует во время компиляции; Объявления – описания переменных, функций, структур, классов и типов данных; Описание функций, выполняемых в проекте. В языке С++ существует только один вид подпрограмм – подпрограмма-функция. Функция состоит из заголовка и тела функции. Заголовок состоит из:
Типа результата, возвращаемого функцией; Имени функции; Списка параметров, необходимых для выполнения функции.
Тело функции заключается в операторные скобки {}, и содержит описание локальных данных и операторы функции. Питон
Любая Python-программа состоит из последовательности лексем (допустимых символов), записанных в определенном порядке и по определенным правилам.
Лексемы включают в себя:
комментарии; литералы; знаки пунктуации; идентификаторы; ключевые слова.
Для составления программы необходимо объединить лексемы в синтаксические конструкции.
Типы данных - множество значений и операций над этими значениями.
Простые типы Числовые типы.Значениями переменных таких типов являются числа. К ним могут применяться обычные арифметические операции, операции сравнения (в результате получается логическое значение). Принципиально различны в компьютерном представлении целые и вещественные типы.
Целочисленные типы (int).
Вещественные типы (float) с плавающей точкой.
Символьный тип (char) Элемент этого типа хранит один символ.
Логический тип (bool) Данные этого типа имеют два значения: истина (true) и ложь (false).
Перечислимый тип. Отражает самый прямолинейный способ описания простого типа — перечисление всех значений, относящихся к этому типу.
Множество как тип данных в основном совпадает с обычным математическим понятием множества.
Указатель (тип данных). Если описанные выше типы данных представляли какие-либо объекты реального мира, то указатели представляют объекты компьютерного мира, то есть являются исключительно компьютерными терминами.
Составные типы Составные типы формируются на основе комбинаций простых типов.
Массив является индексированным набором элементов одного типа, простого или составного. Одномерный массив предназначен для компьютерной реализации такой структуры, как вектор, двухмерный массив — таблицы.
Строковый тип. Хранит строку символов.
Запись. Наиболее общий метод получения составных типов из простых заключается в объединении элементов произвольных типов.
Последовательность. Данный тип можно рассматривать как массив бесконечного размера.
Классы памяти
Все переменные в программе характеризуются не только типом, но и классом памяти. В языке Си существует четыре класса памяти:
Автоматический (automatic); Регистровый (register); Статический (static); Внешний (external).
Преобразование типов - это процесс конвертации значения из одного типа в другой (как например, строки в число, объекта к булевому значению и т. д.). Любой тип, будь то примитив или объект, может быть преобразован в другой тип.
10 билет
Операции и выражения (понятие выражения, операции, операнда, унарные, бинарные и тернарная операции, описание операций, арифметические операции, операции отношения, логические операции, поразрядные (битовые) операции (операции сдвига), условная операция)
Опера́ция — конструкция в языках программирования, аналогичная по записи математическим операциям, то есть специальный способ записи некоторых действий. Наиболее часто применяются арифметические, логические и строковые операции.
Выражение — комбинация значений, констант, переменных, операций и функций, которая может быть интерпретирована в соответствии с правилами конкретного языка.
Операнды — это объекты, над которыми или при помощи которых выполняются действия, задаваемые инструкциями или директивами.
Выражения со знаками операций могут быть унарными (с одним операндом), бинарными (с двумя операндами) и тернарными (с тремя операндами).
Унарное выражение состоит из операнда и предшествующего ему знаку унарной операции. Унарные операции выполняются справа налево.
Бинарные операции выполняются слева направо.
Тернарная операция или трёхместная операция (от лат. ternus — трёхкратный) — операция, имеющая 3 операнда:
Тернарная условная операция — операция в информатике, возвращающая свой второй или третий операнд в зависимости от логического значения первого операнда
Смешанное векторное произведение
Тернарное сложение по модулю 2 в полных сумматорах (с учётом разряда переноса).
Арифметические операции. К арифметическим относятся бинарные операции + - * / для вещественных и целых чисел, бинарные операции div и mod для целых чисел и унарные операции + и — для вещественных и целых чисел.
Операции отношения: осуществляют сравнение двух операндов и определяют, истинно или ложно соответствующее отношение между ними. Знаки операций отношения: = (равно), <> (не равно), > (больше), < (меньше), >= (больше или равно), <= (меньше или равно).
Логические операции: not — отрицание, and — логическое умножение (конъюнкция), or — логическое сложение (дизъюнкция), хог — исключающее или.
Поразрядными операциями называются операции, предполагающие применение булевских операций к каждой паре двоичных разрядов, стоящих в одной позиции, независимо от других разрядов. Например, поразрядное и, обозначаемое в C++ через &, вычисляет булевское и бит, стоящих в числах слева и справа на одной позиции.
Условный оператор предназначен для выбора к исполнению одного из возможных действий в зависимости от некоторого условия.
11 билет
Операторы (оператор присваивания, оператор «выражение», оператор перехода, оператор return, оператор break, оператор continue, условный оператор, оператор выбора, операторы цикла, цикл с параметром, цикл с предусловием, цикл с постусловием)
Оператор присваивания - основной оператор любого языка программирования. При помощи оператора присваивания переменной могут присваиваться константы и выражения, значения переменных любого типа.
Операторы перехода позволяют изменять ход работы программы. Оператор return
Команда return позволяет вернуть результат вычислений из функции в блок кода который вызвал функцию. Оператор break
Оператор breakзаканчивает выполнение цикла или условного оператора, в котором он вызывается. Оператор continue
Оператор позволяет пропустить блок кода и перейти к следующей итерации цикла минуя все команды написанные ниже слова continue. Условный оператор предназначен для выбора к исполнению одного из возможных действий в зависимости от некоторого условия. Оператор выбора работает следующим образом. Вначале вычисляется значение выражения <ключ_выбора>, а затем в последовательности <констант_выбора> отыскивается такая, которая соответствует <ключу_выбора>, и выполняется <оператор>, который находится за соответствующей <константой_выбора>. Операторы цикла используются для организации многократно повторяющихся вычислений.
Циклспараметром используется, когда заранее известно сколько раз должен выполниться цикл.
Цикл с предусловием — цикл, который выполняется, пока истинно некоторое условие, указанное перед его началом.
Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла.
12 билет
Массивы (одномерные массивы, алгоритмы сортировки одномерных массивов, многомерные массивы)
Одномерный массив представляет собой пронумерованную последовательность элементов одного и того же типа, имеющих общее имя.
Сортировка пузырьком / Bubble sort
Будем идти по массиву слева направо. Если текущий элемент больше следующего, меняем их местами. Делаем так, пока массив не будет отсортирован. Заметим, что после первой итерации самый большой элемент будет находиться в конце массива, на правильном месте. После двух итераций на правильном месте будут стоять два наибольших элемента, и так далее. Очевидно, не более чем после n итераций массив будет отсортирован.
Шейкерная сортировка / Shaker sort
(также известна как сортировка перемешиванием и коктейльная сортировка). Заметим, что сортировка пузырьком работает медленно на тестах, в которых маленькие элементы стоят в конце (их еще называют «черепахами»). Такой элемент на каждом шаге алгоритма будет сдвигаться всего на одну позицию влево. Поэтому будем идти не только слева направо, но и справа налево. Будем поддерживать два указателя begin и end, обозначающих, какой отрезок массива еще не отсортирован. На очередной итерации при достижении end вычитаем из него единицу и движемся справа налево, аналогично, при достижении begin прибавляем единицу и двигаемся слева направо. Асимптотика у алгоритма такая же, как и у сортировки пузырьком, однако реальное время работы лучше.
Сортировка расческой / Comb sort
Еще одна модификация сортировки пузырьком. Для того, чтобы избавиться от «черепах», будем переставлять элементы, стоящие на расстоянии. Зафиксируем его и будем идти слева направо, сравнивая элементы, стоящие на этом расстоянии, переставляя их, если необходимо. Очевидно, это позволит «черепахам» быстро добраться в начало массива. Оптимально изначально взять расстояние равным длине массива, а далее делить его на некоторый коэффициент, равный примерно 1.247. Когда расстояние станет равно единице, выполняется сортировка пузырьком.
Сортировка вставками / Insertion sort
Создадим массив, в котором после завершения алгоритма будет лежать ответ. Будем поочередно вставлять элементы из исходного массива так, чтобы элементы в массиве-ответе всегда были отсортированы.
Многомерные массивы — это такие массивы, которые хранят другие массивы по каждому индексу в качестве элемента.
13 билет
Функции (объявление и определение функции, прототип функции, вызов функции, область видимости, локальные переменные и их объявление, статические переменные, глобальные переменные, возврат управления из функции, возвращаемые значения, передача параметров в функцию, параметры со значениями по умолчанию, функции с переменным числом параметров, передача массивов в качестве параметров, рекурсия, встраиваемые inline функции, возврат указателей)
14 билет
Адреса и указатели
Указатель - это переменная, значением которой является адрес (ячейка) памяти. Указатели объявляются точно так же, как и обычные переменные, только со звёздочкой между типом данных и идентификатором.
Ссылочные типы данных
К ссылочным типам данных относятся все типы данных, которые создаются с помощью конструкторов. К ним также относятся все классы, создаваемые разработчиками, например, Developer, Car, Person и т.д. Массивы являются ссылочными типами данных. Все ссылочные типы имеют значение по умолчанию: null.
Использование указателей и ссылок
Использование ссылок и указателей оправдано в случае передачи данных в функции или же в объекты. Также данные технологии отлично подойдут для передачи большого объема данных в ходе программы.
Управление памятью - это процесс управления и координации памяти компьютера, назначение частей, известных как блоки, различным запущенным программам для оптимизации общей производительности системы.
15 билет
Строки
Для хранения строк в C++ применяется тип string. Для использования этого типа его необходимо подключить в код с помощью директивы include
Тип string определен в стандартной библиотеке и при его использовании надо указывать пространство имен std.
Либо можно использовать выражение using, чтобы не указывать префикс std
Строка представляет последовательность символов в кодировке Unicode, заключенных в кавычки. Причем в Python мы можем использовать как одинарные, так и двойные кавычки
Организация работы со строками
Если при определении переменной типа string мы не присваиваем ей никакого значения, то по умолчанию данная переменная содержит пустую строку.
Также можно инициализировать переменную строчным литералом, который заключается в двойные кавычки.
В качестве альтернативы можно передавать строку в скобках после определения переменной.
Если необходимо, чтобы строка содержала определенное количесто определеных символов, то можно указать в скобках количество символов и сам символ.
И также можно передать переменной копию другой строки.
Функции для работы со строками
Библиотека С++ содержит функции: • копирования строк (strcpy, strncpy); • сравнения (strcmp, strncmp); • объединения строк (strcat, strncat); • поиска подстроки (strstr); • поиска вхождения символа (strchr, strrchr, strpbrk); • определения длины строки (strlen)
Одной из самых распространенных операций со строками является их объединение или конкатенация. Для объединения строк применяется знак плюса
С объединением двух строк все просто, но что, если нам надо сложить строку и число? В этом случае необходимо привести число к строке с помощью функции str()
Кроме стандартных символов строки могут включать управляющие эскейп-последовательности, которые интерпретируются особым образом. Например, последовательность \n представляет перевод строки.
Кроме того, существуют символы, которые вроде бы сложно использовать в строке. Например, кавычки. И чтобы отобразить кавычки (как двойные, так и одинарные) внутри строки, перед ними ставится слеш
Особо следует сказать о сравнении строк. При сравнении строк принимается во внимание символы и их регистр. Так, цифровой символ условно меньше, чем любой алфавитный символ. Алфавитный символ в верхнем регистре условно меньше, чем алфавитные символы в нижнем регистре.
16 билет
Файл - это программы или данные, хранящиеся в памяти компьютера и имеющие имя.
Типы файлов
Существует множество форматов: графические, офисные, установочные, архивные, музыкальные, системные, служебные
Организация потокового ввода-выводы
Для работы с файлами необходимо подключить заголовочный файл . В нем определены несколько классов и подключены заголовочные файлы
— файловый ввод ; — файловый вывод.
Файловый ввод-вывод аналогичен стандартному вводу-выводу, единственное отличие – это то, что ввод-вывод выполнятся не на экран, а в файл. Если ввод-вывод на стандартные устройства выполняется с помощью объектов cin и cout, то для организации файлового ввода-вывода достаточно создать собственные объекты, которые можно использовать аналогично этим операторам.
17 билет
Структуры
Структура в языке C – это сгруппированные (ая) под одним именем одна или несколько переменных (возможно, различных типов). В качестве этих переменных могут быть также массивы данных, указатели на различные типы данных, также переменные других типов структур и т.д. Вот общий вид объявления структуры. Это самое классическое объявление структур, но используется часто.
Концепция АТД (абстрактных типов данных)
АТД – это такой тип данных, который скрывает свою внутреннюю реализацию от клиентов. Удивительно то, что путем применения абстракции АТД позволяет нам не задумываться над низкоуровневыми деталями реализации, а работать с высокоуровневой сущностью реального мира
Представление АТД в виде структуры данных
Абстрактные структуры данных предназначены для удобного хранения и доступа к информации. Они предоставляют удобный интерфейс для типичных операций с хранимыми объектами, скрывая детали реализации от пользователя. Конечно, это весьма удобно и позволяет добиться большей модульности программы. Абстрактные структуры данных иногда делят на две части: интерфейс, набор операций над объектами, который называют АТД(абстрактный тип данных) и реализацию.
Классификация операций и структур
|