- •Аннотация
- •Предисловие
- •Г л а в а 1. Введение в указатели
- •§1. Понятие указателя. Операции разыменования и разадресации
- •§2. Инициализация и присваивание указателей
- •§3. Передача параметров функций с помощью указателей.
- •§4. Распределение динамической памяти.
- •4.1. Операция new
- •4.2. Операция delete
- •Упражнения, тесты.
- •Указатели и массивы
- •§1. Связь указателей и массивов
- •1.1. Указатели и одномерные массивы
- •1.2. Указатели и матрицы
- •Int MyFun (int *X, int n)
- •§3. Операции над указателями при работе с массивами.
- •3.1. Арифметические операции
- •3.2. Операции сравнения.
- •§4. Использование операций над указателями при работе с одномерными массивами
- •4.1. Использование индексов
- •4.2. Указатель в качестве параметра цикла
- •4.3. Использование указателя и индекса
- •§5. Строки.
- •5.1. Общая характеристика строк.
- •5.2. Примеры алгоритмов работы со строками.
- •5.3. Анализ строковых функций.
- •§6. Использование операций над указателями при работе со статической матрицей.
- •Упражнения, тесты.
- •Массивы указателей
- •§1. Статический массив указателей
- •§2. Частично динамическая матрица.
- •Int arr_of_size[n];
- •§3. Статический массив строк
- •§4. Динамический массив указателей
- •4.1. Указатель на указатель
- •4.2. Динамические “матрицы”.
- •Int *arr_of_size;
- •4.3. Передача матрицы в функцию
- •Int a[10]; FunArr1(a, 10,…);
- •Упражнения, тесты.
- •Задачи второго среднего уровня.
- •Структуры и другие типы, определяемые пользователем
- •§1. Структуры
- •Объявление структуры
- •1.2. Работа со структурой.
- •1.3. Вложенные структуры и статические массивы в структурах
- •1.4. Статический массив структур
- •§2. Cтруктуры и указатели
- •2.1. Указатели в структуре.
- •2.2. Указатели на структуру
- •2.3. Динамический массив структур
- •2.4. Ссылка на структуру.
- •2.5. Указатели и вложенные структуры
- •§3. Cтруктуры и функции
- •3.1. Передача полей структуры в функцию.
- •Void MyFun1 (int X, float &y, int *u1, float *u2, char *s);
- •3.2. Передача всей структуры в функцию
- •Void Fun1 (tst s,…);
- •Void Fun2 (tst & s,…);
- •Void Fun3 (tst* s,…);
- •§4. Cтруктуры и классы.
- •§5. Объединения.
- •Представление вещественных чисел в памяти компьютера.
- •§6. Поля битов (битовые поля)
- •Ввод в ы в о д
- •Symbol Code16 Code10 Code2
- •§7. Перечисления
- •Какие из строк (//1 – //9) правильные?
Какие из строк (//1 – //9) правильные?
Дан код:
union TU2 { struct { unsigned short lo;
unsigned short hi;
} w;
int k;
} N;
N.k=012345678; cout<<hex<<N<<endl;
cout<<hex<<N.lo<<endl; cout<<hex<<N.hi<<endl;
Что будет выведено? Варианты ответа:
12345678, в следующей строке 1234 и ещё ниже 5678
12345678, в следующей строке 5678 и ещё ниже 1234
Ошибка компиляции при объявлении объединения.
Ошибка компиляции в “командах” вывода.
Дан код:
struct tst { int l; float * coord; float per; } s1;
tst s2=s1; //1
tst *s2= new tst; //2
tst *s2=&s1; //3
tst &s2=s1 //4
tst &s2=*s1; //5
В каких вариантах правильно объявлена переменная ссылочного типа для структуры?
Дан код:
struct tb { unsigned b1:1; //1
unsigned *b2:1=&b1; //2
unsigned &b3:1=b1; //3
unsigned :5; //4
unsigned b4:1; }; //5
В каких строках (//1—//5) есть ошибки?
Лабораторная работа 6.
Тема. “Cтруктуры”.
Требования и общие указания к заданиям:
Одно и тоже задание выполнить двумя способами:
использовать статический массив в структуре и статический массив структур (см. пример 1). При этом количество структур (в примере количество студентов (n)) и количество элементов массива в структуре (в примере количество оценок для одного студента (m) )— константы;
задание выполнить с помощью динамических массивов (пример 2). Для этого:
в структуре объявить и создать динамический массив (в примере 2 Points);
размерность этого массива включить в структуру в качестве одного из полей (в примере 2 переменная n);
создать динамический массив структур (в примере 2 arrs);
Как в первом, так и во втором вариантах составить и использовать функции, параметром которого является указатель на структуру или ссылка на структуру.
Пример 1 (+).
Сформировать статический массив структур, каждый элемент которого содержит следующие три поля:
фамилия, имя отчество студента или школьника (вводим);
массив оценок фиксированной размерности, который также вводим;
средний балл (вычисляем).
Для каждого студента найти средний балл и рассортировать массив структур по этому полю.
const m=4;
// Количество оценок у одного студента.
struct tstr // Объявляем тип структуры.
{ char name[20] ; // Фамилия, имя , отчество.
int a[m] ; // Массив оценок .
float s ; // Средний балл.
} ;
// Ввод массива структур
void MyInp ( tstr x[], int,int );
// Вывод массива структур
void MyOut ( tstr x[], int );
// Сортировка массива структур
void MySort ( tstr x[], int );
/* Нахождение среднего значения в числовом массиве z (в целочисленном одномерном массиве, а не в массиве структур) */
float MyAver ( int z[], int );
int main()
{ const n=3;
/* Количество студентов, т.е. количество элементов массива структур. */
tstr ars[n]; // Статический массив структур (n — константа).
int i,j;
clrscr(); MyInp(ars,n,2);
/* Для каждого студента находим средний балл, т. е. для i-й структуры ars[i] вычисляем поле s. Для этого используем функцию MyAver.*/
for (i=0;i<n;i++)
ars[i].s=MyAver( ars[i].a,m);
cout<<" \n Before of sorting\n";
MyOut(ars,n); MySort(ars,n);
cout<<"\nAfter of sorting\n"; MyOut(ars,n);
getch(); return 0;
};
/* Ввод массива структур, т.е. фамилий и оценок всех (size) студентов. Ввод начинается со строки экрана с номером y0. */
void MyInp(tstr x[],int size, int y0)
{ int i,j, y,
coord1; // Номер позиции в строке
y=y0;
for (i=0;i<size;i++)
/* i – номер элемента массива структур (номер студента). */
{ gotoxy(2,y);
cout<<"Name ";
cin>> (x[i].name);
cout<<"Ocenki "<<endl;
y++;
for (j=0, coord1=8; j<m; j++,coord1+=3)
// j – номер оценки одного студента
// Цикл для ввода одной j - й оценки i – го студента с контролем ввода.
{ while(1)
{ gotoxy(coord1,y);
cin>>x[i].a[j];
if (x[i].a[j]>0 && x[i].a[j]<=10)
break;
else { gotoxy(coord1,y);
// “Стираем” неверно введённую оценку
cout<<" ";
}
}
}
y++;
}
};
/* Сортировка массива структур. Подробный анализ алгоритма смотри в 1-м семестре ([1]). */
void MySort ( tstr x[], int size)
{ int i,j,k,flag; tstr T;
k=size;
do { k--;
flag=0;
for (i=0; i<k; i++)
if (x[i].s < x[i+1].s)
{
/* Перестановка i- го и (i+1) – го элемента массива структур. */
T=x[i];
x[i]=x[i+1];
x[i+1]=T;
flag=1;
}
}
while (flag);
} ;
/* Вывод массива структур, т. е. выводим информацию обо всех студентах. */
void MyOut (tstr x[], int size)
{ int i,j,coord1; cout<< endl;
for (i=0;i<size;i++)
{ cout<<x[i].name<<" ";
for (j=0,coord1=25; j<m; j++, coord1+=3)
{ gotoxy(coord1,wherey());
cout<<x[i].a[j];
}
gotoxy(coord1,wherey());
textcolor(10);
cprintf("%5.2f",x[i].s);
cout<<endl;
}
cout<<endl;
} ;
float MyAver (int z[],int M)
{ float S=0; int j;
for (j=0; j<M; j++)
S+=z[j];
S/=M;
return S; };
Пример 2(+) (динамический массив структур и динамический массив в структуре).
Сформировать динамический массив многоугольников на плоскости. Количество сторон каждого из них различно и является полем структуры. Для каждого из многоугольников найти периметр и определить его тип в зависимости от количества сторон (треугольник, четырёхугольник, пятиугольник и остальные).
/*Структурный тип для определения декартовых координат одной точки плоскости. */
struct Point1
{float x,y;
};
/*Структурный тип для определения одного многоугольника плоскости. */
struct ttr
{
char *type; // Строка для названия.
unsigned n; // Количество вершин.
/* Указатель на динамический массив структур, т. е. массив точек одного многоугольника. Каждая точка имеет две координаты. Поэтому используется вложенная структура Point1, содержащая эти две координаты. */
Point1 *Points;
float per; // Периметр многоугольника.
};
/* Функция вычисляет периметр одного многоугольника, имеющего size вершин. В неё передаём указатель на динамический массив структур, т.е. массив точек одного многоугольника. Каждый элемент этого массива имеет тип Point1, т. е. содержит два числа (две координаты точки). */
float MyPer(Point1 *P, int size)
{ float Len=0;
/*В цикле находим сумму длин сторон, соединяющей 0-ю точку с 1 – й, 1-ю со 2 – й и т.д., (size-2) – ю точку с (size-1) – й. */
for(int j=0; j<size-1; j++)
Len+= sqrt((P[j].x-P[j+1].x)*(P[j].x-P[j+1].x)+
(P[j].y-P[j+1].y)*(P[j].y-P[j+1].y) );
/* Вне цикла добавляем длину стороны, соединяющей 0-ю точку с (size-1) – й точкой. */
return Len+sqrt((P[0].x-P[size-1].x)*(P[0].x-P[size-1].x)+
(P[0].y-P[size-1].y)*(P[0].y-P[size-1].y) );;
}
/* Функция получает поля одной структуры типа ttr, т. е. информацию об одном многоугольнике, кроме периметра. Периметр будет найден вызовом из main функции MyPer. Так как структура является результатом функции, то в качестве параметра объявлен указатель на неё.*/
void MyDef (ttr *Str, int size)
{ cout<<endl;
char t[40];
/* t — вспомогательная строка для названия многоугольника. В зависимости от количества вершин (size) формируем русско-латинское название многоугольника. При этом предусмотрены четыре варианта. */
switch (size)
{case 3: strcpy(t,"Triangle"); break;
case 4: strcpy(t,"Chetirexygolnic");break;
case 5: strcpy(t,"Pjatyygolnic"); break;
default: strcpy(t,"Other");
}
/* Динамически создаём строку type, длина которой берётся из вспомогательной строки t. Используем операцию “->”(стрелка), потому что Str — указатель на структуру, а не потому, что type и Points — указатели. */
Str->type=new char [strlen(t)];
strcpy(Str->type, t);
/* Создаём динамический массив структур внутри структуры Str. То есть определяем массив точек одного многоугольника размером size. */
Str->Points=new Point1[size];
for (int i=0; i<size; i++)
{ Str->Points[i].x= float(random (5)-2);
Str->Points[i].y= float(random (5)-2);
}
/* Использовали операцию “->”, потому что Str — указатель, а операция “.”, потому что Points[i] — это не указатель, а i – й элемент вложенного динамического массива структур. Указателем является Points, в котором хранится адрес начала этого массива.*/
}
/* Функция для вывода полей одной структуры, то есть информации об одном многоугольнике. Для экономии памяти в качестве параметра используем указатель на структуру, несмотря на то, что в этой функции структуру мы не меняем. */
void MyShow (ttr *Str, int size)
{Str->n=size;
cout<<"\n m="<< Str->n<<" ";
for (int i=0; i<size; i++)
printf(" x=%4.1f y=%4.1f", Str->Points[i].x, Str->Points[i].y);
printf("\n type %s",Str->type);
printf(" perimetr %10.2f",Str->per );
}
int main()
{ int m=3; // Количество вершин многоугольника.
clrscr();
/* Объявляем и создаём указатель на одну структуру типа ttr, в котором будет храниться информация об одном многоугольнике. */
ttr *S; S=new ttr;
MyDef ( S, m);
/* Так как в функциях MyDef и MyShow в качестве формального параметра используется указатель на структуру (ttr *Str), то в качестве фактического параметра передаём указатель на структуру такого же типа. Так как объявлен указатель (ttr*S;), а не просто структура (ttr S;), то при вызове функции в скобках записали просто S. */
S->per=MyPer(S->Points, m);
/* Так как в функции MyPer в качестве формального параметра используется указатель на структуру типа Point1 (Point1 *P), то в качестве фактического параметра передаём указатель на структуру такого же типа. После выполнения функции MyDef в структуре, адрес которой в S, будет создан динамический массив Points. Адрес начала этого массива S->Points и передаём в функцию. */
MyShow(S, m);
/* Вывели сформированную с помощью функций MyDef и MyPer структуру, адрес которой в S.*/
int n=4,i;
/*Создаём динамичечский массив структур типа ttr размерности n, то есть n m - угольников. */
ttr *arrs=new ttr[n];
for(i=0;i<n;i++)
{ cout<<"\n i="<<i<< " m=";
cin>>m;
/* Так как в функциях MyDef и MyShow в качестве формального параметра используется указатель на структуру (ttr *Str), и так как эти функции работают с одной структурой, то в качестве фактического параметра передаём адрес i – го элемента динамического массива. Так как arrs[i] не является адресом, то при вызове функции используем операцию “&” (взятие адреса). */
MyDef ( &arrs[i], m);
/* В функцию MyPer передаём адрес динамического массива точек размерности m для i-го многоугольника, созданный в функции MyDef. */
arrs[i].per=MyPer(arrs[i].Points, m);
MyShow(&arrs[i],m);
}
getch(); return 0;
}
Варианты заданий.
A. Задачи первого простого уровня.
Сформировать массив структур, каждый элемент которого содержит следующие три поля:
фамилия, имя отчество студента (вводим);
массив оценок в десятибалльной системе (вводим);
признак.
Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспевающий (есть 1 и (или) 2 и (или) 3). Рассортировать массив структур по убыванию полученного признака.
Сформировать массив структур, каждый элемент которого содержит следующие четыре поля:
курс (вводим);
фамилия, имя отчество (вводим);
массив оценок в десятибалльной системе (вводим);
признак.
Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспевающий (есть 1 и (или) 2 и (или) 3). Рассортировать массив структур по курсам.
Сформировать массив структур, каждый элемент которого содержит следующие пять полей:
группа (вводим);
фамилия, имя отчество (вводим);
массив оценок в десятибалльной системе (вводим);
материальное положение (вводим, например, 0 — плохое, 1 — обычное, среднее).
Рассортировать массив структур по группам.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин треугольника на плоскости (вводим);
периметр треугольника;
Для каждого треугольника определить периметр. Рассортировать массив структур по периметру.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин треугольника на плоскости (вводим).
площадь треугольника;
Для каждого треугольника определить площадь. Рассортировать массив структур по площади.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин четырёхугольника на плоскости (вводим).
признак четырёхугольника, который принимает одно из следующих значений: 1 – если четырёхугольник находится полностью в первой четверти, 2 – во второй, 3 – в третьей, 4 – в четвёртой четверти, 5 – для всех остальных.
Для каждого четырёхугольника определить этот признак и рассортировать по нему массив структур.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин четырёхугольника на плоскости (вводим);
площадь многоугольника.
Для каждого четырёхугольника определить площадь. Рассортировать массив структур по площади.
8. Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин четырёхугольника на плоскости (вводим);
периметр четырёхугольника.
Для каждого четырёхугольника определить периметр. Рассортировать массив структур по периметру.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин отрезка в 3-хмерном пространстве (вводим);
длина отрезка.
Для каждого отрезка определить длину. Рассортировать массив структур по длине.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты центра круга на плоскости (вводим);
радиус круга (вводим);
площадь круга.
Для каждого круга определить площадь. Рассортировать массив структур по длине.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
шифр подразделения, содержащий не более трёх символов (вводим);
фамилия, имя отчество (вводим);
год рождения (вводим);
Для заданного подразделения, шифр которого вводим, рассортировать сотрудников по возрасту.
B. Задачи второго среднего уровня.
Сформировать массив структур, каждый элемент которого содержит следующие три поля:
фамилия, имя отчество (вводим);
массив оценок в десятибалльной системе (вводим);
признак.
Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспевающий (есть 1 и (или) 2 и (или) 3). Рассортировать массив структур по этому полученному признаку. Для одинакового признака сортировать по среднему баллу.
Сформировать массив структур, каждый элемент которого содержит следующие четыре поля:
курс (вводим);
фамилия, имя отчество (вводим);
массив оценок в десятибалльной системе (вводим);
признак.
Для каждого студента получить одно из следующих значений признака: 5 –отличник (только 9 и (или) 10), 4 – хорошист (нет оценок, меньше 6, но не все 9 или 10, а есть 6 и (или) 7 и (или) 8), 3 – троечник (нет оценок, меньше 4, но есть 4 и (или) 5), 2 – неуспевающий (есть 1 и (или) 2 и (или) 3). Рассортировать массив структур по курсам, внутри курса – по этому полученному признаку.
Сформировать массив структур, каждый элемент которого содержит следующие пять полей:
курс (вводим);
фамилия, имя отчество (вводим);
массив оценок в десятибалльной системе (вводим);
материальное положение (вводим, например, 0 — плохое, 1 — обычное, среднее).
размер стипендии.
Для каждого студента определить размер стипендии, выбрав самостоятельно критерий. Рассортировать массив структур по курсам, внутри курса – по полученной стипендии.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин треугольника на плоскости (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки плоскости;
тип треугольника (прямоугольный, остроугольный, тупоугольный);
периметр треугольника;
Для каждого треугольника определить тип и периметр. Рассортировать массив структур сначала по типу, а затем по периметру.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин треугольника на плоскости (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки плоскости;
тип треугольника (равнобедренный, разносторонний, равносторонний);
площадь треугольника;
Для каждого треугольника определить тип и площадь. Рассортировать массив структур сначала по типу, а затем по площади.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин многоугольника на плоскости (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки плоскости;
признак многоугольника, который принимает одно из следующих значений: 1 – если многоугольник находится полностью в первой четверти, 2 – во второй, 3 – в третьей, 4 – в четвёртой четверти, 5 – для всех остальных.
Для каждого многоугольника определить этот признак и рассортировать по нему массив структур.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин многоугольника на плоскости (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки плоскости;
площадь многоугольника.
Для каждого многоугольника определить площадь. Рассортировать массив структур следующим образом. В начале массива должны находиться многоугольники 1-й четверти по возрастанию найденной площади, а затем — остальные многоугольники в нерассортированном виде, то есть в том же порядке, что и в исходном массиве.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин многоугольника на плоскости (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки плоскости;
периметр многоугольника;
Для каждого многоугольника определить периметр. Рассортировать массив структур следующим образом. В начале массива должны находиться многоугольники к-й четверти (к вводим) по возрастанию найденного периметра, а затем — остальные многоугольники в нерассортированном виде, то есть в том же порядке, что и в исходном массиве.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты вершин отрезка в 3-хмерном пространстве (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки 3-хмерного пространства;
длина отрезка.
Для каждого отрезка определить длину. Рассортировать массив структур следующим образом. В начале массива должна находиться рассортированная по возрастанию длины информация об отрезках, для которых все координаты обоих вершин положительны, а затем —об остальных отрезках в нерассортированном виде, то есть в том же порядке, что и в исходном массиве.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
координаты центра круга на плоскости (вводим). Использовать предварительно объявленную структуру, содержащую координаты одной точки плоскости;
радиус круга (вводим);
площадь круга;
Для каждого круга определить площадь. Рассортировать массив структур следующим образом. В начале массива должна находиться рассортированная по площади информация о тех кругах, которые находятся выше оси OX, а затем — об остальных кругах в нерассортированном виде, то есть в том же порядке, что и в исходном массиве.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
шифр подразделения, содержащий не более трёх символов (вводим);
фамилия, имя отчество (вводим);
год рождения (вводим);
образование, например, 0 – неоконченное базовое, 1 – базовое, 2 – общее среднее и т. д. (вводим);
Для заданного подразделения, шифр которого вводим, рассортировать сотрудников сначала по образованию, а затем по возрасту. Информация об остальных сотрудниках должна следовать в том же порядке, что и в исходном массиве.
Сформировать массив структур, каждый элемент которого содержит следующие поля:
шифр подразделения, содержащий не более трёх символов (вводим);
план выпуска продукции по кварталам одного года в виде массива (вводим);
фактическое выполнение плана по кварталам одного года в виде массива (вводим);
Рассортировать массив структур следующим образом: сначала должна быть информация о тех подразделениях, которые выполнили план во всех кварталах, затем о тех, кто выполнил план в трёх кварталах, и т. д.
Лабораторная работа 7.
Темы: “Объединения, поля битов, перечисления”.
Требования и общие указания к заданиям:
Кроме выполнения индивидуальных заданий, предлагается выполнить компьютерный эксперимент с примерами, приведёнными в §§ 5, 6, 7.
В вариантах 1—8 выполнить одно и то же задание двумя из предложенных способов: обязательно третий и на выбор один из остальных в качестве повторения.
Варианты заданий:
Перевести целое положительное двухбайтное число из десятичной в двоичную систему счисления:
(повторение) используя алгоритм деления на 2 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое отрицательное двухбайтное число из десятичной в двоичную систему счисления:
(повторение) используя алгоритм деления на 2 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое положительное четырёхбайтное число из десятичной в двоичную систему счисления:
(повторение) используя алгоритм деления на 2 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое отрицательное четырёхбайтное число из десятичной в двоичную систему счисления:
(повторение) используя алгоритм деления на 2 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое положительное двухбайтное число из десятичной в шестнадцатеричную систему счисления:
(повторение) используя алгоритм деления на 16 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое отрицательное двухбайтное число из десятичной в шестнадцатеричную систему счисления:
(повторение) используя алгоритм деления на 2 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое положительное четырёхбайтное число из десятичной в шестнадцатеричную систему счисления:
(повторение) используя алгоритм деления на 16 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Перевести целое отрицательное четырёхбайтное число из десятичной в шестнадцатеричную систему счисления:
(повторение) используя алгоритм деления на 2 (см. первый семестр);
(повторение) используя битовые операции (см. первый семестр);
используя объединение и поля битов.
Запрограммировать калькулятор на четыре арифметические действия: сложение, вычитание, умножение, деление. С помощью перечисляемого типа предусмотреть следующие возможные ошибки: неверная операция, которая должна вводиться с экрана; деление на нуль и другие; отсутствие ошибок. Вывести соответствующие сообщения.
Запрограммировать калькулятор на битовые операции. С помощью перечисляемого типа предусмотреть следующие возможные ошибки: неверная операция, которая должна вводиться с экрана; операнды в операциях имеют не целый тип и другие; отсутствие ошибок. Вывести соответствующие сообщения.
Запрограммировать калькулятор для перевода целых чисел из 10-й с.с в 2-ю с.с., из 10-й в 16-ю с.с. и из 16-й в 2-ю систему счисления. С помощью перечисляемого типа предусмотреть следующие возможные ошибки: операнды в операциях имеют не целый тип; операнд записан не в требуемой системе счисления и другие; отсутствие ошибок. Вывести соответствующие сообщения.
Запрограммировать калькулятор для перевода целых чисел из 2-й с.с в 10-ю с.с., из 16-й в 10-ю с.с. и из 2-й в 16-ю систему счисления. С помощью перечисляемого типа предусмотреть следующие возможные ошибки: операнды в операциях имеют не целый тип; операнд записан не в требуемой системе счисления и другие; отсутствие ошибок. Вывести соответствующие сообщения.