24.2.3.24011430. Napišite funkcije “TragMatrice”, “DaLiJeGornjaTrougaona” i “Transpozicija”. Sve tri funkcije su generičke, i primaju dva parametra, “A“ i “N”. Parametar “A” predstavlja kvadratnu matricu proizvoljnih dimenzija i proizvoljnog tipa elemenata, dok je “N“ stvarna dimenzija matrice (broj redova i kolona su jednaki, s obzirom da je matrica kvadratna). Ukoliko je broj redova ili kolona matrice zadane kao stvarni parametar eventualno veći od “N“, funkcija treba da ignorira sve redove i kolone sa indeksima većim od “N“ (tj. da se ponaša kao da su dimenzije matrice zaista N x N). Funkcija “TragMatrice“ treba da kao rezultat vrati trag matrice (tj. sumu elemenata na glavnoj dijagonali). Funkcija “DaLiJeGornjaTrougaona“ treba da kao rezultat vrati logičku vrijednost “true” ukoliko je matrica gornja trougaona (tj. ako ima sve nule ispod glavne dijagonale), a “false” ako nije. Konačno, funkcija “Transpozicija” treba da izmijeni elemente matrice tako da ona postane transponirana u odnosu na izvornu matricu (tj. treba razmijeniti elemente na pozicijama (i,j) i (j,i)). Napisane funkcije testirajte u glavnom programu na primjeru matrice čije dimenzije i elemente unosi korisnik putem tastature.

Opis rješenja:

Listing programa:

#include <iostream>
#include <conio.h>

using namespace std;
template<typename tip,int d>
tip trag_mat(tip a[][d],int n){
tip s(0);
int i(0);
while(n/(i+1)){
    s+=a[i][i];
    i++;
    }
return s;
}
template<typename tip,int d>
bool gornja_trougaona(tip a[][d],int n){
bool t(true);
int i(1),j;
while((n-1)/i){
    j=1;
    while(i/j){
        if(a[i][j-1]!=0){
            t=false;break;
            }
        j++;
        }
    if(!t)break;
    i++;
}
return t;
}
template<typename tip,int d>
void transp(tip a[][d],int n){
int i(1),j,s;
while((n-1)/i){
    j=0;
    while(i/(j+1)){
        s=0;
        s=a[i][j];
        a[i][j]=a[j][i];
        a[j][i]=s;
        j++;    
        }
    i++;
    }
}

int main(){
int A[3][3];
for(int i=0;i<3;i++){
    for(int j=0;j<3;j++)cin>>A[i][j];
    } 
cout<<trag_mat(A,3)<<endl;
if(gornja_trougaona(A,3))cout<<"Yes!\n";
else cout<<"No!\n";
transp(A,3);
for(int i=0;i<3;i++){
    for(int j=0;j<3;j++){
    cout.width(3);
    cout<<A[i][j];
    }
    cout<<endl;
}
getch();
return 0;
}

Izvođenje programa:

Riješeni zadaci 2    Index