Загрузка данных
1
#include <iostream>
//1
using namespace std;
int main() {
int n;
cout << "Введите размерность матриц n: ";
cin >> n;
int matrix1[n][n], matrix2[n][n], result[n][n];
cout<<"Первая матрица"<<endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix1[i][j]=rand()%20-10;
cout << matrix1[i][j] << " ";
}
cout<<endl;
}
cout<<endl;
cout<<"Вторая матрица"<<endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
matrix2[i][j]=rand()%20-10;
cout << matrix2[i][j] << " ";
}
cout<<endl;
}
cout<<endl;
//заполнение результ матрицы нулями
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
result[i][j] = 0;
}
}
//перемножение матриц
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
cout << "Результат перемножения матриц:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
2
#include <iostream>
#include <cmath>
//2
using namespace std;
//функция для метода трапеций
double trapez(double (*func)(double), double a, double b, int n) {
double h = (b - a) / n;
double integral = 0.5 * (func(a) + func(b));
for (int i = 1; i < n; ++i) {
integral += func(a + i * h);
}
integral *= h;
return integral;
}
//рекурсивно методом трапеций
double trapezRecursive(double (*func)(double), double a, double b, int n) {
if (n == 1) {
return 0.5 * (func(a) + func(b)) * (b - a);
} else {
double h = (b - a) / n;
return trapezRecursive(func, a, b - h, n - 1) + func(a + (n - 1) * h) * h;
}
}
//функция для метода прямоугольников (левый)
double rectan(double (*func)(double), double a, double b, int n) {
double h = (b - a) / n;
double integral = 0;
for (int i = 0; i < n; ++i) {
integral += func(a + i * h) * h;
}
return integral;
}
//рекурсивно методом прямоугольников
double rectanRecursive(double (*func)(double), double a, double b, int n) {
if (n == 1) {
return func(a) * (b - a);
} else {
double h = (b - a) / n;
return rectanRecursive(func, a, b - h, n - 1) + func(a + (n - 1) * h) * h;
}
}
//пример функции для интегрирования
double myFunction(double x) {
return x * x;
}
int main() {
double a = 0; //начало интервала
double b = 1; //конец интервала
int n = 100; //количество делений
cout << "Метод трапеций (итеративно): " << trapez(myFunction, a, b, n) << endl;
cout << "Метод трапеций (рекурсивно): " << trapezRecursive(myFunction, a, b, n) << endl;
cout << "Метод прямоугольников (итеративно): " << rectan(myFunction, a, b, n) << endl;
cout << "Метод прямоугольников (рекурсивно): " << rectanRecursive(myFunction, a, b, n) << endl;
return 0;
}
3
#include <iostream>
//3
using namespace std;
int main() {
const int n=3;
const int rows = n;
const int cols = n;
int matrixA[rows][cols];
for (int i = 0; i < rows; i++){
for(int j = 0; j < cols; j++){
matrixA[i][j]=rand()%200-100;
cout << matrixA[i][j] << " ";
}
cout<<endl;
}
cout << endl;
int matrixB[rows][cols];
//процесс копирования с использованием буферной переменной
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
//использую временную переменную для хранения значения
int buffer = matrixA[i][j];
matrixB[i][j] = buffer;
}
}
cout << "Содержимое матрицы B после копирования:\n";
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
cout << matrixB[i][j] << " ";
}
cout << endl;
}
return 0;
}
4
#include <iostream>
//4
using namespace std;
void quickSort(int arr[], int low, int high) {
if (low < high) {
//опорный элемент
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
//если меньше или равен опорному
if (arr[j] < pivot) {
i++; //увеличиваем индекс меньшего элемента
swap(arr[i], arr[j]); //меняем местами
}
}
swap(arr[i + 1], arr[high]); //меняем местами опорный элемент
int pi = i + 1; //индекс опорного элемента
//рекурсивно сортируем элементы до и после разбиения
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int SIZE;
cout << "Введите размерность массива n: ";
cin>>SIZE;
int arr[SIZE];
cout << "Массив до сортировки: ";
for (int i = 0; i < SIZE; i++){
arr[i]=rand()%200-100;
cout << arr[i] << " ";}
cout << endl;
quickSort(arr, 0, SIZE - 1);
cout << "Массив после сортировки: ";
for (int i = 0; i < SIZE; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
5
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//5
//функция для получения i-го бита числа
bool getBit(int num, int i) {
return (num >> i) & 1;
}
//функция поразрядной сортировки
void radixSort(vector<int>& arr) {
//находим максимально возможное значение для определения длины (битов)
int maxValue = *max_element(arr.begin(), arr.end());
int numBits = sizeof(int) * 8; //число бит в int
//сортируем поразрядно от младших бит до старших
for (int i = 0; i < numBits; i++) {
vector<int> zeros; //для хранения чисел с текущим битом 0
vector<int> ones; //для хранения чисел с текущим битом 1
//разделяем массив на два: с 0 и 1 в текущем битовом разряде
for (int num : arr) {
if (getBit(num, i)) {
ones.push_back(num);
} else {
zeros.push_back(num);
}
}
//объединяем два массива
arr.clear();
arr.insert(arr.end(), zeros.begin(), zeros.end());
arr.insert(arr.end(), ones.begin(), ones.end());
}
}
int main() {
int n;
cout << "Введите размерность массива n: ";
cin >> n;
vector<int> arr;
for(int i=0;i<n;i++)
arr.push_back(rand()%100);
radixSort(arr);
cout << "Отсортированный массив: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
return 0;
}