Reklama
Pokazuje wyniki od 1 do 11 z 11

Temat: [Java] Zliczanie krotności wystąpienia wartości w tablicy.

  1. #1
    Avatar Dzzej
    Data rejestracji
    2006
    Posty
    8,969
    Siła reputacji
    23

    Domyślny [Java] Zliczanie krotności wystąpienia wartości w tablicy.

    Napisać algorytm, który dla uporządkowanej niemalejąco tablicy jednowymiarowej, wyznacza krotność wystąpienia zadanej wartości. Do tego celu należy między innymi użyć algorytmu wyszukiwania binarnego.


    Pseudo kod:

    Kod:
    Pseudo kod:Dane: Tab[n] tablica, n - rozmiar tablicy
    x- szukana
    Wynik: licznik - krotność wystąpień szukanej liczby
    
    
    Zmienne pomocnicze:
    
    p - index początkowy
    k - index końcowy
    s - index środkowy
    pom - zmienna pomocnicza
    
    p=0;
    k=n-1;
    s=(p+k)/2;
    licznik=0
    
    //Najpierw szukam binarnie
    while(p<=k && Tab[s] !=x) {
     if (Tab[s]>x){
        k=s-1;
        }
        else {
         p=s+1;
        }
    
    //po znalezieniu liczby zapisuję index komórki do pom
    pom=s+1;
    
    //przeszukuję i zliczam wystąpienia
    while (Tab[s]==x && s>=0) {
    licznik=licznik+1;
    s=s-1;
    }
    while (Tab[pom]=x && pom<=n-1) {
    licznik=licznik+1;
    pom=pom+1;
    }
    pokaż licznik;
    Jakiś kod:
    Kod:
    import java.lang.reflect.Array;import java.util.Random;
    
    public class Projekt {
    
        private int n;
        private int p=0;
        private int k;
        private int s;
    
        private int licznik;
        int[] Tab = new int[n];
        int x;
        int pom;
    
    public Projekt()
    {
        Random r = new Random();
    
         for(int i=0; i<Tab.length; i++)
             Tab[i]=r.nextInt(100)+1;
    
         // Wyświetlenie zawartości całej tablicy
         for(int i=0; i<Tab.length; i++)
             System.out.print(i+" element tablicy to: "+Tab[i]+"\n\r");
    
    System.out.println("To jest wielkość tablicy: "+Tab.length);
    int z;
    for(z=Tab[0];z<Tab[20];z++)
    {
        while(p<=k && Tab[s] !=x) {
    
            k=n-1;
            s=(p+k)/2;
    
        System.out.println("Wszedłem w pierwszy while");
         if (Tab[s]>x){
    
            System.out.println("to jest k: "+k);
            }
            else {
             p=s+1;
             System.out.println("To jest p: "+p);
            }
    
        pom=s+1;
        System.out.println("To jest pom: "+pom);
    
        while (Tab[s]==x) {
            System.out.println("Wszedłem w drugi while");
        licznik=licznik+1;
        s=s-1;
        }
        while (Tab[pom]==x&&pom<=n-1) {
            System.out.println("Wszedłem w trzeci while");
        licznik=licznik+1;
        pom++;
        }
        System.out.println("To jest licznik: "+licznik);
        }
    }
    
    }
        public static void main(String[] args) {
    new Projekt();
        }
    }
    Użytkownik podaje rozmiar tablicy, program losuje wartości do tej tablicy, użytkownik dalej podaje jakąś wartość chce zliczyć i program zlicza ile razy podana wartość wystąpiła w tablicy.

    Jakoś nie mam pomysłów. Pomożecie?

    Tak mi się zapętla:
    To jest licznik: 0Wszedłem w pierwszy while
    to jest k: 499
    To jest pom: 250
    To jest licznik: 0
    Wszedłem w pierwszy while
    to jest k: 499
    To jest pom: 250
    To jest licznik: 0
    Wszedłem w pierwszy while
    Ostatnio zmieniony przez Dzzej : 21-01-2014, 20:51

  2. #2
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    dzzeju, popraw to wszystko i wrzuc w znaczniki [code], za duzo kodu zeby grzebac w tak nieuporządkowanych liniach ;s

  3. Reklama
  4. #3
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    Na pierwszy rzut oka wrzucasz elementy do tablicy, po czym odpalasz binsearcha. Brakuje sortowania?
    Nie ustawiasz n, rozmiaru tablicy?
    Ostatnio zmieniony przez Absherr : 21-01-2014, 20:51

  5. #4
    Avatar Dzzej
    Data rejestracji
    2006
    Posty
    8,969
    Siła reputacji
    23

    Domyślny

    Cytuj Kusterek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    dzzeju, popraw to wszystko i wrzuc w znaczniki [code], za duzo kodu zeby grzebac w tak nieuporządkowanych liniach ;s
    Pierwszy raz wrzucam kod na forum xd. Lepiej?

    Cytuj Absherr napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Na pierwszy rzut oka wrzucasz elementy do tablicy, po czym odpalasz binsearcha. Brakuje sortowania?
    Nie ustawiasz n, rozmiaru tablicy?
    Rozmiar tablicy ustawia użytkownik. Kod jest napisany na podstawie pseudo kodu, ale tak dawno nie programowałem, że masakra ;<.

  6. #5
    Avatar Rollercoster
    Data rejestracji
    2011
    Wiek
    29
    Posty
    1,247
    Siła reputacji
    14

    Domyślny

    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Pierwszy raz wrzucam kod na forum xd. Lepiej?


    Rozmiar tablicy ustawia użytkownik. Kod jest napisany na podstawie pseudo kodu, ale tak dawno nie programowałem, że masakra ;<.
    wklej.org

  7. #6
    Avatar Dzzej
    Data rejestracji
    2006
    Posty
    8,969
    Siła reputacji
    23

    Domyślny

    Pseudo kod:
    http://wklej.org/id/1245236/

    Kod:
    http://wklej.org/id/1245237/

    Z
    akładam, że jest totalnie schrzanione dlatego będę wdzięczny za pomoc, wskazówki, trochę kodu czy gotowca, gdyby komuś się nudziło - cokolwiek.

  8. #7
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    Imho za duzo chcesz naraz. Ten program musisz zrealizowac tak, żebyś pobierał od uzytkownika rozmiar tablicy = n. Następnie losujesz n wartości, oraz sortujesz tablice (musi być posortowana dla wyszukiwania binarnego). Zrob tyle potem pomyslimy dalej

  9. #8
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    Dziabnij po losowaniu liczb:
    Kod:
    Arrays.sort(Tab);

  10. #9
    Avatar Dzzej
    Data rejestracji
    2006
    Posty
    8,969
    Siła reputacji
    23

    Domyślny

    Cytuj Kusterek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Imho za duzo chcesz naraz. Ten program musisz zrealizowac tak, żebyś pobierał od uzytkownika rozmiar tablicy = n. Następnie losujesz n wartości, oraz sortujesz tablice (musi być posortowana dla wyszukiwania binarnego). Zrob tyle potem pomyslimy dalej
    Wezmę się za to jutro od 0 ;d.

  11. #10
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Wezmę się za to jutro od 0 ;d.
    leniuszek ;d

    No to żebyś się nie zanudził to jak już zrobisz co pisałem. Utwórz kolekcje hashSet, foreachem (czy co tam macie w javie) przypisz wartosci z Twojej tablicy do kolekcji hashSet. Potem jak bedzisz miał swoją kolekcje unikalnych wartosci (ta kolekcja hashset) to pobieraj stamtąd wartości i zliczaj binarnie w Twojej tablicy ;)

    @down
    a dlaczego nie? Może nie jest to krystaliczny kod ale i tak lepsze to niż binarnie zliczać kilkarazy te same wartosci.
    #EDIT
    aha, no nie wiedziałem ze wyszukiwanie binarne nie zliczałoby duplikatów :P osobiscie nie korzystalem z niego, wiec dzieki za info :)
    Ostatnio zmieniony przez Kusterek : 21-01-2014, 21:52

  12. #11
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    @up
    Usunąłem swój komentarz, bo nie chce toczyć wojen w czasie sesji o prosty i czysty kod ;d pozdro
    A wartość jest szukana tylko raz. Od miejsca, które znajdzie binsearch sprawdzane są następne i poprzednie. Ofc można napisać binsearcha, żeby znajdywał pierwsze wystąpienie, ale to w sumie bez większego znaczenia dla wydajności.


    @topic
    http://wklej.to/VHVmo
    Dodaj pobieranie n od usera i szukanej liczby. No i dodaj jakieś sortowanie, jeżeli nie możesz/nie chcesz korzystać z gotowych.
    Ostatnio zmieniony przez Absherr : 23-01-2014, 17:56

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Zliczanie w excelu
    Przez 2Fast4You w dziale Programowanie
    Odpowiedzi: 0
    Ostatni post: 13-01-2018, 09:26
  2. Java jawnie dodawane wartości
    Przez Hardware w dziale Programowanie
    Odpowiedzi: 1
    Ostatni post: 20-12-2016, 11:48
  3. [JAVA] Tablica obiektów oraz zliczanie obiektów
    Przez hefalump w dziale Programowanie
    Odpowiedzi: 5
    Ostatni post: 24-11-2016, 13:33
  4. Odpowiedzi: 7
    Ostatni post: 07-12-2013, 00:17
  5. Losowanie punktu(x,y) z tablicy -> C#
    Przez Johny Tran w dziale Programowanie
    Odpowiedzi: 2
    Ostatni post: 07-06-2013, 15:02

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •