Другие языки программирования и технологии
Задача по C++
Необходимо осуществить циклический сдвиг элементов квадратной матрицы размерности М X M вправо на к элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично. Это нужно сделать с применением простейших функций..Без функция эту задачу я решил: #include <stdio.h> #include <stdafx.h> #include <conio.h> #include<iostream> double GG ( double a[10][10], int p,int m) { int i, j, k ; double temp,temp2,temp3; for(i=0; i < m/2; i++) { for(int z = p; z>0 ; z--) //кол-во сдвигов - к { for(j = i, temp = a[j]; j < m-1-i; j++) { temp2 = a[j+1]; a[j+1] = temp; temp=temp2; } for(k = i+1; k < m-i; k++) { temp3=temp; temp=a[k][j]; a[k][j]=temp3; } for( j--, k--; j >= i; j--) { temp3=temp; temp=a[k][j]; a[k][j]=temp3; } for(j++, k--; k >= i; k--) { temp3=temp; temp=a[k][j]; a[k][j]=temp3; }}} return a[10][10]; } int main() { int p, m, i, j; double a[10][10]; { printf("Vvedite m \n"); scanf ("%d",&m); } for(i=0;i<m;i++)>[j] = rand()-5; } for(i=0;i<m;i++)>[j]); } printf ("\n"); } {printf("Vvedite k\n"); scanf ("%d",&p); GG(a,p,m); for(i=0;i<m;i++)>[j]); } printf ("\n"); } getch(); } return 0; } Где и каким образом здесь нужно использовать функции? Я не прошу готовый ответ, просто прошу совета
А что такое "простейшая функция"?
Я правильно понял, что все квадраты вложены друг в друга и сдвиг идёт вдоль контуров каждого квадрата!?
Я правильно понял, что все квадраты вложены друг в друга и сдвиг идёт вдоль контуров каждого квадрата!?
Во-первых, ваша программа на С++ некорректно с точки зрения стандарта языка. Например, стандартные заголовочные файлы язка С в С++ объявляются как, например,
<cstdio> вместо <stdio.h>
Кроме того все заголовки должны следовать после заголовка
#include <stdafx.h>
То есть у вас должно быть так
#include <stdafx.h>
#include <cstdio>
#include <conio.h>
#include<iostream>
Кроме того совершенно непонятно, зачем вы включили заголовок <iostream> , если ни одо объявление из этого заголовка вы не используете? !
Далее вы объявляете массив фиксированного размера 10х10, а затем запрашиваете размерность массива в переменную 'm'. То есть вы должны определиться, либо у вас массив имеет фиксированный размер, либо массив формируется динамически в зависимости от введенной пользователям размерности.
Что касается вашего вопроса по поводу функций, то, например, я могу посоветовать ввести функцию swap для кода
temp3=temp;
temp=a[k][j];
a[k][j]=temp3;
У вас этот код используется несколько раз.
Написать подобную функцию вы можете двумя способами. Либо объявляя ее параметры как указатели на тип double, либо как ссылки на тип double.
Например
void swap( double *left, double *right )
{
double tmp = *left;
*left = *right;
*right = tmp;
}
либо как
void swap( double &left, double &right )
{
double tmp = left;
left = right;
right = tmp;
}
Тогда первую функцию вы можете вызывать как ( для вашего случая )
swap( &temp, &a[k][j] );
Кстати сказать, я просто скопировал ваше выражение для элемента массива, так как оно здесь скорей всего отображается неверно.
Для второго вида функции swap tt dspjd ghjbc[jlbn ghjot
swap( temp, a[k][j] );
Можете также написать отдельную функцию для печати массива (исходного и результирующего).
<cstdio> вместо <stdio.h>
Кроме того все заголовки должны следовать после заголовка
#include <stdafx.h>
То есть у вас должно быть так
#include <stdafx.h>
#include <cstdio>
#include <conio.h>
#include<iostream>
Кроме того совершенно непонятно, зачем вы включили заголовок <iostream> , если ни одо объявление из этого заголовка вы не используете? !
Далее вы объявляете массив фиксированного размера 10х10, а затем запрашиваете размерность массива в переменную 'm'. То есть вы должны определиться, либо у вас массив имеет фиксированный размер, либо массив формируется динамически в зависимости от введенной пользователям размерности.
Что касается вашего вопроса по поводу функций, то, например, я могу посоветовать ввести функцию swap для кода
temp3=temp;
temp=a[k][j];
a[k][j]=temp3;
У вас этот код используется несколько раз.
Написать подобную функцию вы можете двумя способами. Либо объявляя ее параметры как указатели на тип double, либо как ссылки на тип double.
Например
void swap( double *left, double *right )
{
double tmp = *left;
*left = *right;
*right = tmp;
}
либо как
void swap( double &left, double &right )
{
double tmp = left;
left = right;
right = tmp;
}
Тогда первую функцию вы можете вызывать как ( для вашего случая )
swap( &temp, &a[k][j] );
Кстати сказать, я просто скопировал ваше выражение для элемента массива, так как оно здесь скорей всего отображается неверно.
Для второго вида функции swap tt dspjd ghjbc[jlbn ghjot
swap( temp, a[k][j] );
Можете также написать отдельную функцию для печати массива (исходного и результирующего).
Сыроежка
Похожие вопросы
- Помогите решить задачи на C#
- Помогите решить задачу на C или C++, пожалуйста.
- Помогите решить задачу по C++
- Помогите с решением задачи на C++
- Помогите решить задачи по C++
- Как решить задачу в C#
- Задача по C#
- Помогите решить задачу (Visual c++)
- Задача на C#. 7 КЛАСС
- помогите решить задачу математически. C++