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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2016, 13:47   #1
Alex0315
Новичок
Джуниор
 
Регистрация: 03.04.2016
Сообщений: 2
По умолчанию Двумерный массив c++

Дана целочисленная матрица nxn. Вывести на экран номера столбцов, в которых элементы идут по возрастанию. Размер матрицы вводится с клавиатуры.
Не работает, не знаю даже в чем ошибка... Даже если в столбце все числа одинаковы, все равно выдает что в столбце возрастание
Код:
#include "stdafx.h" 
#include <iostream> 
 

using namespace std; 

int main() 
{
	setlocale(0,"Russian"); 
	const int x=100;
	const int y=100;
	int a[x][y], n, m;    
	int i, j, counter = 0; 
	printf("\n\tВведите количество строк и столбцов:\n"); 
	printf("\n\tn="); 
	scanf("%d", &n);
		n=m; 
	printf("\n\tВводим элементы матрицы:\n"); 
	for (j = 0; j < m; ++j)   
		for (i = 0; i < n; ++i) 
		{
		cout<<"\tВведите элемент массива a["<<i<<"]["<<j<<"]=";
		scanf("%d", &a[i][j]);
		}
	printf("\n\tТребуемая матрица:\n\n"); 
	for (i = 0; i < n; ++i) {    
		for (j = 0; j < m; ++j)      
			printf("\t%-2d", a[i][j]);    
		printf("\n"); }  
	
	for (j = 1; j < m; ++j) {
		for (i = 1; i < n; ++i){
			if(a[i][j-1]>a[i-1][j-1]){
				printf(" Элементы возратают в %d столбце]", j);
			    counter++;}
	}
	}
	return 0; }
Alex0315 вне форума Ответить с цитированием
Старый 03.04.2016, 15:41   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Проверьте.... Сделано на коленке. )))) Вместо Вашего последнего двойного цикла.
Код:
for(int i = 0; i < m; i++) {
	bool fl = true;
	
	for(int j = 0 < n - 1; j++) {
		if(a[j][i] < a[j + 1][i]) {
			continue;
		} else {
			fl = false;
			break;
		}
	}
	
	if(fl) {
		cout << "Столбец " << i << " соответствует" << endl;
	}
}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 03.04.2016, 17:37   #3
Alex0315
Новичок
Джуниор
 
Регистрация: 03.04.2016
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Проверьте.... Сделано на коленке. )))) Вместо Вашего последнего двойного цикла.
Код:
for(int i = 0; i < m; i++) {
	bool fl = true;
	
	for(int j = 0 < n - 1; j++) {
		if(a[j][i] < a[j + 1][i]) {
			continue;
		} else {
			fl = false;
			break;
		}
	}
	
	if(fl) {
		cout << "Столбец " << i << " соответствует" << endl;
	}
}
Все работает. Спасибо)
Alex0315 вне форума Ответить с цитированием
Старый 04.04.2016, 18:37   #4
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Если кому понадобится полный код!
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"

using namespace std;

//-------------------------------------------------------------------------------------------------------
void print(int **arr, int n, int m)
{
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < m; j++)
			cout << " " << *(*(arr + i) + j) << " ";
		cout << endl << endl;
	}
}
//-------------------------------------------------------------------------------------------------------
void sl(int **arr, int n, int m)
{
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < m; j++)
			*(*(arr + i) + j) = rand() % 10;
	}
}
//-------------------------------------------------------------------------------------------------------
void sort(int **arr, int n, int m)
{
	bool b;
	int k = 0;
	for(int i = 0; i < m; i++)
	{
		b = true;
		for(int j = 0; j < (n - 1); j++)
		{
			if(arr[j][i] < arr[j + 1][i])
				b = true;
			else
			{
				b = false;
				break;
			}
		}
		if(b)
		{
			k = 1;
			cout << "Отсортированные столбцы: " << i + 1 << endl;
		}
	}
	if(!k)
		cout << "\nОтсортированных столбцов нет!";
}
//-------------------------------------------------------------------------------------------------------
int main()
{
	setlocale(LC_CTYPE, "Rus");
	int n = 0, m = 0, **arr;
	cout << "Введите размер строк: ";
	cin >> n;
	cout << "\nВведите размер столбцов: ";
	cin >> m;
	arr = new int*[n];
	for(int i = 0; i < n; i++)
		*(arr + i) = new int[m];
	cout << "\nМатрица имеет вид: \n\n";
	sl(arr,n,m);
	print(arr,n,m);
	sort(arr,n,m);
	for(int i = 0; i < n; i++)
		delete [] arr[i];
	delete [] arr;
	getch();
	return 0;
}
помог - жми на весы

Последний раз редактировалось Chainik!; 04.04.2016 в 19:11.
Chainik! вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Java: Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Заменить первые три строки массива A vikysha55 Помощь студентам 1 16.04.2014 10:50
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40