На языке программирования С !
Задача 1
Программа должна удовлетворять следующим требованиям:
1. массивы могут генерироваться автоматически, если в задаче не оговорено иное. Оставшиеся исходные данные должны вводиться с клавиатуры по запросу.
2. необходимо работать только через указатели и функции.
3. все значения функций должны быть перенаправлены в качестве параметров.
4. на экране должны храниться как исходные данные так и результат.
Само задание
Напишите функцию, которая в квадратной матрице сдвигает крайние элементы по кольцу, то есть первая строка заменяет последний столбец, последний столбец-последней строкой, последняя строка-первым столбцом, а первый столбец-первой строкой.
Есть еще задания, если хорошо разбираетесь
Качественный ответ обязательно отмечу лучшим. Могу дублировать задания если нужно больше баллов
Answers & Comments
Verified answer
Не совсем понял всех условий, например "все значения функций должны быть перенаправлены в качестве параметров", по этому если это условие не выполнено - объясни мне что это такое и я переделаю.
Не делал итераторы цикла динамическими ибо это не имеет смысла, остальные переменные я использовал как указатели.
Тестировал на 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;
}