Этапы решения задачи на ЭВМ.
Структурная схема ЭВМ. Основные функциональные устройства машины.
· процессор, осуществляющий арифметические и логические операции, а также организующий процесс выполнения программ;
· запоминающее устройство, или память для хранения программ и данных;
· внешние (периферийные) устройства для ввода/вывода информации.
Определение алгоритмов. Свойства алгоритмов.
Алгоритм - это точное предписание, однозначно определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату.
Свойства алгоритмов:
· детерминированность (определенность) - при заданных исходных данных обеспечивается однозначность искомого результата;
· массовость - пригодность для задач данного типа при исходных данных, принадлежащих заданному подмножеству;
· результативность - реализуемый вычислительный процесс выполняется за конечное число этапов с выдачей осмысленного результата;
· дискретность - разбиение на отдельные этапы, выполнение которых не вызывает сомнений.
Способы записи алгоритмов (словесный, графический, на алгоритмическом языке).
Графический способ записи алгоритмов – наиболее наглядный и распространенный. Он основан на использовании геометрических фигур (символов), краткого пояснительного текста и соединяющих линий.
Этапы решения задачи на ЭВМ.
· постановка задачи;
· разработка алгоритма;
· составление программы;
· трансляция программы;
· отладка и выполнение программы;
· анализ результатов.
5. Структура программы на языке С++. Алфавит языка.
Структура программы на языке C++ представляет собой некоторую совокупность функций, из которых одна является главной и присутствует в каждой программе. Эта функция носит стандартное имя main и с неё начинается выполнение программы. Язык С++ является языком свободного формата, что позволяет размещать в строке как один, так и несколько операторов.
6. Классификация типов, "дерево" типов в языке программирования с++.
7. Вещественные и целые типы в языке программирования с++.
Целые типы относят порядковым типам. Для порядковых типов характерно то, что такие типы имеют конечное число возможных значений, их можно каким-либо образом упорядочить и каждому поставить в соответствие целое число.
Основные операции над целыми числами:
"+" – сложение; "*" – умножение; " / " – деление;
"–" – вычитание; "%" – получение остатка от целочисленного деления.
Под данными вещественного типа понимаются числа, записанные с десятичной точкой. Значение числа вещественного типа представляется в ЭВМ лишь с некоторой конечной точностью, которая зависит от внутреннего формата вещественного числа. Существует две формы представления вещественных чисел: с фиксированной и с плавающей точками.
8. Перечисляемый тип в языке программирования с++.
9. Использование указателей в языке программирования с++.
Известно, что данные хранятся в ячейках памяти компьютера. Все ячейки памяти пронумерованы. Номера ячеек памяти называются адресами. Указатели используются для работы с адресами. Указатель – это некоторое си мволическое представление адреса. Это означает, что будем работать с переменными, хранящими эти адреса. Описываются такие переменные следующим образом:
<тип> *<идентификатор>;
Такое описание синтаксически отличается от описания простой переменной только наличием знака * перед именем переменной. Как видно из описания, указатель всегда связывается с переменной какого-то определенного типа. Это позволяет определить, сколько байт памяти необходимо выделить по указанному адресу. В переменной типа указатель хранится адрес первого байта, выделенного участка памяти:
int *ptr, *ptr1;
float *p, *p1;
Над указателями можно выполнять следующие операции:
– Одному указателю можно присвоить значение другого указателя, если они ссылаются на один и тот же тип:
ptr = ptr1;
p1 = p;
– Значение указателя можно увеличить или уменьшить на константную величину:
ptr++;
ptr1 = ptr1-5;
p1 = p1+2;
– На самом деле ptr увеличивается не на 1, а на столько, сколько байт занимает целое число. Переменная ptr1 уменьшается на 5 умноженное на количество байт, выделяемых под целое число.
– Указателю можно присвоить значение адреса. Для получения адреса используется знакомый значок &:
int a, *ptr;
ptr = &a;
– Можно использовать операцию косвенной адресации. Эта операция обозначается значком * и позволяет получить доступ к значению перемен-ной, на которую ссылается указатель
10. Ввод данных (scanf, cin) в языке программирования с++.
Функция ввода scanf служит для чтения информации с клавиатуры и имеет следующий синтаксис:
scanf (управляющая строка, список ввода);
сin – стандартный ввод, по умолчанию клавиатура;
11. Вывод данных (printf, cout) в языке программирования с++.
Функция ввода printf служит для чтения информации с клавиатуры и имеет следующий синтаксис:
printf (управляющая строка,список вывода);
сout – стандартный вывод, по умолчанию монитор.
12. Оператор присваивания в языке программирования с++.
Оператор присваивания является самым важным оператором в любом языке программирования. Этот оператор служит для изменения областей памяти. Оператор присваивания заменяет значение переменной, идентификатор которой стоит в левой части оператора, значением выражения, стоящего в правой части, и имеет следующую форму:
идентификатор переменной = выражение.
Необходимо учесть, что переменная и выражение должны быть согласованы по типам.
13. Преобразование и совместимость типов по присваиванию в языке программирования с++.
signed char ==> short ==> int ==> long
float ==> double ==> long double
unsigned char ==> unsigned short ==> unsigned int ==> unsigned long
14. Условный оператор if, опеpация условия: ? в языке программирования с++.
Условный оператор служит для ветвлений в программе и имеет следующий синтаксис:
if(<условие>) <оператор1>; else <оператор2>.
Оператор работает следующим образом: если условие истинно, то вы-полняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то выполняется <оператор2> и управление передается на следующий за условным оператор. Таким образом, все-гда выполняется один из двух операторов: либо <оператор1>, либо <оператор2>.
Существует сокращенная форма условного оператора, в которой отсутствует ветвь else:
if <условие> <оператор1>.
Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то управление сразу передается на следующий за условным оператор. Таким образом, в зависимости от условия, <оператор1> либо выполняется, либо не выполняется.
Операция условия – это короткий способ записи условного оператора. В общем случае синтаксис этого оператора следующий:
<выражение1>?<выражение2>:<выражение3>
Здесь <выражение1> – условное выражение и, если оно истинно, то вычисляется <выражение2>, которое становится результатом. Если <выражение1> – ложно, то результатом будет <выражение3>. Классический пример:
x=(y<0)? –y: y;
Выражение возвращает абсолютное значение переменной y.
15. Составной оператор в языке программирования с++.
Чтобы последовательность операторов работала как единый оператор, можно помещать эту последовательность между открывающейся и закрывающейся фигурными скобками. Такая конструкция называется составным оператором, или операторными скобками. Каждый оператор, входящий в состав составного оператора, заканчивается точкой с запятой.
16. Оператор пеpеключения switch в языке программирования с++.
Оператор выбора предназначен для организации ветвлений в программе, когда возникает необходимость избрания одного из множества различных вариантов дальнейшего хода программы. В общем случае оператор выбора записывается следующим образом:
switch (<выражение>)
{
case <выражение_1>: <операторы>;
case <выражение_2>: <операторы>;
. . .
case <выражение_n>: <операторы>;
[default: <операторы>;]
}
Работа оператора начинается с вычисления <выражения>. Значение этого выражения является критерием для выбора из нескольких вариантов. Если полученное значение выражения совпадает с одной из констант, то выполняется та группа операторов, которой предшествует эта константа, а потом все группы операторов, расположенные ниже. Но так как часто программист использует этот оператор, чтобы выполнить только одну группу, то в конце каждой группы используется специальный оператор break, осуществляющий выход из оператора switch (а также из всех операторов цикла). Если такой константы не обнаруживается, то выполняется оператор, следующий за ключевым словом default. Ветвь default может отсутствовать, и в этом случае управление передается оператору, следующему за оператором switch.
17. Операторы goto, break, continue в языке программирования с++.
В языке C++ достаточно управляющих операторов, позволяющих написать любую программу. Тем не менее, в языке имеется оператор безусловного перехода. Безусловный переход приводит к передаче управления из одного места в программе в другое. Структура оператора перехода следующая:
goto <метка>
Метка - это произвольный идентификатор. Метка ставится перед оператором, получающим управление, и отделяется от него двоеточием. Метки в языке С++ не требуют предварительного описания. Перемещаться с помощью оператора перехода можно только внутри текущей функции.
Break – осуществляет выход из всех операторов цикла.
18. Оператор цикла for в языке программирования с++.
В циклах со счетчиком выполнение тела цикла должно повторяться заранее определенное число раз. Хотя такой цикл можно организовать с помощью опера-тора цикла с постусловием или предусловием (они универсальны), в языке С++ имеется специальная конструкция для организации циклов со счетчиком. Син-таксис оператора цикла со счетчиком в общем случае следующий:
for ( <п.ц.> = <н.з.>; <условие>; <коррекция п.ц.> )
<оператор>;
Оператор работает таким образом: сначала вычисляется выражение, соответствующее начальному значению, и присваивается переменной цикла, потом проверяется условие выхода из цикла и, если получается истинное значение, выполняется оператор, являющийся телом цикла. Затем изменяется переменная цикла и снова проверяется условие и т. д. Если значение выражения ложно, то осуществляется выход из цикла. Если начальное значение переменной цикла больше конечного значения, то операторы тела цикла не выполняются. Можно сказать, что оператор цикла со счетчиком – это оператор цикла с предусловием.
19. Оператор цикла do while в языке программирования с++.
Оператор цикла с постусловием.
Синтаксис этого оператора следующий:
do <оператор> while( <условие>)
<оператор> – любой оператор языка С++, в том числе и составной (его называют телом цикла);
<условие> – условное выражение типа сравнения, используемое дл я выхода из цикла.
Оператор работает следующим образом: сначала выполняются операторы, расположенные в теле цикла, затем вычисляется условное выражение и, если получается ложное значение, осуществляется выход из цикла. Если значение выражения истинно, то выполнение операторов тела цикла повторяется, а затем снова проверяется условие. Итак, операторы тела цикла выполняются хотя бы раз, а потом все зависит от условия выхода из цикла. Очевидно, один из операторов тела цикла должен влиять на значение условного выражения, поскольку иначе цикл будет повторяться бесконечно.
20. Оператор цикла while в языке программирования с++.
В отличие от оператора цикла с постусловием оператор цикла с предусловием вычисляет и проверяет условие до выполнения операторов, составляющих тело цикла. Синтаксис этого оператора следующий:
while (<условие>) <оператор>;
Оператор работает следующим образом: сначала вычисляется условное выражение и, если получается истинное значение, выполняется оператор, являющийся телом цикла, а затем снова проверяется условие. Если значение условного выражения ложно, то осуществляется выход из цикла. Таким образом, если условие было ложно при первом входе в цикл, то операторы тела цикла не выполнятся ни разу. Очевидно, один из операторов тела цикла должен влиять на значение условного выражения, поскольку иначе цикл будет повторяться бесконечно.
21. Обработка массивов в языке программирования с++.
Одномерные массивы имеют аналогию с таким понятием в математике, как вектор. Описание переменной типа массив задается следующим образом:
<тип> <идентификатор массива>[<t>];
Здесь <тип> – тип элементов массива (любой тип языка С++);
<имя массива> – правильный идентификатор;
<t> – количество элементов массива.
Двумерные массивы имеют аналогию с таким понятием в математике, как матрица. Двумерный массив – это одномерный массив, элементами которого являются одномерные массивы
int b[N][M];
float a[3][4];
В описании N и M – количество строк и количество столбцов матрицы. Традиционно в качестве идентификатора номера строки используют символ i, а столбца – j. При изменении второго индекса j на единицу п еремещение идет вдоль строки, а при изменении первого индекса i на единицу – вертикально вдоль столбца. Элемент одномерного массива а[i] является указателем на начало i-ой строки матрицы. К элементу двумерного массива, описанному выше, можно обратиться с помощью идентификатора а[i][j].
При обработке двумерных массивов возникают такие же задачи, как и при обработке одномерных массивов: ввод элементов массива, нахождение суммы, произведения, среднего и т. д., поиск некоторого элемента в массиве, сортировка элементов массива, вывод элементов массива.