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

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

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

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

Задать свой вопрос
1 ответ

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

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

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

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

include lt;stdio.hgt;

include lt;stdlib.hgt;

include lt;time.hgt;

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

int** NewMatrix(int *row, int* col)

   int** matrix = new int*[*col];

   for(int i = 0; i lt; *col; ++i)

   

       matrix[i] = new int[*row];

   

   return matrix;

//удаление матрицы

void DestroyMatrix(int **matrix, int *col)

   for(int i = 0; i lt; *col; ++i)

   

       delete[]matrix[i];

   

   delete[]matrix;

//наполнение матрицы случайными числами

int ** Random(int**matrix, int* col, int *row)

   srand(time(0));

   for(int i = 0; i lt; *col; ++i)

   

       for(int j = 0; j lt; *row; ++j)

       

           matrix[i][j] = rand()%10;

       

   

   return matrix;

//вывести матрицу на экран

void ShowMatrix(int**matrix, int* col, int *row)

   for(int i = 0; i lt; *col; ++i)

   

       for(int j = 0; j lt; *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 lt; *col; ++i)

   

       mx[i][*col-1] = matrix[0][i];

   

   //копирование последнего столба в последнюю строчку

   for(int i = 0, j = *col-1; i lt; *col; ++i,j--)

   

       mx[*col-1][i] = matrix[j][*col-1];

   

   //копирование заключительной строчки в 1-ый столб

   for(int i = 0; i lt; *col; ++i)

   

       mx[i][0] = matrix[*col-1][i];

   

   //копирование первого столба в первую строчку

   for(int i = 0, j = *col-1; i lt; *col; ++i,j--)

   

       mx[0][i] = matrix[j][0];

   

   //копирование других частей в середине матрицы

   for(int i = 1; i lt; *col-1; ++i)

   

       for(int j = 1; j lt; *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");

Альбина Бейко
спасибо. желая я малюсенько что сообразила из написаного а много считаю или излишним или не понятным
Андрей Куркибаев
беря во внимание то, что в критериях стояло условие "работать только с функциями", то ничего излишнего здесь нет, творенье матрицы, её инициализация, вывод на экран и оборот. В комментах я более подробно описал (которые в коде)
Konstantin Grdzelishvili
не понятность я пробовал восполнить комментариями, видимо не вышло
Тема
единственное что излишнее так это творение новой матрицы в функции Roll, там заместо новейшей матрицы можно использовать обыденный массив, но для вас наверное было бы вообщем не понятно, что происходит, пример с новой матрицей немного легче на мой взор.
Максимка Бартель
мне труднее всего было осознать с указателями.
Даниил Ганбарову
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;
Илюша Прощалыкин
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;
Ира Ларионв
таковой итоговый вариант вышел у меня. Но я посредник, так что все равно не знаю как было надобно
Роман Панкратенко
в любом случае огромное спасибо.
Стуковкин Максим
Если не против, могли бы еще задачки поглядеть. Я добавила
, оставишь ответ?
Имя:*
E-Mail:


Последние вопросы

Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт