C/C++

Написать программы на СИ

1. Написать программу, вычисляющую значения ab и ba. Расчет должен производиться в функции, которая получает данные по указателю и возвращает результат по указателю.
2. Написать программу, заменяющую положительные элементы массива на их квадраты. При вводе/выводе элементов использовать индексы, а обработку элементов массива осуществлять с помощью указателей. Расчет должен производиться в функции, в которую массив передается по указателю
3. Написать программу, выполняющую расчет суммы двух неквадратных матриц. Матрицы должны храниться в памяти в виде двумерного динамического массива, размерности матриц вводятся пользователем с клавиатуры. Предусмотреть генерацию значений матриц как случайных вещественных чисел в диапазоне от -1.0 до 1.0.
4. Написать программу для сортировки одномерного массива по убыванию методом бинарных вставок. Размерность массива, а также границы диапазона изменения элементов N и M вводятся пользователем с клавиатуры, а сам массив заполняется случайными числами из указанного пользователем диапазона. Сортировку массива и генерацию массива оформить в виде отдельных функций.
Тут ужасно много писанины. И ещё всё надо тщательно проверять. И вообще у меня Си не чистый, а расширенный, то есть плюсы.. Вот, например, третий номер:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int k, l;
void print(double **x)
{
int i, j;
for (i = 0; i < k; i++)
{
for (j = 0; j < l; j++)
cout << setprecision(3) << fixed << setw(7) << x[i][j];
cout << endl;
}
}
int main()
{
int i, j, m, n;
for (;;)
{
cout << "k l m n » ";
cin >> k >> l >> m >> n;
if (k != m or l != n)
{
cout << "Mismatch of matrix sizes" << endl;
continue;
}
srand(time(NULL));
double **a = new double *[k],
**b = new double *[k], **c = new double *[k];
for (i = 0; i < k; i++)
{
a[i] = new double [l];
b[i] = new double [l];
c[i] = new double [l];
}
for (i = 0; i < k; i++) for (j = 0; j < l; j++)
{
a[i][j] = 2. * rand() / RAND_MAX - 1.;
b[i][j] = 2. * rand() / RAND_MAX - 1.;
c[i][j] = a[i][j] + b[i][j];
}
cout << "Matrix A" << endl;
print(a);
cout << "Matrix B" << endl;
print(b);
cout << "Matrix A + B" << endl;
print(c);
for (i = 0; i < k; i++)
{
delete [] a;
delete [] b;
delete [] c;
}
}
}
Всё, вроде, нормально, только обе матрицы перед сложением лучше выводить на экран и результат их сложения - тоже! А какой у Вас экран монитора, я не знаю. Во всяком случае слишком большие матрицы (да ещё и с больши́м числом знаков после запятой !) ни в какой экран не влезут, без чего не сто́ит и огород городить! Да и допустимо ли в одном цикле формировать матрицы и складывать их - тоже не знаю, хотя запрета такого нет. Если матрицы небольшие, то вот, например, результат работы программы:
KK
Kirito Kirito
29 440
Лучший ответ