Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika_1 (1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
134.66 Кб
Скачать

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(); - возвращает текущую позицию маркера потока вывода

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]