[ Danijel Bulic @ 15.01.2010. 19:44 ] @
Opet ja :D

2. Unesi tri cjelobrojna podatka. U funkciji max pronadji najveci broj. U funkciji As izracunaj arit. sredinu. Najveci broj i arit. sredinu ispisati u fji main.


Code:
#include <stdio.h>
#include <stdlib.h>

int arit (int brojevi[])
{
    int sredina, i;
    sredina = brojevi[i]/2;
    return sredina;
}
int main(int argc, char *argv[])
{
  int podatak[3];
  scanf ("%d\n", podatak);
  printf ("Aritmeticka sredina je %d\n", arit(podatak));
  system("PAUSE");    
  return 0;
}


Mislim da je problem pri unosenju podataka nisam bas ove nizove shvatio ili se ne moze unositi ovako kako sam ja zamislio. I ako nije problem mala uputa za pronalazenje najveceg broja, ne treba pisati f-ju samo uputa.

Hvala
[ Picsel @ 15.01.2010. 20:05 ] @
Ucitavaj
Code:
scanf("%d %d %d",&podatak[0],&podatak[1],&podatak[2]

ili
Code:
for (i=0; i<3; i++) scanf("%d",&podatak[i])

"[ ]" oznacava poziciju u nizu.

Fali ti ciklus u funkciji koja racuna aritmeticku sredinu, a i posto imas 3 broja, onda delis sa 3, ne sa 2. Takodje, sredina ne mora biti celobrojna, pa za tip ove funkcije i za promenljivu sredina, koristi float/double tip (a i u printf u mainu koristi format za float tip). Ciklus ovako
Code:
for (i=0; i<3; i++)
  sredina+=brojevi[i]/3.0;


Za funkciju max, jednostavno stavi da je na pocetku maximum = podatak[0], a onda proveris za ostale clanove niza da li su veci od maximum. Ako je neki clan veci, onda njega stavis da je maximum, i nastavis sa proverama dok ne dodjes do kraja niza.
U tvom slucaju moze da se odradi i sa par if-ova, bez ciklusa, posto ima samo 3 broja.
[ Danijel Bulic @ 15.01.2010. 20:53 ] @
Code:
#include <stdio.h>
#include <stdlib.h>

float arit (int brojevi[])
{
    float sredina;
    int i;
    for (i=0;i<3;i++)
    sredina += brojevi[i]/3.0;
    return sredina; 
}
int main(int argc, char *argv[])
{
  int podatak[2],i;
  for (i=0; i < 3; i++)
  scanf ("%d", &podatak[i]);
  printf ("Aritmeticka sredina je %d\n", arit(podatak));
  system("PAUSE");    
  return 0;
}


Evo ga prepravljen ali mi ne racuna dobro sredinu. I zasto + kod sredine, jel to zbog petlje ?
[ Picsel @ 15.01.2010. 22:38 ] @
Stavi da je sredina=0 na pocetku funkcije.
A float brojevi se ne ispisuju sa %d vec sa %f.

Inace, ako imas tri broja a, b i c, onda je aritmeticka sredina (a+b+c)/3, odnosno sredina=a/3+b/3+c/3. Zato je + kod sredine, stalno dodajes trecinu sledeceg broja u nizu (moglo se i napisati sredina=brojevi[0]/3.0+brojevi[1]/3.0+brojevi[2]/3.0, ili sredina=(brojevi[0]+brojevi[1]+brojevi[2])/3.0).
[ Danijel Bulic @ 16.01.2010. 11:06 ] @
Zahvaljujem na pomoci, evo ako nekoga bas zanima (u sto ne vjerujem) zavrsen kod.

Code:

#include <stdio.h>
#include <stdlib.h>

int max (int brojevi[])
{
    int i,max = brojevi[0];
    for (i=0; i<brojevi[i];i++)
    {
        if (brojevi[i+1] > brojevi[i])
        max = brojevi[i+1];
        else 
        max = brojevi[i];
        return max;
} }

float arit (int brojevi[])
{
    float sredina = 0;
    int i;
    for (i=0;i<3;i++)
    sredina += brojevi[i]/3.0;
    return sredina; 
}
int main(int argc, char *argv[])
{
  int podatak[3],i;
  for (i=0; i < 3; i++)
  scanf ("%d", &podatak[i]);
  printf ("Aritmeticka sredina je %f\n", arit(podatak));
  printf ("Najveci broj je %d\n", max(podatak));
  system("PAUSE");    
  return 0;
}



[Ovu poruku je menjao malak dana 16.01.2010. u 13:15 GMT+1]
[ X Files @ 16.01.2010. 12:44 ] @
U funkciji max koju koristis:
* nigde nemas granicu od 3 elementa
* prvi element si (do EDITA) uvek inicijalizovao sa max
* vracao se iz funkcije jos u prvom koraku

Evo ti tri varijante MAX funkcije:
// NETESTIRANO !!!
Code:

/* varijanta 1: broj elemenata je u samoj funkciji*/
int max1 (int brojevi[])
{
    int i,max;
    max = brojevi[0];
    for (i=1; i<3; i++)
    {
        if ( brojevi[i] >= max )
            max = brojevi[i];
    }
    return max;
}

/* varijanta 2: broj elemenata prosledjujemo kao parametar*/
int max2 (int brojevi[], int n)
{
    int i,max;
    max = brojevi[0];
    for (i=1; i<n; i++)
    {
        if ( brojevi[i] >= max )
            max = brojevi[i];
    }
    return max;
}

/* varijanta 3: ne koristimo uopste petlju, vec uzimamo u obzir sve slucajeve*/
int max3 (int brojevi[])
{
    if ( brojevi[0] >= brojevi[1] && brojevi[0]>= brojevi[2] )
        return brojevi[0];
    else if ( brojevi[1] >= brojevi[2] )
        return brojevi[1];
    else
        return brojevi[2];
}



Kod odredjivanja aritmeticke sredine:
Citat:
Picsel:Inace, ako imas tri broja a, b i c, onda je aritmeticka sredina (a+b+c)/3, odnosno sredina=a/3+b/3+c/3

...strateski bolje je da prvo sve saberes pa podelis sa 3. Manje je racunanja a moze napraviti i razliku u tacnosti reultata u nekim slucajevima (usled zaokruzivanja).

[ Danijel Bulic @ 16.01.2010. 13:16 ] @
Hvala na ispravci, vidim da sam ja to dobro zakomplicirao. Tek sam kasnije ukapirao da sam prvi element stavio kao max.