[ freakazoid @ 16.06.2011. 18:24 ] @
Treba mi pomoc vezano za jedan zadatak.

Zadatak glasi:

Napisite program koji ce omoguciti kreiranje matrice

5x4. Svaki red u matrici predstavlja studenta, a
svaka od kolona ocjenu koju je student postigao na 4
ispita. Uz pomoc:
–Funkcije: void unos(int[][4], int, int); omogucite
unos ocjena za svakog od studenata; vodite racuna
da se mogu unijeti samo prolazne ocjene (6-10);
–Funkcije: int max(int[][4],int,int,int); pronaci
najvecu ocjenu svakog od studenata;
–Pomoc funkcije: float prosjek(int[][4],int,int,int);

izracunati prosjek za svaki odpredmeta;
Ispise najvecih ocjena za svakog od studenata I
prosjecnih ocjena po predmetu vrsite u funkciji
main.

Ja sam uspio uraditi nesto, unos nije problem, ove druge 2 funkcije jesu, uradio sam dio, ali nikako ne mogu dobiti ispis maksimalne ocjene za svakog studenta i prosjeka za svaki predmet, dobijem ja mislim maksimalnu ocjenu prvog i prosjek prvog predmeta.
Pretpostavljam da je problem kod brojaca i resetovanja ali nikako da skontam rjesenje.


Evo mog koda:


Code:
#include <iostream>
#include <cmath>
using namespace std;



void unos(int[][4], int, int);
int max(int[][4],int,int,int);
float prosjek(int[][4],int,int,float);



int main ()
{

    const int red=5;
    const int kol=4;

    int mat[red][kol];

    unos (mat, red, kol);

    for (int i=0; i<red; i++)
    {
        int maksimalni=0;
        cout<<"Maksimalna ocjena studenta "<<i+1<<" je: "<<max (mat, red, kol, maksimalni)<<endl;
    }

    for (int j=0; j<kol; j++)
    {
    
        float prospre=0;
        cout<<"Prosjek ocjena predmeta "<<j+1<<" je: "<<prosjek(mat, red, kol, prospre)<<endl;
    }

    system ("PAUSE");
}


void unos (int mat[][4], int red, int kol)
{
    for (int i=0; i<red; i++)
    {
        for (int j=0; j<kol; j++)
        {
            do{
            cout<<"Unesite ["<<i+1<<"]["<<j+1<<"] clan niza: ";
            cin>>mat[i][j];
            if (mat[i][j]<6||mat[i][j]>10)
            cout<<"Unijeli ste pogresnu ocjenu!"<<endl;
            }
            while (mat[i][j]<6||mat[i][j]>10);
        }
    }
}

int max (int mat[][4], int red, int kol, int max)
{
    
    for (int i=0; i<red; i++)
    {
        max=0;
        for (int j=0; j<kol; j++)
        {
            if (mat[i][j]>max)
            max=mat[i][j];
        }
        
        return max;
    }
    
}

float prosjek (int mat[][4], int red, int kol, float prospre)
{
    
    for (int j=0; j<kol; j++)
    {
        prospre=0;
        float suma=0;
        int brojac=0;
        for (int i=0; i<red; i++)
        {
            suma+=mat[i][j];
            brojac++;
        }

        
        prospre=suma/float(brojac);
        return prospre;        
    }
    
}
[ X Files @ 16.06.2011. 20:27 ] @
Pogresno si razumeo cemu sluzi poslednji argument u funkcijama max() i prosek(), cak si i taj poslednji argument u funkciji prosek() pretvorio u float iako pise int.

Koliko ja kapiram, drugi i treci argument su dimenzije matrice, a treci je REDNI BROJ STUDENTA u funkciji max(), odnosno REDNI BROJ PREDMETA u funkciji prosek(). Ovo je i u skladu s zahtevom zadatka: "Ispise najvecih ocjena za svakog od studenata I prosjecnih ocjena po predmetu vrsite u funkciji main.", sto u praksi znaci da ce u pozivu funkcije, umesto:
Citat:

for (int i=0; i<red; i++)
{
int maksimalni=0;
cout<<"Maksimalna ocjena studenta "<<i+1<<" je: "<<max (mat, red, kol, maksimalni)<<endl;
}

... trebati nesto ovako:
Code:

     for (int i=0; i<red; i++)
         cout<<"Maksimalna ocjena studenta "<<i+1<<" je: "<<max (mat, red, kol, i)<<endl;

Isto tako i za prosek.


A sto se tice same funkcije max... uh, bolje da pokusas ovaj kod /netestirano/, lakse mi je da popravim/doradim kod nego da pricam, pa ako ne radi ili nesto nije jasno, pitaj:
Code:

#include <iostream>
#include <cmath>
using namespace std;

 void unos(int[][4], int, int);
 int max(int[][4],int,int,int);
 float prosjek(int[][4],int,int,int);

 int main ()
 {

     const int red=5;
     const int kol=4;

     int mat[red][kol];

     unos (mat, red, kol);

     for (int i=0; i<red; i++)
         cout<<"Maksimalna ocjena studenta "<<i+1<<" je: "<<max (mat, red, kol, i)<<endl;

     for (int j=0; j<kol; j++)
         cout<<"Prosjek ocjena predmeta "<<j+1<<" je: "<<prosjek(mat, red, kol, j)<<endl;

     system ("PAUSE");
 }


 void unos (int mat[][4], int red, int kol)
 {
     for (int i=0; i<red; i++)
     {
         for (int j=0; j<kol; j++)
         {
             do{
             cout<<"Unesite ["<<i+1<<"]["<<j+1<<"] clan niza: ";
             cin>>mat[i][j];
             if (mat[i][j]<6||mat[i][j]>10)
             cout<<"Unijeli ste pogresnu ocjenu!"<<endl;
             }
             while (mat[i][j]<6||mat[i][j]>10);
         }
     }
 }

 int max (int mat[][4], int red, int kol, int student)
 {
    // ovde nije upotrebljen argument red, koga mozes
    // iskoristiti da testiras da li je argument student
    // veci od argumenta red, sto ne bi trebalo da je dozvoljeno
    int naj=0;
    for (int j=0; j<kol; j++)
        if (mat[student][j]>naj)
            naj=mat[student][j];

    return naj;

 }

 float prosjek (int mat[][4], int red, int kol, int predmet)
 {
    // ovde nije upotrebljen argument kol, koga mozes
    // iskoristiti da testiras da li je argument predmet
    // veci od argumenta kol, sto ne bi trebalo da je dozvoljeno
    int suma=0;

    for (int i=0; i<red; i++)
        suma+=mat[i][predmet];

    return (float)suma/(float)red;
 }



Ukratko, nije ti potrebna dvostuka petlja u funkcijama max i prosjek! Zadnji argument je taj koji govori kom studentu odnosno kom predmetu se obracas. Na stranu to sto si prerano iz funkcija izlazio sa return.
[ freakazoid @ 16.06.2011. 23:51 ] @
Bravo, svaka cast to je to..
Stvar je u tome sto sam prije 2-3 mjeseca ovaj zadatak uradio na slican nacin i radio je i nikako se nisam mogao sjetiti u
cemu je stvar, hvala ti puno.