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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2010, 16:44   #1
CHESTER_ROB
 
Регистрация: 16.05.2010
Сообщений: 5
По умолчанию Массивы и циклический сдвиг элементов

Доброго времени суток. Несколько дней уже вожусь с заданием и так до финального результата не довёл.
Необходимо:
Одномерный массив.
Удалить из массива все элементы с четными номерами.
Двумерный массив.
Все нечетные строки матрицы сдвинуть циклически на К элементов влево.

Код:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

int main()
{
int x[100];
int y[100];
int mas[100][100];
int tmpm[5];
int tmp,i,j,m,n;

cout<<"Kolichestvo elementov massiva: ";
cin>>tmp;
//formirovanie odnomernogo massiva
for(i=0;i<tmp;i++)
{
	x[i]=rand()%10;
}

//vivod massiva
for(i=0;i<tmp;i++)
{
	cout<<x[i]<<"    ";
}
cout<<endl;
cout<<endl;
//udaljaem elementi
j=0;
for (i=0;i<tmp;i++)
{
if (i%2==0)
{
y[j]=x[i];
j++;
}
}
//vivod massiva
for(i=0;i<j;i++)
{
	cout<<y[i]<<"    ";
}
cout<<endl;
cout<<endl;
cout<<"Kolichestvo strok dvumernogo massiva: ";
cin>>m;
cout<<"Kolichestvo stolbcov dvumernogo massiva: ";
cin>>n;

for(i=0;i<m;i++)
{
     for(int j=0;j<n;j++)
     {
          mas[i][j]=rand()%10;
      }
}

for(int i=0;i<m;i++)
{
    cout<<endl;
     for(int j=0;j<n;j++)
     {
          cout<<mas[i][j]<<"    ";
      }
}

cout<<endl;

cout<<"Vvedite K: ";
int k;
cin>>k;

for(i=0;i<k;i++)
{
    for(j=0;j<m-k;j++)
    {
        tmpm[j]=mas[i][j];
        mas[i][j]=mas[i][j+k];
    }
    for(j=m-k;j<n;j++)
    {
        mas[i][j]=tmpm[j-(m-k)];
    }
};

for(i=0;i<m;i++)
{
    cout<<endl;
     for(int j=0;j<n;j++)
     {
          cout<<mas[i][j]<<"   ";
      }
}
_getch();
return 0;
}
CHESTER_ROB вне форума Ответить с цитированием
Старый 17.05.2010, 07:51   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Код:
cout<<"Vvedite K: ";
int k;
cin>>k;

for(i=0;i<m;i+=2)
{
    for(j=0;j<n-k;j++)
    {tmpm[j]=mas[i][j+k];
    }
    for(j=0;j<n-k;j++)
    {mas[i][j]=mas[i][j+k];
    }
    for(j=n-k;j<n;j++)
    {mas[i][j]=tmpm[j-n+k];
    }
};
Что-то вроде этого, сам не проверил
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 17.05.2010, 16:59   #3
CHESTER_ROB
 
Регистрация: 16.05.2010
Сообщений: 5
По умолчанию

Сдвигает только первые две строчки.
CHESTER_ROB вне форума Ответить с цитированием
Старый 18.05.2010, 08:01   #4
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Вообще из того из моего кода должны передвигаться нечетные строки, но чтобы подряд 2 передвигались не может быть... Вставил не туда наверное
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 18.05.2010, 20:25   #5
ev_tea
 
Регистрация: 18.05.2010
Сообщений: 7
По умолчанию

Примерно так, можно кое-что упростить (это так на вскидку)
Код:
#include <iostream>
#include <stdlib.h>
using namespace std;
//сдвиг строки
void move(int *source, int m, int k)
{
	int buff,i;
	while(k>0)
	{
		buff=source[0];
		for(i=0;i<m;i++)
		{
			source[i]=source[i+1];
		}
		source[m-1]=buff;
		k--;
	}
	
} 
int main(int argc, char** argv)
{
	int i,count,m,n,k;
	int *x,*y;
	cin>>count;
	x=(int*)malloc(sizeof(int)*(count+1));
	y=x;	
	for(i=0;i<count;i++){x[i]=random()%10;cout<<x[i]<<" ";}
	cout<<endl;
	i=0;
	//удаление
	while(i<count/2){x[i]=*(++y)++;i++;}
	
	for(i=0;i<count/2;i++){cout<<x[i]<<" ";}
	free(x);y=0;
	
	//задача 2
	cout<<endl<<endl;
	//ввод размерности
	cin>>m>>n;
	x=(int*)malloc(sizeof(int)*m*n);
	//ввод сдвига
	cin>>k;
	for(i=0;i<m*n;i++){
		if(i%m==0)cout<<endl;
		x[i]=random()%10;
		cout<<x[i]<<" ";
		}
	for(i=0;i<n;i+=2)move(x+i*m,m,k%m);
	cout<<endl<<endl<<"Результат\n";
	for(i=0;i<m*n;i++){
		if(i%m==0)cout<<endl;
		cout<<x[i]<<" ";
		}
	free(x);
	return 0;
}

Последний раз редактировалось ev_tea; 18.05.2010 в 20:28.
ev_tea вне форума Ответить с цитированием
Старый 23.11.2010, 13:46   #6
CHESTER_ROB
 
Регистрация: 16.05.2010
Сообщений: 5
По умолчанию

спасибо всем. проблема решена
CHESTER_ROB вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++.циклический сдвиг элементов квадратной матрицы arsalan Помощь студентам 1 11.05.2010 08:08
Циклический сдвиг в С rand8154 Общие вопросы C/C++ 1 14.11.2009 01:49
Циклический сдвиг Mish92(21-09) Помощь студентам 0 07.11.2009 21:59
Циклический сдвиг маирицы на С++ Svetlaya Помощь студентам 0 06.06.2009 22:31
циклический сдвиг массива goacher Общие вопросы C/C++ 4 28.05.2008 20:11