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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 10.01.2009, 19:09   #1
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию замена столбцов в массиве

объясните мне пожалуйста почему мой код не меняет 2 средних столбца. подскажите где ошибка.
Код:
int n, m;
	int **a=creat(n, m);
    int *z; 
	   for(int j=m/2-1; j<(m/2); ++j)       
	   {
	    	z=a[j];
			
	   	    a[j]=a[m-j-1];

	    	a[m-j-1]=z;
	   }

		for(i=0; i<n; ++i, cout << endl)
			for(int j=0; j<m; ++j)
				cout << a[i][j] << "\t";
DeFace вне форума
Старый 10.01.2009, 19:49   #2
Mikola-TEAM
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 34
По умолчанию

. .

Последний раз редактировалось Mikola-TEAM; 11.01.2009 в 00:23.
Mikola-TEAM вне форума
Старый 10.01.2009, 20:39   #3
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию

int i здесь помоему не причём(это просто была опечатка у меня). вот мой код полностью.
Код:
#include<iostream>
using namespace std;

int ** creat(int &n, int &m)
{
	cout << "n="; cin >> n;
	cout << "m="; cin >> m;
	int **mas=new int *[n];
	for(int i=0; i<n; ++i) mas[i]=new int [m];
	for(i=0; i<n; ++i)
		for(int j=0; j<m; ++j)
		{
			cout << "mas[" << i << "][" << j << "]=";
			cin >> mas[i][j];
		}
		return mas;
}

int main()
{
	int n, m;
	int **a=creat(n, m);
    int *z; 
	   for(int j=m/2-1; j<(m/2); ++j)       
	   {
	    	z=a[j];
			
	   	    a[j]=a[m-j-1];

	    	a[m-j-1]=z;
	   }

		for(i=0; i<n; ++i, cout << endl)
			for(int j=0; j<m; ++j)
				cout << a[i][j] << "\t";


	for(int i=0; i<n; ++i)     
		delete[] a[i];
	delete[]a;

return 0;
}
DeFace вне форума
Старый 10.01.2009, 21:42   #4
Тупой
Форумчанин
 
Аватар для Тупой
 
Регистрация: 26.12.2008
Сообщений: 146
По умолчанию

//upd

Короче, все тупило изза этих int i и int j в цикле.
Переписал, вроде чтото делает:
Код:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;


int **creat(int &n, int &m)
{
	int i;
	cout << "n="; cin >> n;
	cout << "m="; cin >> m;
	int **mas=new int *[n];
	for(i=0; i<n; ++i)
		mas[i]=new int [m];
	for(i=0; i<n; ++i)
		for(int j=0; j<m; ++j)
		{
			cout << "mas[" << i << "][" << j << "]=";
			cin >> mas[i][j];
		}
		return mas;
}

int main()
{
	int n, m;
	int **a=creat(n, m);
    int *z; 
	int i,j;
	   for(j=m/2-1; j<(m/2); ++j)       
	   {
	    	z=a[j];
			
	   	    a[j]=a[m-j-1];

	    	a[m-j-1]=z;
	   }

		for(i=0; i<n; ++i, cout << endl)
			for(j=0; j<m; ++j)
				cout << a[i][j] << "\t";


	for(int i=0; i<n; ++i)     
		delete[] a[i];
	delete[]a;

	getch();
return 0;
}
"Hello, world!" - 17 errors 56 warnings

Последний раз редактировалось Тупой; 10.01.2009 в 21:55.
Тупой вне форума
Старый 10.01.2009, 22:01   #5
DeFace
Пользователь
 
Аватар для DeFace
 
Регистрация: 27.09.2008
Сообщений: 60
По умолчанию

зачем? или я что то не понимаю. вроде переменные m и n вводятся во вспомогательной функции.
DeFace вне форума
Старый 10.01.2009, 22:15   #6
Тупой
Форумчанин
 
Аватар для Тупой
 
Регистрация: 26.12.2008
Сообщений: 146
По умолчанию

ну, какбы нафиг создавать функцию от 2-х параметров? в Вашем случае можно вообще тогда чтонить такое:
Код:
int **a=creat();
...
int **creat()
{
	int i;
	cout << "n="; cin >> n;
	cout << "m="; cin >> m;
вы уж если 2 параметра передаете, то тогда их в мейне инициализируйте, ну тоесть перенисите 2 строчки
Код:
	cout << "n="; cin >> n;
	cout << "m="; cin >> m;
в мейн
"Hello, world!" - 17 errors 56 warnings
Тупой вне форума
Старый 10.01.2009, 22:30   #7
Mikola-TEAM
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 34
По умолчанию

Короче, как я понял. Запускаем программу. Вводим размер массива (m- кол-во строк и n-кол-во столбцов)
затем вводим mas[0][0], mas[0][1], .... , mas[3][2], mas[3][3]. И 2 средних столбца должны поменяться местами.

Скомпилировал код, который выложил ты. Запускаю программу и ввожу данные:
Код:
n=4
m=4
mas[0][0]=1
mas[0][1]=1
mas[0][2]=1
mas[0][3]=1
mas[1][0]=2
mas[1][1]=2
mas[1][2]=2
mas[1][3]=2
mas[2][0]=3
mas[2][1]=3
mas[2][2]=3
mas[2][3]=3
mas[3][0]=4
mas[3][1]=4
mas[3][2]=4
mas[3][3]=4
И выводится результат:
Код:
1    1    1    1
3    3    3    3
2    2    2    2
4    4    4    4
Т.е. у тебя строчка 2 и строчка 3 поменялись местами.
Mikola-TEAM вне форума
Старый 10.01.2009, 22:31   #8
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

вобщем два средних столбца меняй так
Код:
        int z;
            for(int i=0;i<n;i++)
	{
	 z=a[i][m/2];
	 a[i][m/2]=a[i][m/2-1];
	 a[i][m/2-1]=z;
	}
counter вне форума
Старый 10.01.2009, 22:40   #9
Тупой
Форумчанин
 
Аватар для Тупой
 
Регистрация: 26.12.2008
Сообщений: 146
По умолчанию

тот кусок кода, который автор привел в первом посте меняет др. с другом 2 строчки.
От того, что вы поставили букву j столбец строкой не станет.

Во первых:
под z нужно выделить память
Код:
z=new int[n];
потом приравнять его к столбцу
Код:
for (i=0;i<n;i++) 
	   z[i]=a[i][m/2-1];
потом поменять местами 2 средних столбца
Код:
	for (i=0;i<n;i++)
	{
		a[i][m/2-1]=a[i][m/2+1];
		a[i][m/2+1]=z[i];
	}
ну, какбы мой код работает только с нечетным колвом столбцов, как написать с четным, я думаю, разберетесь
"Hello, world!" - 17 errors 56 warnings
Тупой вне форума
Старый 10.01.2009, 22:47   #10
Mikola-TEAM
Пользователь
 
Регистрация: 31.05.2008
Сообщений: 34
По умолчанию

Немного твой код изменил, чтобы менялись 2 внутренних столбца:
Код:
#include <iostream>
using namespace std;

int ** creat(int &n, int &m)
{
	cout << "n="; cin >> n;
	cout << "m="; cin >> m;
	int **mas=new int *[n];
	for (int i=0; i<n; ++i)
                       mas[i]=new int [m];
	for(i=0; i<n; ++i)
		for(int j=0; j<m; ++j)
		{
			cout << "mas[" << i << "][" << j << "]=";
			cin >> mas[i][j];
		}
		return mas;
}

int main()
{
	int n, m;
	int **a=creat(n, m);
        int z;
	
	int j=m/2-1;
	for (int i=0; i<n; ++i)
	{
			z=a[i][j];
			a[i][j]=a[i][j+1];
			a[i][j+1]=z;
	}

	for(i=0; i<n; ++i, cout << endl)
		for(int j=0; j<m; ++j)
			cout << a[i][j] << "\t";


	for(i=0; i<n; ++i)     
		delete[] a[i];
	delete[]a;

system("pause");
return 0;
}
Теперь когда запускаем программу. Вводим:
Код:
n=4
m=4
mas[0][0]=1
mas[0][1]=2
mas[0][2]=3
mas[0][3]=4
mas[1][0]=1
mas[1][1]=2
mas[1][2]=3
mas[1][3]=4
mas[2][0]=1
mas[2][1]=2
mas[2][2]=3
mas[2][3]=4
mas[3][0]=1
mas[3][1]=2
mas[3][2]=3
mas[3][3]=4
И получаем результат:
Код:
1    3    2    4
1    3    2    4
1    3    2    4
1    3    2    4
Т.е. столбцы поменялись местами

Последний раз редактировалось Mikola-TEAM; 10.01.2009 в 22:49.
Mikola-TEAM вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена значений в массиве, на указанное, одномерные массивы. паскаль Кирилл17 Помощь студентам 10 22.12.2008 19:56
Алгоритм смены столбцов в массиве DeFace Общие вопросы C/C++ 23 21.11.2008 01:30
Перемещение столбцов Janny Microsoft Office Excel 6 10.11.2008 07:58
Циклический сдвиг столбцов в массиве С++ Помогите! Ладушка Общие вопросы C/C++ 10 01.05.2008 23:17
Скрытие столбцов по условию snake980 Microsoft Office Excel 6 26.02.2008 16:52