На языке программирования С !
Задача 1
Программа должна удовлетворять следующим требованиям:
1. массивы могут генерироваться автоматически, если в задаче не оговорено иное. Оставшиеся исходные данные должны вводиться с клавиатуры по запросу.
2. необходимо работать только через указатели и функции.
3. все значения функций должны быть перенаправлены в качестве параметров.
4. на экране должны храниться как исходные данные так и результат.
Само задание
Напишите функцию, которая в квадратной матрице сдвигает крайние элементы по кольцу, то есть первая строка заменяет последний столбец, последний столбец-последней строкой, последняя строка-первым столбцом, а первый столбец-первой строкой.
Есть еще задания, если хорошо разбираетесь
Качественный ответ обязательно отмечу лучшим. Могу дублировать задания если нужно больше баллов
Ответы
Не совсем понял всех условий, например "все значения функций должны быть перенаправлены в качестве параметров", по этому если это условие не выполнено - объясни мне что это такое и я переделаю.
Не делал итераторы цикла динамическими ибо это не имеет смысла, остальные переменные я использовал как указатели.
Тестировал на GNU GCC, всё работает, писал на чистой Си.
Мой вариант решения:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//Создание нашей матрицы
int** NewMatrix(int *row, int* col)
{
int** matrix = new int*[*col];
for(int i = 0; i < *col; ++i)
{
matrix[i] = new int[*row];
}
return matrix;
}
//удаление матрицы
void DestroyMatrix(int **matrix, int *col)
{
for(int i = 0; i < *col; ++i)
{
delete[]matrix[i];
}
delete[]matrix;
}
//заполнение матрицы случайными числами
int ** Random(int**matrix, int* col, int *row)
{
srand(time(0));
for(int i = 0; i < *col; ++i)
{
for(int j = 0; j < *row; ++j)
{
matrix[i][j] = rand()%10;
}
}
return matrix;
}
//вывести матрицу на экран
void ShowMatrix(int**matrix, int* col, int *row)
{
for(int i = 0; i < *col; ++i)
{
for(int j = 0; j < *row; ++j)
{
printf("%d ",matrix[i][j]);
}
printf("\n");
}
}
//функция сдвигает крайние элементы по кольцу
int **Roll(int**matrix, int *col, int *row)
{
int **mx = NewMatrix(row,col);
//копирование элементов с верхней строки в последний столб
for(int i = 0; i < *col; ++i)
{
mx[i][*col-1] = matrix[0][i];
}
//копирование последнего столба в последнюю строку
for(int i = 0, j = *col-1; i < *col; ++i,j--)
{
mx[*col-1][i] = matrix[j][*col-1];
}
//копирование последней строки в первый столб
for(int i = 0; i < *col; ++i)
{
mx[i][0] = matrix[*col-1][i];
}
//копирование первого столба в первую строку
for(int i = 0, j = *col-1; i < *col; ++i,j--)
{
mx[0][i] = matrix[j][0];
}
//копирование остальных элементов в середине матрицы
for(int i = 1; i < *col-1; ++i)
{
for(int j = 1; j < *row-1; ++j)
{
mx[i][j]=matrix[i][j];
}
}
//удаление лишней матрицы
DestroyMatrix(matrix,col);
return mx;
}
int main()
{
int *row = new int(5);
int *col = new int(5);
int **mx = NewMatrix(row,col);
mx = Random(mx,col,row);
ShowMatrix(mx,col,row);
mx = Roll(mx,col,row);
printf("\nRolling...\n\n");
ShowMatrix(mx,col,row);
DestroyMatrix(mx,col);
delete row;
delete col;
system("pause");
}
#include "stdio.h"
void PrintMatrix(int** matrix, int rank) {
for (int i = 0; i < rank; i++) {
for (int j = 0; j < rank; j++)
printf(" %2d", matrix[i][j]);
printf("\n");
}
printf("\n");
}
void DoTurn(int** matrix, int rank) {
for (int i = 0; i < rank - 1; i++) {
int temp = matrix[0][i];
matrix[0][i] = matrix[rank - i - 1][0];
matrix[rank - i - 1][0] = matrix[rank - 1][rank - i - 1];
matrix[rank - 1][rank - i - 1] = matrix[i][rank - 1];
matrix[i][rank - 1] = temp;
}
}
int rank;
int **m;
printf("rank = ");
scanf("%i", &rank);
m = (int**) malloc(rank * (sizeof *m));
for (int i = 0; i < rank; i++) {
m[i] = (int*) malloc(rank * sizeof *m[i]);
for (int j = 0; j < rank; j++)
m[i][j] = 10 * (i + 1) + j;
}
PrintMatrix(m, rank);
DoTurn(m, rank);
PrintMatrix(m, rank);
for (int i = 0; i < rank; i++) {
free(m[i]);
}
free(m);
return 0;
}