objasnjenje zadatka
Select messages from
# through # FAQ
[/[Print]\]

Forum@DeGiorgi -> Programiranje 1 i 2

#1:  Autor/ica: dalmacija-more-ja-i-
ti
PostPostano: 23:23 sri, 17. 2. 2016
    —
Zuti skakucuci hello Moze li mi netko dati ideju kako rijesiti ovaj zadatak iz popravnog kolokvija 2012./2013.

Napisite funkciju int sort1(int n, int a[], int b[]); koja prima polje cijelih brojeva a, duljine n. Funkcija treba u polje b spremiti sve brojeve koji se pojavljuju u polju a, tako da polje b bude u silaznom poretku i da se svaki broj u b pojavljuje tocno jednom, tj. nema ponavljanja onih brojeva koji se vise puta pojavljuju u polju a. Izlazna vrijednost funkcije je broj elemenata u tako dobivenom polju b. Pretpostavljamo da je polje b dovoljno dugacko.

Hvala Zlatni zub

Added after 30 minutes:

Ovo je moj kod pa nek netko vidi jel to valja Ja to stvarno ne znam Tuzni pa-pa...

int sort1(int n,int a[],int b[])
{
int i,j,k,l;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(k=0;k<n;k++)
b[k]=a[k];
for(l=0;l<n;l++)
{
if(b[l]==b[l+1])
continue;
if(l<n)
{
while(l+1<n)
{
b[l]=b[l+1];
++l;
}
–n;
}
}
return n;
} Tuzni pa-pa... Tuzni pa-pa... Tuzni pa-pa... Tuzni pa-pa... Very sad Very sad

#2:  Autor/ica: luka_mLokacija: Zagreb PostPostano: 10:56 čet, 18. 2. 2016
    —
Obično se ulazno polje ostavi nepromijenjeno, pa bi ova for petlja koja kopira mogla doći na početak, i kasnije se ne spominjati polje a.

Za dobiti jedinstvenu listu iz sortirane, algoritam bi mogao biti ovako nešto:
Kod:

s = 0
za i iz [1, n>:
  ako b[i] != b[s]:
    ++s
    b[s] = b[i]
vrati s + 1

#3:  Autor/ica: mdokoLokacija: Heriot-Watt University, Edinburgh PostPostano: 11:16 čet, 18. 2. 2016
    —
luka_m (napisa):
Obično se ulazno polje ostavi nepromijenjeno


To je dobra programerska praksa, no taj zahtjev nije naveden u zadatku, tako da je najjednostavnije rješenje prvo sortirati a, pa onda a kopirati u b uz preskakanje duplikata.

#4:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 15:00 čet, 18. 2. 2016
    —
Prilozeni kod ne citam jer nije citljiv, no evo skice rjesenja bez mijenjanja niza a, na nacin koji nije optimalan ali je jednostavan za razumijeti i napisati:

Kod:
m = min(a) /* for petlja */
b[0] = m
k = 1
ponavljaj dok ide
    mm = min(x u a takav da je x > m) /* opet for petlja */
    ako je mm nadjen
        m = mm
        b[k++] = m
    inace
        kraj


Provjera je li drugi min uspio moze se obaviti preko flag varijable (nadjen = 0|1 ⇔ nije|je nadjen) ili se moze naci najveci element niza a (kad se trazi prvi min) i onda jednostavno "ponavljaj dok ide" postaje "ponavljaj dok je m < max(a)".

mdoko je u pravu da ako ne pise da izmjena niza nije dozvoljena, onda ga se smije mijenjati. No, ovdje je rijec o ucenju i pripremi za kolokvij na kojem se ovakav ili slican zadatak moze pojaviti s takvom zabranom, pa smatram da je korisno razmotriti i rjesenje koje ne mijenja a.

#5:  Autor/ica: dalmacija-more-ja-i-
ti
PostPostano: 16:57 čet, 18. 2. 2016
    —
Kod:

int sort1(int n,int a[],int b[])
{
    int i,j,k,l;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(a[i]<a[j])
            {
                int temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    for(k=0;k<n;k++)
        b[k]=a[k];
    for(l=0;l<n;l++)
    {
        if(b[l]==b[l+1])
                continue;
        if(l<n)
        {
            while(l+1<n)
            {
                b[l]=b[l+1];
                ++l;
            }
            --n;
        }
    }
    return n;
}


Evo citljivog koda. Mozete li mi sad reci je li ovo tocno?
I hvala na odgovorima Yet another 'Thank you' sign

Added after 58 minutes:

E da, moze jos i ovaj zadatak iz istog kolokvija? Wink Wink

Napisite funkciju koja prima prirodni broj n i niz realnih brojeva a, tipa double, duljine 2n. Funkcija treba Hornerovim algoritmom izracunati i vratiti vrijednost polinoma
a[1]·x^(n−1) +(a[2] + a[3])·x^(n−2)
+(a[4] +···+ a[7])·x^(n−3)
+··· +(a[2n−2] +···+ a[2n−1 −1])·x
+a[2n−1] +···+ a[2n −1]
u tocki x = a[0].

#6:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 18:07 čet, 18. 2. 2016
    —
dalmacija-more-ja-i-ti (napisa):
Evo citljivog koda. Mozete li mi sad reci je li ovo tocno?


Nije. Zato i radite na racunalu da mozete isprobati. Ja sam bezveze ulupao niz s ponavljanjima i dobio da ne radi. U mom primjeru je niz
{17, 19, 17, 13, 17, 11, 17, 23}
dao
{19, 17, 17, 17, 17, 13, 11}.
Primijeti da je nestao broj 23 koji u originalnom nizu uopce nije dupliciran.

dalmacija-more-ja-i-ti (napisa):
Napisite funkciju koja prima prirodni broj n i niz realnih brojeva a, tipa double, duljine 2n. Funkcija treba Hornerovim algoritmom izracunati i vratiti vrijednost polinoma
a[1]·x^(n−1) +(a[2] + a[3])·x^(n−2)
+(a[4] +···+ a[7])·x^(n−3)
+··· +(a[2n−2] +···+ a[2n−1 −1])·x
+a[2n−1] +···+ a[2n −1]
u tocki x = a[0].


U skripti je Hornerov algoritam dosta opsirno raspisan. Znamo da je [tex]x = a_0[/tex] i da su koeficijenti polinoma [tex]b_k = \sum_{i=2^k}^{2^{k+1}-1} a_i[/tex]. Dalje ide prema skripti.

Stvar se moze sloziti elegantnije od koristenja mojih b[i]-jeva, ali i ovo je dobar pocetak.



Forum@DeGiorgi -> Programiranje 1 i 2


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Stranica 1 / 1.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin