** языке программирования С ! Задача 1 Программа должна удовлетворять следующим...

0 голосов
46 просмотров

На языке программирования С ! Задача 1 Программа должна удовлетворять следующим требованиям: 1. массивы могут генерироваться автоматически, если в задаче не оговорено иное. Оставшиеся исходные данные должны вводиться с клавиатуры по запросу. 2. необходимо работать только через указатели и функции. 3. все значения функций должны быть перенаправлены в качестве параметров. 4. на экране должны храниться как исходные данные так и результат. Само задание Напишите функцию, которая в квадратной матрице сдвигает крайние элементы по кольцу, то есть первая строка заменяет последний столбец, последний столбец-последней строкой, последняя строка-первым столбцом, а первый столбец-первой строкой. Есть еще задания, если хорошо разбираетесь Качественный ответ обязательно отмечу лучшим. Могу дублировать задания если нужно больше баллов


Информатика (55.0k баллов) | 46 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Не совсем понял всех условий, например "все значения функций должны быть перенаправлены в качестве параметров", по этому если это условие не выполнено - объясни мне что это такое и я переделаю.

Не делал итераторы цикла динамическими ибо это не имеет смысла, остальные переменные я использовал как указатели.

Тестировал на GNU GCC, всё работает, писал на чистой Си.

Мой вариант решения:

#include

#include

#include

//Создание нашей матрицы

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");

}

(1.5k баллов)
0

спасибо. хотя я мало что поняла из написаного а много считаю или лишним или не понятным

0

учитывая то, что в условиях стояло условие "работать только с функциями", то ничего лишнего тут нет, создание матрицы, её инициализация, вывод на экран и оборот. В комментариях я более подробно описал (которые в коде)

0

не понятность я пытался компенсировать комментариями, видимо не получилось

0

единственное что лишнее так это создание новой матрицы в функции Roll, там вместо новой матрицы можно использовать обычный массив, но для вас наверное было бы вообще не понятно, что происходит, пример с новой матрицей немного легче на мой взгляд.

0

мне сложнее всего было понять с указателями.

0

#include "stdlib.h"#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; }}

0

int main() { 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;}

0

такой итоговый вариант вышел у меня. Но я посредник, так что все равно не знаю как было надо

0

в любом случае большое спасибо.

0

Если не против, могли бы еще задачки посмотреть. Я добавила