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

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

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

Ответы 6

  • #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(""); } printf("");}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 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;}
  • такой итоговый вариант вышел у меня. Но я посредник, так что все равно не знаю как было надо
    • Автор:

      newman
    • 5 лет назад
    • 0
  • в любом случае большое спасибо.
  • Если не против, могли бы еще задачки посмотреть. Я добавила
    • Автор:

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

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

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

       }

    }

    //функция сдвигает крайние элементы по кольцу

    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("Rolling...");

       ShowMatrix(mx,col,row);

       DestroyMatrix(mx,col);

       delete row;

       delete col;

       system("pause");

    }

  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years