
- •1)Понятие информатики, информации, кодирования информации.
- •4)Понятие алгоритма, рекурсивные функции.
- •5)Понятия алгоритма, системы текстовых замен.
- •6)Способы описания языков программирования: бнф-нотации, синтаксические диаграммы.
- •8)Объект и его атрибуты. Специализация и реализация типа данных.
- •9)Сигнатура операции, факторы, затрудняющие реализацию операций.
- •Факторы, затрудняющие реализацию операций:
- •(36)Понятие подпрограммы(пп),назначение подпрограмм, использование подпрограмм.
- •(38)Передача параметров в подпрограмму,параметры входные и выходные,параметры,передаваемые по значению и адресу.
- •(39)Использование подпрограмм,параметры,формальные,локальные,глобальные,обращения к подпрограммам,фактические параметры.
- •(40)Передача параметров массивов в подпрограмму,примеры.
- •(44)Параметры шаблона функции,использование функции,пример.
8)Объект и его атрибуты. Специализация и реализация типа данных.
Объект данных: контейнер для хранения значений данных. Он характеризуется набором атрибутов. Атрибуты определяют количество значений и логическую структуру. Одни объекты данных создаются и существуют с самого начала выполнения программы. Другие создаются в процессе выполнения. У каждого объекта есть время жизни.
Элементарный ОД: хранящиеся в нём значения используются как единое целое. Если объект представляет собой или содержит другие объекты, то он называется структурой.
Постоянные атрибуты: тип, местоположение, имя. Значения могут изменяться.
Переменная: объект, имеющий тип, имя и значение, который может изменяться при выполнении.
Константа: объект, чьё значение в программе не изменяется.
Тип данных определяется спецификацией, включающей в себя атрибуты значения и операции.
К реализации типа данных относится способ представления в компьютере и способ представления операции через алгоритмы и процедуры. Спецификация и реализация типа не зависит от синтаксического представления. Атрибуты объектов представляются с помощью описания или определения типов. Значением может быть множество констант.
9)Сигнатура операции, факторы, затрудняющие реализацию операций.
Сигнатура - это имя функции плюс спецификация формальных параметров.
Сигнатура функции(операции) — часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других. В различных языках программирования существуют разные представления о сигнатуре функции, что также тесно связано с возможностями перегрузки функций в этих языках. Например, в языке программирования C++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её аргументов, что составляет сигнатуру функции в этом языке. Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса.
Факторы, затрудняющие реализацию операций:
1. невозможность определить результат для некоторых аргументов 2. неявные аргументы 3. побочные эффекты 4. самоизменение
10)Подтипы, объявление типов и операций, перегруженные операции.
Подтипы как подмножество значений некоторого базового типа с тем же набором операций. Подтип не вводит никаких дополнительных операций над данными и не определяет никакого нового типа.
Объявление используется, чтобы уведомить компилятор о существовании элемента
Обьявление типов данных для переменных. int, double, char и так далее.
Перегрузка операций - это средство языка, позволяющее вводить операции над типами, определяемыми пользователем.
Перегруженные операции - когда символ операции обозначает не одну, а общую операцию, например сложение (+). Перегружать операции нужно с добавлением оператора operator.
Перегружаемость - возможность использования в различных случаях для одной и той же операции операндов различных типов. Так, например, операция сложения позволяет "смешивать" типы int, double, float и другие в одном выражении. Такой полиморфизм обеспечен внутренними механизмами языка С++.
Для удобства чтения и написания кода разрешается перегрузка некоторых операций. Оператор перегрузки записывается с помощью ключевого слова operator. Разрешена перегрузка следующих операций:
бинарные +,-,/,*,%,<<,>>,==,!=,<,>,<=,>=,=,+=,-=,/=,*=,%=,&=,|=,^=,<<=,>>=,&&,||,&,|,^;
унарные +,-,++,--,!,~;
оператор присваивания =;
оператор индексации [].
Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта.
11) Переменные- область памяти использующие имя(идентификатор)
[<класс памяти>][<eayt>]<тип><идентификатор><инициализация>
Описание переменных в C++ задаётся явным образом или по умолчанию.
Класс памяти определяет время жизни и область видимости.Если класс памяти не указан явным образом то будет определен по умолчанию компьютером.
Время жизни может быть постоянным, временным.
Область видимости- часть программы, в который идентификатор может использоваться в явном виде.
12)Операции отношения(<,<=,>,>=,==)
Математические операции
Присваивание
Инкремент (++) и декремент (--)
Операции sizeof (определение размера операнда в байтах)
Логические операции
Унарные, бинарные, тринарные
Порядок.!
Выражения- арифметические логические текстовые
Составное выражение, простое выражение
13)Каждая программа состоит из функций. Каждая функция идентифицируется 4-мя элементами:
1-тип возвращаемого значения
2-имя функции
3-список параметров
4-тело функции
<тип значения><имя функции>(<список параметров>){<тело функции>}
+пример программы =)
14)Пустой оператор ; используется для помещения метки перед } или того чтобы снабдить оператор пустым телом (пример while) пустым телом
Составной- использует несколько операторов
Оператор-выражение: выражение.
Возврата return
15)Goto<имя метки> передает управление непосредственно на оператор обозначенный именем метки.
Затрудняет чтение больших программ, использовать рекомендуется в крайних случаях.
16)for(<инициализация>;<выражение>;<модификация>)
Инициализация используется для обьявления и присвоения начальных значений величинам использующимся в циклах. Выражение определяет условие выполнения цикла:Если его результат истина-цикл выполняется.
Модификация выполняется после каждого прохождения цикла, изменяет параметры
17)С предусловием while(b)s
Если b окажется ложным при первой проверке, то тело цикла не выполняется ни разу, если b во время работы цикла не изменяется то цикл не может завершить работу(зацикливание).Внутри т ела цикла должен находится оператор изменяющий b.
С постусловием do s while(b)
Те же возможности ситуации зацикливания.
18)goto-15 вопрос
continue- оператор перехода к следующей итерации цикла, пропуская все операторы до конца цикла.
break- используется внутри операторов ветвления цикла для перехода в точку программы за оператором.
switсh- разветвление процесса вычисления на несколько направлений ( с помощью case)
19)Целые: short, int, long
Вещественные:float,double,long double
Символьные типы:char(1 байт ASCII) wchar(2 байта UNICODE)
Логический:bool(значение истина или ложь 1 байт)
+примеры
20)Присваивание x=5;
Условные операции?(единственная тринарная)
Логические операции -||-или &-и ==-проверка на равенство !=-неравно
Арифметические операции
Операция new- выделяет участок памяти с указателем, delete-освобождает выделенную память
Инкремент(++)-увеличивает на 1, декремент(--)-уменьшает на 1
21)Логические: и- && или-|| не-!
Бинарные арифметические(*,/,%,+,-)
Упаковка-преобразование типов значений(int, double) в ссылку на объект хранимый в динамически распределенной области памяти. Упаковка производится с помощью box.
Распаковка- преобразование упакованного типа в неупакованное значение хранимое в стеке. Выполняется приведением типов.
22)Перечислимый тип определяется как набор идентификаторов с точки зрения языка играющих ту же роль что и обычные именованные константы но связанные с этим типом. Возможность-экономия памяти.
23)scan(f) print(f) 24)cin cout- объекты класса iostream.
25)Массивы(одномерные)-фиксированное количество элементов одного типа, объединенных общим именем(каждый элемент имеет свой номер)
Статический:<базовый тип><имя массива>[<размер>]={<значение при инициализации>}
Пример: float w[10]- не инициализируется
Int b[5]={1,2,3}-инициализируется значениями 1 2 3 0 0
Память выделяется на этапе выделения массива в стэке или сегменте данных. Можно использовать указатели!!!
26)Указатели: все обращения в программе к переменным по её имени записывается компилятором на адрес области памяти в которой хранится значение. Можно определить собственные переменные называемые указателями:
1-на объект
2-на функцию
3-на void
Не является самостоятельным типом.Всегда связано с другими типами.
Формат <базовый тип>[<модификатор>]*<имя указателя>
Пример: int*a //на целое значение
Int**x //указатель на указатель на целое значение
const*b //на константу
int*const c=&I Указатель константа на переменную
Присваивание:int a=50
Int*x=&a //Присвоение адреса переменной a
Int*y(&a)
Int*z=x //присваивает указателю адрес хранящийся в x.
27)Строка- последовательность символов определенной длины.
Строка в виде массивов символов. Формат char<имя строки>[n+1(для пустого символа)]
Ввод cin.getline(s,n)
Преобразование строк в числа: загрузить функцию cstd.lib
Atoi для int
Atol для long
Atof для float
28)Класс string:
Можно присваивать:s3=s1+s2(если s3 окажется мал то выделяется память)
String<имя переменной> или string<имя>(значение)
Cin>>s cout<<s операции: можно обращаться как к элементу массива
s.at(i)- не допускается превышение значения аргумента.
29)Структура как и массив относится к составным типам данных, но может содержать элементы разных типов
struct<имя структуры>{<тип><идентификатор>;
<тип><идентификатор>};
Доступ к полям структуры осуществляется с помощью операций выбора через имя-точка, через указатель ->
30)Объединение- представляет собой структуру данных и состоит из частей(элементов), может хранить значение только для одного элемента в каждый момент времени ,в отличие от структур определяет шаблон, для обращения использует точку.
31) По способу доступа файлы можно разделить на последовательные, чтение и запись в которых производится сначала файла байт за байтом, и файлы с произвольным доступом, допускающие чтение и запись в указанную позицию.Форматизированный и не форматизированный в/в ???
32)
Стандартные операции работы с файлами хранятся в библиотеке stdio.h. Функция открытия файла называется fopen(). Команда открытия (создания пустого) файла запишется так: FILE *f1,*f2;
f1 = fopen("f1.txt","r"); //”r” значит будем читать из файла
f2 = fopen("f2.txt","w"); //”w” значит будем записывать в файл
Закрывается файл с помощью функции fclose():fclose(fo);
33)Работа с текстовыми файлами
Для работы надо подключить заголовочный файл
#include <fstream>
Существуют входные, выходные и двунаправленые потоки
Пример открытия :
1)входного потока ifstream in(“infile.txt”);
2)выходного потока ofstream out(“infile.txt”);
3)поток ввода-вывода fstream both(“infile.txt”);
Считывание данных из файла in>>x;
Запись данных в вайл out<<x;
После работы с файлами их надо обязательно закрыть in.close(); out.close();
Пример программы
#include <fstream>
using namespace std;
int main (){
ofstream out(“outfile.txt”);
for (double i=0;i<10;i+=0.5)
out<<i<<’ ‘; //запись данных в текстовый файл
out.close();
}
34)Работа с двоичными(бинарными) файлами
Для работы надо подключить заголовочный файл
#include <fstream>
Для открытия двоичных файлов необходимо открыть входной поток, используя спецификатор режима ios::binary.
Пример
ifstream in(“infile.dat”,ios::binary);
Функция get считывает 1 символ (1 байт) в переменную ch типа char и возвращает ссылку на этот поток
in.get(ch);
Функция put записывает символ ch в поток и возвращает ссылку на этот поток.
in.put(ch);
Считываются абсолютно все символы учитывая пробел, \n и тд.
Пример вывода содержимого файла на экран
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
char next;
ifstream in(“infile.dat”,ios::binary);
in.get(next);
//функция eof возвращает true если файл считан до конца
while (! in.eof())
{
cout<<next;
in.get(next);
}
in.close();}
В двоичных файлах могут храниться последовательности целых и вещественных типов, где каждое значение занимает от 2 до 10 байт, размеры которых за ранее не известны в этом случае использовать функции get и put невозможно. Для считывании и записи блоков используется функции read() и write()
пример read() double i; in.read((char*)&i, sizeof(double));
(char*)&i – в какую переменную будут записаны данные из потока.
sizeof(double) – сколько байт считываем
пример write() int i; out.write((char)&i,sizeof(int));
Записывает в i указанное число байт(sizeof(int))
Пример программы
#include <fstream>
using namespace std;
int main ()
{
char next;
ofstream out(“outfile.dat”,ios::binary);
for (double i=0;i<10;i+=0.5)
out.write((char*)&i,sizeof(double)); //запись данных в двоичный файл
out.close();
}
35) Для обеспечения прямого доступа используется внутренний указатель файла, который определяет текущий индекс обрабатываемого байта файла(байты файла нумеруются как элементы массива с нуля) и используются две пары фунцкций:
seekg(n) – устанавливает указатель на позицию с номером n внутри файла для чтения.
Пример
in.seekg(3);
seekp(n) – устанавливает указатель на позицию с номером n внутри файла для записи.
Пример
out.seekp(3);
Константы позиционирования:
in.seekg(3,ios::beg);//устанавливает указатель на позицию с номером 3 относительно начала файла
in.seekg(3,ios::end);//устанавливает указатель на позицию с номером 3 относительно конца файла
in.seekg(3,ios::cur);//перемещает указатель на 3 индекса относительно текущей позиции
//streampos – специальный тип данных который используется для хранения индекса в файле.
streampos n=in.tellg(); - возвращает текущую позицию указателя потока ввода
streampos n=in.tellp(); - возвращает текущую позицию маркера потока вывода