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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 16:24   #1
Вечный_студент
Пользователь
 
Аватар для Вечный_студент
 
Регистрация: 11.11.2011
Сообщений: 45
По умолчанию сдвиг двумерного массива

Всем доброго дня. Программа располагает двумерный массив в динамичной памяти и сдвигает его на Т элементов влево.
вопрос вот в чем: Как изменить void func(int **arr, int size, int stift) , чтобы сдвигало массив вправо, а не влево?

код:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//фукнция сдвига
//на входе подается указатель на начало массива
//размер массива и на сколько сдвигать

void func(int **arr, int size, int stift)
{
    int **tmp=(int**)malloc(size*sizeof(int*));
    int i,j,iPos,jPos;

    for(i=0;i<size;++i)
        tmp[i]=(int*)malloc(size*sizeof(int));

    for(i=0;i<size;++i)
        for(j=0;j<size;++j)
        {
            iPos=i+(stift+j)/size;
            if(iPos>=size) iPos%=size;
				jPos=(stift+j)%size;
            tmp[i][j]=arr[iPos][jPos];
        }

    for(i=0;i<size;++i)
    {
        for(j=0;j<size;++j)
            arr[i][j]=tmp[i][j];
        free(tmp[i]);
    }

    free(tmp); 
}

int main()
{
    int **arr,i,j,stift,size;
	printf("Enter size of matrix ");
    scanf("%d",&size);
	printf("\n");
	srand(time(NULL));
    arr=(int**)malloc(size*sizeof(int*));

//случайное заполнение
//и вывод двумерного массива
    for(i=0;i<size;++i)
    {
        arr[i]=(int*)malloc(size*sizeof(int));
        for(j=0;j<size;++j)
        {
            arr[i][j]=-50+rand()%100;
            printf("%d\t",arr[i][j]);
        }
        printf("\n");
    }

	printf("Enter nuber of stift ");
	scanf("%d",&stift);
    func(arr,size,stift);
    printf("\n");

//вывод нового двумерного массива
//размерами i на j
    for(i=0;i<size;++i)
    {
        for(j=0;j<size;++j)
            printf("%d\t",arr[i][j]);
        free(arr[i]);
        printf("\n");
    }
    free(arr);
    return 0;
}
Крепкая стена строится из маленьких кирпичей.
Но если положил первый кирпич криво, как ни старайся, стена кривой будет.

Последний раз редактировалось Вечный_студент; 14.05.2012 в 16:52.
Вечный_студент вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
Сдвиг массива. Джед Общие вопросы C/C++ 19 10.06.2009 16:44
циклический сдвиг массива goacher Общие вопросы C/C++ 4 28.05.2008 20:11
циклический сдвиг массива goacher Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2008 22:26