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

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

[C] матрици, помош?

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

Freak

Intern
9 јануари 2008
14
0
zadacava sto treba da ja resam e sledna:

Да се намали редот на матрицата A=[аij]m*n внесена преку тастатура, со бришење на к-тата (овај врој е внесен преку тастатура) редица и р-тата (овој број е внесен преку тастатура) колона.

od prilika vaka nekako se resava:

for (i=0;i<m;i++)
for (j=0;j<n;j++) {
printf(“a[%d,%d]=”,i,j);
scanf(“%d”,&a[j]);
}
 

''TcM>>

Intern
6 јануари 2008
961
39
e otprilika e taka da

ama toa e opstoto za vnesuvanje na clenovi na matricata, i bez toa nisto ne mozes!!

inace ova mi izglea kako malce lesno programce:da::p
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Epa ako e lesno togas kako da ja resam??
Ако треба да ја менуваш 4тата колона, правиш еден 2 for циклуси за да ги изминува елемент по елемент - претпоставувам знаеш како се изминува матрица. Во внатрешниот for циклус, кој всушност е за изминување на колоните ќе ставиш едно if кое ќе проверува дали боројот на колоната е ист со оној со кој е внесен од тастатура за да се исфрли. Ако е, внатре во тоа if правиш уште еден for циклус за да ги премести соседните индекси. Значи, ако колоната е n, правиш matrica[i,n]=matrica[i,n+1]. На овој начин елементите од тековниот ред ќе ги поместиш во лево за сметка на елементот кој ќе биде исфрлен. Ова ќе се повтори за секоја редица.

Код:
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)

{
if (j==kolona)
{
for (k=j; k<=n-1;k++)
{
matrica[i,k]=matrica[i,k+1]
}//end for
}//endif
break; //za da izleze od vnatreshniot for ciklus. Nema potreba da bara ponatamu stom dojde do kolonata sto treba da se isfrli
}//end for
}//endfor
Вака отприлика би требало да изгледа кодот. E сега не знам дали имаше опција за да елементите од последната колона се ослободат пошто од старт при иницијализација на матрицата е резервирано m*n. Во новиов случај матрицата ќе ни биде m*(n-1), а последниот ред ни е непотребен, што значи дека ако не ги тргнеме, таму ќе си стојат вредностите. Пример

Ако имаме матрица на која треба да и се исфрли 2рата колона

1 2 3
4 5 6
7 8 9

... новата матрица ќе биде:

1 3 3
4 6 6
7 9 9

Значи, 2рата колона ќе ја нема, но ќе остане 3тата колона два пати. Ако има некоја команда на пример matrica[i,j]=null тогаш ова може да се реши некако. Не сум сигурен одамна немам чачкано C :) Ај пробај вака па кажи...

п.с. ова е за исфрлање колона. За редица е слично :)
 

StenmarC

Intern
16 април 2007
716
13
stenmarc.blog.com.mk
Уште една допуна. Не знам како ќе биде со ослободувањето на меморијата. Најдобро е после ова да дефинираш нова матрица со n-1,m-1 редици и колони и во неа да ја ископираш старата, а старата да ја избришеш.
 
  • Ја почнал/а темата
  • #6

Freak

Intern
9 јануари 2008
14
0
StenmarC ај ако го знајш кодон напиши го иначе јас се трудев ама никако да ја реша...!!!!
 
  • Ја почнал/а темата
  • #7

Freak

Intern
9 јануари 2008
14
0
Јас ја имам задачана во C++ ам никако да ја ресам во C еве ја во C++:

int A[m][n]={7,-3,4-9,5},
{6,1,-2,4,-8},
{-7,6,3,8,-6},
{9,-5,3,8,-6}
};
int i,j,B[m][n];
for(i=0;i<m-1;i++)
for(j=0;j<n;j++)
if(i<1)
B[j]=A[j];
else
B[j]=A[i+1][j];
count <<"matrica B"
<< "\n";
for(i=0;i<m-1;i++)
{
for(j=0;j<n;j++)
{
cout.width(3);
cout << B[j];
}
cout <<"\n";
}
int A[m][n]={7,-3,4-9,5},
{6,1,-2,4,-8},
{-7,6,3,8,-6},
{9,-5,3,8,-6}
};
int i,j,B[m][n];
for(j=0;i<n-1;j++)
for(i=0;i<m;i++)
if(j<k)
B[j]=A[j];
else
B[j]=A[j+1];
count <<"matrica B"
<< "\n";
for(i=0;i<m;i++)
{
for(j=0;j<n-1;j++)
{
cout.width(3);
cout << B[j];
}
cout <<"\n";
}
 

DaciSS

Gaining Experience
3 јануари 2008
949
288
San Francisco
www.linkedin.com
може да си креираш помошна нова низа и сите елементи што ти требаат смо ќе ги префрлиш во новата, а старата низа ќе ја избришеш
 

Нови мислења

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

Статистика

Теми
43,510
Мислења
822,306
Членови
28,048
Најнов член
milesp
На врв Дно