- •1…Понятие информатики, информации, кодирования информации.
- •2…Системы счисления, переводы чисел из одной позиционной системы счисления в другую.
- •3… Понятия алгоритма: рекурсивные функции системы текстовых замен.
- •4… Способы описания языков программирования: бнф-нотации, синтаксические диаграммы
- •12…Оператор безусловного перехода, операторы продолжения и завершения, примеры использования.
- •16…Ввод/Вывод данных в с.
- •18…Производные типы данных, массивы, работа с массивами.
- •22…Файлы прямого и последовательного доступа к данным, форматизованный и неформатизованный ввод/вывод.
- •24…Понятие подпрограммы, назначение подпрограмм, использование подпрограмм.
- •26…Передача параметров в подпрограмму, параметры входные и выходные, параметры , передаваемые по значению и по адресу.
- •27…Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.
- •28…Передача параметров массивов в подпрограмму, примеры.
- •29…Рекурсивные функции, примеры.
- •30…Понятие структурного программирования, этап проектирования – композиция и декомпозиция, понятие статической и динамической структуры программы, спецификация программы.
- •31…Понятие частичной и полной корректности программы, правила вывода – общий вид, правила консеквенции.
- •32… Правила вывода для операторов: пустого, присваивания, составного.
- •33… Правила вывода для оператора ветвления.
- •34… Правило вывода для операторов: оператора выбора, операторов цикла с параметром.
- •35… Правила вывода для циклов с предусловием и постусловием, пример использования правил вывода для реализации цикла с постусловием оператором цикла с постусловием.
- •36… Пример для доказательства правильности программы.
16…Ввод/Вывод данных в с.
Каждый исходный файл, который обращается к функции из стандартной библиотеки, должен где то в начале содержать строку #include <stdio.h>. В файле stdio.h определяются некоторые макросы и переменные, используемые библиотекой ввода/вывода. Ввод scanf(<строка формата>,<список ввода>). Вывод printf(<строка формата>, <список ввода>), где строка формата это последовательность символов, выводимых на экран и спецификации форм, определяющих формат величин, присваиваемых элементам списка. Спецификации формата начинаются с % и имеют следующий вид: :[[-] w [d]]c , где все что есть в [] Может отсутствовать , w и d – определенный минимальный, размер поля(w) отводимый под элементы списка. Знак «-» если есть, говорит от том, что выводим число, выравнивая по левому краю. C – если элемент – символ, d или I к целому типу, f- вещественный с фиксированной точкой, G(g) вещь, без незначащих нулей, e(E) вещь, с плавающей точкой, p позволяет вывести указатель в 16-теричном формате, s строка заканчиватся на 0 или определяется с помощью w и d, u-десятичная константа.
17…Ввод/Вывод данных в С++.
Для организации консольного ввода/вывода данных необходимо подключить заголовочный файл iostream. В этом файле определены:
1.Объект cin, который предназначен для ввода данных с клавиатуры.
2. Объект cout, который предназначен для вывода данных на экран.
3.операция >>,которая используется для извлечения данных из входного потока
4. операция <<, которая используется для помещения данных во входной поток
5. Операции форматированного ввода/вывода.
Значение типа char помещается в поток как единичный случай и занимает в потоке поле, размерность которого равна 1;
Строка помещается в поток как последовательность символов и занимает в потоке поле, размерность которого равна длине строки;
Значение целого типапомещается в поток как десятичное число и занимает в потоке поле, размерность которого достаточна для размешения всех цифр числа, а в случае отрицательного цисла и для знака минус, положительные числа включаются в поток без знака.
Значение вещественного типа помещается в поток с точностью 6 цифр после десятичной запятой, в зависимости от величины числа оно может быть выведено в экспоненциальной форме или в десятичной форме.
Для формирования потоков используются манипуляторы.
18…Производные типы данных, массивы, работа с массивами.
Производные типы
Производные типы можно условно подразделить на две группы:
Непосредственно производные типы. Эти типы являются производными от некоторых существующих типов, реализуя типы указателей, ссылки, функции преобразования типов. В группу непосредственно производных типов входят:
массивы
указатели
ссылки
перечисления
указатели на члены класса.
Составные производные типы. В группу составных производных типов входят:
классы
структуры
объединения
Массивы
Массив переменных или объектов состоит из определенного числа однотипных данных, называемых элементами массива. Все элементы массива индексируются последовательно, начиная с нуля. Размещение элементов массива в памяти выполняется последовательно.
Между указателями и массивами существует взаимосвязь: любое действие над элементаим массивов, которое достигается индексированием, может быть выполнено и с помощью указателей. Вариант программы с указателями(динамический массив) будет работать быстрее.
Статический массив:
<базовый тип><имя массива>[<размер масива>]={<список инициализации>}
Память под статический массив выделяемся на этапе объявления массива в стеке или сегменте данных(в зависимости от спецификатора класса памяти, указанного явно или используемого по умолчанию).
Для обращению к элементу массива указывается имя массива, а затем в квадратных скобках индекс(номер). Индексом может быть любое целое выражение, образуемое целыми переменными и целыми константами.
Ввод и вывод массивов производится поэлементно.
Динамические массивы
Имя массива является указателем-переменной, память под элементы массива выделяется в куче(динамической памяти) с помощью специальной команды new.
<базовый тип>*<имя массива>= new <базовый тип>[<размерность массива>]
Указатель а хранит адрес нулевого элемента. Выражение *(а+2) говорит о том, что вначале мы сдвинемся по отношению к нулевому элементу массива а на столько байт, сколько занимает 2 элемента, а затем, обратимся к значению, которое там хранится. Освободить память, выделенную под динамический массив можно командой delete. (delete [] m)
Двумерные массивы( таблицы,матрицы) представляют собой фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент определяется номером строки и столбца, на пересечении которых он находится. Двумерный массив реализуется как одномерный, каждый элемент которого тоже массив.
Статические двумерные массивы: <базовый тип><имя массива>[число строк][число столбцов]
Динамические двумерные массивы: <базовый тип>**<имя массива>= new <базовый тип>*[<размерность массива>]обращаться можно с помощью индексации( а[i][j]), или с помощью указателей( *(*(а+i)+j))
19…Указатели, работа с указателями в С/С++.
Программист может определить свои собственные переменные для хранения адресов области памяти. Такие переменные называются указателями. В С++ различают три вида указателей: указатели на объект, на функцию, на void, которые отличаются друг от друга свойствами и допустимыми операциями. Указатель не является самостоятельным типом, он всегда связан с каким-либо другим- базовым типом. Указатели позволяют максимально эффективно решить проблему возврата нескольких значений из функции, а также возврата больших объектов, копирование которых нежелательно.
Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа(простого или составного). Простейшее объявление указателя на объект имеет следующий вид: <базовый тип>[<модификатор>]*<имя указателя> (модификатор не обязателен и может иметь значение near(по умолчанию), far, huge).
Указатель может быть переменной или константой, указывать на переменную или константу, а также может быть указателем на указатель. Величины типа указатель, подчиняются общим правилам определения области действия, видимости и времени жизни. Память под указатели выделяется в сегменте данных или в стеке, а область памяти связанная с указателем, обычно выделяется в динамической памяти(куче).
Указатель на функцию содержит адрес в сегменте кода, по которому передается управление при вызове функции. Указатели на функцию используются для косвенного вызова функции(не через ее имя, а через переменную, хранящую ее адрес), а также для передачи функции в другую функцию в качестве параметра.
Указатель типа void применяется в тех случаях, когда конкретный тип объекта, адрес которого нужно хранить, не определен. Указателю на void можно присвоить значение указателя любого типа, а также сравнить его с любым указателем, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явным образом.
Перед использованием любого указателя надо выполнить его инициализацию, т.е. произвести присваивание начального значения. Способы инициализации указателя:
1)присваивание указателю адреса существующего объекта:
- с помощью операции получения адреса:(int a=50; int *x=&a; int *y(&a);)
- с помощью значения другого инициализированного указателя(int *z=x;)
- с помощью имени массива или функции;
2) присваивание указателю адреса области памяти в явном виде( int *p=(int*00xB8000000, где 0xB8000000-шестнадцатеричная константа)
3) присваивание пустого значения (int *x=NULL; int *y=0)
4) выделение участка динамической памяти и присваивание ее адреса указателю (int *a= new int; int *b=new int(50);
Очистка памяти производится операцией delete.
Указателями можно выполнять операции: разадресации или косвенного обращения к объекту(* предназначена для доступа к значению, адрес которой хранится в указателе, ее можно использовать как для получения значения, так и для его изменения), получения адреса(& применима к величинам, имеющим имя и размещенным в ОП), сравнение и приведение типов , присваивания(используется для изменения значения- указателя или значения, которое хранится по адресу, записанному в указателе), арифметические операции: сложения с константой, вычитание, инкремент, декремент(автоматически указывают размер типа величин, адресуемых указателями, имеют смысл при работе со структурами данных, последовательно размещенными в памяти).
20… Строковый тип в С/С++, стандартные функции для работы со строками.
Строка – это последовательность символов определенной длины. Существуют два типа данных, кототрые используются для представления строк. Первый: строка представляет собой массив базового типа char, конец которого отмечается нулевым символом ‘\0’, строки данного типа, называемые строками С, все еще широко используются, например, строковые константы в кавычках, такие как “Hello”, реализуются в С++ как строки С.
Второй: строка представляет собой объект класс string, класс string позволяет обрабатывать строки посредством стандартных операторов С++, использовать их в составе стандартных выражений, в классе string контролируются границы массива. Для работы со строками в стиле С надо подключить заголовочный файл cstring, а для работы со строковым классом нужно подключать заголовочный файл string.
Формат объявления строки первым способом: char <имя строки>[n+1];, где n максимальное количество символов в строке. 1 прибавляется для того, чтобы строка вместила нуль-символ. При этом строка может быть заполнена не до конца.
Строковую переменную можно инициализировать при объявлении, при этом необязательно указывать ее размер.
Ввод строк: cin>> (символы будут считываться до тех пор, пока не встретится символ пробела, табуляции или перевода строки, после чего ввод прекратится)
Сin.getline(s,n) – (вводится все трока целиком(до символа перевода строки) ввод строки s, а параметр n задает максимальное количество символов в этой строке, если ввести символов больше n то лишние будут проигнорированы)
Основные операции: Обратится к символу строки можно так же кАк и к элементу обычного массива, указав имя строковой переменной и, в квадратных скобюках, индекс требуемого символа. Строки в стеле С отличаются от переменных других типов днных, и многие операции языка С++ к ним неприменимы. Нельзя использовать строковую переменную в стиле С в операторе присваивания. Чтобы присвоить значение строковой переменной в стиле С, можно воспользоваться стандартной функцией strcpy(s,”Привет”)
Или strncpy(s1,s2,10); - копирует 10 символов из строковой переменной s2(независимо от ее длины) в строковую переменную s1
Сравнение двух строк в стиле С на эквивалентность выполняется с помощью стандартной функции strcmp(s1,s2), она возвращает отрицательное число, положительное число, либо ноль в зависимости от того , окажется первая из переданных ей строк меньше, больше или равной второй с точки зрения лексикографического порядка.
Strchr(s,ch) – функция возвращает указатель на первое вхождение символа ch в строке s, если его нет то возвращает NULL.
Для преобразования строки с стиле С, состоящей из цифр, в число используются функиции atoi(возвращает значение типа int), atol(long), atof(float). Для использования данных функций нужно подключить зазоловочный файл «stdlib» .
Если строка в стиле С, переданная в качестве аргумента любой из функций преобразования, не содержит число, то функция возвращает ноль.
Если первый символы строки представляют собой число указанного типа, то это число и будет возвращаться в качестве результата, а остальные символы проигнорируются.
STRING
Strong(s1) – определяет длину строки без нуля Strstr(s1,s2) результат ук. на начало строки s2 в строке s1, если она там есть и 0 если нет. Strcat(s1,s2) в s1 записывается результат объединения s1 и s2 Strapr(s1) преобразует строчную запись в прописную Strlw(s1) противопоставление предыдущей Strset(s,c,n) заменяет в строке s n символов на символ c
Класс string позволяет работать со значениями и выражениями типа string почти также как со значениями простого типа данных.
Объявление: string<имя переменной>(<значение>)
Например:
String s(“Привет”); (переменной s присваивается объект типа стринг, содержащий те же символы и в том же порядке, что и строка привет, но его значение не завершается нуль-символом ‘\0’)
Или srting s=”Привет”;
Ввод: getline(cin,s)- прекращает чтение встретив символ \n
getline(cin,s,’l’)- перкращает считывание встретив знак l
cin>>s – считывает до пробела,табуляции или перевода строки
Класс string поддерживает доступ к символам, как к элементам массива.
Но можно использовать функцию-член at ( s.at(i);) выполняет ту же функцию что и квадратные скобки, но проверяет допустим ли индекс, переданный в качестве аргумента.
s.Lenght() кол-во символов в строке
s.substr(I,sl) возвращает подстроку строки s которая начинается с позиции i и содержит n символов
s.empty() возвращает true если является пустой строкой
s.insert()вставляет в строку s строку s1, начиная с позиции i
s.erase(i,n) удаляет n символов, начиная с позиции i
s.find(sl,i) возвращает индекс первого вхождения строки s1, причемпоиск начинается с позиции i
s.rfind(sl) возвращает индекс первого справа вхождения строки s1 в стоку s
s.replace(I,n,sl) заменяет n символов строки s начиная с позиции i на подстроку s1
s.compare(sl) сравнивает s и s1
21… Работа со структурами и объединениями в С/С++.
Структуры, как и массивы, относятся к составным типам данных. Однако в отличие от массивов, структура может содержать элементы разных типов.
Описание: struct <имя структуры>
{<тип 1><идентификатор 1>;
<тип 2><идентификатор 2>;
…
<тип n><идентификатор n>;};
После определения структуры ее тип может использоваться так же, как и любой из стандартных типов данных. При описании переменной типа структура можно проводить ее инициализацию, для этого значения ее элементов перечисляются в фигурных скобках в порядке описания.
Доступ к полям структуры выполняется с помощью операций выбора: при обращении к полю через имя переменной используется операция .()точка, при обращении через указатель используется операция ->.
Структура наряду с другими членами может содержать конструктор, который используется для инициализации членов- данных структуры. Имя конструктора совпадает с именем массива. Для конструктора не указывается тип возвращаемого значения,т.к. назначение конструктора инициализировать члены-данные. В качестве параметров конструктору передаются аргументы, которые будут использоваться при инициализации. Если структура содержит конструкторы, то работа с ней возможна только через указатели. Структуры это переход т структурного программирования к объектно-ориентированному.
Объединения C++ очень похожи на структуры, за исключением того, как C++ хранит их в памяти; кроме того, объединение может хранить значение только для одного элемента в каждый момент времени. следующая структура определяет объединение с именем distance, содержащее два элемента:
union distance
{ int miles; long meters;};
Объединение представляет собой структуру данных, подобную структуре C++, и состоит из частей, называемых элементами.
Когда вы объявляете объединение, компилятор C++ распределяет память, достаточную для хранения только самого большого элемента объединения.
Описание объединения не распределяет память, вместо этого оно обеспечивает шаблон, с помощью которого программы могут позднее объявлять переменные..
Чтобы изменить значения элемента объединения внутри функции, ваша программа должна передать переменную объединения в функцию с помощью адреса.
Программы обращаются к элементам объединения, используя точку. Когда ваша программа присваивает значение элементу объединения, то значение, присвоенное, возможно, ранее другому элементу, теряется.
Анонимное объединение представляет собой объединение, у которого нет имени. Когда программа объявляет анонимное объединение, она может использовать элементы такого объединения подобно любым другим переменным без точки.
Union <имя объелинения>
{<тип 1><идентификатор 1>;
<тип 2><идентификатор 2>;
…
<тип n><идентификатор n>;};
Различия состоят в следующем:
1. Объединения могут содержать битовые поля, но активным бывает только одно из них. Все они начинаются в начале объединения.
2. С++ : В отличие от структур С++, объединения С++ не могут использовать спецификаторы класса доступа: public, private и protected. Все поля объединения имеют доступ private.
3. Объединения инициализируются через компонент, объяв-
ленный первым
union local87 (*
int i;
double d;
*) a = (* 20*);
4. С++ : Объединение не может участвовать в иерархии
класса. Оно не может являться производным от какого-либо
класса или быть базовым классом. Объединение может иметь
конструктор.
5. С++ : Анонимные объединения не могут иметь компоненты-функции.