18 июня 2015 г.

По данному натуральному n вычислите сумму 1×2+2×3+...+(n-1)×n.

int sos(int digit);

void main()
{
setlocale(LC_ALL, "Russian");
int a, b;
do
{
cout<<"По данному натуральному n вычислите сумму произведений соседних чисел 1*2+2*3+...+(n-1)*n.\n";
cout<<"\nВведите число:";
cin>>a;
cout<<"Сумма кубов равна "<<sos(a)<<"\n";
cout<<"Если хотите продолжить, нажмите 1:";
cin>>a;
}
while(a==1);
}

int sos(int digit)
{
int res=0;
for(int i=2;i<=digit;i++)
res+=(i-1)*i;
return res;
}

Дано натуральное число n. Напечатайте все n-значные нечетные натуральные числа в порядке убывания.

int cub(int digit);

void main()
{
setlocale(LC_ALL, "Russian");
int a;
do
{
cout<<"По данному натуральном n вычислите сумму кубов 1*1*1+2*2*2+3*3*3+...+n*n*n. .\n";
cout<<"\nВведите число:";
cin>>a;
cout<<"Сумма кубов равна "<<cub(a)<<"\n";
cout<<"Если хотите продолжить, нажмите 1:";
cin>>a;
}
while(a==1);
}

int cub(int digit)
{
int res=0;
for(int i=0;i<=digit;i++)
res+=i*i*i;
return res;
}

Даны два целых числа A и В. Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае.

void les(int a, int b);

void main()
{
setlocale(LC_ALL, "Russian");
int a, b;
do
{
cout<<"Даны два целых числа A и В. Выведите все числа от A до B включительно, \nв порядке возрастания, если A < B, или в порядке убывания в противном случае\n";
cout<<"\nВведите первое число:";
cin>>a;
cout<<"\nВведите второе число:";
cin>>b;
les(a,b);
cout<<"Если хотите продолжить, нажмите 1:";
cin>>a;
}
while(a==1);

}

void les(int a, int b)
{
if (a<b)
for(;a<=b;a++)
cout<<a<<" ";
else
for(;a>=b;a--)
cout<<a<<" ";
cout<<"\n";
}

17 июня 2015 г.

Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать: 1) Элементы обоих массивов; 2) Общие элементы двух массивов; 3) Элементы массива A, которые не включаются в B; 4) Элементы массива B, которые не включаются в A; 5) Элементы массивов A и B, которые не являются общими для них (то есть объединение результатов двух предыдущих вариантов).

void init(int *a, int size);
void out(int *a, int size);
void out_c(int *a, int size);

void main()
{
setlocale(LC_ALL, "Russian");
int digit;

const int size_a = 15;
int a[size_a];
int *pa;
pa = &a[0];
//^ первый массив с указателем
const int size_b = 15;
int b[size_b];
int *pb;
pb = &b[0];
//^ второй массив с указателем
const int size_c = size_a + size_b;
int c[size_c];
int *pc;
pc = &c[0];
//^ третий массив с указателем
int tmp = 0;
do
{
init(a, size_a);
out(a, size_a);
Sleep(1000);//необходимая пауза для инициализации второго массива (необходимо подключить библиотеку windows.h)
init(b, size_b);
out(b, size_b);

cout << "Эта программа создаёт третий массив, в котором собирает:\n";
cout << "1 - Элементы обоих массивов;\n";
cout << "2 - Общие элементы двух массивов;\n";
cout << "3 - Элементы массива A, которые не включаются в B;\n";
cout << "4 - Элементы массива B, которые не включаются в A;\n";
cout << "5 - Элементы массивов A и B, коотрые не являются общими для них(то есть объединение результатов двух предыдущих вариантов)\n\n";
cin >> digit;
switch (digit){
case 1:
for (pc = c, pa = a; pc < c + size_a + size_b; pc++, pa++)
*pc = *pa;
for (pc = c + size_a, pb = b; pc < c + size_a + size_b; pc++, pb++)
*pc = *pb;
cout << "\nРезультат:\n\n";
out(c, size_c);
break;
case 2:
pc = c;
for (pa = a; pa < a + size_a; pa++){
for (pb = b; pb <b + size_b; pb++){
if (*pa == *pb){
*pc = *pa;
pc++;
}
}
}
cout << "\nРезультат:\n\n";
out_c(c, size_c);
break;
case 3:
pc = c;
tmp = 0;
for (pa = a; pa < a + size_a; pa++){
for (pb = b; pb <b + size_b; pb++){
if (*pa == *pb)
tmp++;
}
if (tmp == 0){
*pc = *pa;
pc++;
}
tmp = 0;
}
cout << "\nРезультат:\n\n";
out_c(c, size_c);
break;
case 4:
pc = c;
tmp = 0;
for (pb = b; pb <b + size_b; pb++){
for (pa = a; pa < a + size_a; pa++){
if (*pb == *pa)
tmp++;
}
if (tmp == 0){
*pc = *pb;
pc++;
}
tmp = 0;
}
cout << "\nРезультат:\n\n";
out_c(c, size_c);
break;
case 5:
pc = c;
tmp = 0;
for (pa = a; pa < a + size_a; pa++){
for (pb = b; pb <b + size_b; pb++){
if (*pa == *pb)
tmp++;
}
if (tmp == 0){
*pc = *pa;
pc++;
}
tmp = 0;
}
for (pb = b; pb <b + size_b; pb++){
for (pa = a; pa < a + size_a; pa++){
if (*pb == *pa)
tmp++;
}
if (tmp == 0){
*pc = *pb;
pc++;
}
tmp = 0;
}
cout << "\nРезультат:\n\n";
out_c(c, size_c);
break;
}
cout << "\nЕсли хотите продолжить, нажмите 1:";
cin >> digit;
} while (digit == 1);
}

void init(int *a, int size)
{
srand(time(NULL));
for (int i = 0; i < size; a++, i++)
*a = rand() % 20 + 1;
}

void out(int *a, int size)
{
cout << "\n";
for (int i = 0; i < size; a++, i++)
cout << *a << " ";
cout << "\n";
}

void out_c(int *a, int size)
{
cout << "\n";
for (int i = 0; i < size; a++, i++)
if (*a>0) cout << *a << " ";
cout << "\n";
}

Даны два массива, упорядоченных по возрастанию: А[n] и B[m]. Сформируйте массив C[n+m], состоящий из элементов массивов А и В, упорядоченный по возрастанию

void sort(int *a, int size);
void init(int *a, int size);
void out(int *a, int size);


void main()
{
setlocale(LC_ALL, "Russian");
int digit;
const int size_a = 15;
int a[size_a];
int *pa;
pa = &a[0];
//^ первый массив с указателем
const int size_b = 15;
int b[size_b];
int *pb;
pb = &b[0];
//^ второй массив с указателем
const int size_c = size_a + size_b;
int c[size_c];
int *pc;
pc = &c[0];
//^ третий массив с указателем
do
{
cout << "Эта программа формирует упорядоченный массив из двух массивов\n";
cout << "\nИнициализация первого массива:";
init(a, size_a);
out(a, size_a);
Sleep(1000);//необходимая пауза для инициализации второго массива (необходимо подключить библиотеку windows.h)
cout << "\nИнициализация второго массива:";
init(b, size_b);
out(b, size_b);
sort(a, size_a);
sort(b, size_b);
cout << "\nРезультат:\n\n";
cout << "Отсортированный первый массив:";
out(a, size_a);
cout << "\nОтсортированный второй массив:";
out(b, size_b);
//заполнение третьего массива значениями первого и второго массивов
for (pc=c, pa=a; pc < c+size_a+size_b; pc++, pa++)
{
*pc = *pa;
}
for (pc = c+size_a, pb = b; pc < c + size_a + size_b; pc++, pb++)
{
*pc = *pb;
}
sort(c, size_c);
cout << "\nОтсортированный объединённый массив:";
out(c, size_c);
cout << "\nЕсли хотите продолжить, нажмите 1:";
cin >> digit;
} while (digit == 1);
}


void init(int *a, int size)
{
srand(time(NULL));
for (int i = 0; i < size; a++, i++)
*a = rand() % 100 + 1;
}


void out(int *a, int size)
{
cout << "\n";
for (int i = 0; i < size; a++, i++)
cout << *a << " ";
cout << "\n";
}


void sort(int *a, int size)
{
int x, i, j;
for (i = 0; i<size; i++)
{
for (j = size - 1; j > i; j--)
{
if (*(a+j - 1) > *(a+j))
{
x = *(a + j - 1);
*(a + j - 1) = *(a + j);
*(a + j) = x;
}
}
}
}

Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами(т.е.те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах)

void zamena(int *a, int size);
void init(int *a, int size);
void out(int *a, int size);


void main()
{
setlocale(LC_ALL, "Russian");
int digit;
const int size = 15;
int b[size];
int *A;//инициализация указателя
A = &b[0];//присваивание приводит к тому, что A указывает на нулевой элемент массива b. Это означает, что A содержит адрес элемента b[0].
do
{
cout << "Эта программа меняет местами элементы массива с четными и нечетными индексами\n";
init(A, size);
out(A, size);
zamena(A, size);
out(A, size);
cout << "Если хотите продолжить, нажмите 1:";
cin >> digit;
} while (digit == 1);
}


void zamena(int *a, int size)
{
for (int i = 0; i < size; a++, i++)
{
if (i % 2 != 0)
{
int tmp = *a;
*a = *(a - 1);
*(a - 1) = tmp;
}
}
}


void init(int *a, int size)
{
srand(time(NULL));
for (int i = 0; i < size; a++, i++)
*a = rand() % 100 + 1;
}


void out(int *a, int size)
{
cout << "\n";
for (int i = 0; i < size; a++, i++)
cout << *a << " ";
cout << "\n";
}

21 мая 2015 г.

"Ханойские" башни.

/*
Легенда гласит, что где-то в Ханое находится храм, в котором размещена следующая конструкция:
на основании укреплены 3 алмазных стержня, на один из которых при сотворении мира Брахма
нанизал 64 золотых диска с отверстием посередине, причем внизу оказался самый большой диск,
на нем – чуть меньший и так далее, пока на верхушке пирамиды не оказался самый маленький диск.
Жрецы храма обязаны перекладывать диски по следующим правилам:

1. За один ход можно перенести только один диск.

2. Нельзя класть больший диск на меньший.

Руководствуясь этими нехитрыми правилами, жрецы должны перенести исходную пирамиду с 1-го стержня на 3-й.
Как только они справятся с этим заданием, наступит конец света.

Мы предлагаем Вам решить данную задачу с помощью рекурсии.
*/

//Решение взято с vk.com.

void hanoi_towers(int quantity, int from, int to, int buf_peg)
//quantity-число колец, from-начальное положение колец(1-3),to-конечное положение колец(1-3)
{
//buf_peg - промежуточный колышек(1-3)
if (quantity != 0)
{
hanoi_towers(quantity-1, from, buf_peg, to);

cout << from << " -> " << to << "\n";
hanoi_towers(quantity-1, buf_peg, to, from);
}
}

void main()
{
setlocale(LC_ALL, "Russian");
int start_peg, destination_peg, buffer_peg, plate_quantity;
cout << "\nНомер первого столбика:";
cin >> start_peg;
cout << "\nНомер конечного столбика:";
cin >> destination_peg;
cout << "\nНомер промежуточного столбика:";
cin >> buffer_peg;
cout << "\nКоличество дисков:";
cin >> plate_quantity;
cout<<"\n";

hanoi_towers(plate_quantity, start_peg, destination_peg, buffer_peg);
}