ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.03.2025

Просмотров: 105

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Ответы на экзаменационные вопросы по информатике:

Вопрос 1

Информация. Информационные революции. Информационные технологии. Информатика.

1)Информация - сведения о чём-либо, независимо от формы их представления.

2) Информационные революции.

В истории развития цивилизации произошло несколько информационных революций — преобразований общественных отношений из-за кардинальных изменений в сфере обработки информации.

Первая революция связана с изобретением письменности.

Вторая (середина XVI в.) вызвана изобретением книгопечатания

Третья (конец XIX в.) обусловлена изобретением электричества, благодаря которому появились телеграф, телефон, радио,

Четвертая (70-е гг. XX в.) связана с изобретением микропроцессорной технологии и появлением персонального компьютера.

Этот период характеризуют три фундаментальные инновации:

•переход от механических и электрических средств преобразования информации к электронным;

 •миниатюризация всех узлов, устройств, приборов, машин;

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

1 этап (до второй половины XIX в.) — "ручная" информационная технология, инструментарий которой составляли: перо, чернильница, книга. Коммуникации осуществлялись ручным способом путем переправки через почту писем, пакетов, депеш. Основная цель технологии — представление информации в нужной форме.

2 этап (с конца XIX в.) — "механическая" технология, инструментарий которой составляли: пишущая машинка, телефон, диктофон. Основная цель технологии — представление информации в нужной форме более удобными средствами.

3 этап (40 - 60-е гг.) — "электрическая" технология, инструментарий которой составляли: большие ЭВМ, электрические пишущие машинки, копировальные аппараты, портативные диктофоны.

4 этап (с начала 70-х гг.) — "электронная" технология, инструментарием которой становятся большие ЭВМ и создаваемые на их базе автоматизированные системы управления (АСУ) и информационно-поисковые системы (ИПС),

5 этап (с середины 80-х гг.) — "компьютерная" технология, основным инструментарием которой является персональный компьютер с широким спектром стандартных программных продуктов разного назначения.

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

Вопрос 3

Принципы фон Неймана как основа обработки информации в ЭВМ. Структурная схема ЭВМ, основные компоненты. Системы счисления.

Принципы фон Неймана

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

  2. Программное управление ЭВМ. Работа ЭВМ контролируется программой, состоящей из набора команд. Команды выполняются последовательно друг за другом. Созданием машины с хранимой в памяти программой было положено начало тому, что мы сегодня называем программированием.

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

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

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

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

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

  1. Система счисления – это способ записи чисел. Различные системы счисления делятся на две группы: позиционные и непозиционные.

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

Наиболее употребляемыми в настоящее время позиционными системами являются:2,3,8,10,12,13,16,,30,60

Вопрос 6

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

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

Совокупность требований:

1)Определение требования спецификаций задания.

2)Проектирование данных и Алгоритмов

3)Кодирование (написание программы)

4)Отладка и тестирование

5)Документирование

6)Сопровождение

Сопровождение – внесение изменений и поддержание программы в рабочем состоянии.

Специфика́ция — набор требований и параметров, которым удовлетворяет некоторая сущность.

  1. Постановка задачи

  2. Таблица данных

Аномалии

  1. Алгоритм (блок-схема)

  2. Программа

  3. Тесты

Билет 7

Понятие алгоритма. Свойства и способы записания.

Структурированный алгоритм.

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

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

  • Массовость (универсальность). Алгоритм должен быть применим к разным наборам исходных данных.

  • Результативность — завершение алгоритма определёнными результатами.

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

  • Завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов.  

  • Дискретность — последовательное выполнение некоторых простых шагов

Формы записи алгоритма:

словесная или вербальная (языковая, формульно-словесная);

графическая (блок-схемы)

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

Любое действие в алгоритме задается следующими структурами:- следованием;- ветвление;- цикл.

Алгоритм, построенный с использованием этих структур - структурный алгоритм.

Вопрос 11

Структура языка С++. Переменные, константы, стандартные функции.

В качестве одного из наиболее часто используемых языков в мире, и как открытый язык, C++ имеет широкий спектр компиляторов, которые работают на различных платформах. Код стандартной библиотеки C++ будет работать на многих платформах.

С++ является полностью совместимым с языком Си

В C++ можно использовать Cи библиотеки и они будут исправно работать.

С++ компилируемый язык.

C++ компилируется непосредственно в машинный код, что позволяет ему быть одним из самых быстрых в мире языков.

Структура языка

  • Алфавит языка, или его символы — это основные неделимые знаки, с по­

мощью которых пишутся все тексты на языке.

  • Лексема, или элементарная конструкция, — минимальная единица языка,

имеющая самостоятельный смысл.

  • Выражение задает правило вычисления некоторого значения.

  • Оператор задает законченное описание некоторого действия.

Константы

  • Целые

  • Константы с плавающей точкой состоит из целой части,десятичной точки,дробной части, буквы e или E, показателя степени.

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

  • Строковая константа - последовательность символов, заключенных в кавычки. Строковая константа имеет тип char[]. Это массив символов, которые заключены в кавычки к которым компилятор добавляет '\0'.

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

Локальные переменные – действуют в пределах одной функции (память выделяется только при вызове функции)

Глобальные переменные – действуют на протяжении всей программы. Хранятся в статическом сегменте памяти. Память под них распределяется при компиляции программы.

Локальные переменные предпочтительнее глобальных. Если глобальная перемен­

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

действия одним исходным файлом.

int a; // объявление переменной a целого типа.

float b; // объявление переменной b типа данных с плавающей запятой.

char d = 's'; // инициализация переменной типа char

bool k = true; // инициализация логической переменной k.

Стандартные функции:

a==, a!=b, a&&b, a||b

sinx=sin(x),cos

lnx=log(x)

lgx=log10(x)

√x=sqrt(x)

=pow(x,a) x|=fabs(x)-вещ

Вопрос 16

Операторы передачи управления break, continue, goto.

в C++ есть четыре оператора, изменяющих естественный порядок выполнения

вычислений:

• оператор безусловного перехода goto;

• оператор выхода из цикла break;

• оператор перехода к следующей итерации цикла continue;

• оператор возврата из функции return.

Оператор goto

Оператор безусловного перехода goto имеет формат: goto метка:

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор:

Оператор goto передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.

Не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:

int к: ...

goto metka; ...

{1nt а = 3. b = 4;

к = а + b;

metka: int m = к + 1; ...

}

Оператор break

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

Оператор continue

Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.

Оператор return

Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:

return [ выражение ];

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

Вопрос 20

Массивы. Описание. Ввод/вывод. Обработка

Массивы

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

Описание массива в программе отличается от описания простой переменной наличием после имени квадратных скобок, в которых

задается количество элементов массива (размерность):

f!oat а [10]; // описание массива из 10 вещественных чисел

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

Многомерные массивы задаются указанием каждого измерения в квадратных

скобках, например, оператор int matr [6][8]: задает описание двумерного массива из 6 строк и 8 столбцов. Количество измерений в массиве может быть практически бесконечным (т.е. достаточным для решения любых практических задач).

В памяти такой массив располагается в последовательных ячейках построчно. Для доступа к элементу многомерного массива указываются все его индексы, например, matr[i][j]

Пример ввода массива

for (i=0; i<=n;i++){

cin>>a[i];}

Пример вывода массива

for (i=0; i<=n;i++){

cout<<a[i];}

Обработка одномерного массива

Рассмотрим несколько способов решения этой задачи. Элементы, которые лежат выше главной диагонали – это элементы A[i][j], для которых i<j, а для элементов ниже главной диагонали i>j. Таким образом, мы можем сравнивать значения i и j и по ним определять значение A[i][j]. Получаем следующий алгоритм:

    for(i=0;i<n;++i)        for(j=0;j<n;++j)        {           if (i<j)              A[i][j]=0;           else if(i>j)              A[i][j]=2;           else              A[i][j]=1;        }

    for(i=0;i<n;++i)     {   // Заполняем строку с номером i        for(j=0;j<i;++j)           A[i][j]=2;   // Сначала пишем 2 ниже диагонали        A[i][j]=1;      // После завершения предыдущего цикла i==j, пишем 1        for(++j;j<n;++j) // Цикл начинаем с увеличения j на 1           A[i][j]=0;   // Записываем 0 выше диагонали     }

Вопрос 21

Цикл, управляемый параметром. Кодирование в С++. Примеры

Цикл с параметром (for)

Цикл с параметром имеет следующий формат:

for (инициализация: выражение: модификации) оператор:

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

Областью действия переменных, объявленных в части инициализации цикла, является цикл!. Инициализация выполняется один раз в начале исполнения цикла. Выражение определяет условие выполнения цикла: если его результат, приведенный к типу bool, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.

Модификации выполняются после каждой итерации цикла и служат обычно для

изменения параметров цикла. В части модификаций можно записать несколько

операторов через запятую. Простой или составной оператор представляет собой

тело цикла. Любая из частей оператора for может быть опущена.

Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. Т.е. вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.

По способу применения различают:

  • фактический параметр — аргумент, передаваемый в функцию при ее вызове;

  • формальный параметр — аргумент, указываемый при объявлении или определении функции

Вопрос 2

Поколения ЭВМ, критерии классификации, основные характеристики, современный этап развития.

  1. Поколения ЭВМ

  1. ЭВМ первого поколения (конец 40-х и 50-е гг.). - использовали Электронно-вакуумные лампы, обладали малым быстродействием(8-20 тыс. оп./с) и объемом памяти, имели неразвитые операционные системы, программирование выполнялось на языках программирования низкого уровня (язык "Ассемблер").

  2. ЭВМ второго поколения (конец 50-х, 60-е и начало 70-х гг.). - использовали полупроводники, транзисторы, диоды, быстродействие 0,1-1 млн. оп./с, языки программирования высокого уровня и принцип библиотечных программ .

  3. ЭВМ третьего поколения (70-е, начало 80-х гг.)  - использовали интегральные схемы, обладали большим быстродействием(1 млн. оп./с) и объемами основной и внешней памяти, использовали языки высокого уровня (Basic, Pascal). Развитая операционная система обеспечивала работу в т.н. “мультипрограммном” режиме.

  4. ЭВМ четвертого поколения (середина 80-х гг. по настоящее время). - используют большие и сверхбольшие интегральные схемы (БИС и СБИС), виртуальную память, многопроцессорный с параллельным выполнением операций принцип построения, развитые средства диалога. Быстродействие более 1 млн. оп./с.

ЭВМ могут различаться также по принципу построения и действия

  1. Аналоговая ЭВМ - это компьютеры с заведомо предопределенным набором вычислительных возможностей, которые оперируют данными, представленными в аналоговом виде. Аналоговые вычислительные машины практически всегда жестко специализированы.

  2. Цифровая ЭВМ (дискретная) – Обработка информации в виде последовательности знаков

(цифрового кода) её основе работает Цифровая вычислительная техника (ЭЦВМ)

  1. Комбинированная (аналого-цифровая ) ЭВМ - ЭВМ, сочетающая аналоговую и цифровую форму обработки данных.

Основные характеристики ЭВМ

Быстродействие ЭВМ  характеризуется количеством элементарных операций, выполняемых центральным процессором в секунду. 

Емкость, или объем, памяти определяется максимальным количеством информации, которое можно разместить в памяти ЭВМ

Точность вычислений зависит от количества разрядов, используемых для представления одного числа.(32- или 64-разр проц сейчас)

Система команд - это перечень команд, которые способен выполнить процессор ЭВМ.

Современный этап развития

Программа разработки была принята в Японии в 1982 г. Предполагалось, что к 1991 г. будут созданы принципиально новые компьютеры, ориентированные на решение задач искусственного интеллекта. С помощью языка Пролог и новшеств в конструкции компьютеров планировалось вплотную подойти к решению одной из основных задач этой ветви компьютерной науки - задачи хранения и обработки знаний. Коротко говоря, для компьютеров "пятого поколения" не пришлось бы писать программ, а достаточно было бы объяснить на "почти естественном" языке, что от них требуется.

Вопрос 4

Современная технология (методология) программирования. Основные этапы разработки программ. Критерии эффективности программ.

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

Программа — завершенный продукт, пригодный для запуска своим автором на системе, на которой он был разработан.

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

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

Структурное программирование (СП) возникло как вариант решения проблемы уменьшения СЛОЖНОСТИ разработки программного обеспечения.

Для оценки качества программ существуют следующие критерии:

1)Работоспособность (возможность выполнения программы на имеющемся ЭВМ)

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

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

6)Читабельность (ясность структуры и текста программы, за счет наличия комментариев и рельефной формы записи)

Простота, документированность

Методы и концепции.

Технология подготовки и решения задачи на ЭВМ включает в себя четыре основных этапа:

     ознакомление с поставленной

     составление плана решения , разработка алгоритма;

     осуществление решения – кодирование

     проверка правильности решения задачи – отладка

Вопрос 5

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

Структурное программирование (СП) возникло как вариант решения проблемы уменьшения СЛОЖНОСТИ разработки программного обеспечения.

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

Основные принципы

Разбиение процесса создания программ на этапы. Соблюдение последовательности и автономности.

Тщательная разработка спецификаций

Использование для проектирования алгоритма специальных языков (яз. блок-схем или псевдокодов)

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

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

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

  • следование — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

  • ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;

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

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

Вопрос 8

Базовые управляющие структуры алгоритма (следование и ветвление) на языке блок-схем. Кодирование в С++.

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

Возможность альтернативного выбора при выполнении программы предос­тавляют ветвления при выполнении которых алгоритм может пойти по одной из двух возможных ветвей в зависимости от справедливости проверяемого условия.

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

Вопрос 9 Базовые управляющие структуры алгоритма (цикл) на языке блок-схем. Кодирование в С++.

Цикл представляет собой многократно повторяющуюся последовательность шагов алгоритма.

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


 

Вопрос 10

Общая характеристика языка С++. Структура языка. Алфавит.

Си - это язык программирования высокого уровня, который более популярен, чем Паскаль и Ассемблер. Си, позволяет писать программы под Windows. Ведь первые Операционные системы были написаны именно на языке Си.

Алфавит C++ включает:

• прописные и строчные латинские буквы и знак подчеркивания

• арабские цифры от 0 до 9;

• специальные знаки:

" { } , i []()+ - / % * . \ ? < = >!&#-;' '

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

Из символов алфавита формируются лексемы языка:

• идентификаторы;

• ключевые (зарезервированные) слова;

• знаки операций;

• константы;

• разделители (скобки, точка, запятая, пробельные символы).

Границы лексем определяются другими лексемами, такими, как разделители или

знаки операций.

Вопрос 12 Основные операции в С++.

Арифметические операции

+ - * / % ++ --

a%b - остаток от деления a на b (a и b - целые)

++ - увеличение на 1

-- - уменьшение на 1

Манипуляция разрядами

~ - поразрядное отрицание

& - поразрядное "И"

| - поразрядное "ИЛИ"

^ - поразрядное "ИСКЛЮЧАЮЩЕЕ ИЛИ"

<< - сдвиг влево

>> - сдвиг вправо

Операции присваивания

=

+= ( a+=b эквивалентно a=a+b )

-= ( a-=b эквивалентно a=a-b )

*= ( a*=b эквивалентно a=a*b )

/= ( a/=b эквивалентно a=a/b )

%= ( a%=b эквивалентно a=a%b )

&= ( a&=b эквивалентно a=a&b )

|= ( a|=b эквивалентно a=a|b )

^= ( a^=b эквивалентно a=a^b )

<<= ( a<<=b эквивалентно a=a<< b )

>>= ( a>>=b эквивалентно a=a>>b )

Вопрос 13

Арифметические выражения в С++.

Арифметические  выражения,  стоящие  в  правой  части  оператора  присваивания,  могут  содержать

•  целые и вещественные числа (в вещественных числах целая и дробная часть разделяются  точкой, а не запятой, как это принято в математике)  •  знаки арифметических действий    + —  сложение, вычитание    * /  умножение, деление     %    остаток от деления  •  вызовы стандартных функций    abs(i)   модуль целого числа i    fabs(x)  модель вещественного числа x    sqrt(x)  квадратный корень из вещественного числа x    pow(x,y)  вычисляет x в степени y  •  круглые скобки для изменения порядка действий

Вопрос 14

Логические выражения в С++

Логические операции (&& и ||). Каждый операнд оценивается с точки зрения его эквивалентности нулю

(операнд, равный нулю, рассматривается как false, не равный нулю — как true).

Логические операции

&& - логическое "И"

|| - логическое "ИЛИ"

! - логическое "НЕ"

Операции отношения

< <= > >= == !=

Вопрос 15

Структура типов данных. Описание простых типов данных. Оператор списания типов typedef.

Основные типы данных в C++

int — целочисленный тип данных.

float — тип данных с плавающей запятой.

double — тип данных с плавающей запятой двойной точности.

char — символьный тип данных.

bool — логический тип данных.

Модификаторы  signed и unsigned - показывает если ли у переменной знак или нет. Если нет, то она не может быть отрицательной.  long - изменяет структуру данных переменной таким образом что, можно записать в нее бОльшее значение.   short - применяется только к целому типу, с данным модификатором переменная типа int занимает 2 байта, вместо 4х.   const - превращает переменную в константу, это значит что мы ее Инициализируем и больше не можем изменять(константа должна быть обязательно инициализирована!).

Переименование типов (typedef)

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

помощью ключевого слова typedef:

typedef тип новое_имя [ размерность ]:

В данном случае квадратные скобки являются элементом синтаксиса. Размер­

ность может отсутствовать. Примеры:

typedef unsigned int UINT:

typedef char MsgClOO];

typedef struct{

char f1o[30];

int date, code:

double salary:} Worker:

Вопрос 17

Оператор присваивания. Сложное присваивание.

Операции присваивания (=, +=, -=, *= и т. д.) могут использоваться в программе как законченные операторы. Формат операции простого присваивания (*=):

операнд^! = операнд_2

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

При присваивании производится преобразование типа выражения к типу L-значения, что

может привести к потере информации.

В сложных операциях присваивания ( +=, *«=, /== и т п.) при вычислении выражения, стоящего в правой части, используется и L-значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение а += Ь является более компактной записью выражения а « а + Ь.

Вопрос 18

Способ организации ввода/вывода в С++

В языке C++ нет встроенных средств ввода/вывода — он осуществляется с помощью функций, типов и объектов, содержащихся в стандартных библиотеках. Используется два способа:

функции, унаследованные из языка С, и объекты C++.

Основные функции ввода/вывода в стиле С:

int scanf (const char* format. ... ) // ввод

int printf(const char* format. ... ) // вывод

1nt main(){

int 1:

printf("Введите целое число\п"):

scafifC'^d". &1):

printf("Вы ввели число ^d. спасибо!", i):

Вопрос 19

Итерационные циклы. Сравнительная характеристика. Кодирование в С++.

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

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

В C++ есть три разных оператора цикла — while, do while и for.

Цикл с предусловием (while) имеет вид:

while ( выражение ) оператор

Выражение определяет условие повторения тела цикла, представленного простым или составным оператором. Выполнение оператора начинается с вычисления выражения. Если оно истинно (не равно false), выполняется оператор цикла. Если при первой проверке выражение равно false, цикл не выполнится ниразу. Тип выражения должен быть арифметическим или приводимым к нему.

Выражение вычисляется перед каждой итерацией цикла.

Пример (программа находит все делители целого положительного числа):

#inclucle <iostream.h>

int main(){

int num:

cout « "ХпВведите число : ": cin » num:

int half = num / 2: // половина числа

int div = 2: // кандидат на делитель

while (div <= half){

if (!(num % div))cout « div «"\n":

div++:

}

return 0:

Распространенный прием программирования — организация бесконечного цикла с заголовком while (true) либо while (1) и принудительным выходом из тела цикла по выполнению какого-либо условия.

Цикл с постусловием (do while)

Цикл с постусловием реализует структурную схему,

и имеет вид:

do оператор while выражение:

Сначала выполняется простой или составной оператор, составляющий тело цикла, а затем вычисляется выражение. Если оно истинно (не равно f а! se), тело цикла выполняется еще раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления. Тип выражения должен быть арифметическим или приводимым к нему.

Цикл с параметром (for)

Цикл с параметром имеет следующий формат:

for (инициализация: выражение: модификации) оператор:

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

Областью действия переменных, объявленных в части инициализации цикла, является цикл!. Инициализация выполняется один раз в начале исполнения цикла. Выражение определяет условие выполнения цикла: если его результат, приведенный к типу bool, равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.

Модификации выполняются после каждой итерации цикла и служат обычно для

изменения параметров цикла. В части модификаций можно записать несколько

операторов через запятую. Простой или составной оператор представляет собой

тело цикла. Любая из частей оператора for может быть опущена.

  • Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных).

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

  • Оператор for предпочтительнее в большинстве остальных случаев (однознач­

но — для организации циклов со счетчиками).


Вопрос 22

Алгоритмы обработки одномерных массивов. Поиск экстремальных значений. Поиск по сложному условию.

Алгоритм вычисления суммы

1. Пусть дан массив A, состоящий из n элементов: a1, a2, a3, …, an. Нужно найти их сумму, т.е. S=a1+a2+a3+…+an.

Нахождение суммы есть последовательное нахождение

Алгоритм формирования нового массива

Как положительные элементы массива A сформировать в массив? Обозначим массив положительных элементов B и по пути “+” после блока 7 поставим присвоение соответствующему элементу массива B элемент массива A, т.е. блок, содержимое которого bk=ai.

k будем использовать как меняющийся индекс нового массива. Необходимо обратить внимание учащихся на блок 2, в котором требуется описать массив B, указав количество его элементов равное количеству элементов массива A. Схема алгоритма на рис.3б.

суммы по формулам:

S=0 S=S+a2 … S=S+ai S=S+an

S=S+a1 S=S+a3 

Алгоритм вычисления суммы удобно организовать циклом, взяв за параметр цикла переменную i, которая меняется от 1 до n с шагом 1, и записав в цикле формулу S=S+ai один раз. Схема алгоритма приведена на рис. 1а.

Алгоритм определения максимального элемента

Для получения максимального числа введем переменную M и ей присвоим значение первого элемента массива a1, а затем необходимо сравнить M с текущим элементом массива ai и если текущий элемент будет больше M, то значение M заменить на значение этого элемента. Схема алгоритма на Рис. 4. Очень важно обратить внимание учащихся на начальное значение переменной M. Почему, например нельзя переменной M присвоить значение равное нулю? (Ответ: Для массива с отрицательными значениями элементов максимум не будет найден.)

Вопрос 24

Алгоритмы обработки двумерных массивов. Поиск в выделенных областях.

Поиск в выделенных областях.

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

1)выше главной диагонали, не включая ее элементы:

i:=1 ton-1

j:=I+1 ton

2)выше главной диагонали, включая ее элементы:

i:=1 ton

j:=Iton

3)ниже главной диагонали, не включая ее элементы:

j:=1 ton-1

i:=j+1 ton

4)ниже главной диагонали, включая ее элементы:

j:=1 ton

i:=jton

Вопрос 28

Функции в С++. Описание, вызов, передача результата. Формальные и фактические параметры, правила соответствия, примеры.

Функции

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

Для того, чтобы в С++ использовать функцию, нужно ее:

1) Описать (или определить).

2) Объявить.

3) Вызвать.

Описание функции

Функция описывается заголовком и телом.

Заголовок содержит:

• класс памяти;

• имя функции;

• тип возвращаемого результата;

• имена и типы формальных параметров, заключенные в ( ) и разделенные запятыми.

Объявление и определение функций

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

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

Правила соответствия

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

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

  • В определении, в объявлении и при вызове одной и той же функции типы и порядок

следования параметров должны совпадать

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

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

Пример функции, возвращающей сумму двух целых величин:

#include <iostream.h>

int sum (int a. int b); // объявление функции

int main(){

int a = 2, b - 3, c. d;

с = sum(a. b): // вызов функции

cin » d:

cout « sum(c. d); // вызов функции

return 0:

}

int sumdnt а. int b){ // определение функции

return (а + b):

}

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

Параметры функции

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

Существует два способа передачи параметров в функцию: по значению и по адресу. При передаче по значению в стек заносятся копии значений аргументов, и операторы функции работают с этими копиями.

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

#1nclude <iostream.h>

void f(int i. int* j . int& k);

Если требуется запретить изменение параметра внутри функции, используется

модификатор const:

1nt f(const char*);

char* t(char* a. const int* b);

По умолчанию параметры любого типа, кроме массива и функции (например, ве­

щественного, структурного, перечисление, объединение, указатель), передаются

в функцию по значению.

Примеры описания функции

Пример :

/* Функция poisk — предназначена для поиска максимального элемента и его номера, значение максимума возвращается в качестве результата через заголовок, а номер максимального элемента n_max возвращается через список параметров. Здесьn_maxобъявленкакуказатель */

intpoisk(int* a, int n, int* n_max)

// входной параметр a - массив объявлен как указатель

// входной параметр n - число элементов в массиве

//


Вопрос 25

Приближенные вычисления и их реализация в С++. Метод бисекции и метод Ньютона.

Вопрос 26

Приближенные вычисления и их реализация в С++. Метод бисекции и метод секущих.

Вопрос 27

Приближенные вычисления и их реализация в С++. Метод бисекции и метод простых итераций.

Вопрос 29

Функции типа void. Описание, вызов, передача результата. Формальные и фактические параметры. Правила соответствия, примеры. Прототипы функций.

Тип void

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

Вызов функций

Вызов функции - это выражение, которое передает управление и ФАКТИЧЕСКИЕ параметры (если они есть) функции. Вызов функции связан с выполнением действий над фактическими параметрами, заданных в ее определении.

Вопрос 30

Параметры-переменные и параметры-значения. Механизм передачи в функцию и из неё. Локальные и глобальные данные. Примеры.

Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. Т.е. вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.

По способу применения различают:

  • фактический параметр — аргумент, передаваемый в функцию при ее вызове;

  • формальный параметр — аргумент, указываемый при объявлении или определении функции.

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

Правила соответствия

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

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

  • В определении, в объявлении и при вызове одной и той же функции типы и порядок

следования параметров должны совпадать

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

переменная должна быть описана.

Локальные переменные – действуют в пределах одной функции (память выделяется только при вызове функции)

Глобальные переменные – действуют на протяжении всей программы. Хранятся в статическом сегменте памяти. Память под них распределяется при компиляции программы.

32.Многомодульная программа в с++. Препроцессор. Основныедирективы

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

Директивы препроцессора

Препроцессором называется первая фаза компилятора. Инструкции препроцессора называются директивами. Они должны начинаться с символа #

Директива #include

Директива #include <имя_файла> вставляет содержимое указанного файла в ту точ­

ку исходного файла, где она записана.

С помощью директивы #define определяется макрос. Каждое появление в тексте программы имени, расположенном после директивы #define, заменяется определенным для него значением. Например, директива

#definePI 3.14159265359

указывает препроцессору на необходимость замены каждого появления в текущей единице компиляции лексемы PI лексемой 3.14159265359

• Макрос можно отменить в любом месте с помощью директивы #undef:

#undefPI

Директивы условной компиляции #if, #ifdef и #ifndef применяются для того,

чтобы исключить компиляцию отдельных частей программы.

34 Динамическая память.Операторыnew и delete.Функцииmalloc и free

Динамическая память

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

  • new - выделение памяти, если выделение памяти не произошло возвращается нулевой указатель;

  • delete - освобождение памяти, не во всех компиляторах после освобождения памяти указателю присваивается 0

Выделение памяти с помощью оператораnew имеет следующий синтаксис:

указатель = new тип;

указатель = new тип [число элементов] (для массивов.)

Освобождение памяти с помощью оператора delete производится только в том случае, если она была выделена с использованием оператора new и имеет следующий синтаксис:

delete указатель;

delete [число элементов] указатель;

Резервирование и освобождение памяти в программах на C++ может происходить в любой момент времени. Осуществляются операции распределения памяти двумя способами:

с помощью функции malloc, calloc, realloc и free;

посредством оператора new и delete.

Функция malloc резервирует непрерывный блок ячеек памяти для хранения указанного объекта и возвращает указатель на первую ячейку этого блока. Обращение к функции имеет вид:

void *malloc(size);

Для освобождения выделенной памяти используется функция free. Обращаются к ней так:

voidfree (void *p size);

Здесь p — указатель на участок памяти, ранее выделенный функциями malloc, calloc или realloc.

Операторы new и delete аналогичны функциям malloc и free. New выделяет память, а его единственный аргумент — это выражение, определяющее количество байтов, которые будут зарезервированы. Возвращает оператор указатель на начало выделенного блока памяти. Оператор delete освобождает память, его аргумент — адрес первой ячейки блока, который необходимо освободить.

Вопрос 31.

Рекурсивный вызов функции.

Ситуацию, когда функция тем или иным образом вызывает саму себя, называют рекурсией. Рекурсия, когда функция обращается сама к себе непосредственно, называется прямой; в противном случае она называется косвенной.

Все функции языка С++ (кроме функции main) могут быть использованы для построения рекурсии.

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

Обработка вызова рекурсивной функции в принципе ничем не отличается от вызова функции обычной.

33.Понятие указателя. Операции. Указатели и массивы. Указатель на функцию.

Указатели предназначены для хранения адресов областей памяти. В C++

различают три вида указателей — указатели на объект, на функцию и на void, от­

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

Указатель на функцию содержит адрес в сегменте кода, по которому располагает­

ся исполняемый код функции, то есть адрес, по которому передается управление

при вызове функции. Указатели на функции используются для косвенного вызо­

ва функции (не через ее имя, а через обращение к переменной, хранящей ее ад­

рес), а также для передачи имени функции в другую функцию в качестве пара­

метра.

Указатель на объект содержит адрес области памяти, в которой хранятся данные

определенного типа (основного или составного). Простейшее объявление указа­

теля на объект (в дальнейшем называемого просто указателем) имеет вид:

тип *имя:

Звездочка относится непосредственно к имени, поэтому для того, чтобы объявить

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

пример, в операторе

1nt *a. b . *с;

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

рес которого требуется хранить, не определен

Указатель может быть константой или переменной, а также указывать на кон­

станту или переменную. Рассмотрим примеры:

int 1; // целая переменная

const int ci = 1; // целая константа

int * pi; // указатель на целую переменную

const int * pci; // указатель на целую константу

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

Определение указателя на функцию имеет вид:

int (*pf)(); // без контроля параметров вызова

int (*pf)(void); // без параметров, с контролем по прототипу

35Обработка символьной информации в с++.Массивы символов.Строки.Основные функции для работы со строками

Символ – элементарная единица, некоторый набор которых несет определенный смысл. В языке программирования С++ предусмотрено использование символьных констант. Символьная константа – это целочисленное значение (типа int) представленное в виде символа, заключённого в одинарные кавычки, например 'a'. В таблице ASCII представлены символы и их целочисленные значения.

1// объявления символьной переменной

2char symbol = 'a';

3// где symbol – имя переменной типа char

4// char – тип данных для хранения символов

Строки в С++ представляются как массивы элементов типа char, заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.

\0 — символ нуль-терминатора.

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

1// пример объявления строки

2charstring[10];

3// где string – имя строковой переменной

4// 10 – размер массива, то есть в данной строке может поместиться 9 символов , последнее место отводится под нуль-терминатор.

Функции для работы со строками и символами

Копирование строк

strlen(имя_строки) определяет длину указанной строки, без учёта нуль-символа

strcpy(s1,s2) выполняет побайтное копирование символов из строки s2 в строку s1

Конкатенация строк

strcat(s1,s2) объединяет строку s2 со строкой s1. Результат сохраняется в s1

strncat(s1,s2,n) объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1

Функции поиска

strchr(s,c) поиск первого вхождения символа с в строке s. В случае удачного поиска возвращает указатель на место первого вхождения символа с. Если символ не найден, то возвращается ноль.


12