Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
- номера двух наиболее удаленных точек; номера трех точек, которые являются вершинами треугольника с наибольшей площадью; номер такой точки и величину r, чтобы окружность с центром в этой точке содержала все n точек, и при этом радиус r ее был наименьшим среди радиусов всех таких окружностей.
Многомерные массивы Пример решения простой задачи
Задача:
Задана квадратная вещественная матрица. Выполнить транспонирование матрицы.
Решение:
#include <stdio. h>
// определение константы числа строк/столбцов матрицы
#define N 10
// определение функции заполнения квадратной матрицы
// вещественными элементами
void fill(float *a, int n);
// определение функции печати квадратной матрицы
void print(float *a, int n);
// определение функции транспонирования квадратной матрицы
void transpose(float *a, int n);
int main()
{
// создание квадратной вещественной матрицы размера NxN
float a[N][N];
// вызов функции заполнения элементов матрицы
fill(&a[0][0], N);
// вызов функции печати квадратной матрицы
print(&a[0][0], N);
// двойной перевод курсора на новую строку
printf("\n\n");
// вызов функции транспонирования матрицы
transpose(&a[0][0], N);
// вызов функции печати квадратной матрицы
print(&a[0][0], N);
// выход из основной функции
return 0;
}
// реализация функции заполнения квадратной матрицы
// вещественными элементами
void fill(float *a, int n)
{
int i = 0, j, tmp;
// цикл по строкам массива
for (; i < n; i++)
{
tmp = i * n;
// цикл по столбцам массива
for (j = 0; j < n; j++)
{
// присваивание элементу с номером [i, j]
// значения i*n+j
a[tmp + j] = (float)(tmp + j);
}
}
}
// реализация функции печати квадратной матрицы
void print(float *a, int n)
{
int i = 0, j, tmp;
// цикл по строкам массива
for (; i < n; i++)
{
tmp = i * n;
// цикл по столбцам массива
for (j = 0; j < n; j++)
{
// печать элемента с номером [i, j],
// 2 знака после запятой
printf("%.2f\t", a[tmp + j]);
}
// переход на новую строку (каждая строка матрицы
// печатается с новой строки)
printf("\n");
}
}
// реализация функции транспонирования квадратной матрицы
void transpose(float *a, int n)
{
int i, j;
float buf;
// цикл по строкам массива
for (i = 0; i < n; i++)
{
// цикл по столбцам массива (рассматриваются элементы
// над главной диагональю)
for (j = i + 1; j < n; j++)
{
// обмен значений элементов с номерами [i, j] и [j, i]
buf = a[i * n + j];
a[i * n + j] = a[j * n + i];
a[j * n + i] = buf;
}
}
}
Комментарий
В приведенном примере:
Подключаются библиотеки стандартного ввода/вывода stdio. h, функций работы с датой и временем time. h, функций выделения памяти, контроля процесса выполнения программы, преобразования типов stdlib. h. Объявляется константа для задания числа строк/столбцов квадратной матрицы. Объявляются функции заполнения массива fill, печати его элементов print и функция транспонирования матрицы transpose. Описывается функция main, в которой:- Создается массив. Выполняется заполнения массива с помощью объявленной функции fill. Выполняется печать массива с использованием объявленной функции print. Осуществляется транспонирование матрицы с помощью функции transpose. Выполняется печать массива с использованием объявленной функции print.
Пример решения задачи средней сложности
Задача:
Задана вещественная матрица. Заменить каждый элемент, стоящий на диагонали, минимальным элементом строки.
Решение:
#include <stdio. h>
#include <time. h>
#include <stdlib. h>
// определение константы числа строк/столбцов матрицы
#define N 7
// определение левой границы изменения значений элементов
#define A -10
// определение правой границы изменения значений элементов
#define B 10
// определение функции заполнения матрицы вещественными значениями
void fill(float *a, int n, int lb, int rb);
// определение функции печати матрицы
void print(float *a, int n);
// определение функции замены диагональных элементов матрицы
void swap(float *a, int n);
int main()
{
// создание квадратной вещественной матрицы размера NxN
float a[N][N];
// вызов функции заполнения элементов матрицы
fill(&a[0][0], N, A, B);
// вызов функции печати квадратной матрицы
print(&a[0][0], N);
// двойной перевод курсора на новую строку
printf("\n\n");
// вызов функции замены диагональных элементов матрицы
swap(&a[0][0], N);
// вызов функции печати квадратной матрицы
print(&a[0][0], N);
// выход из основной функции
return 0;
}
// реализация функции заполнения матрицы вещественными значениями
void fill(float *a, int n, int lb, int rb)
{
int i = 0, j, tmp;
// инициализация генератора случайных чисел
srand((unsigned int) time(0));
// цикл по строкам массива
for (; i < n; i++)
{
tmp = i * n;
// цикл по столбцам массива
for (j = 0; j < n; j++)
{
// rand() генерирует целое число в [0, RAND_MAX]
// ((float)rand()) / RAND_MAX переводит в [0, 1]
// линейное преобразование в [lb, rb]
a[tmp + j] = (rb - lb)*((float)rand())/RAND_MAX+lb;
}
}
}
// реализация функции печати квадратной матрицы
void print(float *a, int n)
{
int i = 0, j, tmp;
// цикл по строкам массива
for (; i < n; i++)
{
tmp = i * n;
// цикл по столбцам массива
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 |


