Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2009, 21:00   #1
Alex1991
Форумчанин
 
Аватар для Alex1991
 
Регистрация: 18.10.2008
Сообщений: 166
Подмигивание Циклический сдвиг строки матрицы

Есть программа
Код:
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

void fun(int **M, int m, int n, int k)
{
 int i,j,l,tmp;

 if(k>=n) k %= n;
 for(i=1;i<m;i+=2)
 {
  tmp = M[i][0];
  for(l=0,j=0;l<n;l++)
   {
    if(l<n-1)
     {
     if(j+k<n)
      {
       M[i][j] = M[i][j+k];
       j = j + k;
      }
     else
      {
       M[i][j] = M[i][j+k-n];
       j = j+k-n;
      }
    }
    else
     M[i][j] = tmp;
   }

 }

}

int main()
{
srand(time(NULL));
int **matr,i,j,m,n,k;
cout<<"Vvedite kolichestvo strok: ";
cin>>m;
cout<<"Vvedite kolichestvo  stolbov: ";
cin>>n;
matr = new int*[m];
for(i=0;i<m;i++)
 {
  matr[i] = new int[n];
  for(j=0;j<n;j++)
   {
    matr[i][j] = rand()%100;
    cout.width(4);
    cout<<matr[i][j];
   }
  cout<<endl;
 }
cout<<endl;

cout<<"Vvedite k: ";
cin>>k;
fun(matr,m,n,k);

for(i=0;i<m;i++)
 {
  for(j=0;j<n;j++)
   {
    cout.width(4);
    cout<<matr[i][j];
   }
  cout<<endl;
  delete[] matr[i];
 }
delete[] matr;

getch();
return 0;
}
Хотел сдать, но препод ругается что функция циклического сдвига очень "не красивая".
Как можно правильно доработать этот код сдвига и вставить в прогу (заменяя функцию "некрасивую")
Код:
for(int t=0;t<k;t++)
 {
  r=a[0];
  for(int i=0;i<n-1;i++)
  a[i]=a[i+1];
  a[n-1]=r;
 }
Alex1991 вне форума Ответить с цитированием
Старый 14.04.2009, 21:20   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Alex1991, вы бы хоть копирайты ставили.

Уж могли бы и сами исправить. Для этого нужно было всего-то попытаться понять код.
Код:
void fun(int **M, int m, int n, int k)
{
 int i,j,t,r;

 if(k>=n) k %= n;
 for(i=1;i<m;i+=2)
 {
  for(int t=0;t<k;t++)
  {
  r=M[i][0];
  for(j=0;j<n-1;j++)
  M[i][j]=M[i][j+1];
  M[i][n-1]=r;
  }

 }

}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сдвиг строки Анастасия123456789 HTML и CSS 7 24.02.2009 18:10
циклический сдвиг массива goacher Общие вопросы C/C++ 4 28.05.2008 20:11
циклический сдвиг массива goacher Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2008 22:26
Циклический сдвиг столбцов в массиве С++ Помогите! Ладушка Общие вопросы C/C++ 10 01.05.2008 23:17