Imam jedan zadatak za projekt na fakultetu. Neznam kako da započnem, pa ako može tko dati kakvu ideju.
Zadatak glasi:
Napravite program koji u matricu tima 10X23 upisuje slova "OPM" kao na slika 1.. Algoritam funkcionira na način da se od početne pozicije elementarnim trensformacijama krećemo po matrici te za sobom bojimo polja na kojima smo bili i na taj način ispisujemo tražena slova. Početna pozicija je (3,3). Ispišite sve elementarne matrice transformacija i matricu E. Napravite animaciju cijelog puta ispisivanja traženih slova.
Programiranje elementarne matrice
- poruka: 2
- |
- čitano: 1.706
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Imam još jedan zadatak.
Zadatak glasi:
Konstruirajte algoritam koji će kao ulazni parametar uzimati kvadratnu matricu te provjeravati regularnost matrice (računajući pripadnu determinantu).
Uz regularnost, izlazni parametri su još i determinanta, lista elementarnih matrica pripadnih elementarnih transformacija potrebnih za izračunavanje determinante, te matrica E.
Algoritam testirajte na primjerima sa slike.
Napravila sam dio algoritma u C++, ali neznam je li dobro. Pa ako može tko pomoći.
#include<iostream>
#include <cstdlib>
#include<iomanip>
using namespace std;
int main(){
int n, i, j, zamjena, k, br=1, t=0,c;
double koef;
//unos matrice
cout<<"Unesite red kvadratne matrice: "<<endl;
cin>>n;
float a[n][n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
cout<<"Unesite element matrice na poziciji a["<<i+1<<"]["<<j+1<<"]: ";
cin>>a[i][j];
}
//ispis matrice
cout<<"Unesena matrica:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<< a[i][j] << " ";
cout<<endl;
}
//provjeravamo glavnu dijagonalu matrice
for(i=0;i<n-1;i++)
{
int provjera=0;
if(!a[i][i]) //ako je na glavnoj dijagonali vrijednost elementa nula
{
for(j=i;j<n-1;j++)
if(a[j+1][i]!=0 && provjera==0)
{
for(k=0; k<n; k++)
{
zamjena = a[i][k];
a[i][k] = a[j+1][k];
a[j+1][k] = zamjena;
}
br *= (-1);
provjera++;
}
}
for(int j=i; j<n-1; j++)
{
if(!a[j+1][i]) continue;
koef = a[j+1][i]/a[i][i];
t++;
for(k=i; k<n; k++)
{
a[j+1][k] += (-koef) * a[i][k];
}
cout<<endl<<t<<". promjena: "<<endl;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
cout<<fixed<< setprecision(2)<< a[i][j] << " ";
}
cout<<endl;
}
}
}
//ispist gornju trokutastu matricu
cout<<endl<<"Ispis gornje trokutaste matrice:\n";
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
cout<<fixed<< setprecision(2)<< a[i][j] << " ";
}
cout<<endl;
}
//izracunavanje determinante
double det = 1;
for(int i=0; i<n; i++)
{
det *= a[i][i];
}
cout<< "Determinanta matrice: " <<det * br;
cout<< endl;
//provjera regularnosti matrice
if(det==0)
cout<<"Matrica nije regularna."<<endl;
else
cout<<"Matrica je regularna."<<endl;
system("PAUSE");
return 0;
}