
- •8.Совместимость и преобразование типов. Явное и неявное преобразование.
- •10. Оператор присвоения. Комбинированные операторы присвоения. Математические и логические операции, операции сравнения . Ограничения на применения операторов(несовместимость типов).
- •11.Условная инструкция. Условный оператор. Пример.
- •12. Оператор множественного выбора. Пример. Управление оператором множественного выбора с помощью оператора break.
- •Вопрос 19. Регулярные структурированные типы. Одномерные массивы. Примеры работы с одномерными массивами (инвертирование массива относительно центрального элемента, относительно к-го элемента)
- •Вопрос 20. Регулярные структурированные типы. Одномерные массивы. Примеры работы с одномерными массивами (сложение векторов, скалярное произведение векторов, проверка на равенство)
- •Вопрос 22-24 Сортировка массивов. Методы сортировки (простого выбора, простой вставки, простого обмена). На примере массива структур.
- •Функции
- •39. Текстовые файлы
- •Функции вывода в стандартный и файловые потоки
- •Int printf([строка формата],
- •Функции ввода из стандартного и файловых потоков
- •Int scanf([строка формата],
- •Int fscanf(file*f,[строка формата],
- •40. Бинарные файлы с
- •41. Пользовательские типы данных
- •42. Модульная организация программы
8.Совместимость и преобразование типов. Явное и неявное преобразование.
Два типа считаются совместимыми, если:
оба они есть один и тот же тип;
оба вещественные;
оба целые;
один тип есть тип-диапазон второго типа;
оба являются типами-диапазонами одного и того же базового типа;
оба являются множествами, составленными из элементов одного и того же базового типа;
оба являются упакованными строками (определены с предшествующим словом PACKED) одинаковой максимальной длины;
один тип есть тип-строка, а другой - тип-строка, упакованная строка или символ;
один тип есть любой указатель, а другой - нетипизированный указатель;
один тип есть указатель на объект, а другой - указатель на родственный ему объект;
оба есть процедурные типы с одинаковыми типом результата (для типа-функции), количеством параметров и типом взаимно соответствующих параметров.
Совместимость типов приобретает особое значение в операторах присваивания. Пусть T1 - тип переменной, а Т2 - тип выражения, т.е. выполняется присваивание T1 := T2. Это присваивание возможно в следующих случаях: T1 и T2 есть один и тот же тип и этот тип не относится к файлам или массивам файлов, или записям, содержащим поля-файлы, или массивам таких записей;
T1 и T2 являются совместимыми порядковыми типами и значение T2 лежит в диапазоне возможных значений T1;
T1 и T2 являются вещественными типами и значение T2 лежит в диапазоне возможных значений T1;
T1 - вещественный тип и T2 - целый тип; ,
T1 - строка и T2 - символ;
T1 - строка и T2 - упакованная строка;
T1 и T2 - совместимые упакованные строки;
T1 и T2 - совместимые множества и все члены T2 принадлежат множеству возможных значений T1;
T1 и T2 - совместимые указатели;
T1 и T2 - совместимые процедурные типы;
T1 - объект и T2 - его потомок.
В программе данные одного типа могут преобразовываться в данные другого типа. Такое преобразование может быть явным или неявным.
Явное и неявное преобразование
В C++ различают явное и неявное преобразование типов данных. Неявное преобразование типов данных выполняет компилятор С++, ну а явное преобразование данных выполняет сам программист. О преобразовании типов данных скажу следующее: «Результат любого вычисления будет преобразовываться к наиболее точному типу данных, из тех типов данных, которые участвуют в вычислении». Для наглядного примера представлю таблицу с преобразованиями типов данных. В таблице рассмотрим операцию деления. В качестве целочисленного типа данных возьмем int, ну и вещественный тип данных у нас будет float.
Таблица 1 — Явное и неявное преобразование типов данных в С++
x y Результат деления Пример
делимое делитель частное x = 15 y = 2
int int int 15/2=7
int float float 15/2=7.5
float int float 15/2=7.5
Из таблицы видно, что меняя переменные различных типов данных местами, результат остается тот же (в нашем случае это делимое и делитель). О неявном преобразовании типов данных все. Что же касается явного преобразования, то оно необходимо для того чтобы выполнять некоторые манипуляции, тем самым меняя результат вычисления. Самый простой способ явного преобразования типов данных, пример: допустим нам необходимо разделить такие числа 15 и 2, делим! 15/2=7. Результат тот же, что и в таблице. Но если сделать незначительные преобразования, например: 15.0/2=7.5 при таком делении число 15 является вещественным, значит и результат будет вещественный. Само число 15 с точки зрения математики не изменилось, ведь 15=15.0. Этот же прием можно было применить к двойке, результат был бы тем же, а можно было сразу к двум числам, но зачем ,если хватает одного из двух.
Еще один способ явного преобразования типов данных:
float(15) / 2 // результат равен 7.5, число 15 преобразуется в вещественный тип данных float.
double(15) / 2 // результат равен 7.5 – тоже самое!!!
9.Линейная структура. Простейший ввод, вывод (с\с++). Ввод и вывод данных. Универсальные функции операторы ввода и вывода.
Линейная структура
Входные данные
Результат
Линейная структура выполняет некое преобразование входных данных. Она не влияет на последовательность выполнения остальных шагов. Примером линейного шага могут быть операции: присваивание, ввод значений переменных с клавиатуры, вывод значений переменных на экран, например, при вводе значений переменных с клавиатуры входные данные – это десятичное число, представленное в символьной форме; далее выполняется преобразование в машинный формат. Результат: число в машинном формате занесено в поле вводимой переменной.
Выбор одного из нескольких вариантов вычислений
Ветвление позволяет сделать выбор одного из двух вариантов обработки информации. Выбор осуществляется на основе условия.
L
S1
S2
ECЛИ условие L удовлетворяется, ТО выполнить действия S1; ИНАЧЕ выполнить действия S2.
Частный случай этой структуры:
L
S
ЕСЛИ условие L удовлетворяется, ТО выполнить действия S, ИНАЧЕ нет действий.
Ввод и вывод данных
Ввод-вывод данных в языке C++ осуществляется либо с помощью функций ввода-вывода в стили C, либо с использованием библиотеки классов C++. Преимущество объектов C++ в том, что они легче в использовании, поэтому предлагаю рассмотреть именно их.
Описание объектов для управления вводом-выводом содержится в файле iostream.h. При подключении этого файла с помощью директивы #include <iostream.h> в программе автоматически создаются виртуальные каналы связи cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток << и чтения из потока >>.
С помощью объекта cin и операции >> можно присвоить значение любой переменной. Например, если переменная x описана как целочисленная, то команда cin>>x; означает, что в переменную x будет записано
некое целое число, введенное с клавиатуры. Если необходимо ввести несколько переменных, то следует написать cin>>x>>y>>z;.
Объект cout и операция << позволяет вывести на экран значение любой переменной или текст. Текст необходимо заключать в двойные кавычки. Запись cout<<x; означает вывод на экран значения переменной x.
Ввод массива
int * input (int & n)
{ cout << "/n введите размер массива содержащего целые положительные числа/n" ;
cin >>n;
int * w=new int [n];
for (int i=0; i<n;i++)
cin >>w[i];
return w;
}
Вывод массива
int output (int*w, int n, char t [ ])
{ cout<<t;
for(int i=0;i<n;i++)
cout<<w[i]<<”_”;
cout<<endl;
}
Ввод матрицы
int**input(int & n)
{
сin>>n;
int**w=new int *[n];
for (int i=0;i<n;i++) {
w[i]=new int[n];
for(int j=0;j<n;j++)
сin>>w[i][j];
}
return w;
}
Вывод матрицы
void output (int**w,int n)
{
for (int i=0;i<n;i++){
for (int j=0;j<n;j++)
cout<<w[i][j]<<"_";
cout<<endl;
}