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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 20:12   #1
Deniska112
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 33
По умолчанию Двух мерные массивы в СИ

Ребят есть такая задачка
Осуществить циклический сдвиг элементов прямоугольной матрицы на n элементов вправо или влево (в зависимости от выбранного режима)n может быть больше количества элементов в строке или столбце.
Подскажите кто знает, а то я даже не знаю с чего начать!
Deniska112 вне форума Ответить с цитированием
Старый 02.06.2009, 20:19   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 02.06.2009, 20:22   #3
Deniska112
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 33
По умолчанию

а можеш код написать?
Deniska112 вне форума Ответить с цитированием
Старый 02.06.2009, 20:37   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Нет, не могу. А если не увижу ваших наработок, то и тему закрою.
Читайте Правила раздела и вот >ЭТО<
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.06.2009, 19:28   #5
Deniska112
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 33
По умолчанию

ну вот я тут написал приблизительный код но он не работает, помоги пожалуйста исправить
Код:
#include<conio.h>
#include <iostream.h>
#include <stdio.h>
# include <stdlib.h>
const n=3,s=5;
int main()
{
clrscr();
int i,j,a[n][s],k,l,r;
int d;
randomize();
for(i=0;i<n;i++)
for(j=0;j<s;j++)
{
a[i][j]=random(50.);
}
for (i=0;i<n;i++)
{
for(j=0;j<s;j++)
printf("%7d",a[i][j]);
puts("\n");
}
d=((a[0][0]*a[1][1]*a[2][2]) + (a[0][1]*a[1][2]*a[2][0])+ (a[1][0]*a[0][2]*a[2][1]) - (a[2][0]*a[1][1]*a[0][2]) - (a[0][0]*a[2][1]*a[1][2]) - (a[1][0]*a[0][1]*a[2][2]));
printf("\nvelichina sdviga:");
scanf("%d",&k);
printf("\nNapravlenie sdviga:(0-vniz, ne 0 -vpravo");
scanf("%d",&l);
if (l==0) (d=k); else
r=k;
if (r!=0);
for (i=0;i<n;i++)
for (j=0;j<s;j++)
if (j>r)  (a[i][j]=a[i][j-r]);else
a[i][j]=0;
if (d!=0);
for (i=0;i<n;i++)
for (j=0;j<s;j++)
if (i>d) (a[i][j]=a[i-d][j]); else
a[i][j]=0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf("polychilos%d", a[i][j]);
return(0);
}}
Модератор: тег CODE!

Последний раз редактировалось Sazary; 04.06.2009 в 19:34.
Deniska112 вне форума Ответить с цитированием
Старый 04.06.2009, 20:05   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Поясните, как именно должен происходить сдвиг.
Есть матрица:
Код:
1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8
и нужно сдвинуть ее на 2 позиции вправо. Это будет выглядеть так?
Код:
7 8 5 6
3 4 1 2
7 8 5 6
3 4 1 2
Цитата:
я тут написал приблизительный код но он не работает
Что именно не работает?

И для чего вот эта строчка:
Код:
d=((a[0][0]*a[1][1]*a[2][2]) + (a[0][1]*a[1][2]*a[2][0])+ (a[1][0]*a[0][2]*a[2][1])
 - (a[2][0]*a[1][1]*a[0][2]) - (a[0][0]*a[2][1]*a[1][2]) - (a[1][0]*a[0][1]*a[2][2]));
что она считает?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.06.2009, 22:29   #7
assasin
Форумчанин
 
Регистрация: 27.04.2009
Сообщений: 123
По умолчанию

Вот такое решение, к примеру, для массива... Для матриц думаю автор, поймя суть моего, сделать сможет
Код:
#include <iostream>
#include <conio.h>
using namespace std;
void print (int *a,int u)
{
for (int i=0;i<u;i++)
{
	cout <<a[i]<<" ";
}
}
int main ()
{
	int u,p,t,l;
	cout <<"Enter lenght of massive,please\n";
	cin >>u;
	int *a=new int [u];
	for (int i=0;i<u;i++)
	{
		a[i]=rand ()%10;
		cout <<a[i]<<" ";
	}
	cout <<endl;
	cout <<"Enter quantity of steps\n";
	cin >>p;
	cout <<"Right or left?\n";
	cout <<"If right => enter a code 1, if left => enter a code 2\n";
	cin >>t;
	l = p/u;
	p=p-u*l;
	if (t==2)
	{
for (int i=u-p;i<u;i++)
{
	for (int j=u-p-1;j>=0;j--)
	{
		int tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
	}
}
print (a,u);
	}
	if (t==1)
	{
	for (int i=p-1;i>=0;i--)
	{
	for (int j=p;j<u;j++)
	{
	int tmp = a[i];
		a[i] = a[j];
		a[j] = tmp;
	}
	}
print (a,u);
	}
	if (t!=1 && t!=2)
	{
		cout <<"Error! Restart program\n"; 
	}
	delete []a;
	getch ();
	return 0;
	}
<= P.S. если я тебе помог нажми весы слева <=
assasin вне форума Ответить с цитированием
Старый 04.06.2009, 22:46   #8
Deniska112
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 33
По умолчанию

нет если мы будем сдвигать на 2 позиции в право то это будет выглядеть вот так
3 4 1 2
7 8 5 6
3 4 1 2
7 8 5 6
а если вниз на две позиции то так и останеться а если на одну то
5 6 7 8
1 2 3 4
5 6 7 8
1 2 3 4

не работает сдвиг массива вправо или вниз помогите исправить плиз

Последний раз редактировалось MaTBeu; 06.06.2009 в 09:28.
Deniska112 вне форума Ответить с цитированием
Старый 07.06.2009, 12:26   #9
Deniska112
Пользователь
 
Регистрация: 15.04.2009
Сообщений: 33
По умолчанию

Блин народ помогите кто нибудь!
Deniska112 вне форума Ответить с цитированием
Старый 07.06.2009, 12:33   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Deniska112, вам же показали, как это делается с массивом. Для матрицы просто проделайте те же операции над каждой строкой (или столбцом, если сдвиг по вертикали).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Конкурс им. Парсифаля - н-мерные массивы. Парсифаль Общие вопросы C/C++ 32 08.05.2009 02:06
2-х мерные массивы (С++) TheWanderer Помощь студентам 5 05.12.2008 14:35
Помогите кто может (Массивы 2-х мерные) raccooni Общие вопросы C/C++ 15 25.11.2008 23:55
помогите в QBasic'е 2-мерные массивы Sergmodern Помощь студентам 1 05.06.2007 08:39