profile
Опубликовано 5 лет назад по предмету Информатика от Aillianna

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

Само задание
Напишите функцию, которая в квадратной матрице сдвигает крайние элементы по кольцу, то есть первая строка заменяет последний столбец, последний столбец-последней строкой, последняя строка-первым столбцом, а первый столбец-первой строкой.

Есть еще задания, если хорошо разбираетесь
Качественный ответ обязательно отмечу лучшим. Могу дублировать задания если нужно больше баллов

  1. Ответ
    Ответ дан Slavque

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

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

    Тестировал на 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...nn");

       ShowMatrix(mx,col,row);

       DestroyMatrix(mx,col);

       delete row;

       delete col;

       system("pause");

    }

    1. Ответ
      Ответ дан Aillianna
      #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;
      }
      }
    2. Ответ
      Ответ дан Aillianna
      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;
      }
    3. Ответ
      Ответ дан Aillianna
      такой итоговый вариант вышел у меня. Но я посредник, так что все равно не знаю как было надо
    4. Ответ
      Ответ дан Aillianna
      в любом случае большое спасибо.
    5. Ответ
      Ответ дан Aillianna
      Если не против, могли бы еще задачки посмотреть. Я добавила
Самые новые вопросы