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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2014, 23:22   #1
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию Заполнить матрицу ЛП, от левого верхнего угла по диагонали: вправо - вверх

Здравствуйте, уважаемые форумчане. Я новичок в С++. Прошу помочь. Заполнить матрицу ЛП, от левого верхнего угла по диагонали: вправо - вверх.
Вначале хотел вывести первоначальную матрицу 9х9 тоесть числовую последовательность от 1 до 81. И потом только показать новую матрицу от левого верхнего угла по диагонали: вправо - вверх. Но что то не получилось помогите пожалуйста...
Код:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int main() {
 const int s = 9;
 int A[s][s];
short i,j,x;
// clrscr();
printf("\nPervonachalnaya matrica:\n\n");//заполняем и выводим матрицу ЛП 9x9
for (i=0;i<s;i++) {
for (j=0;j<=i;j++) {
A[i-j][j]=x;
      printf("%3d",A[i-j][j]);
}
   printf('\n');
}
for (j=1;j<s;j++) { //меняем от левого верхнего угла по диагонали: вправо - вверх.
for (i=0;i<=s-1-j;i++) {
A[s-1-i][j+i]=x;
}
}
printf("\nNovaya matrica:\n\n");//выводим результирующую матрицу 9х9
for (i=0;i<s;i++) {
for (j=0;j<s;j++) {
printf("%3d",A[i][j]);
}
printf("\n");
}
getchar();
return 0;
}
Изображения
Тип файла: png 123.png (1.6 Кб, 178 просмотров)
Zaraaa вне форума Ответить с цитированием
Старый 23.10.2014, 08:18   #2
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию

Помогите пожалуйста
Zaraaa вне форума Ответить с цитированием
Старый 23.10.2014, 10:16   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
// Матрицу змейкой.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	const int n=10,m=10;
	int a[n][m]={0}, i,j,q,w;
	q=1;a[0][0]=1;
	for(i=1;i<n;i++){
		for(j=0;j<i;j++) a[i-j-1][j]=q++;
	}
	
	for(i=n;i>=0;i--){
		w=n-1;
		for(j=n-i;j<m;j++) a[w--][j]=q++;
	}

	for(i=0;i<n;i++){
		for(j=0;j<m;j++) printf("%5d",a[i][j]); printf("\n");
	}
	getchar();
	return 0;
}
I'm learning to live...

Последний раз редактировалось Stilet; 23.10.2014 в 12:52.
Stilet вне форума Ответить с цитированием
Старый 23.10.2014, 10:49   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,067
По умолчанию

Вот в один проход с чудесами математики
Код:
int _tmain(int argc, _TCHAR* argv[])
{
	const int s = 9;
	int A[s][s];
	short i, j, x = 1;
	int n;
	int i0;
	
	printf("\nPervonachalnaya matrica:\n\n");//заполняем и выводим матрицу ЛП 9x9
	for (i = 0; i < s; ++i)
	{
		for (j = 0; j < s; ++j)
		{
			n = (i + j + 1); // считаем число элементов в диагонали, которой принадлежит элемент A[i][j]
			if (n > s) // если условие выполняется, то элемент A[i][j] находится под главной диагональю
			{
				n = 2 * s - (i + j + 1); // правильно пересчитываем число элементов в диагонали
				A[i][j] = j + (s - 1)*(s - 2) / 2 - n*(n - 1) / 2 + s*(s + 1) / 2;
                                /*
                                  j - номер элемента в диагонали
                                  (s - 1)*(s - 2) / 2 - n*(n - 1) / 2 - количество элементов между главной диагональю и текущей диагональю
                                  s*(s + 1) / 2 - количество элементов от первого элемента до главной диагонали включительно
                                  (верхний треугольник, у которого гипотенуза идёт по главной диагонали матрицы). Для s = 9 будет 45
                                */
			}
			else
			{
				A[i][j] = n - i + n*(n - 1) / 2;
                                /*
                                  n - i - номер элемента в диагонали
                                  n*(n - 1) / 2 - количество элементов между первым элементом(диагональю из первого элемента) и текущей диагональю
                                */
			}

			printf("%3d", A[i][j]);
		}
		printf("\n");
	}

	getchar();

	return 0;
}
Stilet, у меня что-то при 9х9 матрица поломалася

Последний раз редактировалось pu4koff; 23.10.2014 в 11:03.
pu4koff вне форума Ответить с цитированием
Старый 23.10.2014, 11:57   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у меня что-то при 9х9 матрица поломалася
На моем примере? Ну я его толком не проверял если честно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2014, 12:05   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,067
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На моем примере? Ну я его толком не проверял если честно.
Ага. Поменял n и m на 9 и что-то пошло не так.
pu4koff вне форума Ответить с цитированием
Старый 23.10.2014, 12:50   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что-то пошло не так.
Ну пусть идет неуклюже. Пешепьяно по луже
Говорю же - толком не проверял, просто подал как идею.

P.S. Ну не бОран ли я? Как же так можно невнимательно писать?
Пример исправил. В цикле 10 стояло вместо m...
Короче погода у нас плохая. Пасмурно. Видимо в этом проблема.
I'm learning to live...

Последний раз редактировалось Stilet; 23.10.2014 в 12:53.
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить все столбцы, в которых встретится элемент по модулю больший левого верхнего (a1,1). yana1213 Помощь студентам 1 15.05.2014 15:10
Заполнить квадратную матрицу В(10,10) единицами в шахматном порядке, начиная с верхнего левого угла x93 Помощь студентам 15 08.10.2012 10:46
Найти расстояние от верхнего левого угла до правого нижнего угла матрицы iMisha Паскаль, Turbo Pascal, PascalABC.NET 3 03.04.2012 22:19
Заполнение матрицы по спирали (от центра влево-вниз-вправо-вверх) Баур Помощь студентам 4 03.12.2009 17:39
Заполнить матрицу ЛП, от левого верхнего угла по диагонали: вправо - вверх. O.G.O Общие вопросы C/C++ 4 11.06.2009 01:10