[ Cobb @ 13.11.2010. 17:30 ] @
Potpuni sam pocetnik u C i imam ovakav zadatak

Napisati na jeziku C program koji nalazi drugi najveci broj od 6 brojeva unetih sa tastature.

Ja sam to ovako resio,
Code:
int main()


    int a,b,c,d,e,f;
    
    printf("Uneti sest razlicitih broja broj\n");
    scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);

    
    
    if    (a<b && a>c && a>d && a>e && a>f || a<c && a>b && a>d && a>e && a>f || a<d && a>b && a>c && a>e && a>f|| a<e && a>b && a>c && a>d && a>f || a<f && a>b && a>c && a>d && a>e) {
        

    printf("Drugi najveci broj je %d\n",a);
         
    }
    else if( b<a && b>c && b>d && b>e && b>f || b<c && b>d && b>e && b>f && b>a || b<d && b>e && b>f && b>a && b>c || b<e && b>f && b>a && b>c && b>d || b<f && b>a && b>c && b>d && b>f) {
    printf("Drugi najveci broj %d\n",b);

    }
    else if (c<d && c>e && c>f && c>a && c>b ||c<e && c>f && c>a && c>b && c>d || c<f && c>a && c>b && c>d && c>e || c<a && c>b && c>d && c>e && c>f || c<b && c>d && c>e && c>f && c>a ){
    printf("Drugi najveci broj %d\n",c);
    }

    else if (e<f && e>a && e>b && e>c && e>d || e<a && e>b && e>c && e>d && e>f || e<b && e>c && e>d && e>f && e>a || e<c && e>d && e>f && e>a && e>b || e<d && e>f && e>a && e>b && e>c )
    {

    printf("Drugi najveci broj %d\n",e);
    }
    else if (d<e && d>f && d>a && d>b && d>c|| d<f && d>a && d>b && d>c && d>e|| d<a && d>b && d>c && d>e && d>f|| d<b && d>c && d>e && d>f && d>a|| d<c && d>e && d>f && d>a && d>b)
    {
    printf("Drugi najveci broj %d\n",d);
    }

    else {
    printf("Drugi najveci broj %d\n",f);
    }
    system("PAUSE");
    return 0;
}


e sad meni ovo izgleda ogromno za tako prost zadatak,moze li da se uradi drugacije.A i program ne daje tacan rezultat kad se unesu dva ista broja.
Imali neko ideju kako da resim ovaj problem

Hvala unapred
[ milos.z @ 13.11.2010. 17:52 ] @
malo citljiviji kod, prvo nadje najveci clan, dodeli mu vrednost 0 i onda ponovo trazi najveci clan

Code:
#include <stdio.h>

int main() {
    int niz[6], max, i, ind;

    for(i=0; i<6; i++) {
        printf("unesi %d. broj: ", i+1);
        scanf("%d", &niz[i]);
    }
    max = niz[0];
    for(i=1; i<6; i++) {
        if(niz[i] > max) {
            max = niz[i];
            ind = i;
        }
    }
    niz[ind] = 0; // eliminisemo najveci broj

    max = niz[0];
    for(i=1; i<6; i++) {
        if(niz[i] > max) {
            max = niz[i];
        }
    }

    printf("najveci je: %d", max);

    return 0;
}



naravno, ako uneses ovakve brojeve: 1 2 3 4 5 5, drugi najveci broj ce biti 5, ali to je zato sto se brojevi ponavljaju
da bi izbegao taj problem, moze da se kreira novi niz koji bi sadrzao samo unikatne vrednosti prvog niza.
niz1 : 1 2 3 4 5 5
niz2 : 1 2 3 4 5

i onda iz drugog niza trazis drugi najveci po principu nadjes prvi, dodelis mu 0, pa ponovo trazis najveci.
verujem da moze i jednostavnije, al ovo mi je prvo palo na pamet
[ Cobb @ 13.11.2010. 18:29 ] @
Hvala,ovo je mnogo citljivije. Mada nismo koristili komandu FOR jos,trebalo bi da se koristi IF ili ELSE.
U svakom slucaju hvala naucio sam nesto novo
[ milos.z @ 13.11.2010. 18:48 ] @
bez petlji i nizova, al isti princip

Code:
#include <stdio.h>

int main() {
    int a,b,c,d,e,f, broj, max;

    printf("unesi 6 brojeva: ");
    scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);

    broj=0;
    max = a;
    if(b > max) {
        max = b;
        broj = 1;
    }
    if(c > max) {
        max = c;
        broj = 2;
    }
    if(d > max) {
        max = d;
        broj = 3;
    }
    if(e > max) {
        max = e;
        broj = 4;
    }
    if(f > max) {
        max = f;
        broj = 5;
    }

    if(broj == 0) a = 0;
    if(broj == 1) b = 0;
    if(broj == 2) c = 0;
    if(broj == 3) d = 0;
    if(broj == 4) e = 0;
    if(broj == 5) f = 0;

    max = a;
    if(b > max) max = b;
    if(c > max) max = c;
    if(d > max) max = d;
    if(e > max) max = e;
    if(f > max) max = f;

    printf("drugi najveci je: %d", max);

    return 0;
}

[ pajaja @ 14.11.2010. 01:51 ] @
Pozdrav,

pre svega ti preporucujem da pogledas tutorijal za pocetnike u ovoj top temi ako vec nisi.


Sto se zadatka tice:

U ovakvoj vrsti zadataka (recimo da ima x brojeva a ne konkretno 6) je trazeno samo pronaci drugi najveci broj, iako koriscenje niza duzine x ili x promenljivih daje tacan rezultat to nije najefikasnije resenje, posebno ako je x veliki broj. U ovom slucaju ja sam koristio dve promenljive koje cuvaju trenutni maksimum (max) i trenutni drugi maksimum (snd). Moguce je da kod ima sintaksne greske posto nisam probao da ga kompajliram.

Code (c):

#include <stdio.h>

int main(){
//'max' - trenutni maksimum, 'snd' - trenutni drugi najveci, 'i' postavljen na 0
int max, snd, i=0, n;

//Prvi unos (postavljanje istih pocetnih vrednosti (prvi uneseni broj) za 'max' i 'snd')
printf("Unesi broj %d: ", ++i);
scanf("%d", &n);
max = snd = n;

//Ostalih 5 brojeva (posto je 'i' vec postavljeno i posle prvog unosa iznosi 1, prvi izraz u for petlji je preskocen)
for(;i<6; i++){
    printf("Unesi broj %d: ", i+1);
    scanf("%d", &n);
    /*
     *Ako je 'n' > 'max', 'max' postaje drugi najveci a 'n' -> 'max';
     */

    if(n>max){
        snd=max;
        max=n;
    /*
     *Iako je manji od maksimuma proverava se da li je veci od do sada drugog najveceg
     *i da li je razlicit od maksimuma
     */

    }else if(n>snd && n<max){
        snd=n;
    }
}
//provera da li su svi uneti brojevi bili isti
if(snd!=max){
    printf("Drugi najveci broj je: %d", snd);
}else{
    printf("Svi uneti brojevi su isti (%d).", max);
}
return 0;
}
 


Znam da ti je potrebno resenje bez petlji ali kada su vec pomenute hteo sam da pokazem efikasnije resenje sa njima, koje je i "otporno" na ponavljanje brojeva. Milos ti je dao moguce resenje bez petlji, a mozes samo i da ponovis kod koji se nalazi u okviru petlje 5x :)

Ako je neki deo koda nerazumljiv, slobodno pitaj.
[ Cobb @ 14.11.2010. 19:46 ] @
Pozdrav,

procitao sam navedenu temu i dosta mi je pomogla.Kao sto sam i rekao totalni sam pocetnik i
svaki komentar ce mi dobro doci da naucim nesto novo.

Hvala