1_1 Функция Step2 – служит для возведения числа 2 в указанную степень
1_1.
Функция Step2 – служит для возведения числа 2 в указанную степень.
Входной параметр – показатель степени p.
Начало.
Переменная t=1
В цикле от I до p умножаем переменную t на 2.
Возвращаем значение t как результат функции.
Конец.
Функция Prost – проверка числа на простоту.
Входной параметр – число n.
Начало.
Если n меньше 2, возвращаем значение false результатом функции и выходим.
Иначе переменной Prost присваиваем значение истина.
В цикле переменная i изменяется до корня из n :
Если число n делится на i без остатка, то число не простое (переменная Prost – ложь) и выходим из цикла и функции.
Главная программа
Начало.
Очистка экрана.
Ввод числа n.
Переменная i в цикле изменяется от 1 до nmax:
Если число i – простое, то x=2i-1.
Если число x<n, то выводим на экран это число (перед этим проверяем его на простоту), иначе выходим из цикла.
Конец.
1_2.
Переменные i,n – целочисленные, длинные.
D1,d2, d3,d4,d5,d6 – целочисленные, короткие.
Начало.
1)В цикле переменная i от 0 до 999999:
вычисляем значения для чисел по разрядам:
1.2)d1 равно результату целочисленного деления числа i на 100000.
1.3) Вычисляем целочисленное деление числа i на 10000.
D2 равно остатку от деления полученного числа на 10.
1.4) Вычисляем целочисленное деление числа i на 1000.
D3 равно остатку от деления полученного числа на 10.
1.5) Вычисляем целочисленное деление числа i на 100.
D4 равно остатку от деления полученного числа на 10.
1.6) Вычисляем целочисленное деление числа i на 10.
D5 равно остатку от деления полученного числа на 10.
1.7) D6 равно остатку от деления i на 10.
1.8) если d1+d2+d3=d4+d5+d6, то выводим на экран число i.
Конец.
2_1.
Описываем типы
Trow – массив действительных чисел – строка матрицы.
Tarray – массив строк – матрица целиком.
Переменные
Max_i,Max_j, i,j,n – целочисленные.
A – массив типа tarray.
E, max – действительные переменные.
Процедура Show – отображает массив а на экране.
Начало.
1) В цикле переменная i изменяется от 1 до n
1.1) в цикле переменная j изменяется от 1 до n
1.1.1) вывод на экран элемента массива a[i,j]
1.2) переход на новую строку
Конец.
Основная программа.
Начало.
1) Ввод размерности массива n и элементов массива: в цикле переменная i изменяется от 1 до n
1.1) в цикле переменная j изменяется от 1 до n
1.1.1) ввод элемента массива a[i,j]
2) поиск максимального по модулю элемента:
2.1) max равен первому элементу массива
2.2) в цикле переменная i изменяется от 1 до n
2.2.1) в цикле переменная j изменяется от 1 до n
2.2.1.1) если модуль элемента массива a[i,j] больше максимального числа max, то запоминаем этот элемент в числе max (запоминаем также индексы этого элемента в переменных max_i, max_j).
3) вывод на экран массива а.
4) вывод на экран максимального элемента.
5) цикл пока не достигли самой верхней строки матрицы (max_i<>1)
5.1) меняем местами строки массива с индексами max_i и max_i-1.
5.2) уменьшаем индекс строк
5.3) вывод на экран массива а.
6) цикл пока не достигли самого левого столбца матрицы (max_j<>1)
6.1) меняем местами столбцы массива с индексами max_j и max_j-1.
6.2) уменьшаем индекс столбцов
6.3) вывод на экран массива а.
Конец.
2_2.
Объявляем тип tarray – двумерный массив действительных чисел.
Переменные i,j,n – целочисленные.
A,b,c – массивы.
Max – действительное число.
Процедура Show – отображение массива. Аналогично как в задании 2_1.
Основная программа.
1) Ввод размерности массива n и элементов массива: в цикле переменная i изменяется от 1 до n
1.1) в цикле переменная j изменяется от 1 до n
1.1.1) ввод элемента массива a[i,j].
2) Аналогично пункту 1 ввод массива b.
3) в цикле переменная i от 1 до n
3.1) ищем максимальный элемент в строке в массиве b:
3.1.1) максимальный элемент max=b[i,1] (первый столбец)
3.1.2) цикл по столбцам (переменная о изменяется от 1 до n):
3.1.2.1) если элемент b[i,j] больше максимального, присваиваем его значение максимальному (переменная max).
3.2) умножаем элементы на max – получаем элементы матрицы с:
3.2.1) в цикле переменная c от 1 до n
3.2.1.1) элемент массива С[i,j] равен произведению элемента массива a[i,j] и числа max.
4) вывод на экран массивов а, b, с.
Конец.
3_1.
Переменные:
L, m , sm, mm – целочисленные переменные.
S, s1,s2,s3 – строковые переменные.
Начало.
1) ввод длины.
2) вычисляем количество метров – m равно результату от целочисленного деления числа l на 1000.
3) вычисляем количество сантиметров:
3.1) находим целочисленное деление числа l на 1000
3.2) sm равно остатку от целочисленного деления числа в п.3.1 на 10.
4) вычисляем количество миллиметров – mm равно остатку от деления числа l на 10.
5) преобразуем числа m, sm, mm в строковые представления – s1, s2, s3.
6) строка s равна s1+ слово ‘ метр’
7) если число m принадлежит множеству [0,5..10] или остаток от деления числа m на 10 принадлежит множеству [0,5..9], то прибавляем к строке s строку ‘ов’.
7.1) иначе если остаток от деления числа m на 10 принадлежит множеству [2..4], то прибавляем к строке s строку ‘а’.
8) к строке s прибавляем пробел, строку s2 и ‘ сантиметр’.
9) если число sm принадлежит множеству [0,5..20] или остаток от деления числа sm на 10 принадлежит множеству [0,5..9], то прибавляем к строке s строку ‘ов’.
9.1) иначе если остаток от деления числа sm на 10 принадлежит множеству [2..4], то прибавляем к строке s строку ‘а’.
10) к строке s прибавляем пробел, строку s3 и ‘ миллиметр’.
11) если число mm принадлежит множеству [0,5..9], то прибавляем к строке s строку ‘ов’.
11.1) иначе если число mm принадлежит множеству [2..4], то прибавляем к строке s строку ‘а’.
12) вывод на экран строки s.
Конец.
Переменные i,n – целочисленные.
S, t, t2 – строковые.
Начало.
1) Ввод строки s.
2) ввод смещения n.
3) t равно пустой строке.
4) переменная i в цикле от 1 до конца строки s
4.1) если символ строки s[i] – символ русского алфавита или знак препинания, то смещаем код этого символа на величину смещения n и добавляем полученный символ в строку t.
4.1.1) иначе – не смещаем код символа, добавляем в строку t.
5) t2 равно пустой строке.
6) переменная i в цикле от 1 до конца строки t
7.1) если символ строки t[i] – символ русского алфавита или знак препинания, то смещаем код этого символа на величину смещения n с противоположным знаком (смещение в обратную сторону) и добавляем полученный символ в строку t2.
7.1.1) иначе – не смещаем код символа, добавляем в строку t2.
8) вывод на экран строк s, t, t2.
Конец.
pyramid_sort cpp определяет точку входа для консольного приложения
// pyramid_sort.cpp: определяет точку входа для консольного приложения.
//
#include “stdafx.h”
/*int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<locale.h>
struct Student
{
int key;
char FIO[50];
int year;
};
void adding(Student **mass, int p, int &l)
{
if (!l)
{
*mass = new Student[1];
printf(“Ключ:”);
scanf(“%d”, &(*mass[0]).key);
printf(“ФИО”);
scanf(“%s”, (*mass)[0].FIO);
printf(“Год рождения:”);
scanf(“%d”, &(*mass)[0].year);
printf(“Элемент добавленn”);
system(“pause”);
l++;
return;
}
if (p > l)
{
printf(“Ошибка”);
system(“pause”);
return;
}
Student *temp = new Student[l + 1];
for (int n = 0; n < l + 1; n++)
{
if (n < p)
{
temp[n].key = (*mass)[n].key;
strcpy(temp[n].FIO, (*mass)[n].FIO);
temp[n].year = (*mass)[n].year;
}
else if (n == p)
{
printf(“Ключ:”);
scanf(“%d”, &temp[n].key);
printf(“ФИО”);
scanf(“%s”, temp[n].FIO);
printf(“Год рождения:”);
scanf(“%d”, &temp[n].year);
}
else
{
temp[n].key = (*mass)[n – 1].key;
strcpy(temp[n].FIO, (*mass)[n – 1].FIO);
temp[n].year = (*mass)[n – 1].year;
}
}
printf(“Элемент добавленn”);
system(“pause”);
l++;
*mass = temp;
}
void deleting(Student **mass, int p, int &l)
{
if (p > l)
{
printf(“Ошибка”);
system(“pause”);
return;
}
Student *temp = new Student[l – 1];
for (int n = 0; n < l; n++)
{
if (n < p)
{
temp[n].key = (*mass)[n].key;
strcpy(temp[n].FIO, (*mass)[n].FIO);
temp[n].year = (*mass)[n].year;
}
else
{
temp[n].key = (*mass)[n + 1].key;
strcpy(temp[n].FIO, (*mass)[n + 1].FIO);
temp[n].year = (*mass)[n + 1].year;
}
}
printf(“Элемент удален”);
system(“pause”);
l–;
*mass = temp;
}
void change(Student **mass, int p, int &l)
{
if (p > l)
{
printf(“Ошибка”);
return;
}
Student *temp = new Student[l + 1];
for (int n = 0; n < l + 1; n++)
{
if (n != p)
{
temp[n].key = (*mass)[n].key;
strcpy(temp[n].FIO, (*mass)[n].FIO);
temp[n].year = (*mass)[n].year;
}
else
{
printf(“Ключ:”);
scanf(“%d”, &temp[n].key);
printf(“ФИО”);
scanf(“%s”, temp[n].FIO);
printf(“Год рождения:”);
scanf(“%d”, &temp[n].year);
}
}
printf(“Элемент изменен”);
system(“pause”);
*mass = temp;
}
void ShiftDown(Student* arr, int i, int j)
{
int temp;
int left = 2 * i + 1;
int right = left + 1;
int MaxChild = left;
while (MaxChild < j)
{
if (right < j)
{
if (arr[left].key < arr[right].key)
{
MaxChild = right;
}
}
if (arr[i].key < arr[MaxChild].key)
{
temp = arr[i].key;
arr[i].key = arr[MaxChild].key;
arr[MaxChild].key = temp;
}
else
{
break;
}
i = MaxChild;
left = 2 * i + 1;
right = left + 1;
MaxChild = left;
}
}
void Pyramid_Sort(Student* arr, int &l)
{
int i;
int temp;
for (i = l/ 2 – 1; i >= 0; i–)
{
ShiftDown(arr, i, l);
}
for (i = l – 1; i > 0; i–)
{
temp = arr[0].key;
arr[0].key = arr[i].key;
arr[i].key = temp;
ShiftDown(arr, 0, i);
}
}
void menu(int &stop, FILE *file, Student **mass, int &l)
{
int p = 0;
system(“cls”);
printf(“1 Ввести с клавиатурыn2 Добавить из файлаn3 Удалить по номеруn4 Изменить элементn5 Вывести на экранn6 Сортироватьn0 Выходn”);
p = char(_getch());
system(“cls”);
switch (p)
{
case 49:
{
if (!l)
{
adding(mass, 1, l);
break;
}
int p = 0;
printf(“Введите позицию нового элемента:”);
scanf(“%d”, &p);
if (!p)
{
printf(“Неверная позиция”);
system(“pause”);
break;
}
p–;
adding(mass, p, l);
break;
}
case 50:
{
char path[50];
printf(“Введите путь файла:”);
scanf(“%s”, &path);
if ((file = fopen(path, “r”)) == NULL)
{
printf(“Ошибкаn”);
system(“pause”);
break;
}
file = fopen(path, “r”);
while (!feof(file))
{
Student temp;
fread(&temp, sizeof(Student), 1, file);
if (!feof(file))
{
if (!l)
{
*mass = new Student[1];
mass[l]->key = temp.key;
strcpy(mass[l]->FIO, temp.FIO);
mass[l]->year = temp.year;
l++;
}
else
{
Student *tempM = new Student[l + 1];
for (int n = 0; n < l; n++)
{
tempM[n].key = (*mass)[n].key;
strcpy(tempM[n].FIO, (*mass)[n].FIO);
tempM[n].year = (*mass)[n].year;
}
tempM[l].key = temp.key;
strcpy(tempM[l].FIO, temp.FIO);
tempM[l].year = temp.year;
*mass = tempM;
l++;
}
}
}
system(“pause”);
fclose(file);
break;
}
case 51:
{
if (!l)
{
printf(“Список пуст”);
break;
}
int p = 0;
printf(“Введите элемент для удаления:”);
scanf(“%d”, &p);
p–;
deleting(mass, p, l);
break;
}
case 52:
{
if (!l)
{
printf(“Список пуст”);
break;
}
int p = 0;
printf(“Введите элемент для изменения:”);
scanf(“%d”, &p);
p–;
change(mass, p, l);
break;
}
case 53:
{
if (!l)
{
printf(“Список пуст”);
system(“pause”);
break;
}
printf(“l=%dn”, l);
for (int i = 0; i < l; i++)
{
printf(“%d %s %dn”, (*mass)[i].key, (*mass)[i].FIO, (*mass)[i].year);
}
system(“pause”);
break;
}
case 54:
{
if (!l)
{
printf(“Список пуст”);
break;
}
Pyramid_Sort(*mass, l );
printf(“Список отсортирован”);
system(“pause”);
break;
}
case 48:
{
stop = 1;
break;
}
default:
break;
}
return;
}
void main()
{
setlocale(LC_ALL, “RUS”);
FILE *file = NULL;
Student *mass = NULL;
int l = 0;
int stop = 0;
while (!stop)
menu(stop, file, &mass, l);
}
Проверим необходимое и достаточное условие разрешимости задачи. ∑a = 181 + 155 + 126 = 462
3 4 Запасы
1 84 71 84 78 181
2 13 89 52 94 155
3 78 45 68 20 126
Потребности
146 156 126 70
Проверим необходимое и достаточное условие разрешимости задачи.
∑a = 181 + 155 + 126 = 462
∑b = 146 + 156 + 126 + 70 = 498
Как видно, суммарная потребность груза в пунктах назначения меньше запасов груза на базах. Следовательно, модель исходной транспортной задачи является открытой. Чтобы получить закрытую модель, введем дополнительную (фиктивную) потребность, равной 36 (498—462). Тарифы перевозки единицы груза из базы во все магазины полагаем равны нулю.
Занесем исходные данные в распределительную таблицу.
1 2 3 4 Запасы
1 84 71 84 78 181
2 13 89 52 94 155
3 78 45 68 20 126
4 0 0 0 0 36
Потребности
146 156 126 70
Этап I. Поиск первого опорного плана.
1. Используя метод северо-западного угла, построим первый опорный план транспортной задачи.
План начинается заполняться с верхнего левого угла.
Искомый элемент равен 84
Для этого элемента запасы равны 181, потребности 146. Поскольку минимальным является 146, то вычитаем его.
x11 = min(181,146) = 146.
84 71 84 78 181 – 146 = 35
x 89 52 94 155
x 45 68 20 126
x 0 0 0 36
146 – 146 = 0 156 126 70 0
Искомый элемент равен 71
Для этого элемента запасы равны 35, потребности 156. Поскольку минимальным является 35, то вычитаем его.
x12 = min(35,156) = 35.
84 71 x x 35 – 35 = 0
x 89 52 94 155
x 45 68 20 126
x 0 0 0 36
0 156 – 35 = 121 126 70 0
Искомый элемент равен 89
Для этого элемента запасы равны 155, потребности 121. Поскольку минимальным является 121, то вычитаем его.
x22 = min(155,121) = 121.
84 71 x x 0
x 89 52 94 155 – 121 = 34
x x 68 20 126
x x 0 0 36
0 121 – 121 = 0 126 70 0
Искомый элемент равен 52
Для этого элемента запасы равны 34, потребности 126. Поскольку минимальным является 34, то вычитаем его.
x23 = min(34,126) = 34.
84 71 x x 0
x 89 52 x 34 – 34 = 0
x x 68 20 126
x x 0 0 36
0 0 126 – 34 = 92 70 0
Искомый элемент равен 68
Для этого элемента запасы равны 126, потребности 92. Поскольку минимальным является 92, то вычитаем его.
x33 = min(126,92) = 92.
84 71 x x 0
x 89 52 x 0
x x 68 20 126 – 92 = 34
x x x 0 36
0 0 92 – 92 = 0 70 0
Искомый элемент равен 20
Для этого элемента запасы равны 34, потребности 70. Поскольку минимальным является 34, то вычитаем его.
x34 = min(34,70) = 34.
84 71 x x 0
x 89 52 x 0
x x 68 20 34 – 34 = 0
x x x 0 36
0 0 0 70 – 34 = 36 0
Искомый элемент равен 0
Для этого элемента запасы равны 36, потребности 36. Поскольку минимальным является 36, то вычитаем его.
x44 = min(36,36) = 36.
84 71 x x 0
x 89 52 x 0
x x 68 20 0
x x x 0 36 – 36 = 0
0 0 0 36 – 36 = 0 0
1 2 3 4 Запасы
1 84[146] 71[35] 84 78 181
2 13 89[121] 52[34] 94 155
3 78 45 68[92] 20[34] 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
В результате получен первый опорный план, который является допустимым, так как все грузы из баз вывезены, потребность магазинов удовлетворена, а план соответствует системе ограничений транспортной задачи.
2. Подсчитаем число занятых клеток таблицы, их 7, а должно быть m + n – 1 = 7. Следовательно, опорный план является невырожденным.
Значение целевой функции для этого опорного плана равно:
F(x) = 84*146 + 71*35 + 89*121 + 52*34 + 68*92 + 20*34 + 0*36 = 34222
Этап II. Улучшение опорного плана.
Проверим оптимальность опорного плана. Найдем предварительные потенциалы ui, vj. по занятым клеткам таблицы, в которых ui + vj = cij, полагая, что u1 = 0.
u1 + v1 = 84; 0 + v1 = 84; v1 = 84
u1 + v2 = 71; 0 + v2 = 71; v2 = 71
u2 + v2 = 89; 71 + u2 = 89; u2 = 18
u2 + v3 = 52; 18 + v3 = 52; v3 = 34
u3 + v3 = 68; 34 + u3 = 68; u3 = 34
u3 + v4 = 20; 34 + v4 = 20; v4 = -14
u4 + v4 = 0; -14 + u4 = 0; u4 = 14
v1=84 v2=71 v3=34 v4=-14
u1=0 84[146] 71[35] 84 78
u2=18 13 89[121] 52[34] 94
u3=34 78 45 68[92] 20[34]
u4=14 0 0 0 0[36]
Опорный план не является оптимальным, так как существуют оценки свободных клеток, для которых ui + vj > cij
(1;3): 0 + 34 < 84; ∆13 = 0 + 34 – 84 = -50
(1;4): 0 + -14 < 78; ∆14 = 0 + -14 – 78 = -92
(2;4): 18 + -14 < 94; ∆24 = 18 + -14 – 94 = -90
max(50,92,90) = -92
Выбираем максимальную оценку свободной клетки (1;4): 78
Для этого в перспективную клетку (1;4) поставим знак «+», а в остальных вершинах многоугольника чередующиеся знаки «-», «+», «-».
1 2 3 4 Запасы
1 84[146] 71[35][-] 84 78[+] 181
2 13 89[121][+] 52[34][-] 94 155
3 78 45 68[92][+] 20[34][-] 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
Цикл приведен в таблице (1,4 → 1,2 → 2,2 → 2,3 → 3,3 → 3,4).
Из грузов хij стоящих в минусовых клетках, выбираем наименьшее, т.е. у = min (3, 4) = 34. Прибавляем 34 к объемам грузов, стоящих в плюсовых клетках и вычитаем 34 из Хij, стоящих в минусовых клетках. В результате получим новый опорный план.
1 2 3 4 Запасы
1 84[146] 71[1] 84 78[34] 181
2 13 89[155] 52[0] 94 155
3 78 45 68[126] 20 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
Проверим оптимальность опорного плана. Найдем предварительные потенциалы ui, vj. по занятым клеткам таблицы, в которых ui + vj = cij, полагая, что u1 = 0.
u1 + v1 = 84; 0 + v1 = 84; v1 = 84
u1 + v2 = 71; 0 + v2 = 71; v2 = 71
u2 + v2 = 89; 71 + u2 = 89; u2 = 18
u2 + v3 = 52; 18 + v3 = 52; v3 = 34
u3 + v3 = 68; 34 + u3 = 68; u3 = 34
u1 + v4 = 78; 0 + v4 = 78; v4 = 78
u4 + v4 = 0; 78 + u4 = 0; u4 = -78
v1=84 v2=71 v3=34 v4=78
u1=0 84[146] 71[1] 84 78[34]
u2=18 13 89[155] 52[0] 94
u3=34 78 45 68[126] 20
u4=-78 0 0 0 0[36]
Опорный план не является оптимальным, так как существуют оценки свободных клеток, для которых ui + vj > cij
(1;3): 0 + 34 < 84; ∆13 = 0 + 34 – 84 = -50
(4;2): -78 + 71 < 0; ∆42 = -78 + 71 – 0 = -7
(4;3): -78 + 34 < 0; ∆43 = -78 + 34 – 0 = -44
max(50,7,44) = -50
Выбираем максимальную оценку свободной клетки (1;3): 84
Для этого в перспективную клетку (1;3) поставим знак «+», а в остальных вершинах многоугольника чередующиеся знаки «-», «+», «-».
1 2 3 4 Запасы
1 84[146] 71[1][-] 84[+] 78[34] 181
2 13 89[155][+] 52[0][-] 94 155
3 78 45 68[126] 20 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
Цикл приведен в таблице (1,3 → 1,2 → 2,2 → 2,3).
Из грузов хij стоящих в минусовых клетках, выбираем наименьшее, т.е. у = min (2, 3) = 0. Прибавляем 0 к объемам грузов, стоящих в плюсовых клетках и вычитаем 0 из Хij, стоящих в минусовых клетках. В результате получим новый опорный план.
1 2 3 4 Запасы
1 84[146] 71[1] 84[0] 78[34] 181
2 13 89[155] 52 94 155
3 78 45 68[126] 20 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
Проверим оптимальность опорного плана. Найдем предварительные потенциалы ui, vj. по занятым клеткам таблицы, в которых ui + vj = cij, полагая, что u1 = 0.
u1 + v1 = 84; 0 + v1 = 84; v1 = 84
u1 + v2 = 71; 0 + v2 = 71; v2 = 71
u2 + v2 = 89; 71 + u2 = 89; u2 = 18
u1 + v3 = 84; 0 + v3 = 84; v3 = 84
u3 + v3 = 68; 84 + u3 = 68; u3 = -16
u1 + v4 = 78; 0 + v4 = 78; v4 = 78
u4 + v4 = 0; 78 + u4 = 0; u4 = -78
v1=84 v2=71 v3=84 v4=78
u1=0 84[146] 71[1] 84[0] 78[34]
u2=18 13 89[155] 52 94
u3=-16 78 45 68[126] 20
u4=-78 0 0 0 0[36]
Опорный план не является оптимальным, так как существуют оценки свободных клеток, для которых ui + vj > cij
(3;1): -16 + 84 < 78; ∆31 = -16 + 84 – 78 = -10
(4;2): -78 + 71 < 0; ∆42 = -78 + 71 – 0 = -7
max(10,7) = -10
Выбираем максимальную оценку свободной клетки (3;1): 78
Для этого в перспективную клетку (3;1) поставим знак «+», а в остальных вершинах многоугольника чередующиеся знаки «-», «+», «-».
1 2 3 4 Запасы
1 84[146][-] 71[1] 84[0][+] 78[34] 181
2 13 89[155] 52 94 155
3 78[+] 45 68[126][-] 20 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
Цикл приведен в таблице (3,1 → 3,3 → 1,3 → 1,1).
Из грузов хij стоящих в минусовых клетках, выбираем наименьшее, т.е. у = min (3, 3) = 126. Прибавляем 126 к объемам грузов, стоящих в плюсовых клетках и вычитаем 126 из Хij, стоящих в минусовых клетках. В результате получим новый опорный план.
1 2 3 4 Запасы
1 84[20] 71[1] 84[126] 78[34] 181
2 13 89[155] 52 94 155
3 78[126] 45 68 20 126
4 0 0 0 0[36] 36
Потребности
146 156 126 70
Проверим оптимальность опорного плана. Найдем предварительные потенциалы ui, vj. по занятым клеткам таблицы, в которых ui + vj = cij, полагая, что u1 = 0.
u1 + v1 = 84; 0 + v1 = 84; v1 = 84
u3 + v1 = 78; 84 + u3 = 78; u3 = -6
u1 + v2 = 71; 0 + v2 = 71; v2 = 71
u2 + v2 = 89; 71 + u2 = 89; u2 = 18
u1 + v3 = 84; 0 + v3 = 84; v3 = 84
u1 + v4 = 78; 0 + v4 = 78; v4 = 78
u4 + v4 = 0; 78 + u4 = 0; u4 = -78
v1=84 v2=71 v3=84 v4=78
u1=0 84[20] 71[1] 84[126] 78[34]
u2=18 13 89[155] 52 94
u3=-6 78[126] 45 68 20
u4=-78 0 0 0 0[36]
Опорный план не является оптимальным, так как существуют оценки свободных клеток, для которых ui + vj > cij
(4;2): -78 + 71 < 0; ∆42 = -78 + 71 – 0 = -7
Выбираем максимальную оценку свободной клетки (4;2): 0
Для этого в перспективную клетку (4;2) поставим знак «+», а в остальных вершинах многоугольника чередующиеся знаки «-», «+», «-».
1 2 3 4 Запасы
1 84[20] 71[1][-] 84[126] 78[34][+] 181
2 13 89[155] 52 94 155
3 78[126] 45 68 20 126
4 0 0[+] 0 0[36][-] 36
Потребности
146 156 126 70
Цикл приведен в таблице (4,2 → 4,4 → 1,4 → 1,2).
Из грузов хij стоящих в минусовых клетках, выбираем наименьшее, т.е. у = min (1, 2) = 1. Прибавляем 1 к объемам грузов, стоящих в плюсовых клетках и вычитаем 1 из Хij, стоящих в минусовых клетках. В результате получим новый опорный план.
1 2 3 4 Запасы
1 84[20] 71 84[126] 78[35] 181
2 13 89[155] 52 94 155
3 78[126] 45 68 20 126
4 0 0[1] 0 0[35] 36
Потребности
146 156 126 70
Проверим оптимальность опорного плана. Найдем предварительные потенциалы ui, vj. по занятым клеткам таблицы, в которых ui + vj = cij, полагая, что u1 = 0.
u1 + v1 = 84; 0 + v1 = 84; v1 = 84
u3 + v1 = 78; 84 + u3 = 78; u3 = -6
u1 + v3 = 84; 0 + v3 = 84; v3 = 84
u1 + v4 = 78; 0 + v4 = 78; v4 = 78
u4 + v4 = 0; 78 + u4 = 0; u4 = -78
u4 + v2 = 0; -78 + v2 = 0; v2 = 78
u2 + v2 = 89; 78 + u2 = 89; u2 = 11
v1=84 v2=78 v3=84 v4=78
u1=0 84[20] 71 84[126] 78[35]
u2=11 13 89[155] 52 94
u3=-6 78[126] 45 68 20
u4=-78 0 0[1] 0 0[35]
Опорный план не является оптимальным, так как существуют оценки свободных клеток, для которых ui + vj > cij
(2;4): 11 + 78 < 94; ∆24 = 11 + 78 – 94 = -5
Выбираем максимальную оценку свободной клетки (2;4): 94
Для этого в перспективную клетку (2;4) поставим знак «+», а в остальных вершинах многоугольника чередующиеся знаки «-», «+», «-».
1 2 3 4 Запасы
1 84[20] 71 84[126] 78[35] 181
2 13 89[155][-] 52 94[+] 155
3 78[126] 45 68 20 126
4 0 0[1][+] 0 0[35][-] 36
Потребности
146 156 126 70
Цикл приведен в таблице (2,4 → 2,2 → 4,2 → 4,4).
Из грузов хij стоящих в минусовых клетках, выбираем наименьшее, т.е. у = min (4, 4) = 35. Прибавляем 35 к объемам грузов, стоящих в плюсовых клетках и вычитаем 35 из Хij, стоящих в минусовых клетках. В результате получим новый опорный план.
1 2 3 4 Запасы
1 84[20] 71 84[126] 78[35] 181
2 13 89[120] 52 94[35] 155
3 78[126] 45 68 20 126
4 0 0[36] 0 0 36
Потребности
146 156 126 70
Проверим оптимальность опорного плана. Найдем предварительные потенциалы ui, vj. по занятым клеткам таблицы, в которых ui + vj = cij, полагая, что u1 = 0.
u1 + v1 = 84; 0 + v1 = 84; v1 = 84
u3 + v1 = 78; 84 + u3 = 78; u3 = -6
u1 + v3 = 84; 0 + v3 = 84; v3 = 84
u1 + v4 = 78; 0 + v4 = 78; v4 = 78
u2 + v4 = 94; 78 + u2 = 94; u2 = 16
u2 + v2 = 89; 16 + v2 = 89; v2 = 73
u4 + v2 = 0; 73 + u4 = 0; u4 = -73
v1=84 v2=73 v3=84 v4=78
u1=0 84[20] 71 84[126] 78[35]
u2=16 13 89[120] 52 94[35]
u3=-6 78[126] 45 68 20
u4=-73 0 0[36] 0 0
Опорный план является оптимальным, так все оценки свободных клеток удовлетворяют условию ui + vj ≤ cij.
Максимальная прибыль составит: F(x) = 84*20 + 84*126 + 78*35 + 89*120 + 94*35 + 78*126 + 0*36 = 38792
Анализ оптимального плана.
Из 1-й Фабрики необходимо груз направить 1-му Заказчику (20), в 3-й магазин (126), в 4-й магазин (35)
Из 2-й Фабрики необходимо груз направить 2-му Заказчику (120), в 4-й магазин (35)
Из 3-й Фабрики необходимо весь груз направить 1-му Заказчику.
Потребность 2-го Заказчика остается неудовлетворенной на 36 ед.
Оптимальный план является вырожденным, так как базисная переменная x42=0.
Задание 5Э Кодировщик Имеется кодировочная таблица
Вариант №2
Задание 5Э. Кодировщик
Имеется кодировочная таблица:
Цифра 1 2 3 4 5 6 7 8 9
Буква А Е О У Т Л П Р С
В одну ячейку ввести произвольное количество цифровых сообщений («слов»), ограничение по длине строки – 16 символов, отделенных друг от друга одним или несколькими пробелами.
Составить формулу, позволяющую осуществить перекодировку цифрового сообщения в буквенное. Составить формулу, позволяющую подсчитать количество гласных и согласных букв и полученном сообщении.
Обеспечить контроль над вводом данных в ячейку с Исходным текстом с выводом на экран.
Выполнение
Создаем книгу Excel, переименовываем рабочий лист в «Задание 5».
Заполняем кодировочную таблицу, как показано на рисунке 1.
Рисунок 1 – Кодировочная таблица
Создаем таблицу «Статистика перевода», как показано на рисунке 2.
Рисунок 2 – Таблица «Статистика перевода»
Для ячейки L2 установим текстовый формат, это можно сделать, щелкнув правой кнопкой мышь по ячейке, выбрав пункт «Формат ячеек», и в появившемся окне выбрав формат «Текстовый».
Для того, чтобы задать ограничение на длину исходного текста, выделим ячейку L2 и вызовем команду «Данные – Проверка данных – Проверка данных …», в появившемся окне зададим настройки, как показано на рисунках 3 и 4.
Рисунок 3 – Настройка проверки вводимых значений
Рисунок 4 – Настройка проверки вводимых значений
При попытке ввести исходное сообщение длиной более 16 символов, выдается сообщение, представленное на рисунке 5.
Рисунок 5 – Сообщение об ошибке
Для решения задачи декодирования текста используем встроенную функцию Excel ПОДСТАВИТЬ – эта функция подставляет новый текст вместо старого в текстовой строке. В ячейку M3 введем формулу:
=ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(L3;J2;J3);I2;I3);H2;H3);G2;G3);F2;F3);E2;E3);D2;D3);C2;C3);B2;B3)
Пример декодирования представлен на рисунке 6.
Рисунок 6 – Пример декодирования
Для подсчета гласных букв используем встроенные функции Excel ПСТР, ИЛИ, ЕСЛИ. Функция ПСТР возвращает заданное число знаков из текстовой строки, с ее помощью посимвольно просмотрим строку, получая с первого символа по последний, и сравнивая каждый символ с гласными буквами. Функция ИЛИ возвращает значение ИСТИНА, если хотя бы один из аргументов имеет значение ИСТИНА или ЛОЖЬ, если все аргументы имеют значение ЛОЖЬ. Функция ЕСЛИ возвращает одно значение, если указанное условие дает в результате значение ИСТИНА, и другое значение, если условие дает в результате значение ЛОЖЬ.
В ячейку M4 введем формулу:
=ЕСЛИ(ИЛИ(ПСТР(M3;1;1)=B3;ПСТР(M3;1;1)=C3;ПСТР(M3;1;1)=D3;ПСТР(M3;1;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;2;1)=B3;ПСТР(M3;2;1)=C3;ПСТР(M3;2;1)=D3;ПСТР(M3;2;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;3;1)=B3;ПСТР(M3;3;1)=C3;ПСТР(M3;3;1)=D3;ПСТР(M3;3;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;4;1)=B3;ПСТР(M3;4;1)=C3;ПСТР(M3;4;1)=D3;ПСТР(M3;4;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;5;1)=B3;ПСТР(M3;5;1)=C3;ПСТР(M3;5;1)=D3;ПСТР(M3;5;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;6;1)=B3;ПСТР(M3;6;1)=C3;ПСТР(M3;6;1)=D3;ПСТР(M3;6;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;7;1)=B3;ПСТР(M3;7;1)=C3;ПСТР(M3;7;1)=D3;ПСТР(M3;7;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;8;1)=B3;ПСТР(M3;8;1)=C3;ПСТР(M3;8;1)=D3;ПСТР(M3;8;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;9;1)=B3;ПСТР(M3;9;1)=C3;ПСТР(M3;9;1)=D3;ПСТР(M3;9;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;10;1)=B3;ПСТР(M3;10;1)=C3;ПСТР(M3;10;1)=D3;ПСТР(M3;10;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;11;1)=B3;ПСТР(M3;11;1)=C3;ПСТР(M3;11;1)=D3;ПСТР(M3;11;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;12;1)=B3;ПСТР(M3;12;1)=C3;ПСТР(M3;12;1)=D3;ПСТР(M3;12;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;13;1)=B3;ПСТР(M3;13;1)=C3;ПСТР(M3;13;1)=D3;ПСТР(M3;13;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;14;1)=B3;ПСТР(M3;14;1)=C3;ПСТР(M3;14;1)=D3;ПСТР(M3;14;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;15;1)=B3;ПСТР(M3;15;1)=C3;ПСТР(M3;15;1)=D3;ПСТР(M3;15;1)=E3;);1;0)+
ЕСЛИ(ИЛИ(ПСТР(M3;16;1)=B3;ПСТР(M3;16;1)=C3;ПСТР(M3;16;1)=D3;ПСТР(M3;16;1)=E3;);1;0)
Для подсчета согласных букв используем функцию ДЛСТР – определяет длину строки. В ячейку M5 введем формулу:
=ДЛСТР(ПОДСТАВИТЬ(M3;” “;””))-M4
Результат представлен на рисунке 7.
Рисунок 7 – Результат подсчета гласных и согласных букв
Задание 9Э. Вычисление значений функций и построение ее графика
Вычислить значение функции y(x,a,b) и построить ее график для фиксированных значений переменных a, b и диапазона значений аргумента x, который изменяется от 3 до 5 с шагом ∆x=0,2.
yx,a,b=sin(b-x)2⋅ctg(a)⋅e2arctgax+0.3arctgb при x-b<3x-b1+2x-e2x-bsin2x-0.9 при x-b=3ln30.5×2+b2+sina2-x2 при x-b>3
Вид графика произвольный. Подписи осей соответственно X и Y. На оси X должны отображаться значения переменной x, по которым строится график.
Выполнение
Создаем рабочий лист в «Задание 9».
Создаем таблицу в соответствии с образцом (рис. 8), значения x заполняются при помощи автозаполнения.
Рисунок 8 – Таблица исходных данных
В ячейку B4 вводим формулу:
=ЕСЛИ(B3-$B$2<3;SIN((КОРЕНЬ($B$2)-B3)^2)*(1/TAN($B$1))*EXP(2*ATAN($B$1*B3)+0,3*ATAN($B$2));ЕСЛИ(B3-$B$2=3;ABS(B3-$B$2)/(1+2*B3)-EXP(2*(B3-$B$2)*(SIN(B3-0,9))^2);СТЕПЕНЬ(LN(0,5*B3^2+$B$2^2);3)+SIN(($B$1^2-B3)/2)))
и копируем ее до ячейки L4. Для ячеек устанавливаем числовой формат, как показано на рисунке 9.
Рисунок 9 – Настройка формата ячеек
Результат расчета представлен на рисунке 10.
Рисунок 10 – Результат расчета
Выделяем ячейки A3:L4 и вызываем команду «Вставка – Диаграмма – Точечная» (рис. 11).
Рисунок 11 – Вставка диаграммы
Добавляем подписи осей (рис. 12).
Рисунок 12 – Вставка диаграммы
Задаем настройки формата оси X, как показано на рисунке 13.
Рисунок 13 – Вставка диаграммы
Полученный график представлен не рисунке 14.
Рисунок 14 – График функции
Задание 8Э. Оформление таблицы с вычислениями
Разработать таблицу согласно представленного образца, цветовое оформление текущих оценок и оценок графы Аттестация должно автоматически определяться по условию – 5 (красный), 4 (зеленый), 3 (синий), 2 (черный), а графы Средний балл – по условию: красный (если значение в ячейке >= 4,5), зеленый (если значение в ячейке >=3,5 и <4,5), синий (>=2,5 и <3,5), черный (<2,5), шрифт, размер шрифта – произвольные).
Выполнить необходимые расчеты для заполнения ячеек столбцов Средний балл, Аттестация и таблицы Итоги аттестации согласно
№1 #include < iostream> #include < cstdlib> using namespace std
№1.
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
setlocale(LC_ALL,”Russian”);
cout<<“Введите N: “;
int n;
cin>>n;
cout<<“Массив:n”;
int arr[100][100];
int arr90[100][100];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
arr[i][j]=rand()%89+10;
cout<<arr[i][j]<<” “;
}
cout<<endl;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
arr90[i][j]=arr[n-1-j][i];
}
cout<<endl;
}
cout<<“Повернутый массив:n”;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<arr90[i][j]<<” “;
}
cout<<endl;
}
system(“Pause”);
return 0;
}
Крестики нолики
#include <iostream>
#include <string>
#include <stdlib.h>
#include <ctype.h>
#include <limits.h>
using namespace std;
int menu();
void drawBoard(bool update);
void playGame();
void validateInput();
void makeMove(bool stalemate);
void AI();
int AIsmarts(int Player);
bool gameStatus();
int gameBoard[9]={1,2,3,4,5,6,7,8,9};
int var=0;
int turn=0;
int xturn=0;
int option=0;
int userInput;
bool badInput;
bool GameOver=false;
string restart = “”;
string player=”X”;
string menuInput;
int main(){
setlocale(LC_ALL,”RUSSIAN”);
option = menu();
while(option != 3 && restart !=”n” && restart !=”no”){
turn=0;
xturn=0;
drawBoard(false);
if(option == 1){AI();}else{playGame();}
if(restart != “n” && restart !=”no”){option = menu();}
}
return 0;
}
int menu(){
int option = 0;
bool invalid = false;
do {
cout << “nn Менюn ___________________nn”;
cout << ” 1. Один игрокnn 2. Два игрока nn 3. Выходn ___________________nn”;
cout << ” > “;
cin >> menuInput;
menuInput = menuInput.c_str();
int length = menuInput.length();
int x;
for (x = 0; x < length; x++){
if(!isdigit(menuInput[x])){
invalid = true;
}
}
if(!invalid){
option = atoi(menuInput.c_str());
if(!(option > 0 && option <= 9)) {
invalid = true;
}
}
}
while(invalid);
return option;
}
void drawBoard(bool update){
system(“cls”);
cout << “nn Крестики-ноликиn ___________________nn”;
int column=0;
for(var=0;var<9;var++){
for(column=0;column<3;column++){
if(update == true){
if(gameBoard[var]== 11){cout << ” X “;}
else if(gameBoard[var]== 22){cout << ” O “;}
else{cout << ” ” << gameBoard[var]<< ” “;}
}
else{
int count;
for(count=0;count<9;count++){
gameBoard[count]=count+1;
}
cout << ” ” << gameBoard[var]<< ” “;
}
var+=1;
}
if(var < 8){cout << “nn”;}
var+=-1;
}
cout << “n ___________________nn”;
}
void playGame(){
do{
validateInput();
makeMove(false);
}while(turn < 9 && GameOver == false);
makeMove(true);
}
bool gameStatus(){
int Player;
if(player==”X”){Player=11;}else{Player=22;}
if(gameBoard[0]==Player && gameBoard[1]==Player && gameBoard[2]==Player){return true;}
else if(gameBoard[3]==Player && gameBoard[4]==Player && gameBoard[5]==Player){return true;}
else if(gameBoard[6]==Player && gameBoard[7]==Player && gameBoard[8]==Player){return true;}
else if(gameBoard[0]==Player && gameBoard[3]==Player && gameBoard[6]==Player){return true;}
else if(gameBoard[1]==Player && gameBoard[4]==Player && gameBoard[7]==Player){return true;}
else if(gameBoard[2]==Player && gameBoard[5]==Player && gameBoard[8]==Player){return true;}
else if(gameBoard[0]==Player && gameBoard[4]==Player && gameBoard[8]==Player){return true;}
else if(gameBoard[2]==Player && gameBoard[4]==Player && gameBoard[6]==Player){return true;}
return false;
}
void validateInput(){
do{
cout << ” Игрок ” << player << “: “;
cin >> userInput;
if(cin.good()){
if(gameBoard[userInput-1]!=userInput){
badInput=true;
}else{badInput=false;}
}
else{
badInput=true;
cin.clear();
cin.ignore( INT_MAX, ‘n’ );
}
}while(badInput==true);
}
void makeMove(bool stalemate){
if(stalemate==false){
for(var=0;var<9;var++){
if(player == “X”){
if(gameBoard[var]== userInput){gameBoard[var]=11;GameOver = gameStatus();player=”O”;break;}
}else{
if(gameBoard[var]== userInput){gameBoard[var]=22;GameOver = gameStatus();player=”X”;break;}
}
}
drawBoard(true);
turn+=1;
}
else{
if(GameOver==true){
if(player==”O”){cout << ” X выиграл!nn”;}else{cout << ” O выиграл!nn”;}
cout << ” Хотите сыграть еще? y or n: “;
}
else{cout << ” Ничья!n”; cout << ” Хотите сыграть еще? y or n: “;}
cin >> restart;
system(“cls”);
}
}
void AI(){
do{
if(player==”X”){
validateInput();
xturn+=1;
}
else{
userInput=AIsmarts(22);
if(userInput==0){
userInput=AIsmarts(11);
}
if(userInput==0){
if(xturn == 0){userInput=5;}
else if(xturn == 1){
if(gameBoard[0]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=6;}}
else if (gameBoard[1]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=9;}}
else if (gameBoard[2]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=9;}}
else if (gameBoard[3]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=9;}}
else if (gameBoard[4]==11){userInput=1;}
else if (gameBoard[5]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=1;}}
else if (gameBoard[6]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=1;}}
else if (gameBoard[7]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=1;}}
else if (gameBoard[8]==11){if(gameBoard[4]==5){userInput=5;}else{userInput=3;}}
}
else if (xturn == 2){
userInput = AIsmarts(22);
if(userInput==0){
if(gameBoard[0]==11 && gameBoard[8]==11){userInput=6;}
if(gameBoard[0]==11 && gameBoard[5]==11){userInput=3;}
if(gameBoard[0]==11 && gameBoard[7]==11){userInput=6;}
else if (gameBoard[1]==11 && gameBoard[3]==11){userInput=3;}
else if (gameBoard[1]==11 && gameBoard[6]==11){userInput=9;}
else if (gameBoard[1]==11 && gameBoard[7]==11){userInput=3;}
else if (gameBoard[1]==11 && gameBoard[8]==11){userInput=3;}
else if (gameBoard[1]==11 && gameBoard[5]==11){userInput=9;}
else if (gameBoard[2]==11 && gameBoard[3]==11){userInput=1;}
else if (gameBoard[2]==11 && gameBoard[6]==11){userInput=3;}
else if (gameBoard[2]==11 && gameBoard[7]==11){userInput=1;}
else if (gameBoard[3]==11 && gameBoard[1]==11){userInput=3;}
else if (gameBoard[3]==11 && gameBoard[2]==11){userInput=1;}
else if (gameBoard[3]==11 && gameBoard[5]==11){userInput=7;}
else if (gameBoard[3]==11 && gameBoard[8]==11){userInput=7;}
else if (gameBoard[3]==11 && gameBoard[7]==11){userInput=1;}
else if (gameBoard[4]==11 && gameBoard[8]==11){userInput=3;}
else if (gameBoard[5]==11 && gameBoard[0]==11){userInput=8;}
else if (gameBoard[5]==11 && gameBoard[1]==11){userInput=9;}
else if (gameBoard[5]==11 && gameBoard[3]==11){userInput=2;}
else if (gameBoard[5]==11 && gameBoard[6]==11){userInput=9;}
else if (gameBoard[5]==11 && gameBoard[7]==11){userInput=2;}
else if (gameBoard[6]==11 && gameBoard[1]==11){userInput=6;}
else if (gameBoard[6]==11 && gameBoard[2]==11){userInput=5;}
else if (gameBoard[6]==11 && gameBoard[5]==11){userInput=9;}
else if (gameBoard[7]==11 && gameBoard[0]==11){userInput=6;}
else if (gameBoard[7]==11 && gameBoard[1]==11){userInput=9;}
else if (gameBoard[7]==11 && gameBoard[2]==11){userInput=1;}
else if (gameBoard[7]==11 && gameBoard[3]==11){userInput=1;}
else if (gameBoard[7]==11 && gameBoard[5]==11){userInput=3;}
else if (gameBoard[8]==11 && gameBoard[0]==11){userInput=4;}
else if (gameBoard[8]==11 && gameBoard[1]==11){userInput=6;}
else if (gameBoard[8]==11 && gameBoard[3]==11){userInput=8;}
}
}
else if(xturn > 2){
for(var=0;var<9;var++){
if(gameBoard[var]==var+1){userInput=var+1;break;}
}
}
}
}
makeMove(false);
}while(turn < 9 && GameOver == false);
makeMove(true);
}
int AIsmarts(int Player){
if(gameBoard[0]==Player && gameBoard[1]==Player && gameBoard[2]==3){return 3;}
else if(gameBoard[3]==Player && gameBoard[4]==Player && gameBoard[5]==6){return 6;}
else if(gameBoard[6]==Player && gameBoard[7]==Player && gameBoard[8]==9){return 9;}
else if(gameBoard[0]==Player && gameBoard[2]==Player && gameBoard[1]==2){return 2;}
else if(gameBoard[3]==Player && gameBoard[5]==Player && gameBoard[4]==5){return 5;}
else if(gameBoard[6]==Player && gameBoard[8]==Player && gameBoard[7]==8){return 8;}
else if(gameBoard[1]==Player && gameBoard[2]==Player && gameBoard[0]==1){return 1;}
else if(gameBoard[4]==Player && gameBoard[5]==Player && gameBoard[3]==4){return 4;}
else if(gameBoard[7]==Player && gameBoard[8]==Player && gameBoard[6]==7){return 7;}
else if(gameBoard[0]==Player && gameBoard[3]==Player && gameBoard[6]==7){return 7;}
else if(gameBoard[1]==Player && gameBoard[4]==Player && gameBoard[7]==8){return 8;}
else if(gameBoard[2]==Player && gameBoard[5]==Player && gameBoard[8]==9){return 9;}
else if(gameBoard[6]==Player && gameBoard[3]==Player && gameBoard[0]==1){return 1;}
else if(gameBoard[7]==Player && gameBoard[4]==Player && gameBoard[1]==2){return 2;}
else if(gameBoard[8]==Player && gameBoard[5]==Player && gameBoard[2]==3){return 3;}
else if(gameBoard[0]==Player && gameBoard[6]==Player && gameBoard[3]==4){return 4;}
else if(gameBoard[1]==Player && gameBoard[7]==Player && gameBoard[4]==5){return 5;}
else if(gameBoard[2]==Player && gameBoard[8]==Player && gameBoard[5]==6){return 6;}
else if(gameBoard[0]==Player && gameBoard[4]==Player && gameBoard[8]==9){return 9;}
else if(gameBoard[2]==Player && gameBoard[4]==Player && gameBoard[6]==7){return 7;}
else if(gameBoard[6]==Player && gameBoard[4]==Player && gameBoard[2]==3){return 3;}
else if(gameBoard[8]==Player && gameBoard[4]==Player && gameBoard[0]==1){return 1;}
else if(gameBoard[0]==Player && gameBoard[8]==Player && gameBoard[4]==5){return 5;}
else if(gameBoard[2]==Player && gameBoard[6]==Player && gameBoard[4]==5){return 5;}
else{return 0;}
}
5-1) -надо подсчитать число способов раскраски 9 деталей когда задействована 1 краска
5-1) -надо подсчитать число способов раскраски 9 деталей, когда задействована 1 краска. Таких способов- шесть.
Задача5-2) если все детали раскрашивать только в 2 цвета, то можно: раскрасить 1 деталь в один цвет, а остальные 8 – в другой цвет; или 2- в один цвет, а 7- в другой; три- в один, а 6- в другой; или 4 деталей в один цвет, а 5- в другой. Всего получается 4 варианта, а каждый из них распадается на способов выбрать два цвета из 6 возможных. Итого 4*30=120 способов.
Задача5-3) если все детали раскрашивать в 3 цвета, то здесь число вариантов представить 9 в виде шести слагаемых (пока без учёта порядка) таково:0+0+0+1+1+7, 0+0+0+1+2+6, 0+0+0+1+3+5,0+0+0+1+4+4, 0+0+0+2+2+5,0+0+0+2+3+4, 0+0+0+3+3+3. Получили семь вариантов. Из них
три варианта с различными слагаемыми (1+2+6, 1+3+5, 2+3+4) надо умножить на =4*5*6=120 способов выбрать 3 цвета из 6; три варианта(1+1+7,1+4+4 и 2+2+5) надо умножить на и в одном варианте (3+3+3) надо умножить на . Итого 3*120+3*60+1*20=560 способов.
Задача5-4) если все детали раскрашивать в 4 цвета, то возможные представления числа 9 в виде суммы 4 слагаемых таковы: 1+1+1+6,1+1+2+5,1+1+3+4,1+2+2+4,1+2+3+3. В первом случае одно слагаемое 6 и три одинаковых. Надо умножить на .
В остальных случаях цвета можно выбрать способами. Итого 1*60+4*180=780 способов.
Задача5-5) если все детали раскрашивать в 5 цветов, то возможные представления числа 9 в виде суммы 5 слагаемых таковы: 1+1+1+1+5,1+1+1+2+4,1+1+1+3+3,1+1+2+2+3. В первом случае одно слагаемое 5 и четыре одинаковых. Надо умножить на . Во втором случае два разных слагаемых и три одинаковых. Надо умножить на .
В третьем случае два и три одинаковых слагаемых . Надо умножить на возможностей выбрать цвета.
В последнем случае надо умножать на . Итого 30+120+60+180=390 способов.
Задача5-6) если все детали раскрашивать в 6 цветов, то возможные представления числа 9 в виде суммы 6 слагаемых таковы: 1+1+1+1+1+4(цвета можно выбрать способами ),1+1+1+1+2+3(цвета можно выбрать 6*5*4=120 способами),1+1+1+2+2+2(цвета можно выбрать 6*5*4=120 способами), Итого 6+120+120+120=366 способов.
Окончательно 6+120+560+780+390+366=2222
ОТВЕТ: 2222.
Сколько различных аккордов можно взять, используя 9 клавиш рояля, если аккорд может содержать от 4 до 7 звуков (клавиши нажимаются одновременно)?
РЕШЕНИЕ.
Надо подсчитать сумму так как порядок выбранных 4-х (или 5-и, 6-и или семи) выбранных из 9 клавиш не важен. Так как
, , и
как порядок, то получаем в ответе: 126+126+84+36=372.
ОТВЕТ: 372.
В классе 30 человек. Известно, что 18 человек занимаются фотографией, 14 – музыкой, 16 – рисованием, 8 – фотографией и музыкой, 6 – музыкой и рисованием, 7 – фотографией и рисованием. 4 ученика ничем не занимаются. Сколько учеников занимается всеми тремя делами?
РЕШЕНИЕ.
Если прибавить к 18 ученикам занимающихся фотографией 16 человек занимающихся рисованием и отнять 7 занимающихся и фотографией и рисованием, то получим 18+16-7=27 человек, занимающихся или фотографией или рисованием, или и тем и другим, а возможно ещё и музыкой. Однако, с другой стороны известно, что 4 ученика не занимаются ничем. 30-24=26, что меньше 27. Получили, что данные числа задачи противоречивы.
ОТВЕТ: задача некорректна- условия задачи противоречат друг другу.
Сколько натуральных чисел из множества {1,…,1000} не делится ни на 3, ни на 5, ни на 7?
РЕШЕНИЕ.
Из чисел от 1 до 1000 введём обозначения: а-количество чисел делящихся на 3, но при этом не делящихся ни на 5 ни на 7; b-количество чисел делящихся на 5, но при этом не делящихся ни на 3 ни на 7;с-количество чисел делящихся на 7, но при этом не делящихся ни на 5 ни на 3;d–количество чисел делящихся и на 3, и на 5, но при этом не делящихся на 7;f- количество чисел делящихся и на 3, и на 7, но при этом не делящихся на 5; е- количество чисел делящихся и на 5, и на 7, но при этом не делящихся на 3, и наконец х- число чисел, делящихся и на 3, и на 5, и на7.
Разделив 1000 на (3*5*7) получаем 9.524, т.е. х=9.
Разделив 1000 на (3*5) получаем 66.66, т.е. d+х=66, откуда d=66-9=57.
Разделив 1000 на (3*7) получаем 47.62, т.е. f+х=47, откуда f=47-9=38.
Разделив 1000 на (7*5) получаем 28.57, т.е. e+х=28, откуда e=28-9=19.
Разделив 1000 просто на 3 получаем 333.33, т.е. a+d+f+х=333, откуда a=333-57-38-9=229.
Разделив 1000 просто на 5 получаем 200, т.е. b+d+e+х=200, откуда b=200-57-19-9=115.
Разделив 1000 просто на 7 получаем 142.86, т.е. c+e+f+х=142, откуда c=142-38-19-9=76.
Итак, из первой тысячи натуральных чисел всего есть a+b+c+d+e+f+x=229+115+76+57+19+38+9=543 числа, делящихся хотя бы на одно из чисел 3,5 или 7. А искомое число чисел тогда равно 1000-543=457.
ОТВЕТ: 457
Две задачи, общие для всех вариантов
Сколько различных слов (возможно бессмысленных) можно составить из букв:
а) вашего имени- Ринальд
б) вашей фамилии.- Латыпов
РЕШЕНИЕ.
А) Так как в задаче явно не указано, что имеются ввиду только семибуквенные слова, то решим задачу в более широком виде – подсчитаем число всевозможных однобуквенных, двухбуквенных, трёх-, четырёх-, пяти-, шести и семибуквенных слов и результат сложим. Так как все семь букв имени разные, то ответом будет число Вычисляем значения: ; ; ; Находим сумму 7+42+210+840+2520+5040+5040=13699.
Б) Так как в фамилии букв тоже семь и все они так же разные, то и ответ получается тот же: =7+42+210+840+2520+5040+5040=13699.
ОТВЕТ: а)13699; б) 13699. Если же имелись ввиду только семибуквенные слова, то тогда ответ будет в обоих случаях только 5040. Его можно получить по формуле перестановок с повторениями то есть 1*2*3*4*5*6*7=5040.
Есть N=14 (где N равно числу букв вашего имени + число букв вашей фамилии, т.е. 7+7=14) томов книг, которые в произвольном порядке расставлены на полке.
Сколько есть способов расставить эти книги так, чтобы:
а) 1-ый и 2-ой тома стояли рядом;
б) 1-ый и 2-ой тома не стояли рядом;
в) между 1-ым и 2-ым томами стояло ровно 7 других книг (где n равно числу букв вашего имени).
РЕШЕНИЕ.
А) Рядом два тома могут стоять на:1 и 2 месте, 2 и 3 месте, 3 и 4 месте, …, 12 и 13 месте, 13 и 14 месте. Всего 13 способов, а учитывая порядок их расположения, то 13*2=26 способов поставить эти два тома рядом. На каждый такой способ можно расставить оставшиеся 12 томов на оставшиеся 12 мест =12!=1*2*3*4*5*6*7*8*9*10*11*12=479001600 различными способами. Значит, всего таких вариантов будет 26*479001600=12454041600.
Б) Число, когда два тома (1-ый и 2-ой) находятся рядом- уже найдено. Всего же число способов расставить все 14 томов можно найти как
=14!=1*2*3*4*5*6*7*8*9*10*11*12*13*14=87178291200. Значит, искомое число способов равно разности 87178291200-12454041600=74724249600.
В) Если том №1 стоит на 1-м месте, то том №2 должен стоять на 9-м месте;
Если том №1 стоит на 2-м месте, то том №2 должен стоять на 10-м месте;
Если том №1 стоит на 3-м месте, то том №2 должен стоять на 11-м месте; и так далее до 6-го и 14-го места.
На 7-м и на 8-м местах том №1 стоять не может.
Если же том №1 стоит на 9-м месте, то том №2 должен стоять на 1-м месте;
Если том №1 стоит на 10-м месте, то том №2 должен стоять на 2-м месте; и так далее до 14-го и 6-го мест.
Всего 12 вариантов. На каждый из них можно =12!=1*2*3*4*5*6*7*8*9*10*11*12=479001600 различными способами расставить оставшиеся 12 томов на оставшиеся 12 мест. Значит всего способов есть 12*479001600=5748019200.
ОТВЕТ: а) 12454041600 ; б) 74724249600; в) 5748019200.
11) Решить уравнение
РЕШЕНИЕ.
Так как ,а ,то получаем уравнение:
х*(х-1)*(х-2) + х*(х-1)/2 = 14*х , умножаем на 2 и делим на х (так как х не может быть равен нулю):
2*(х-1)*(х-2) + (х-1) = 28. После упрощений получаем квадратное уравнение Дискриминант D=25-4*2*(-25)=225 и корни равны
и . Отрицательный корень не подходит, значит х=5.
ОТВЕТ: х=5.
НАЧАЛО int main() 0n=200 20323423686957005306643475355 нет 0 нет
-6709305628НАЧАЛО
0НАЧАЛО
int main()
110504740298570014608423854010n=200
0n=200
20323423686957005306643475355нет
0нет
13280292954851да
да
15012392904490ВЫВОД: ошибка
00ВЫВОД: ошибка
1431388317758900-3753332863947dva_n>200
00dva_n>200
57281935286940030677342205648КОНЕЦ
0КОНЕЦ
282130524083110015741652011045ВЫВОД: ошибка
00ВЫВОД: ошибка
13866942151917да
да
1438031240772500-2888762072738dva_n<=0
00dva_n<=0
-260350461645ВВОД dva_n
00ВВОД dva_n
5958792660043нет
0нет
19253201238581нет
0нет
5815781882250да
да
36423601294130КОНЕЦ
0КОНЕЦ
339534514763750021639971047888ВЫВОД: ошибка
00ВЫВОД: ошибка
5724392737071058166092033602028218148521000580390194274105816883322710
-877912397950удалось считать целое dva_n
00удалось считать целое dva_n
4317805179754КОНЕЦ
0КОНЕЦ
-19636322677dva_n=2*n
00dva_n=2*n
498602029004800
3630930267970да
да
3808388137062ВЫВОД: x[0],x[1],sqrt(mod2_vect(x[0],x[1]))
00ВЫВОД: x[0],x[1],sqrt(mod2_vect(x[0],x[1]))
2287318216193dva_n=2
00dva_n=2
633584974000-246087206179i=0
i<dva_n
i++
00i=0
i<dva_n
i++
359776320056200158393420070900-605350200709-60588820070900
2987138156649нет
0нет
3012635232214007034341911350-246185332008ВВОД x[i],x[i+1]
00ВВОД x[i],x[i+1]
230768870485dva_n=4
00dva_n=4
368344048504да
да
36589186696800426558823007ВЫВОД: x[0],x[1],x[2],x[3],0.5*(x[0]+x[2]),0.5*(x[1]+x[3]),0.5*sqrt(mod2_vect(x[2]-x[0],x[3]-x[1]))
00ВЫВОД: x[0],x[1],x[2],x[3],0.5*(x[0]+x[2]),0.5*(x[1]+x[3]),0.5*sqrt(mod2_vect(x[2]-x[0],x[3]-x[1]))
-614143321945006871191460990
300350215484нет
0нет
300794665307002163739253609num=f(x,dva_n)
00num=f(x,dva_n)
29643273173530
1979442160655ВЫВОД: num,x[400],x[401],sqrt(x[402])
00ВЫВОД: num,x[400],x[401],sqrt(x[402])
2331085264160КОНЕЦ
0КОНЕЦ
29671111194290
4511284195287КОНЕЦ
0КОНЕЦ
506534632385008190031878130
double vect_mult(double x1,double y1,double x2,double y2)
766250183075
28233132080ВВОД:
x1,y1,x2,y2
00ВВОД:
x1,y1,x2,y2
-323703374211ВЫВОД:
fabs(x1*y2-x2*y1)
00ВЫВОД:
fabs(x1*y2-x2*y1)
69884216549100
6953257268300
double scal_mult(double x1,double y1,double x2,double y2)
766250183075
28233132080ВВОД:
x1,y1,x2,y2
00ВВОД:
x1,y1,x2,y2
-323703374211ВЫВОД:
x1*x2+y1*y2
00ВЫВОД:
x1*x2+y1*y2
69884216549100
6953257268300
double mod2_vect(double x,double y)
766250183075
28233132080ВВОД:
x, y
00ВВОД:
x, y
-323703374211ВЫВОД:
x*x+y*y
00ВЫВОД:
x*x+y*y
69884216549100
6953257268300
int equal(double x,double y)
766250183075
28233132080ВВОД:
x, y
00ВВОД:
x, y
115619319454x=x-y
0x=x-y
69884216549100
686581279791
-420712235488x<EPS и
x>-EPS
00x<EPS и
x>-EPS
1776535193675нет
0нет
202872771071ВЫВОД:
0
00ВЫВОД:
0
177736410804800
633046263476да
да
68614230504500
-262255184687ВЫВОД:
1
00ВЫВОД:
1
int find_circle(double *x,int iA,int iB,int iC)
1143879200611
502822149860ВВОД:
x, iA, iB, iC
00ВВОД:
x, iA, iB, iC
-262450372452xAB=x[iB]-x[iA], yAB=x[iB+1]-x[iA+1],
xAC=x[iC]-x[iA], yAC=x[iC+1]-x[iA+1],
xBC=x[iC]-x[iB], yBC=x[iC+1]-x[iB+1],
S=vect_mult(xAB,yAB,xAC,yAC)
00xAB=x[iB]-x[iA], yAB=x[iB+1]-x[iA+1],
xAC=x[iC]-x[iA], yAC=x[iC+1]-x[iA+1],
xBC=x[iC]-x[iB], yBC=x[iC+1]-x[iB+1],
S=vect_mult(xAB,yAB,xAC,yAC)
114690817418500
11882802117970
2153529254146да
да
2397467187276ВЫВОД:
0
00ВЫВОД:
0
159287187373 equal(S,0.)
00 equal(S,0.)
215475015440300
114256179521нет
0нет
-350373332935S=0.5/S/S; a2=mod2_vect(xBC,yBC);
b2=mod2_vect(xAC,yAC); c2=mod2_vect(xAB,yAB);
alpha=S*a2*scal_mult(xAB,yAB,xAC,yAC);
beta=-S*b2*scal_mult(xAB,yAB,xBC,yBC);
gamma=S*c2*scal_mult(xAC,yAC,xBC,yBC);
x[400]=alpha*x[iA]+beta*x[iB]+gamma*x[iC];
x[401]=alpha*x[iA+1]+beta*x[iB+1]+gamma*x[iC+1];
x[402]=0.5*S*a2*b2*c2;
00S=0.5/S/S; a2=mod2_vect(xBC,yBC);
b2=mod2_vect(xAC,yAC); c2=mod2_vect(xAB,yAB);
alpha=S*a2*scal_mult(xAB,yAB,xAC,yAC);
beta=-S*b2*scal_mult(xAB,yAB,xBC,yBC);
gamma=S*c2*scal_mult(xAC,yAC,xBC,yBC);
x[400]=alpha*x[iA]+beta*x[iB]+gamma*x[iC];
x[401]=alpha*x[iA+1]+beta*x[iB+1]+gamma*x[iC+1];
x[402]=0.5*S*a2*b2*c2;
117816912148100
141800330831700
485140185371ВЫВОД:
1
00ВЫВОД:
1
int point_on_circle(double *x,int iP)
1864848200611
1229995149469ВВОД:
x, iP
00ВВОД:
x, iP
-420370334548equal(mod2_vect(x[iP]-x[400],x[iP+1]-x[401]),x[402])
00equal(mod2_vect(x[iP]-x[400],x[iP+1]-x[401]),x[402])
186787716510000
4122860296740нет
0нет
-422959370889да
да
418699519987900-42017522625600
-675103432826ВЫВОД:
1
00ВЫВОД:
1
330307581378ВЫВОД:
0
00ВЫВОД:
0
int circle_num(double *x,int dva_n,int nC)
766250183075
27696128465ВВОД:
x, dva_n, nC
00ВВОД:
x, dva_n, nC
69884216549100
38818046843num=3
00num=3
2500630279400нет
0нет
3017080163879ВЫВОД:
num
00ВЫВОД:
num
-252583206375dva_i=nC
dva_i<dva_n
dva_i+=2
00dva_i=nC
dva_i<dva_n
dva_i+=2
710224537300
2506687209941-631727209941-63172720994100
96847320324800
-253658143803point_on_circle(x,dva_i)
00point_on_circle(x,dva_i)
217243325141100
88900023349да
да
387838299720num=num+1
00num=num+1
9800983907700
97726527593200
-63172718957200
int f(double *x,int dva_n)
766250183075
-254293135011ВВОД:
x, dva_n
00ВВОД:
x, dva_n
-139700367030nA=0,nB=2,nC=4,num=2
00nA=0,nB=2,nC=4,num=2
69884216549100
3276893177262нет
0нет
447577344987x[400]=0.5*(x[0]+x[2])
x[401]=0.5*(x[1]+x[3])
x[402]=0.25*mod2_vect(x[2]-x[0],x[3]-x[1])
00x[400]=0.5*(x[0]+x[2])
x[401]=0.5*(x[1]+x[3])
x[402]=0.25*mod2_vect(x[2]-x[0],x[3]-x[1])
3228097118111002171700125730find_circle (x,nA,nB,nC)
00find_circle (x,nA,nB,nC)
-253609214239dva_i=0
dva_i<dva_n-4
dva_i+=2
00dva_i=0
dva_i<dva_n-4
dva_i+=2
710224537300
5339715144975001588770218294-64052119934100-631727209941
359742184796да
да
468678849823ВЫВОД:
num
00ВЫВОД:
num
76615220320000
32368881831700115912123825dva_j=dva_i+2
dva_j<dva_n-2
dva_j+=2
00dva_j=dva_i+2
dva_j<dva_n-2
dva_j+=2
193562610013500386114212651300-243694118794-25365812651200
121465711762100
57262441275dva_k=dva_j+2
dva_k<dva_n
dva_k+=2
00dva_k=dva_j+2
dva_k<dva_n
dva_k+=2
1966554601320354254317003650127455250023928274552500
18652883883300309049197094find_circle(x,dva_i,dva_j,dva_k)
00find_circle(x,dva_i,dva_j,dva_k)
3086100274955нет
0нет
342064829591000
182562513970да
да
186528880304001021227238565cur=circle_num(x,dva_n,dva_k+2)
00cur=circle_num(x,dva_n,dva_k+2)
199717320613200
89813467553cur>num
00cur>num
276078424179нет
0нет
1934650177556да
да
30786272569300198784227187800
153079097643num=cur
nA=dva_i
nB=dva_j
nC=dva_k
00num=cur
nA=dva_i
nB=dva_j
nC=dva_k
199878525444000
-2536583154470020354216539300
-63172831701200
байта число хранится в обычной форме и принимает значения от -2 147 483 648 до 2 147 483 647
байта, число хранится в обычной форме и принимает значения от -2 147 483 648 до 2 147 483 647. Для хранения переменной типа short int используются 2 байта, значит она может принимать значения от -32 768 до 32 767. Значит значение 1 000 000 000 в данную переменную не поместится и будут выведены только нижние байты числа. Для хранения переменной float используется 4 байта, но число хранится в экспонентной форме и принимает значения от -2 147 483 648 до 2 147 483 647.
Блок – схема алгоритма
Рисунок 2.4.1. Блок схема основной программы
Текст программы:
#include “stdio.h”
#include <conio.h>
void main()
{
float a;
printf(“Enter number – “);
scanf(“%f”,&a);
float b=a+1;
printf(“float = %fn”, b);
int c=a+1;
printf(“int = %in”, c);
short int d=a+1;
printf(“short int = %in”, d);
getch();//ожидание нажатия клавиши
}
Скриншот работы программы
Задание 3.1.
Написать программу, которая по номеру года определяется, является ли он високосным. Високосным считается год, номер которого делится на 4, при этом год не високосный, если он делится на 100, но не делится на 400.
Решение:
Для решения поставленной задачи используем конструкцию ветвления if … else. при этом проверим остаток от деления на 4, на 100 и на 400. Если не делится на 4 – значит год однозначно не високосный. Если делится, то год может быть как високосным так и нет, значит нужна дополнительная проверка if деления года на 400 и на 100.
Блок – схема алгоритма
Рисунок 3.1.1. Блок схема основной программы
Текст программы:
#include “stdio.h”
#include “math.h”
#include <conio.h>
#include <iostream>
void main()
{
setlocale(LC_ALL, “Russian”);//подключение вывода русских символов
int a;
printf(“Введите год – “);
scanf(“%i”,&a);
if(a%4==0)
if(a%100==0 && a%400!=00)
printf(“Год не высокосный”);
else
printf(“Год высокосный”);
else
printf(“Год не высокосный”);
getch();//ожидание нажатия клавиши
}
Скриншот работы программы
Задание 3.2.
Написать программу, в которой пользователь вводит целое положительное число, а компьютер сообщает, сколько у этого числа делителей меньше 10.
Решение:
Для решения поставленной задачи будем использовать цикл while для перебора всех чисел от 1 до 10. Внутри цикла при помощи условного оператора if проверяем делится введенное число на текущее или нет. И если делится, то выводим текущее число, а также увеличиваем количество делителей.
Блок – схема алгоритма
Рисунок 3.2.1. Блок схема основной программы
Текст программы:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b=0;
printf(“Enter numbern”); scanf (“%d”,&a);
int i=0;
do
{
b++;
if (!(a % b))
{
printf (“%d “,b);
i++;
}
}
while (b!=a,b<10);
printf (“n%d – delitelejn”,i);
getch();
}
Скриншот работы программы
Задание 3.3.
Написать программу, в которой пользователь вводит два целых положительных числа, а компьютер сообщает, верно ли что
– Одно число больше другого на 5
Решение:
Для решения поставленной задачи воспользуемся конструкцией if и функцией Abs возвращающей модуль числа. Вычтем из первого числа второе и возьмем модуль. Если модуль равен 5 значит утверждение верно, если нет – ложно.
Блок – схема алгоритма
Рисунок 3.1.1. Блок схема основной программы
Текст программы:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
int a;
int b;
printf(“A = “);
scanf(“%d”, &a);
printf(“B = “);
scanf(“%d”, &b);
if(abs(a – b) == 5)
printf(“Yes, one number is more than another on 5”);
else
printf(“No”);
getch();
}
Скриншот работы программы
Задание 3.4.
Написать программу, в которой пользователь вводит два целых положительных числа, а компьютер сообщает, верно ли что
Среди введенных чисел есть число, делящееся на 5
Решение:
Для решения поставленной задачи воспользуемся конструкцией if и операцией остаток от деления %.Если остаток от деления первого или второго числа на 5 равен нулю значит утверждение верно, если нет – ложно.
Блок – схема алгоритма
Рисунок 3.4.1. Блок схема основной программы
Текст программы:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
int a;
int b;
printf(“A = “);
scanf(“%d”, &a);
printf(“B = “);
scanf(“%d”, &b);
if((a%5 == 0) || (b%5 == 0))
printf(“Yes, one of number div on 5”);
else
printf(“No”);
getch();
}
Скриншот работы программы
Задание 4.1.
Написать программу, которая находит наименьший делитель введенного пользователем числа. Для этого организовать цикл, который заканчивается, когда текущее значение некоторой переменной является делителем числа, и это число увеличивается на 1 на каждом шаге цикла. Доказать, что цикл закончится при любом целом положительном числе, введенном пользователем.
Решение:
Для решения поставленной задачи инициируем переменную в которой храним делитель 2, т.к. на 1 делится любое число. Проверяем делится ли введенное число на делитель, если делится – наименьший делитель найден, если нет увеличиваем делитель на 1. Т.к. любое число делится само на себя, то цикл повторится максиму столько же раз чему равно введенное число.
Блок – схема алгоритма
Рисунок 4.1.1. Блок схема основной программы
Текст программы:
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a, b;
printf(“Inter numbern”);
scanf(“%d”, &a);
for (b=2; b<=a; b++)
{
if (a%b==0)
break;
}
printf(“for – ND = %dn”,b);
b=2;
while(b<=a)
{
if (a%b==0)
break;
b++;
}
printf(“while – ND = %dn”,b);
getch();
}
Скриншот работы программы
Задание 4.2.
Найти наибольше и наименьшие значения функции для целых аргументов от 1 до 50. Для этого использовать конструкцию выбора внутри цикла:
– sqrt(50*i)-i
Решение:
Для решения поставленной задачи воспользуемся циклами for и while и конструкцией выбора if. В циклах поочередно перебираем все значения от 1 до 50 и рассчитываем заданную функцию на каждом шаге.
Блок – схема алгоритма
Рисунок 4.2.1. Блок схема основной программы
Текст программы:
#include <stdio.h>
#include <conio.h>
#include <math.h>
void main()
{
double min1 ;
double min2 ;
double max1 ;
double max2 ;
int i=0;
double v = sqrt((double)50*i)-i ;
min1=v;
max1=v;
min2=v;
max2=v;
for (i=1; i<=50; i++)
{
v = sqrt((double)50*i)-i ;
if (v<min1)
min1=v ;
if (v>max1)
max1=v ;
}
printf (“method ‘for’, min=%.2f,max=%.2fn”,min1,max1) ;
i=1 ;
while (i<=50)
{
v = sqrt((double)50*i)-i ;
if (v<min2)
min2=v ;
if (v>max2)
max2=v ;
i++ ;
}
printf (“method ‘while’, min=%.2f,max=%.2fn”,min2,max2) ;
getch() ;
}
Скриншот работы программы
Задание 4.3.
Нарисовать график функции из 2
Написать программу которая строит разбиение множества по отношению эквивалентности R
6-1.Написать программу, которая строит разбиение множества по отношению эквивалентности R. Конечное множество точек задается файлом.
Программа
#include <string>
#include <iostream>
#include <fstream>
using namespace std;
struct point
{
double x,y;
};
bool check(struct point a, struct point b)
{
if (a.x==b.x && a.y==b.y)
return true;
return false;
}
int main()
{
int n;
string file;
cout << “Vvedite kolichestvo elementov v mnozhestve:”;
cin >> n;
struct point *a = new struct point[n];
for (int i=0; i<n; i++)
{
cout << “Vvedite x:”;
cin >> a[i].x;
cout << “Vvedite y:”;
cin >> a[i].y;
}
cout << “Vvedite nazvanie faila resultata:”;
cin >> file;
fstream myfile;
myfile.open (file.c_str(), std::fstream::out);
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
if (check(a[i], a[j]))
myfile << “(” << a[j].x << “, ” << a[j].y << “) “;
}
myfile << endl;
}
myfile.close();
delete[] a;
return 0;
}
Вывод программы
Содержимое файла с результатом:
(1, 1)
(2, 2)
(3, 3)
(4, 4)
(9, 9)
7-1.Написать программу, которая строит матрицу бинарного отношения R и проверяет его симметричность и негатранзитивность.
Программа
#include <iostream>
using namespace std;
bool check(double a, double b)
{
if (a*(b+1) == 12)
return true;
return false;
}
void inputSet(int n, double *a)
{
for (int i=0; i<n; i++)
cin >> a[i];
}
int main()
{
int n, m;
cout << “Vvedite kolichestvo elementov v mnozhestve 1:”;
cin >> n;
double *a = new double[n];
cout << endl << “Vvedite kolichestvo elementov v mnozhestve 2:”;
cin >> m;
double *b = new double[m];
cout << endl << “Vvedite elementi mnozhestva 1” << endl;
inputSet(n, a);
cout << endl << “Vvedite elementi mnozhestva 2” << endl;
inputSet(m, b);
cout << “Result matrix:” << endl;
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
cout << check(a[i], b[j]) << ” “;
cout << endl;
}
delete[] a;
delete[] b;
return 0;
}
Вывод программы
6-2.Написать программу разгадки числового ребуса
С А Р = А Т О В
7-2.Написать программу генерации m-последовательностей 0 и 1, удовлетворяющих обоим требованиям:
число единиц должно быть чётно (включая 0 единиц);
число нулей должно быть не меньше числа единиц.
Программа
#include <iostream>
#include <string.h>
#include <bitset>
#include <math.h>
using namespace std;
void Engine(int Number);
int main()
{
int Number = 1;
while(Number != 0)
{
cout <<“Input number(0 to exit): “;
cin >> Number;
Engine(Number);
}
return 0;
}
void Engine(int Number)
{
int BitsetNumberCountUnit = 0, BitsetNumberCountZero = 0, StringCount = 0;
for(int i = 0; i < pow(2, Number) – 1; i++)
{
bitset <8> BitsetNumber(i);
for(int j = 0; j < Number; j++)
{
if(BitsetNumber[j] == 1)
BitsetNumberCountUnit = BitsetNumberCountUnit + 1;
else
BitsetNumberCountZero = BitsetNumberCountZero + 1;
}
if(BitsetNumberCountUnit % 2 == 0 && BitsetNumberCountZero >= BitsetNumberCountUnit)
{
for(int j = 0; j <= Number – 1; j++)
cout << BitsetNumber[j];
cout << endl;
StringCount++;
}
BitsetNumberCountUnit = 0;
BitsetNumberCountZero = 0;
if(StringCount == Number)
return;
}
}
Вывод программы
6-3. По таблице рёбер построить списки инцидентности неориентированного графа и подсчитать степени его вершин.
Программа
#include <string>
#include <iostream>
#include <fstream>
#include <set>
#include <stdlib.h>
using namespace std;
struct edge
{
int a,b;
};
int getPowForVertex(struct edge *data, int n, int v, bool *inc_list)
{
int result = 0;
for (int i=0;i<n;i++)
{
inc_list[i] = 0;
if (data[i].a==v)
{
result++;
inc_list[i] = 1;
}
if (data[i].b==v)
{
result++;
inc_list[i] = 1;
}
}
return result;
}
void readInput(struct edge *data)
{
string file_input;
string line;
cout << “Vvedite nazvanie faila s tablicei reber:”;
cin >> file_input;
fstream ifile;
ifile.open(file_input.c_str(), std::fstream::in);
if (!ifile.is_open())
return;
int i=0;
while (getline (ifile,line))
{
int pos = line.find(” “);
if (pos==std::string::npos)
continue;
data[i].a= atoi(line.substr(0, pos).c_str());
data[i].b= atoi(line.substr(pos+1).c_str());
i++;
}
ifile.close();
}
void print(bool *inc_list, int n)
{
for(int i=0;i<n;i++)
cout << inc_list[i] << ” “;
}
int main()
{
int n;
cout << “Vvedite chislo reber:”;
cin >> n;
struct edge *data = new struct edge[n];
readInput(data);
set<int> all_verts;
for (int i=0; i<n; i++)
{
if (!all_verts.count(data[i].a))
{
bool *inc_list = new bool[n];
all_verts.insert(data[i].a);
int t = getPowForVertex(data, n, data[i].a, inc_list);
cout << “Spisok incidentnosti vershini ” << data[i].a << “: “;
print(inc_list, n);
cout << endl << “Stepen vershini = ” << t << endl;
delete[] inc_list;
}
if (!all_verts.count(data[i].b))
{
bool *inc_list = new bool[n];
all_verts.insert(data[i].b);
int t = getPowForVertex(data, n, data[i].b, inc_list);
cout << “Spisok incidentnosti vershini ” << data[i].b << “: “;
print(inc_list, n);
cout << endl << “Stepen vershini = ” << t << endl;
delete[] inc_list;
}
}
delete[] data;
return 0;
}
Вывод программы
Содержание файла graph.txt
1 2
4 0
2 3
3 1
4 3
5 5
1 5
7-3. По таблице рёбер построить списки инцидентности неориентированного графа, записи в каждом списке упорядочить по убыванию номеров вершин.
1 Слайды презентации могут содержать Тексты и графику + Таблицы и диаграммы
1.Слайды презентации могут содержать:
Тексты и графику; +
Таблицы и диаграммы; +
Видеоклипы и звуки; +
2. Какие бывают режимы показа презентации?
Непрерывный;+
Презентация завершается первым слайдом;
Презентация завершается черным (пустым) слайдом; +
3. Файлы презентаций сохраняются с расширением:
*.pwp;
*.mpp;
*.ppt; +
4. Навигация по слайдам презентации осуществляется с помощью:
Команды Перейти к слайду из меню Сервис;
Команды Перейти к слайду из контекстного меню в режиме показа;
Команды Сортировщик слайдов из меню Вид;
Команды Смена слайда из меню Показ слайдов; +
5. Оформление слайдов презентации осуществляется с помощью:
Команды Оформление слайда, вкладка Шаблоны оформления из меню Формат;+
Команды Оформление слайда, вкладка Цветовые схемы из меню Формат; +
Команды Фон из меню Формат;
6. Эффекты анимации в MSPowerPoint’ХР можно устанавливать:
Только к графическим объектам;
Только к текстовым и графическим объектам;
Только к таблицам и диаграммам;
Ко всем объектам слайда; +
7. Эффекты анимации в MSPowerPoint’ХР устанавливаются:
Командой Настройка анимации из меню Показ слайдов;
Командой Настройка из меню Сервис;
Командой Эффекты анимации из меню Показ слайдов; +
Командой Разметка слайда из меню Формат;
8. Команда Смена слайда из меню Показ слайдов предназначена для:
Вставки слайда новой структуры;
Настройки перехода слайдов; +
Замены существующего слайда на новый из другой презентации;
9. Для показа скрытого слайда презентации нужно:
Подать команду Фон из меню Формат;
Воспользоваться командой Общая рабочая область из меню Сервис;
Воспользоваться командой Перейти к слайду из контекстного меню в режиме показа; +
10. Сопровождение презентации вторым монитором предназначено для:
Отображения презентации в 3-х панельном режиме на отдельном мониторе для докладчика;
Отображения презентации одновременно в разных местах большой аудитории; +
Отображения презентации одновременно в цветном и черно-белом режиме;
11. Управляющие кнопки на слайдах презентации реагируют на воздействие:
Только 1-й щелчок мыши; +
Только 2-й щелчок мыши;
Только наведение указателя мыши;
Щелчок мыши или наведение указателя мыши;
12. Пометки на слайдах презентации делаются с помощью:
Команды Образец из меню Вид;
Команды Указатель из контекстного меню в режиме показа; +
Команды Надпись из меню Вставка;
13. Управляющие кнопки на слайды презентации устанавливаются:
Командой Управляющие кнопки из меню Показ слайдов;
Командой Управляющие кнопки из меню Сервис;
Командой Управляющие кнопки из меню Вставка; +
14. Управляющие кнопки на слайдах презентации позволяют:
Перейти по гиперссылке; +
Запустить другую программу; +
Запустить выполнение макроса; +
Выполнить действие; +
15. Заметки докладчика в MSPowerPoint’ХР можно создать с помощью:
Команды Страница заметок из меню Вид;
В области заметок под слайдом; +
Команды Надпись из меню Вставка;
16. Режим Сортировщик слайдов из меню Вид предназначен для:
Упорядочения слайдов по содержанию;
Установки начального слайда для показа;
Изменения порядка слайдов в презентации. +
Использование шаблонов MS Word’2007. Создание и изменение шаблонов.
Все документы, которые создаются в Word 2007, основаны на каком-либо шаблоне. Шаблон (template)- это образец для создания нового документа, в нем хранятся различные элементы, которые составляют основу документа Word. Другими словами шаблоны определяют основную структуру документа и содержат настройки документа: шрифты, автотекст, макросы, параметры страницы, форматирование, стили и т.д.
В Word 2007 существуют два типа основных видов шаблонов:
общие или глобальные шаблоны (global templates);
шаблоны документов (установленные и пользовательские) или локальные templates.
В приложении Word 2007 используются шаблоны с расширениями:
.dotm (может содержать макросы или программы), где буква “m” обозначает макрос;
.dotx (без макросов и программ), где “x” – основанный на XML (Extensible Markup Language
Для создания шаблона достаточно нажать на вкладку «Файл», далее нажать «Создать» и перед вами вылезет перечень шаблонов.
Выберем сертификаты Академические почетные грамотыДиплом дошкольного образования загрузили.
Изменения шаблона происходит путем двукратного нажатия мыши по нужному элементу.
Настройка MS Excel’2007 в диалоговом окне Параметры. Настройка параметров страницы. Печать в MS Excel’2007.
Настройки программы начинается с «Файл» -> «Параметры»Вылезает диалоговое окно:
Далее по списку что вам именно нужно выбираете:
Далее идем на вкладку «Разметка страницы» там у нас все параметры рабочего листа.
Чтобы распечатать лист, нужно так же зайти в меню «Файл» -> «Печать» и перед вами вылезут параметры печати: сколько копий, параметры страницы, размер.
3) Создание и редактирование графических объектов MS Word’2007.
Для создания графических объектов нужно зайти на вкладку «Вставка» – > «Фигуры», перед вами выпадающее меню выдаст все варианты.
Чтобы отредактировать какую-нибудь фигуру, нужно за уголки потянуть, либо повернуть.
1 #include < stdio h> #include < conio h> подключаем библиотеки стандартных функций и зедержки экрана int main(void) {
1
#include <stdio.h>
#include <conio.h> // подключаем библиотеки стандартных функций и зедержки экрана
int main(void) { //открываем главную функцию
double x, y; //инициализация переменных
printf(“Vvedite x >”); //ввод координаты х
scanf(“%lf”,&x); // читаем координату х с экрана
printf(“Vvedite y >”); //ввод координаты у
scanf(“%lf”,&y); // читаем координату н с экрана
printf(“x=%6.3lf; y=%6.3lfn”,x,y); //вывод введенных координат
if( y>=-0.1*x – 3.5 && y>=-1.2*x + 3 && y <= -2*x + 6) printf(“truen”); // условие: уравнения трех прямых, заключающих фигуру в треугольник
else printf(“falsen”); //если условие верное – вывод “правда”, если нет – “ложь”
getch(); //задержка экрана
return 0;
}
2
#include <stdio.h>
#include <conio.h> //подключаем библиотеки стандартных функций и задержки экрана
int main () { //открываем главную функцию
int i, n, m, l, v; //инициализация переменных
int A[v]; //массив
printf ( “Vvedite kol-vo elementov “); //вывод на экран просьбы о вводе
scanf ( “%d”, &n); //ввод кол-ва элементов массива
v=n; //количество элементов массива приравниваем к введенному числу
for ( i=0; i<n; i++) //открваем цикл для заполнение массива
{printf (“Vvedite %d element “, i); // Введите элемент
scanf ( “%d”, &A[i]);} //заполнение массива с экрана
printf (” Vvedite delitel n”); //ввод делителя
scanf (“%d”, &m); //читаем делитель с экрана
printf (” Vvedite ostatok n”); //ввод остатка
scanf (“%d”, &l); //читаем остаток с экрана
printf (” Zisla, kotorie pri delenii na %d daut ostatok %d n”, m, l); //вывод строки о числах, при делении на введенный делитель которые дают введенный остаток
if ( l>=0 && l<=m-1){ // условие: если если введенный остаток больше нуля или меньше делителя, выполнять
for ( i=0; i<n; i++) //открываем цикл
if (A[i]%m == l) printf (“%dn”, A[i]);}
else printf (” Owibka uslovia!”); // условие – если остаток от деления равен введенному: выводить элемент массива
//если введенный остаток меньше нуля или больше делителя вывод ошибки условия
getch(); //задержка экрана
return 0;
}
3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h> //библиотеки для задержки экрана , рандомных чисел
#define n 4 //определение константы
int A [n][n]; /* матрица */
int main(void) {
int i,j, t, max; //инициализация переменных
int m_j;
srand(time (NULL));
printf (“Original matrix:n”);
for (i=0; i<n; i++){
for ( j=0; j<n; j++){
A[i][j] =rand()%10;
printf (“%4d”, A[i][j]);}
printf (“n”);} //заполнение матрицы рандомным способом
for(i=0; i<n; i++){ // идем по строкам
m_j =0;
max=-32000; // берем за максимальное самое минимальное число
for (j=0; j<n; j++){ //идем по столбцам
if ( A[i][j]> max) { max = A[i][j];
m_j = j;}} //если элемент больше максимального, то он становится максимальным
t = A[i][i]; // заносим элемент на главной диагонали в переменную
A[i][i] = A[i][m_j]; //меняем местами
A[i][m_j] = t; // выносим из переменной
}
printf (“Transponed matrix:n”);
for (i=0; i<n; i++){
for ( j=0; j<n; j++){
printf (“%4d”, A[i][j]);}
printf (“n”);} // вывод результата
getch(); //задержка экрана
return 0;
}
4
#include <stdio.h>
#include <conio.h>
#include <math.h> //библиотека математических функций
int main() {
int x,y,z,t,s1,d,s2,s; //инициализация переменных
printf(“Vvedite x:”);
scanf ( “%d”, &x);
printf(“Vvedite y:”);
scanf ( “%d”, &y);
printf(“Vvedite z:”);
scanf ( “%d”, &z);
printf(“Vvedite t:”);
scanf ( “%d”, &t); // ввод координат х у z t
d=sqrt(x*x+y*y);//Диагональ напротив прямого угла, нашли по теореме Пифагора
s1=x*y*0.5;//Первая часть площади четырехугольника
s2=0.25*sqrt((d+z+t)*(d+z-t)*(d+t-z)*(z+t-d));//Вторая часть площади четырехугольника, найдено по формуле Герона
s=s1+s2;
printf(“S= %d”,s); //вывод площади
getch();
return 0;
}
5
#include <stdio.h>
#include <conio.h>
#include <string.h> //библиотеки работы с функциями строк
#define n 10 //определяем константу
int main (){
char str[n]; //объявление строки
int a=0;
int i, j;
printf (” Vvedite luboe zislo “);
gets (str);
puts (str); //ввод числа, программа воспринимает его как сроку. вывод строки на экран
for ( i=0; i<strlen(str)-1; i++) // цикл для строки, начиная с первого элемента и до препоследнего
for ( j=i+1; j<strlen(str);j++) // цикл для строки, начиная с второго элемента и до конца
{
if (str[i]!=str[j])a++;
} // условие, спомощью цикла сравниваем каждый элемент со следующим, если неравны , переменная а увеличивается
if ( a>0) printf (“Raznie”);
else printf (“Odinakovie”); // если в итоге а больше нуля, хотя бы одна цифра в числе не равна другой
getch(); // задержка экрана
return 0;
}
6
#include <stdio.h>
#include <conio.h>
#define n 10 // определяем константу
int main (){
int A[n]; //массив
int i;
for (i=0; i<n; i++)
{ printf (“Vvedite %d element massiva”, i);
scanf (“%d”, &A[i]);
} //заполнение массива с экрана
for (i=0; i<n; i++)
printf ( “%d “, A[i]); //вывод введенного массива
for ( i= 0 ; i<n; i++)
if (A[i]%3 !=0) printf (“V”); //проверка условия церез цикл для каждого элемента: если остаток от деления на три не равен нулю, ставить метку
getch(); //задержка экрана
return 0;
}