You are on page 1of 4

10.5.

Pretraživanje i sortiranje redova/ kolona

Zadatak 1. Svaki od pet učenika je iz nekog predmeta ocjenjen sa tri ocjene. Unesi ocjene u matricu, pa
naći i ispisati učenike sa svim jedinicama; u sprotnom ispisati odgovarajuću poruku.
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;

void ucitaj(int A[][3], int m, int n)


{
for (int i=0; i< m; i++)
for (int j=0; j< n; j++)
{
cout<<"A["<<i<<"]["<<j<<"]=";
cin>> A[i][j];
}
}

void ispisi(int A[][3], int m, int n)


{
for (int i=0; i< m; i++)
{
for (int j=0; j< n; j++)
cout<<setw(3)<<A[i][j];
cout<<endl;
}
}

int main()
{
int A[5][3];
ucitaj(A, 5, 3);
cout<<"Ispis matrice A:"<<endl;
ispisi(A, 5, 3);
int br=0;
for (int i=0; i< 5; i++)
{
int brJed=0;
for (int j=0; j< 3; j++)
{
if(A[i][j]==1)
brJed++;
}
if(brJed==3)
{
cout<<"Ucenik rb."<<i+1<<" ima sve jedinice"<<endl;
br++;
}
}
if(br==0)
cout<<"Nema ucenika sa svim jedinicama"<<endl;
return 0;
}
Zadatak 2. Matricom A(nxn), n<=10 data je tabela fudbalskog prvenstva, čiji su elementi :

0, ako je tim i izgubio od tima j


A[i][j] = 1, ako je nerješeno
3, ako je tim i pobjedio tim j

Pronaći one timove koji nisu imali nijedan poraz i ispisati njihove indekse.
(Sadržaj glavne dijagonale zanemariti, jer tim ne može igrati sam sa sobom)
#include <iostream>
#include <iomanip>
using namespace std;

//funkcija koja provjerava da li je tim datog indeksa bez poraza


bool bezPoraza(int A[][10], int n, int indeks)
{
int i=indeks;
for (int j=0; j< n; j++)
{
if(i==j)continue;
if(A[i][j]==0)return false; //ako je kao domacin izgubio
}
int j=indeks;
for (int i=0; i< n; i++)
{
if(i==j)continue;
if(A[i][j]==3)return false; //ako je u gostima porazen
}
return true; //u ostalim slucajevima
}

int main()
{
int A[10][10];
int n;
cout<<"Unesi broj timova (n<=10): ";
cin>>n;
cout<<"Unesi tabelu fudbalskog prvenstva:"<<endl;
for (int i=0; i< n; i++)
for (int j=0; j< n; j++)
{
if(i==j)continue; //gl.dijagonala se preskace
cout<<"A["<<i<<"]["<<j<<"]=";
cin>> A[i][j];
}
cout<<"Tabela prvenstva:"<<endl;
for (int i=0; i< n; i++) //ispis tabele
{
for (int j=0; j< n; j++)
if(i!=j)
cout<<setw(2)<<A[i][j];
else
cout<<setw(2)<<'x'; //ispisujemo 'x' na gl.dijagonalu
cout<<endl;
}
int br=0; //broj timova bez poraza
for (int i=0; i< n; i++)
if(bezPoraza (A, n, i))
br++;
if(br==0)
cout<<"Nije bilo timova bez poraza";
else
{
cout<<"Timovi bez ijednog poraza su:"<<endl;
for (int i=0; i< n; i++)
if(bezPoraza (A, n, i))
cout<<i<<endl;
}
return 0;
}

Zadatak 3. Učitati matricu M(mxn), m<=10, n<=10. Sortirati elemente prvo po redovima, zatim po
kolonama, te ispisati dobijenu matricu.
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;

void ucitaj(int M[][10], int m, int n)


{
for (int i=0; i< m; i++)
for (int j=0; j< n; j++)
{
cout<<"M["<<i<<"]["<<j<<"]=";
cin>> M[i][j];
}
}

void ispisi(int M[][10], int m, int n)


{
for (int i=0; i< m; i++)
{
for (int j=0; j< n; j++)
cout<<setw(5)<<M[i][j];
cout<<endl;
}
}
//funkcija koja sortira niz cijelih brojeva
void sortiraj(int niz[], int n)
{
for(int i = 0;i < n-1;i++)
for(int j= i+1;j < n;j++)
if(niz[i]>niz[j])
swap(niz[i],niz[j]);
}
//funkcija koja sortira redove matrice
void sortirajRedove (int (*M)[10], int m, int n)
{
for(int i=0;i<m; i++)
sortiraj(M[i], n);
}
//funkcija koja sortira kolone matrice
void sortirajKolone (int (*M)[10], int m, int n)
{
for(int j=0;j<n; j++)
{
int kolona[m];
for(int i=0;i<m; i++)
kolona[i]= M[i][j];
sortiraj(kolona, m);
for(int i=0;i<m; i++)
M[i][j]= kolona[i];
}
}

int main()
{
int m, n, M[10][10];
cout<<"Broj redova= ";
cin>>m;
cout<<"Broj kolona= ";
cin>>n;
if(m>10 || n>10)
exit(1);
ucitaj(M, m, n);
cout<<"Matrica prije sortiranja:"<<endl;
ispisi(M, m, n);
sortirajRedove(M, m, n);
cout<<endl<<"Matrica nakon sortiranja redova:"<<endl;
ispisi(M, m, n);
sortirajKolone(M, m, n);
cout<<endl<<"Matrica nakon sortiranja kolona:"<<endl;
ispisi(M, m, n);
return 0;
}

You might also like