• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

Транспонирана матрица на матрица А=[aij]m×n внесена преку тастатура

  • Ја почнал/а темата
  • #1

ace_paun

Intern
15 јануари 2008
16
0
Да се најде транспонираната матрица на матрицата А=[aij]m×n внесена преку тастатура.
Објаснување: Транспонирана матрица на матрицата A е матрица B, која се добива кога редиците на A ќе се запишат како колони на B
 
M

Mr.Alien

Гостин
Na stariot dobar fortran, ako dobro se sekavam, bese vaka:

For I=1,M-1
For J=I+1,N

za da se fiksira glavnata dijagonala, inaku vo rezultatot dolniot del pod glavnata dijagonala ke bidat nuli.

Ponatamu....da vidam kako tocno bese, ako go cuvam programot.....denovive:)).
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Ако има некаде грешка не замерајте, нов сум во C++:

for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
B[i,j]=a[j,i];
}
}

Ова како алгоритам работи, не знам само дали ми е точна синтаксата.
 
M

Mr.Alien

Гостин
Така некако беше и на FORTRAN
а=I
a(i,j)=a(j,i)
a(j,i)=I

е баш ќе прокопам по старите хартии во кутиите....сигурно го чувам....:isplashen:
 

Password

Intern
10 април 2007
393
9
Код:
#include <stdio.h>

int main()
{
	int i,j,n,m,t[25][25],a[25][25];
	do
	{
	printf("Vnesi broj na redovi na matrica (<25):t");
	scanf("%d", &m);
	printf("Vnesi broj na koloni na matrica (<25):t");
	scanf("%d", &n);
	}
	while ((n<0)||(m<0)||(n>25)||(m>25));
	for(i=1;i<=m;i++)
		{
		for(j=1;j<=n;j++)
			{
			printf("a[%d][%d]=",i,j);
			scanf("%d", &a[i][j]);
			}
		printf("n");
		}
	for(j=1;j<=m;j++)
	{
		for(i=1;i<=n;i++)
		t[i][j]=a[j][i];
	}
	printf("nnTransponiranata matrica na matricata:n");
	for(i=1;i<=m;i++)
		{
		for(j=1;j<=n;j++)
		printf("%d", a[i][j]);
		printf("n");
		}
	printf("nn");
	printf("nne slednata:n");
	for(i=1;i<=n;i++)
		{
		for(j=1;j<=m;j++)
		printf("%d",t[i][j]);
		printf("n");
		}
	printf("n");
	system ("pause");
	return 0;
}
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Ако има некаде грешка не замерајте, нов сум во C++:

for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
B[i,j]=a[j,i];
}
}

Ова како алгоритам работи, не знам само дали ми е точна синтаксата.
Ова работи, но мислам дека не треба да се реши со нова матрица:) Треба на истата да се направи.
Не знам дали ова ќе работи, но вака некако би изгледало

k=0;
for(i=0;i<m;i++)
{
for(j=k;j<m;j++)
{
temp=а[i,j];
a[i,j]=a[j,i];
a[j,i]=temp;
}
k++; // ова е воведено за да не ги менува по втор пат тие сто веќе си ги смениле местата
}

Ова може да работ мислам и без променливата к - командата за иницијализација во внатрешниот фор циклус да биде j=i;
Вака ми изгледа дека ќе работи. Немам компајлер за да ја проверам.

Поздрав
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Еве решение без нова матрица:

for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
IF (i>j)
{
temp=а[i,j];
a[i,j]=a[j,i];
a[j,i]=temp;
}
}
}
 
M

Mr.Alien

Гостин
Дали на овие начини се фиксира главната дијагонала, односно нема ли да испаднат податоците под неа во вид на нули? Вака отприлика?

x x x x x
x x x x 0
x x x 0 0
x x 0 0 0
x 0 0 0 0
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Дали на овие начини се фиксира главната дијагонала, односно нема ли да испаднат податоците под неа во вид на нули? Вака отприлика?

x x x x x
x x x x 0
x x x 0 0
x x 0 0 0
x 0 0 0 0
Хммм не знам што сакаш да кажеш. Ова ми личи на долно триаголна матрица, а тука станува збор за Транспонирана матрица.

Бај д веј... таа не е главна дијагонала... другата е:)
 

minimoog

Intern
14 јули 2007
317
16
Множење матрица со вектор.
Множење матрица со матрица.
Детерминанта на матрица.
Инверзна матрица.

Ај уште овие останаа.
 
M

Mr.Alien

Гостин
При транспонирање на матрицата колоните и редовите си ги менуваат местата, така? Кај FORTRAN-от најнапред мораше да се изврши фиксирање на главната дијагонала, бидејќи во спротивно при префрлувањето на елементите би дошло до празапишување на податоците врз необработените елементи, т.е. оние кои допрва требаат да се префрлат. Тоа резултира со испишување на нули. Ова беше трик задача на испит, и ако се случеше ова се паѓаше.
Во примерот со Х ги наведов транспонираните елементи, а со нули оние кои допрва требаа да се запишат.
Инаку, во задачата ги означувавме како 11,12,13,14,15,21,22 и т.н. до 55 (ли повеќе, во зависност од задачата).
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
При транспонирање на матрицата колоните и редовите си ги менуваат местата, така? Кај FORTRAN-от најнапред мораше да се изврши фиксирање на главната дијагонала, бидејќи во спротивно при префрлувањето на елементите би дошло до празапишување на податоците врз необработените елементи, т.е. оние кои допрва требаат да се префрлат. Тоа резултира со испишување на нули. Ова беше трик задача на испит, и ако се случеше ова се паѓаше.
Во примерот со Х ги наведов транспонираните елементи, а со нули оние кои допрва требаа да се запишат.
Инаку, во задачата ги означувавме како 11,12,13,14,15,21,22 и т.н. до 55 (ли повеќе, во зависност од задачата).
Моето последно решение, кое користи само една матрица, работи на тој начин што членовите од долниот триаголник ги менува со нивните симетрични од горниот триаголник. Оние од главната дијагонала не ги чепка бидејќи тие остануваат исти.

Што се однесува до другите задачи, множење матрица со вектор е многу лесно, секој член го множиш со векторот, занчи два for циклуса за i и j кои ги поминуваат сите членови и ги множат со векторот.
 

Нови мислења

Последни Теми

Статистика

Теми
43,501
Мислења
821,952
Членови
28,044
Најнов член
codeo
На врв Дно