Započni novu temu Ova tema je zaključana, ne možete da menjate postove ili da odgovarate  [ 27 Posta ]  Idi na stranicu 1, 2  Sledeća
Autoru Poruka
PostPoslato: 13.03.2005. 12:29:11 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Posto su me mnoge kolege pitale da im bacim na mail ili isfotokopiram resenja, resih da ih postavim ovde i "otkacim" makar te za mail :cupavi:

UPOZORENJE: APSOLUTNO ne garantujem da je ovaj kod 100% ispravan, i da nece izazvati znacajna ostecenja na vasem hardveru. Neki delovi su posebno i pisani za to! Testiram ih po 15 sec. zato sto srvarno nemam vremena na gubljenje, pa molim svakog ko nadje neku gresku (i najmanju) da se javi pa da sredimo...

Zamolio bih moderatore da samo promene ovu poruku tako sto ce kod staviti na onu belu pozadinu kao uokvireno, a da ih ne bi nadalje mucio da mi bace pm kako se to radi...

Zadaci su sa vezbi i predavanja za grupu B3, ali samo za sada posto cu mozda i ja da menjam grupe...

Ako neko ima pitanje za neki zadatak iz druge grupe, slobodno neka pita dok je jeftino...


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 12:32:43 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Zadatak koji smo imali za + na vezbama!. Vec sam ga postovao negde, ali posto je neko (cara) rekao da nije tacan, resih da ga dopunim i postavim ponovo...

String "Danas ucimo Javu" potrebno je...
a) izdeliti na s2, s3, s4 svaki po jednu reci bez spejsa
b) uporediti duzinu stringova s2 i s4 i duzi prebaciti u velika a kraci u mala slova
c) za s2 frekvenciju pojavljivanja karaktera

Kod:
public class Vezba1 {
    public static void main (String[] args) {
        String s1 = "DaNaS uCiMo JaVu";
        String s2 = s1.substring(0,5);
        String s3 = s1.substring(6,11);
        String s4 = s1.substring(12,16);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
        if (s2.length() > s4.length()) {
            s2 = s2.toUpperCase();
            s4 = s4.toLowerCase();
        } else {
            s4 = s4.toUpperCase();
            s2 = s2.toLowerCase();
        }
        System.out.println(s2);
        System.out.println(s4);
        char d = 0;
        int k = 0;
        for (int i = 0; i < 256; i++) {
            k = 0;
            for ( int j = 0; j < s2.length(); j++){
                if (d == s2.charAt(j)){
                    k++;
                }
            }
            if (k != 0) {
            System.out.println("Karakter " + d + " se pojavljuje " + k + " puta!");
        }
            d++;
        }
}
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 12:34:41 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Zadaci koje je Sinisa zadao za domaci u petak.

Z1: Napisati program koji sadrzi dva niza, napuniti ih (razlicitim vrednostima), uporediti ih i prikazati njihovu razliku.Treba uneti nizove (a b c) i ( c d e) a za rezultat dobiti (a b).
Kod:
import java.io.*;
import java.lang.reflect.*;

public class RazlikaNizova {
    // varijable klase RazlikaNizova
    char[] niz1;
    char[] niz2;
    char[] niz3;
   
    // nova varijabla koja oznacava mesto za pocetak zamene praznih mesta blankovima
    int d = 0;
   
    public static void main (String [] args) throws IOException {
       
        RazlikaNizova rdn = new RazlikaNizova();
        rdn.napraviDvaNiza();
        rdn.razlikaDvaNiza();
        rdn.odstampajRazliku();
    }

    void napraviDvaNiza() throws IOException{
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi elemente prvog niza");
        s = br.readLine();
        niz1 = s.toCharArray ();
        System.out.println ("Unesi elemente drugog niza");
        s = br.readLine();
        niz2 = s.toCharArray ();
    }
   
    void razlikaDvaNiza() throws IOException{
        boolean signal;
        int k = 0;
        niz3 = new char[100];
        for (int i = 0; i<niz1.length; i++){
            signal = false;
            for (int j =0; j<niz2.length; j++){
                if ( niz1[i]== niz2[j]){
                    signal = true;
                    break;
                }
            }
                if (signal ==false){
                    niz3[k] = niz1 [i];
                    k++;
                    // varijabla d treba po vrednosti da prati lokalnu varijablu k
                    d++;
                }   
        }
    }
   
    void odstampajRazliku() {
        for (int s = d; s < niz3.length; s++) {
        Array.setChar(niz3, s, ' ');
        }
        for (int i = 0; i < niz3.length; i++) {
            if (niz3[i] != ' ') {
              System.out.print(niz3[i]);
              System.out.print(' ');
          }
      }
  }
   
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 12:36:27 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Z2: Napisati program koji prihvata niz i prikazuje sve one elemente niza koji se pojavljuju dva puta u njemu.
Kod:
import java.io.*;

public class DvaElementaUNizu {
   
    //niz je unet sa tastature a niz1 je pomocni
    char niz[];
    char niz1[];

    void napraviNiz() throws IOException{
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi elemente niza");
        s = br.readLine();
        niz = s.toCharArray();
    }
   
    void dupliElementi() throws NullPointerException {
       
        //pocetak pomocnog niza i inicijalizacija
        int g = 0;
        niz1 = new char[niz.length];
       
        for (int i = 0; i < niz.length; i++) {
           
            // broj pojavljivanja i-tog elementa u nizu
            int k = 0;
           
            for (int j = 0; j < niz.length; j++) {
                if (niz[i] == niz[j]) {
                    k++;
                }
               
                //ako i-ti element vec postoji u pomocnom nizu k ide u izlaznu vrednost
                if (niz[i] == niz1[j]) {
                    k = -1;
                    break;
                }
            }
           
            //ako k nije na izlaznoj vrednosti -1 i-ti clan se upisuje u pomocni niz
            if (k != -1) {
                niz1[g] = niz[i];
                g++;
            }
           
            //ako je broj pojavljivanja 2 ispise se poruka
            if (k == 2) {
                System.out.println("Clan niza " + niz[i] + " se pojavljuje dva puta!");
            }
        }
    }
   
    public static void main (String [] args) throws IOException {
       
        DvaElementaUNizu deun = new DvaElementaUNizu();
        deun.napraviNiz();
        deun.dupliElementi();
        //System.out.println(deun.niz1);    izolovana test linija
    }
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 12:43:02 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
2. Naci koliko se neki znak pojavljuje u nekom nizu rekuzivnom.

Kod:
import java.io.*;

public class Rekurzija {
   
    char[] niz;
    int k = 0;
    int b = 0;
    char r;
   
    // metoda koja broji ponavljanje zadatog karaktera u nizu i to stampa na ekran
    void izbrojPojavljivanje(char c) {
        if (niz[k] == c) {
            b++;
        }
        k++;
        if (k >= niz.length) {
            System.out.println("Clan " + c + " se pojavljuje " + b + " puta!");
            b=0;
            k=0;
        } else {
           
            // ovo je sustina rekurzije, metoda samu sebe poziva
            izbrojPojavljivanje(c);
        }
    }
   
    // bezveze metoda koja prima string sa tastature i pretvara ga u niz karaktera
    void napraviNiz() throws IOException{
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi elemente niza");
        s = br.readLine();
        niz = s.toCharArray();
    }
   
    // bezveze metoda koja prima trazeni karakter
    void unesiKarakter() throws IOException {
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi karakter za brojanje");
        r = br.readLine().toCharArray()[0];
    }
   
    public static void main (String [] args) throws IOException {
   
    // main metoda kreira objekat klase Rekurzija i broji ponavljivanje dva karaktera po zelji
    Rekurzija rek = new Rekurzija();
    rek.napraviNiz();
    rek.unesiKarakter();
    rek.izbrojPojavljivanje(rek.r);
    rek.unesiKarakter();
    rek.izbrojPojavljivanje(rek.r);
    }
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 13:04:16 
Korisnikov avatar

Pridružio se: 10.03.2005. 04:03:40
Postovi: 1129
Lokacija: На првој линији ;)
Godina: Dipl.
Smer: IS
Ta rekurzija ti je ljepse rijesenje. Bilo bi mnogo korisnije kad bi naravio izmjene koje ti je Zlatko preporucio.


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 13:08:36 
Moderator
Korisnikov avatar

Pridružio se: 13.10.2003. 14:04:31
Postovi: 4555
Lokacija: At the poker table
Godina: II
Smer: IS
koliko ja znam iz nekih knjiga ljudi generalno savetuju izbegavanje rekurzivnih f-ja jer one dosta usporavaju program.... tako da ih generalno ne koristim nesto puno.. mada nije lose ponekad..samo trebaju ljudi da znaju da nije bas rekurzija savrsena..

_________________
I know that the spades are the swords of a soldier
I know that the clubs are weapons of war
I know that diamonds mean money for this art
But thats not the shape of my heart


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 13:12:04 
Korisnikov avatar

Pridružio se: 10.03.2005. 04:03:40
Postovi: 1129
Lokacija: На првој линији ;)
Godina: Dipl.
Smer: IS
\/IT/ je napisao:
koliko ja znam iz nekih knjiga ljudi generalno savetuju izbegavanje rekurzivnih f-ja jer one dosta usporavaju program.... tako da ih generalno ne koristim nesto puno.. mada nije lose ponekad..samo trebaju ljudi da znaju da nije bas rekurzija savrsena..


Tacno, htio sam da dodam, ali nisam htio da mudrujem previse. Ali postoje neki problemi koji se najbolje rjesavaju tako. Npr. racunanje faktorijela.


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 13:31:02 
Korisnikov avatar

Pridružio se: 10.03.2005. 04:03:40
Postovi: 1129
Lokacija: На првој линији ;)
Godina: Dipl.
Smer: IS
Kod:
   
//Grizzly-jev kod
void dupliElementi() throws NullPointerException {
       
        //pocetak pomocnog niza i inicijalizacija
        int g = 0;
        niz1 = new char[niz.length];
       
        for (int i = 0; i < niz.length; i++) {
           
            // broj pojavljivanja i-tog elementa u nizu
            int k = 0;
           
            for (int j = 0; j < niz.length; j++) {
                if (niz[i] == niz[j]) {
                    k++;
                }
               
                //ako i-ti element vec postoji u pomocnom nizu k ide u izlaznu vrednost
                if (niz[i] == niz1[j]) {
                    k = -1;
                    break;
                }
            }
           
            //ako k nije na izlaznoj vrednosti -1 i-ti clan se upisuje u pomocni niz
            if (k != -1) {
                niz1[g] = niz[i];
                g++;
            }
           
            //ako je broj pojavljivanja 2 ispise se poruka
            if (k == 2) {
                System.out.println("Clan niza " + niz[i] + " se pojavljuje dva puta!");
            }
        }
    }


Ovo je problem, odredjivanje frekvencije clanova niza. Isti problem je i onaj sa strigom koji smo vise apsolvirali.
Znaci imate jedan algoritam koji mozete samo da modifikujete za specijalne slucajeve. Ja sam vam dao primjer bez upotrebe pomocnog niza i moze da se primjeni na slicne zadatke.


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 13.03.2005. 17:52:05 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
3. Napisati program koji sortira niz u opadajucem ili rastucem redosledu.

Kod:
import java.io.*;
import java.util.Arrays;

public class Sortiranje {

   char[] niz;
   
   void sortirajRastuce() {
       Arrays.sort(niz);
       System.out.println(niz);
   }
   void sortirajOpadajuce() {
        char[] niz1 = new char[niz.length];
        Arrays.sort(niz);
        for(int i = 0; i < niz.length; i++){
            niz1[i] = niz[niz.length - (i+1)];
        }
        niz = niz1;
        System.out.println(niz);
   }
   void napraviNiz() throws IOException{
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi elemente niza");
        s = br.readLine();
        niz = s.toCharArray();
   }
   
   public static void main (String [] args) throws IOException {
       
        Sortiranje sort = new Sortiranje();
        sort.napraviNiz();
        sort.sortirajRastuce();
        sort.sortirajOpadajuce();

   }
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 14.03.2005. 08:22:54 
Moderator
Korisnikov avatar

Pridružio se: 13.11.2001. 08:45:08
Postovi: 4717
Lokacija: Novi Bgd.
Godina: Dipl.
Smer: IS
Вероватно си требао сам осмислити уређивање чланова низа а не користити рад запослених у предузећу Сан. Али долично си се сетио. Имаш широк поглед на задатак и налазиш најбоља решења што ће ти и бити посао (а иначе не бисмо направили бољу функцију за уређивање низа од тих занатлија). Ма само се не умарај.

_________________
Oni hipotetički kostrukti o kojima se može govoriti kao o konzistentnim i relativno trajnim dinamičkim sistemima koji objašnjavaju veći deo procesa motivacije, obuhvatajući i ciljeve i motive kroz njihove međusobne relacije, čime se mogu uslovno..


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 14.03.2005. 13:43:31 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Ma nisam mogao da nadjem taj cuveni bubble sort medju gigabajtima pornica na hardu (zezam se naravno), a utrosio bih bespotrebno deo zivota da ga napisem od pocetka...
Okacicu i takvo resenje kad naletim jos negde na sortiranje pa ga i iskodiram...

Bas me briga za to, nego juce utrosih jedno sat vremena i vise na zadatak koji si zadao u vezi rekurzije i nista! Mnogo mi je teze zato sto f-ja nije
Kod:
void
, pa mi stalno javlja
Kod:
missing a return statment
kroz neke
Kod:
if-else
naredbe, gde ja nikako da smislim sta bi bio logican return (najlogicnije je da ga nema, qal' kompajler ne dozvoljava).

:udri: nemoj :udri: nista :udri: da :udri: mi :udri: pricas :udri: da :udri: probam :udri: sam :udri: jos :udri: malo :udri:


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 14.03.2005. 14:06:07 
Moderator
Korisnikov avatar

Pridružio se: 25.11.2001. 01:30:19
Postovi: 314
Lokacija: Beograd
Godina: Dipl.
Smer: IS
\/IT/ je napisao:
koliko ja znam iz nekih knjiga ljudi generalno savetuju izbegavanje rekurzivnih f-ja jer one dosta usporavaju program.... tako da ih generalno ne koristim nesto puno.. mada nije lose ponekad..samo trebaju ljudi da znaju da nije bas rekurzija savrsena..


Ljudi izbegavaju rekurzije jer su u principu komplikovane za implementaciju :) a ne zbog brzine izvrsavanja. Mnogo je tesko , narocito ljudima koji su navikli da razmisljaju "iterativno", da shvate rad rekurzije.
Inace ako je neki problem po svojoj prirodi rekurzivan, najelegantniji nacin za resenje tog problema je, logicno, rekurzija.

poz.

_________________
--------^^^^ T E A ^^^^-------
------------<<< && >>>--------
----------^^^tomdam^^^-------


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 14.03.2005. 16:28:11 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Citiraj:
Zlatko:


@ Grizzly

Domaći si dobro rešio, ali da li bi mogao napisati metodu koja direktno vraća broj pojavljivanja nekog znaka, bez uzimanja promenljivih koje su izvan metode? To jeste glavolomka i za mene i ne traži se da znaš. Ali rekoh to će te ionako čekati u 3. godini iz Struktura podataka u C-u. Dakle potpis metode bi bio ovakav: int izbrojPojavljivanja(String s, char c, int i), a mesto stringa može i niz. Ono i je indeks do kog smo stigli u stringu.



Ovo je isto zadatak za domaci koji pominje rekurziju, samo na jedan mnooooogo tezi nacin, al” rekoh ajde da udovoljim Zlatku...

Sinoc sat vremena nisam mogao nista da uradim, a malopre u prevozu dok se vracah kuci nagazi me neka baba i sinulo mi je!!! (ovo se uopste ne zezam, wierd shit :durisha: )

NAPOMENA: Imam ja mnogo pametnija posla, pa nisam stigao da istestiram bas do kraja, javite za svaki bug

2. Naci koliko se neki znak pojavljuje u nekom stringu rekuzivnom funkcijom.

Kod:
/**Domaci si dobro rešio, ali da li bi mogao napisati
 * metodu koja direktno vraca broj pojavljivanja nekog znaka,
 * bez uzimanja promenljivih koje su izvan metode?
 * To jeste glavolomka i za mene i ne traži se da znaš.
 * Ali rekoh to ce te ionako cekati u 3. godini iz Struktura podataka u C-u.
 * Dakle potpis metode bi bio ovakav:
 * int izbrojPojavljivanja(String s, char c, int i), a mesto stringa može i niz.
 * Ono i je indeks do kog smo stigli u stringu.
 */

import java.io.*;

public class Rekurzija1 {
   
    // metoda koja prima string i karakter i int vrednost 0 (OBAVEZNO)
    //vraca int broj pojavljivanja
   
    int izbrojPojavljivanja(String s, char c, int i) throws IOException{
        StringBuffer sb = new StringBuffer(s);
       if ( i <= s.length()-1) {
           if ( c == sb.charAt(i)) {
               return izbrojPojavljivanja(s, c,  ++i);
           }else{
               sb = sb.deleteCharAt(i);
               s = sb.toString();
               return izbrojPojavljivanja(s, c, i);
           }
       }else {
       return s.length();
       }
    } 
 
    // bezveze metoda koja prima string sa tastature
    String UnesiString() throws IOException{
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi string");
        s = br.readLine();
        return s;
    }
   
    // bezveze metoda koja prima trazeni karakter
    char unesiKarakter() throws IOException {
        char r;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi karakter za brojanje");
        r = br.readLine().toCharArray()[0];
        return r;
    }
           
   
    public static void main (String [] args){
       
        try {
        Rekurzija1 rek1 = new Rekurzija1();
        String s1 = rek1.UnesiString();
        char c = rek1.unesiKarakter();
       
        System.out.println("Karakter '" + c + "' se u stringu \"" + s1 + "\" pojavljuje "
                            + rek1.izbrojPojavljivanja(s1, c, 0) + " puta!");
       
   
        }catch (IOException e) {
            System.err.println(e.getMessage());
        }
           
       
    }
}


IZLAZ: Za uneti string “rekurzija” i uneti karakter ‘r’ dobije se sledeca linija:

Citiraj:
Karakter ‘r’ se u stringu “rekurzija” pojavljuje 2 puta!


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 14.03.2005. 20:29:43 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Zadatak za domaci, samo na drugi nacin, bez upotrebe funkcionalnosti klase Arrays, nego se niz sortira algoritmom “bubble sort”

3. Napisati program koji sortira niz u opadajucem ili rastucem redosledu

Kod:
import java.io.*;

public class Sortiranje1 {

    char[] niz;
   
    // dvadeset puta vidjena metoda za unos niza karaktera preko standardnog ulaza
    void napraviNiz() throws IOException{
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi elemente niza");
        s = br.readLine();
        niz = s.toCharArray();
   }
   
   // metoda koja algoritmom "bubble sort" sortira niz u rastuci redosled
   void sortirajRastuce() {
        for (int i = niz.length; --i >= 0; ) {
            for (int j = 0; j < i; j++) {
                if (niz[j] > niz[j+1]) {
                    char temp = niz[j];
                    niz[j] = niz[j+1];
                    niz[j+1] = temp;
                }
           }
       }
       System.out.println(niz);
   }
   
   // metoda koja prvo "bubble sort"-om sortira rastuce niz
   // pa ga onda samo invertuje kao da rastuci citate s kraja
   // cime dobijate opadajuci
   void sortirajOpadajuce() {
       char[] niz1 = new char[niz.length];
       for (int i = niz.length; --i >= 0; ) {
            for (int j = 0; j < i; j++) {
                if (niz[j] > niz[j+1]) {
                    char temp = niz[j];
                    niz[j] = niz[j+1];
                    niz[j+1] = temp;
                }
           }
       }
       for(int i = 0; i < niz.length; i++){
            niz1[i] = niz[niz.length - (i+1)];
        }
        niz = niz1;
        System.out.println(niz);
   }
   
    public static void main(String[] args) {
       
        try{
            Sortiranje1 sort = new Sortiranje1();
            sort.napraviNiz();
            sort.sortirajRastuce();
            sort.sortirajOpadajuce();
        }catch (IOException e) {
            System.err.println( e.getMessage());
        }
    }
       
}



IZLAZ: Za uneti string “principi programiranja” dobije se izlaz kao u sledecoj liniji

Citiraj:
aaacgiiiijmnnoppprrrr
rrrrppponnmjiiiigcaaa


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 14.03.2005. 23:07:52 
Korisnikov avatar

Pridružio se: 31.01.2004. 04:21:37
Postovi: 2985
Lokacija: Slavija
Godina: Dipl.
Smer: IS
Super, samo mislim da je mene Vita ranije ispravljao, ovo cini mi se nije bubble sort vec neka druga vrsta. Bubble sort koristi da kazem "manje resursa" jer vrsi manje proveravanja a radi isto. Elem,

Kod:
for (int i=0; i <= niz.length; i++)
{
   for (int j=0; j <= niz.length; j++) {
      if (niz[i] > niz[j]) {
         int temp = niz[j];
         niz[j] = niz[i];
         niz[i] = temp;
      }
   }
}


E sad nisam bas skroz siguran koliko je ovo tacno jer sam kucao iz glave, ali ja sam na tako nesto dobio plusanku danas na vezbama.

_________________
Ti se nikad nisi pitala gde se zatvara krug.
Ti se nikad nisi pitala ko je najbolji drug.
Ti se nikad nisi pitala kako nastaje greh.
Ti se nikad nisi pitala zasto prestaje svet.


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 15.03.2005. 00:19:36 
Moderator
Korisnikov avatar

Pridružio se: 13.11.2001. 08:45:08
Postovi: 4717
Lokacija: Novi Bgd.
Godina: Dipl.
Smer: IS
Buble sort je ubedljivo najgori postupak uređivanja niza. Selection sort je od njega bolji 60%, a insertion sort 2 puta.

Grizzly je napisao:
al” rekoh ajde da udovoljim Zlatku...


Sad ispadoh zakeralo! Dobro, dobro zapamtiću ti to :)

Tvoje rekurzivno rešenje je vrlo kreativno. Ali ti se desi da zakomplikuješ stvari. Evo kako izgleda najporstiji algoritam:
Kod:
class Frekv {
    public static void main(String[] args) {
        String rec = "principi programiranja";
        int broj = -1;
        char slovo = 'p';

        broj = pretrazi(rec, slovo, 0);
        System.out.println("Slovo '" + slovo + "' se u reci "" + rec
                + "" nalazi " + broj + " puta");
    }

    static int pretrazi(String s, char c, int i) {
        if (i < s.length()) {
            int rez;
           
            if (s.charAt(i) == c) {
                rez = 1;
            } else {
                rez = 0;
            }
               
            //kontrolni ispis
            System.out.println("s[" + i + "] = " + s.charAt(i) + " rez = " + rez);
            return pretrazi(s, c, i + 1) + rez;
        }
        return 0;
    }
}


Dakle netoda treba da se pozove za svako slovo stringa i to nam omogućava prvi if. Kad prom. i dobije vrednost s.length() znači sa smo prošli kroz sva slova i vraćamo 0 jer ona ne utiče na broj pojavljivanja traženog slova.

Pri pregledu svakog slova stringa ispituje se da li je jednako traženom. Ako jeste upisujemo u rez 1, inače je rez 0. Taj rezultat sabiramo sa onim što nam vraća ponovni poziv metode ali za sledeće slovo stringa.

I tako se metoda zapetljava sve dok ne prođe kroz sva slova i tada se izvrši prvi return koji vraća 0. Onda se izvršava prethodni nivo (gde je i = n-1; n je dužina stringa) gde se ta vraćena 0 sabira sa rez od tog nivoa, pa prethodni (i = n-2) nivo gde se rez od n-2 sabira sa prethodnim rezultatom (rez od n-1 + 0) i tako se otpetljava do prvog poziva kad je i = 0 što je i konačna vrednost.

A iskusan zapis ovog algoritma bi bio:
Kod:
static int pretrazi(String s, char c, int i) {
    if (i < s.length()) {                                         
        return pretrazi(s, c, i + 1) + ((s.charAt(i) == c) ? 1 : 0);
    }                                                             
    return 0;                                                     
}

Hakeri bi i ovaj preostali if pretvorili u ternarni operator :) ;)

_________________
Oni hipotetički kostrukti o kojima se može govoriti kao o konzistentnim i relativno trajnim dinamičkim sistemima koji objašnjavaju veći deo procesa motivacije, obuhvatajući i ciljeve i motive kroz njihove međusobne relacije, čime se mogu uslovno..


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 15.03.2005. 08:33:55 
Korisnikov avatar

Pridružio se: 21.12.2003. 11:53:08
Postovi: 462
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Kad smo vec kod rekurzije, evo i mog resenja:
Kod:
public class JedanNiz {
   int k=0;
   
   int kolikoPutaSeJavlja(String st,char ch ){
      if(st.length() ==0)return k;
      
         if(st.charAt(0)==ch){
              k=k+1+kolikoPutaSeJavlja(st.substring(1),ch);
         }else k=k+kolikoPutaSeJavlja(st.substring(1),ch);
      return k;
   }
   
   public static void main(String[] args) {
      
      char niz[] = {'r','e','k','u','r','z','i','j','a','a','a'};
      JedanNiz jn = new JedanNiz();
      String str=new String(niz);
      System.out.println("javlja se "+ jn.kolikoPutaSeJavlja(str,'a')+" puta!");
   }
}


Dosta lici na zlatkovo, ali se ipak razlikuje jer pri pozivu metode ne mora da se vodi racuna o onom brojacu za rekurziju.

Funkcionise tako sto se proveri prvo slovo, pa se metoda pozove nad ostatkom niza.

Ostala resenja sam okacio na http://javaprimeri.blogspot.com


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 15.03.2005. 14:06:53 
Korisnikov avatar

Pridružio se: 10.09.2003. 13:38:42
Postovi: 76
Lokacija: Beograd
Godina: Apsolvent
Smer: IS
Mislim da je kolega Average Bear mislio na ovaj nacin...

Kod:
public static void Sort(ref int[] niz)
{
for ( int i = 0 ; i<niz.Length-1 ; i++)
    for (int j = i+1; j<niz.Length; j++)
        if (niz[i] > niz[j] )
          {
                 int pom = niz[i];
                   niz[i] = niz[j];
                   niz[j] = pom;
          }
 
}


Ovo je kucano u C# tako da lici i na Javu i na C++...mislim da se algoritam zove SwapSort....poz


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 15.03.2005. 17:35:09 
Moderator
Korisnikov avatar

Pridružio se: 13.11.2001. 08:45:08
Postovi: 4717
Lokacija: Novi Bgd.
Godina: Dipl.
Smer: IS
Pa izgleda da je Medo hteo slelection sort, ali da ga je nazvao pogrešnim imenom, i malo je pogrešio kod indeksa, kako je to Saša primetio. U javi je kod za to isti kao u C# osim što se metoda length() piše malim slovom.

I koristite [code] [/code] oznake za kod programa

_________________
Oni hipotetički kostrukti o kojima se može govoriti kao o konzistentnim i relativno trajnim dinamičkim sistemima koji objašnjavaju veći deo procesa motivacije, obuhvatajući i ciljeve i motive kroz njihove međusobne relacije, čime se mogu uslovno..


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 16.03.2005. 08:36:40 
Korisnikov avatar

Pridružio se: 31.01.2004. 04:21:37
Postovi: 2985
Lokacija: Slavija
Godina: Dipl.
Smer: IS
Jeste, onda je bubble sort najlosiji nacin sortiranja, a Grizzly je bio u pravu, ono jeste bubble sort. Profesor nam je na predavanju napisao kao "cuveni bubble sort" i onda naveo selection sort, koliko se ja secam... :zbun:

_________________
Ti se nikad nisi pitala gde se zatvara krug.
Ti se nikad nisi pitala ko je najbolji drug.
Ti se nikad nisi pitala kako nastaje greh.
Ti se nikad nisi pitala zasto prestaje svet.


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 16.03.2005. 11:55:04 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Vlajicev primer ali u mom kodu, trudio sam se da bude sto slicnije ne znam koliko sam u tome uspeo, nisam imao sanse sve da zapamtim

Napisati program koji izracunava proizvod matrice i vektora i ispisuje ga na standardni izlaz.


Kod:
import java.io.*;

public class MnozonjeMatriceIVektora {
    int[][] matrica;
    int[] vektor;
    int[] proizvod;
    int brojRedova;
    int brojKolona;
   
    void kreirajMatricu() throws IOException {
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi broj redova matrice");
        s = br.readLine();
        brojRedova = Integer.parseInt(s);
        System.out.println ("Unesi broj kolona matrice");
        s = br.readLine();
        brojKolona = Integer.parseInt(s);
        matrica = new int[brojRedova][brojKolona];
        System.out.println ("Unesite elemente matrice po redovima");
        for (int i = 0; i < brojRedova; i++) {
            for (int j = 0; j < brojKolona; j++) {
                s = br.readLine();
                matrica[i][j] = Integer.parseInt(s);
            }
        }
    }
   
    void kreirajVektor() throws IOException {
        vektor = new int[brojKolona];
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi elemente vektora");
        for (int i = 0; i < brojKolona; i++) {
            s = br.readLine();
            vektor[i] = Integer.parseInt(s);
        }
        System.out.println();
    }

    void odstampajMatricu() {
        for (int i = 0; i < brojRedova; i++) {
            System.out.println();
            for (int j = 0; j < brojKolona; j++) {
                System.out.print( matrica[i][j]);
                System.out.print(" ");
            }
        }
       System.out.println();
    }
   
    void pomnoziMatricuIVektor() {
        System.out.println("Proizvod zadatih matrice i vektora je sledeci vektor...");
        proizvod = new int[brojRedova];
        for (int i = 0; i < brojRedova; i++) {
            proizvod[i] = 0;
            for (int j = 0; j < brojKolona; j++) {
                proizvod[i] = proizvod[i] + matrica[i][j]*vektor[j];
            }
            System.out.println(proizvod[i]);
        }
    }
       
       public static void main(String[] args) throws IOException {
           
           MnozonjeMatriceIVektora mmiv = new MnozonjeMatriceIVektora();
           mmiv.kreirajMatricu();
           mmiv.odstampajMatricu();
           mmiv.kreirajVektor();
           mmiv.pomnoziMatricuIVektor();
       }
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 16.03.2005. 11:56:41 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Ovaj smo zadatak imali za 5 poena, sta da kazem resio sam ga za 35 sekundi (u j*** sto sam pametan :hvala: ), pa posto sam bio prvi objasnjavah celom amfiteatru (nebitno)... Naravno, dao sam na pregled samo size, a ovo je pun kod.

Napisati program koji proverava da li su dve matrice iste.

Kod:
import java.io.*;

public class JednakostMatrica {
   
    int[][] matrica;
    int brojRedova;
    int brojKolona;
   
    void kreirajMatricu() throws IOException {
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi broj redova matrice");
        s = br.readLine();
        brojRedova = Integer.parseInt(s);
        System.out.println ("Unesi broj kolona matrice");
        s = br.readLine();
        brojKolona = Integer.parseInt(s);
        matrica = new int[brojRedova][brojKolona];
        System.out.println ("Unesite elemente matrice po redovima");
        for (int i = 0; i < brojRedova; i++) {
            for (int j = 0; j < brojKolona; j++) {
                s = br.readLine();
                matrica[i][j] = Integer.parseInt(s);
            }
        }
    }
   
    static boolean jednakostMatrica (JednakostMatrica jm1, JednakostMatrica jm2) {
        boolean jednakost = true;
            if ((jm1.brojRedova == jm2.brojRedova) && (jm1.brojKolona == jm2.brojKolona)) {
                for (int i = 0; i < jm1.brojRedova; i++) {
                    for (int j = 0; j < jm1.brojKolona; j++) {
                        if (jm1.matrica[i][j] != jm2.matrica[i][j]) {
                            jednakost = false;
                            break;
                        }
                    }
                    if (!jednakost) {
                        break;
                    }
                }
                return jednakost;
            }else {
                jednakost = false;
                return jednakost;
            }
        }
       
    void odstampajMatricu() {
        for (int i = 0; i < brojRedova; i++) {
            System.out.println();
            for (int j = 0; j < brojKolona; j++) {
                System.out.print( matrica[i][j]);
                System.out.print(" ");
            }
        }
       System.out.println();
    }   
   
    public static void main(String[] args) throws IOException {
       
        JednakostMatrica jm1 = new JednakostMatrica();
        JednakostMatrica jm2 = new JednakostMatrica();
        jm1.kreirajMatricu();
        jm1.odstampajMatricu();
        jm2.kreirajMatricu();
        jm2.odstampajMatricu();
        if (JednakostMatrica.jednakostMatrica (jm1, jm2)){
            System.out.println("Unete matrice jesu jednake!");
        }else {
            System.out.println("Unete matrice nisu jednake!");
        }
    }
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 16.03.2005. 11:59:22 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Uopste nisam ispratio kolegu koji je demonstrirao program za mnozenje matrica pa ne znam koliko lici, a i nisam stigao da istestiram ali cini mi se da radi OK.


Napisati program za mnozenje matrica

Kod:
import java.io.*;

public class MnozenjeMatrica {
   
    int[][] matrica;
    int brojRedova;
    int brojKolona;
   
    void kreirajMatricu() throws IOException {
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi broj redova matrice");
        s = br.readLine();
        brojRedova = Integer.parseInt(s);
        System.out.println ("Unesi broj kolona matrice");
        s = br.readLine();
        brojKolona = Integer.parseInt(s);
        matrica = new int[brojRedova][brojKolona];
        System.out.println ("Unesite elemente matrice po redovima");
        for (int i = 0; i < brojRedova; i++) {
            for (int j = 0; j < brojKolona; j++) {
                s = br.readLine();
                matrica[i][j] = Integer.parseInt(s);
            }
        }
    }
   
    void odstampajMatricu() {
        for (int i = 0; i < brojRedova; i++) {
            System.out.println();
            for (int j = 0; j < brojKolona; j++) {
                System.out.print( matrica[i][j]);
                System.out.print(" ");
            }
        }
       System.out.println();
    }   
   
    static MnozenjeMatrica mnozenjeMatrica(MnozenjeMatrica mm1, MnozenjeMatrica mm2) {
        MnozenjeMatrica mm3 = new MnozenjeMatrica();
        mm3.brojRedova = mm1.brojRedova;
        mm3.brojKolona = mm2.brojKolona;
        mm3.matrica = new int[mm1.brojRedova][mm1.brojKolona];
        for (int i = 0; i < mm1.brojRedova; i++) {
            for (int j = 0; j < mm2.brojKolona; j++) {
                for (int k = 0; k < mm2.brojKolona; k++) {
                    mm3.matrica[i][j] = mm3.matrica[i][j] + mm1.matrica[i][k]*mm2.matrica[k][j];
                }
            }
        }
        return mm3;
    }
   
        public static void main(String[] args) throws IOException {

        MnozenjeMatrica mm1 = new MnozenjeMatrica();
        MnozenjeMatrica mm2 = new MnozenjeMatrica();
        MnozenjeMatrica mm3 = new MnozenjeMatrica();
        mm1.kreirajMatricu();
        mm1.odstampajMatricu();
        mm2.kreirajMatricu();
        mm2.odstampajMatricu();
        MnozenjeMatrica.mnozenjeMatrica(mm1, mm2).odstampajMatricu();
       
    }
}


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
 Tema posta:
PostPoslato: 16.03.2005. 12:00:49 
Korisnikov avatar

Pridružio se: 23.10.2003. 22:38:54
Postovi: 893
Lokacija: Beograd
Godina: Dipl.
Smer: IS
Poslednji zadatak za predavanja naravno u mom kodu...

Napisati program koji sortira glavnu dijagonalu kvadratne matrice u rastucem redosledu.

Kod:
import java.io.*;

public class SortiranjeGlavneDijagonale {
   
   int[][] matrica;
    int brojRedova;
    int brojKolona;
   
    void kreirajMatricu() throws IOException {
        String s;
        BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
        System.out.println ("Unesi broj redova matrice");
        s = br.readLine();
        brojRedova = Integer.parseInt(s);
        System.out.println ("Unesi broj kolona matrice");
        s = br.readLine();
        brojKolona = Integer.parseInt(s);
        matrica = new int[brojRedova][brojKolona];
        System.out.println ("Unesite elemente matrice po redovima");
        for (int i = 0; i < brojRedova; i++) {
            for (int j = 0; j < brojKolona; j++) {
                s = br.readLine();
                matrica[i][j] = Integer.parseInt(s);
            }
        }
    }
   
    void odstampajMatricu() {
        for (int i = 0; i < brojRedova; i++) {
            System.out.println();
            for (int j = 0; j < brojKolona; j++) {
                System.out.print( matrica[i][j]);
                System.out.print(" ");
            }
        }
       System.out.println();
    }   
   
    void sortirajGlavnuDijagonalu() {
        if (brojRedova != brojKolona) {
            System.out.println("Matrica nije kvadratna, pa ne moze imati ni glavnu dijagonalu");
        }else {
        for (int i = brojRedova; --i >= 0;) {
            for (int j = 0; j < i; j++) {
                if (matrica[j][j] > matrica[j+1][j+1]){
                    int temp = matrica[j][j];
                    matrica[j][j] = matrica[j+1][j+1];
                    matrica[j+1][j+1] = temp;
                }
            }
        }
        }
   }
   
   public static void main(String[] args) throws IOException {

        SortiranjeGlavneDijagonale sgd = new SortiranjeGlavneDijagonale();
        sgd.kreirajMatricu();
        sgd.odstampajMatricu();
        sgd.sortirajGlavnuDijagonalu();
        sgd.odstampajMatricu();
       
    }
}         


Share on FacebookShare on TwitterShare on Google+
Vrh
 Profil  
Odgovori sa citatom  
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Ova tema je zaključana, ne možete da menjate postove ili da odgovarate  [ 27 Posta ]  Idi na stranicu 1, 2  Sledeća


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 2 gostiju


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Copyleft FONForum 2001-2014 | Powered by phpBB © phpBB Group