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

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

Помош за матрица?

Статус
Затворена за нови мислења.
  • Ја почнал/а темата
  • #1

SIMONA_STIP

Intern
2 јануари 2008
22
0
Ve molam ako ima nekoj progarma za matrici samo da ne e od tie poednostavnite sboranje, mnozenje itno mi treba za seminarska a nemam i4 vreme neka prati na e-mail [email protected]
odnapred blagodaram :fala:
 
  • Ја почнал/а темата
  • #4

SIMONA_STIP

Intern
2 јануари 2008
22
0
Pa na primer za presmetuvanje inverzna matrica ili traga na matrica nesto od toj tip.
 

loverboy

Intern
6 февруари 2008
147
11
Код:
#include <iostream>
using namespace std;

int main() {
  int m,n,i,j;
  int a[100][100],b[100][100],c[100][100];
  cout<<"Vnesete gi dimenziite na matricata"<<endl;
  cin>>m>>n;
  cout<<"Vnesete ja prvata matrica"<<endl;  
  for (i=0;i<m;i++) {
    for (j=0;j<m;j++) {
      cout<<"a["<<i<<"]["<<j<<"]=";
      cin>>a[i][j];
    }
  }
  cout<<"Vnesete ja vtorata matrica"<<endl;  
  for (i=0;i<m;i++) {
    for (j=0;j<m;j++) {
      cout<<"b["<<i<<"]["<<j<<"]=";
      cin>>b[i][j];
    }
  }
  for (i=0;i<m;i++) {
    for (j=0;j<m;j++) {
      c[i][j]=a[i][j]*b[i][j];
    }
  }
  cout<<"Matricata proizvod e:"<<endl;
  for (i=0;i<m;i++) {
    for (j=0;j<m;j++) {
      cout<<"c["<<i<<"]["<<j<<"]="<<c[i][j]<<endl;
    }
  }
  system("PAUSE");
  return 0;
}
Еве ти едноставна програма за пресметување на производ на две матрици... хмм... се надевам на вакво нешто мислиш, да не треба нешто посложено?
Поздрав :)
 

Commie

Gaining Experience
27 октомври 2007
4,717
218
www.foxmediahouse.com
Луѓе едно време имаше мала расправија за оваа работа со пишување семинарски и останати чуда. Како ти ќе научиш ако не напишеш самата? Почни напиши некој код па ако заглавиш можеш да постираш со цел да ти се помогне и да се насочиш кон правилно решавање на проблемот.
П.С. Извинете за оф топик.
 
  • Ја почнал/а темата
  • #8

SIMONA_STIP

Intern
2 јануари 2008
22
0
jas ke pocnam ama imam i drugi programi za pisuvanje za ispit pa sega toj mi e povazen otkolku seminarskata ama nema veza fala za pomosta:)
 

maximilian

Gaining Experience
26 март 2008
1,064
74
@ loverboy,

Мислам дека имаш грешка во кодот за множење на матрицата, во тој делот
Код:
for (i=0;i<m;i++) {
    for (j=0;j<m;j++) {
      c[i][j]=a[i][j]*b[i][j];
На тој начин ти само ги множиш елементите на првата матрица со соодветните елементи на втората, но не ја вршиш операцијата “множење на матрици“, која е всушност, првиот елемент е збирот на множењето на секој соодветен елемент на првата редица на првата матрица со секој соодветен елемент на првата колона на втората матрица, и тн. за останатите.

Ја мислам дека тој фрагмент би била вака:

Код:
for (int i=0; i<n; i++)
     for (int j=0; j<k; j++)
        {
             c[i][j]=0;
             for (int p=0; p<m; p++)
                  c[i][j]=c[i][j]+a[i][p]*b[p][j]
         }
Каде што двете матрици се од типовите n x m и m x k, зашто нели тоа е условот за множење на две матрици.

EDIT: Новодобиената матрица, која е добиена преку операцијата множење на матрици, е од тип n x k
 

TataMata

Intern
13 јуни 2008
115
1
Код:
int a[100][100];
Никако. Уствари кој вака работи со матрици буквално си право самоубиство. Освен во ретки случаи кога низ цел софтвер работи со матрици точна големина (на пример 4x4), тогаш е можеби ок. Но ако димензиите на матрицата се варијабилни, никако.

Најслаба точка на C/C++ се повеќедимензионите array.
 

no-no

Intern
17 април 2008
4
1
Симона еве ти една задача од предметот Конечна Математика во која со помош на матрици имам решено наоѓање на "ојлеров циклус". Мислам дека ова ќе ти заврши работа.

#include<iostream>
using namespace std;

// funkcija koja go proveruva stepenot na sekoe teme vo grafot, pa dokolku stepenot na sekoe teme e paren vraka TRUE, vo sprotivno vraka FALSE
bool parni (int a[100][100],int n);

// procedura koja od daden graf smesten vo dvodimenzionalna niza naoga ciklus kade sto vo ednodimenzionalna niza gi smestuva incidentnite temminja
// od rebrata pocnuvajki od rebroto k
// argumenti na procedurata
// ( int NIZA_OD_REBRA[100][100], int BROJ_NA_REBRA, int NIZA_OD_INCIDENTNI_TEMINJA_OD_CIKLUSOT, int BTOJ_NA_TEMINJA, int POCETNO_TEME )
void ciklus(int a[100][100],int &n, int c[100], int &l,int k);

//procedura za naoganje ojlerov ciklus, pritoa ja koristi predhodnata procedura
void ojlerciklus(int a[100][100],int &n,int b[100],int &m);

// procedura za brisenje na rebro od daden graf , smesten vo int niza
void brisi(int a[100][100],int &n,int br);

// procedura za vmetnuvanje na novo rebro vo grafot
void vmetni(int b[100], int &m, int c, int k);

// procedura za prikazuvanje na grafot
void prikazi(int a[100][100],int n);

// procedura za prikazuvanje na OJLEROVIOT CIKLUS PREKU INCIDENTNI TEMINJA
void prikaziojler(int b[100],int m);

// procedura za prikaz na glavnoto meni
void meni();

//---------------------------------------------------------------------------------------------------------
void main()
{
int izbor,a[100][100],n=0,b[100],m=0,br;
bool pom;
meni();
cin>>izbor;
system("CLS");
while(izbor != 5)
{
switch(izbor)
{
case 1:
cout<<"Vnesete gi teminjata na "<<n+1<<"-to rebton";
cout<<"Vneseto go prvoto teme : "; cin>>a[n][0];
cout<<"Vneseto go vtoroto teme : "; cin>>a[n][1];
n++;
system("CLS");
break;
case 2:
prikazi(a,n);
cout<<"Vnesete go Redniot Br. na temeto sto sakate da go izbriseten";
cin>>br;
brisi(a,n,br);
prikazi(a,n);
break;
case 3:
prikazi(a,n);
break;
case 4:
pom=parni(a,n);
if(pom)
{
ojlerciklus(a,n,b,m);
prikaziojler(b,m);
}
else cout<<"NEMA OJLEROV CIKLUSn";
break;
default :
cout<<"VNESOVTE POGRESEN IZBOR !!!n";
};
meni();
cin>>izbor;
system("CLS");
};
cout<<"Krajn";
}

//---------------------------------------------------------------------------------------------------------
bool parni (int a[100][100],int n)
{
bool oc=false,bul;
int b[100],m=0,p,q,r,s,t,c;
for(p=0;p<n;p++)
for(q=0;q<2;q++)
{
r=0; bul=true;
while(r<m && bul)
{
if(a[p][q]==b[r]) bul=false;
r++;
}
if(bul)
{
c=0;
b[m]=a[p][q];
m++;
for(s=0;s<n;s++)
for(t=0;t<2;t++)
if(a[p][q]==a[t]) c++;
if(c%2==0) oc=true;
else return false;
}
}
return oc;
};
//---------------------------------------------------------------------------------------------------------
void ciklus(int a[100][100],int &n, int c[100], int &l,int k)
{
int i,j,p=k;
bool najden;
l=0;
do
{
for(i=0,najden=false;(i<n) && (! najden) ;i++)
for(j=0;(j<2) && (! najden) ;j++)
if(a[j]==p)
{
najden=true;
if(j==0) c[l]=a[1];
else c[l]=a[0];
brisi(a,n,i);
p=c[l];
l++;
}
}
while(k != p);
};
//---------------------------------------------------------------------------------------------------------
void ojlerciklus(int a[100][100],int &n,int b[100],int &m)
{
int c[100],l,k,p,i,j,q;
bool najden;
b[0]=a[0][0];
m=1;
while(n>0)
{
for(p=0,najden=false;(p<m)&&(! najden);p++)
for(i=0;(i<n)&&(! najden);i++)
for(j=0;(j<2)&&(! najden);j++)
if(b[p]==a[j])
{
najden=true;
k=b[p];
ciklus(a,n,c,l,k);
for(q=0;q<l;q++) vmetni(b,m,c[q],p+1+q);
}
};
};
//---------------------------------------------------------------------------------------------------------
void brisi(int a[100][100],int &n,int br)
{
n--;
for(int i=br;i<n;i++)
for(int j=0;j<2;j++)
a[j]=a[i+1][j];
};
//---------------------------------------------------------------------------------------------------------
void vmetni(int b[100], int &m, int c, int k)
{
int i;
if(m>k)
{
for(i=m;i>k;i--) b=b[i-1];
b[k]=c;
m++;
}
else
{
b[k]=c;
m++;
};
};
//---------------------------------------------------------------------------------------------------------
void prikazi(int a[100][100],int n)
{
cout<<"________________________________________________________________________________n";
cout<<"Reden Br. REBRO TEMINJA n";
cout<<"________________________________________________________________________________n";
for(int i=0;i<n;i++)
{
cout<<" "<<i+1<<" : "<<" "<<i+1<<" (";
for(int j=0;j<2;j++)
if(j==0) cout<<a[j]<<" , ";
else cout<<a[j]<<")n";
};
cout<<"________________________________________________________________________________n";
};
//---------------------------------------------------------------------------------------------------------
void prikaziojler(int b[100],int m)
{
int i;
cout<<"________________________________________________________________________________n";
cout<<" OJLEROV CIKLUS n";
cout<<"________________________________________________________________________________n";
cout<<" ";
for(i=0;i<m;i++)
cout<<b<<"--";
cout<<endl;
cout<<"________________________________________________________________________________n";
};
//---------------------------------------------------------------------------------------------------------
void meni()
{
cout<<"Vneseto go vasiot izborn"<<
" 1: vnesi rebron"<<
" 2: izbrisi rebron"<<
" 3: prikazin"<<
" 4: OJLEROV CIKLUS n"<<
" 5: Krajn"<<
"? ";
};
 

vasildb

Intern
17 април 2007
209
6
Ова со матрициве [100][100] е навистина самоубиство, џабе меморија оди.
Еве напишав еден код за динамичко алоцирање
Код:
	int n=4;

	int**m;
	m=new int*[n];
	for(int i=0;i<n;i++)
		*(m+i)=new int[n];


	for(int i=0;i<n;i++)
		delete[] m[i];
	delete[]m;
Овде е проблемот што ти сам си ја алоцираш меморијата и истата мораш да ја избришиш, додека во другите случаи за тоа си се грижи компајлерот. Затоа на крај има и бришење на меморијата.
Кодот е за квадратна матрица од четврти ред, се надевам дека нема да биде проблем да си ја средите за ваши потреби.
 

loverboy

Intern
6 февруари 2008
147
11
@maximilian,
точно, глупа грешка направив при множењето на матрици :D
Втора работа, за низата и повеќе димензии, не гледам проблем, затоа што тоа не е оптимално решение, и воопшто не се сложувам дека тоа е самоубиство. Секогаш кога до сега сум правел програми на натпревари не е толку важно динамички да се алоцира затоа што треба да важи за сите случаи, вклучувајќи ги граничните. Впрочем, провери ги кодовите на решенијата на програми на различни натпревари и online judges и ќе видиш дека се обрнува повеќе внимание на алгоритамот. А точно е дека некогаш се троши повеќе меморија, но за вакви задачи мислам дека е беспотребно да се троши време за динамичка алокација на меморија, поточно е така, но за решенија каде што не ти треба вистинска оптимизација, [][] врши работа. Инаку јас повеќе го ценам алгоритамот отколку вакви работи, и би сакал дискусиите да се водат повеќе за алгоритмот отколку за техничкиот дел.
На пример една од претходните дискусии беше што е ++ операторот и како работи. Многу се јавија за таква според мене банална работа, наместо да се обрнува повеќе внимание на поважниот дел. Ти можеш да почниш и да иницијализираш динамички "како што треба" и после да не знаеш што да правиш понатаму со логичкиот дел. Сори за ваквиот долг пост, ама ме изнервира што за обичното иницијализирање, некој ми дава коментар дека тоа е самоубиство, коментар за ваква едноставна програма.
 
  • Ја почнал/а темата
  • #15

SIMONA_STIP

Intern
2 јануари 2008
22
0
Симона еве ти една задача од предметот Конечна Математика во која со помош на матрици имам решено наоѓање на "ојлеров циклус". Мислам дека ова ќе ти заврши работа.
Fala mnogu za programata mislam deka ke mi zavrsi rabota samo treba ubavo da ja razgledam :)
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
jas ke pocnam ama imam i drugi programi za pisuvanje za ispit pa sega toj mi e povazen otkolku seminarskata ama nema veza fala za pomosta:)

Fala mnogu za programata mislam deka ke mi zavrsi rabota samo treba ubavo da ja razgledam :)

епа симона дај место тебе да работиме

еј јас сум слободен овие неколку дена па може место тебе да полагам
и така имам долга коса нема да приметат

дај студент си или што
чекаш се на готово

почни некој пример па дојди тука па побарај помош да ти се објасни
а не ти бараш цела задача решена


еј и уште на кој факултет си :isplashen:
 

Commie

Gaining Experience
27 октомври 2007
4,717
218
www.foxmediahouse.com
Држете се до темата. Ако некој има нешто да каже против пишувањето на домашни и семинарски нека отвори тема, i'll be glad to talk about that there.
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
да во право си
но сеа на пмф во прва год има над 100 колешки
и која од која поголем дел смизли

еве баш денес на испит тоа е последна шанса ако не ке се презапишува предметот а пред мене седна една во бели полупроцирни панталони со црни танге горе исто така разголена :rolleyes:

а си нема везе

ај јас џентлмент и покажав 2 од 5 задачи :)

но не е тоа тоа

everyone sorry for offtopic:plachko2:
 

Alexandar

Gaining Experience
21 мај 2007
2,514
90
Не знам зошто се фаќате за небитни работи. Матрица 100х100 самоубиство?!?!?!?!?!!?

Да земеме дека матрицата е составена од елементи од типот double, а тоа е 8 бајти по елемент.

100х100=10 000
10 000 х 8 бајти = 80 000 бајти = 80 килобајти

Дали 80 килобајти потрошена меморија е многу во време кога се продаваат компјутери со 1 и повеќе гигабајти?
 
  • Ја почнал/а темата
  • #22

SIMONA_STIP

Intern
2 јануари 2008
22
0
епа симона дај место тебе да работиме

еј јас сум слободен овие неколку дена па може место тебе да полагам
и така имам долга коса нема да приметат

дај студент си или што
чекаш се на готово

почни некој пример па дојди тука па побарај помош да ти се објасни
а не ти бараш цела задача решена


еј и уште на кој факултет си :isplashen:



fala fala ne treba da polagas za mene se si imam polozeno :) a i ova e obicna seminarska koja treba radi reda da se napravi ne znam zosto tolku prasina digate ako nekoj mi pomogne :chudenje:
 

MetalGear

On your way to fame
14 април 2007
2,997
510
www.ibiz.mk
нема семинарска која се прави ради реда

семинарската служи и професорите да видат до каде сте со знаењето
и колку ве научиле демонстраторите

сите извините заради offtopic но симона ти не бараш некој да ти помогне ти бараш некој да ја реши место тебе
тоа не е исто

и како што кажа pudge :)

и доколку си си све положила нема да ти биде тешко да решиш некој проблем со матрици

ова се овично дава во 1ра година и со одглед на тазе владеењето на програмскиот јазик нема да ти одземе повеќе од 5-6 сати

сепак имаш колку сакаш слободно време немаш веке испити :rolleyes:

до сеа (за времето кое бараш помош) ке решеше барем 2-3 проблеми

и не ми одговори на прашањето

на кој од приватните колеџи си:ermm:
 

AMD_fan

Gaining Experience
10 ноември 2007
3,646
139
Да не заминавте малку со дискусијава оф топик? :muahaha: Само да ве потсетам, насловот на темава е "Помош за матрица". :bigboss:
 
Статус
Затворена за нови мислења.

Нови мислења

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

Статистика

Теми
43,566
Мислења
823,518
Членови
28,073
Најнов член
Death Markk
На врв Дно