Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadatak Za takmicenje.

[es] :: Visual Basic 6 :: Zadatak Za takmicenje.

[ Pregleda: 2773 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BinLaden
Ni na nebu ni na zemlji

Član broj: 147476
Poruke: 102
*.teol.net.

Sajt: www.sove-soft.rs.ba


Profil

icon Zadatak Za takmicenje.19.01.2008. u 14:41 - pre 197 meseci
Ovaj programcic sam nekad davno radio i sad mi palo na pamet.

Program treba da sadrzi: 1 Textbox, 1 Label i 1 CommandButton.
U textbox je potrebno upisati bilo koji cijeli broj. Pritiskom na dugme u labelu treba da se ispise
prvi, sledeci, cijeli PROSTI broj.

Pojasnjenje:
>>Broj je PROST ako nije djeljiv ni sa jednim cijelim brojem osim sa 1 i sa samim sobom<<
>>Broj X je prost ako nije djeljiv sa prvih Sqr(X) Brojeva. Znaci Ostale ne morate provjeravati.<<
>>Potrebno je omoguciti provjeru za cijeli opseg LONG-a, to jest da bude ogranicen na 2.147.483.646<<

Ako bude zainteresovanih za problemcic okacit cu svoje rjesenje naknadno.
Naravno bilo bi pozeljno da u program ubacite i mjerac za koliko vremena izvrsi zadatak.
Ero S Onoga Sveta
 
Odgovor na temu

h4ckon3
hack one
////

Član broj: 164247
Poruke: 62
*.adsl.net.t-com.hr.



Profil

icon Re: Zadatak Za takmicenje.21.01.2008. u 13:24 - pre 197 meseci
evo kad nitko nece ja cu...ovako nekako bi trebalo to izgledat!

Code:

dim dj as long
dim ukupno as long

for ab=val(text1.text) to 2147483646

for ga=1 to val(text1.text)
if val(text1.text) mod ga=0 then dj=dj+1
next
if dj=2 then label1.caption=str(ab):exit for

next




nisam siguran jel radi nisan provjerio al tako nekako bi moralo ici...
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Zadatak Za takmicenje.21.01.2008. u 13:37 - pre 197 meseci
Da si umesto if val(text1.text) stavio if ab i da si pre tog if-a stavio dj = 0 i umesto for ab=val(text1.text) stavio for ab=val(text1.text) + 1 onda bi radilo :)
 
Odgovor na temu

BinLaden
Ni na nebu ni na zemlji

Član broj: 147476
Poruke: 102
*.teol.net.

Sajt: www.sove-soft.rs.ba


Profil

icon Re: Zadatak Za takmicenje.23.01.2008. u 02:59 - pre 197 meseci
@Shadowed... Ti si ispravio tehnicke greske, ali i sa tvojim ispravkama taj kod ne odradjuje zadani zadatak....
Ero S Onoga Sveta
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Zadatak Za takmicenje.23.01.2008. u 09:42 - pre 197 meseci
Moguce, ako ne stignem ranije, pogledacu za vikend i napisati svoj kod, imam par idejica.. :)
 
Odgovor na temu

BinLaden
Ni na nebu ni na zemlji

Član broj: 147476
Poruke: 102
*.teol.net.

Sajt: www.sove-soft.rs.ba


Profil

icon Re: Zadatak Za takmicenje.26.01.2008. u 01:37 - pre 197 meseci
Nije moguce da niko (ne zna) odnosno nije zainteresovan da da rjesenje.
Ovo pitanje [koje sam ja pojednostavio sa "pojasnjenjem" (sve ono iza >>)] je ustvari zadatak sa ispita.
Pitanje ko pitanje je komplikovanije gledajuci sa matematicke strane nego sa progamerske (ne racunajuci
pojasnjenja za problem koja sam ja dao). Ali svejedno nije jednostavno odnosno na velikim ciframa (od 7 cifara i vise)
izvrsenje rjesenja dosta dugo traje ako nije ukljucena sva optimalizacija koda.
Ero S Onoga Sveta
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Zadatak Za takmicenje.26.01.2008. u 11:39 - pre 197 meseci
Hm, meni ovo radi ne samo za manje od sekunde nego prividno trenutno, i cini mi se da radi tacno :)
Inace, postoje dve optimizacije koje mi trenutno padaju na pamet, mada, koliko vidim nisu ni potrebne za zadatak. Jednu cu uraditi i postovati, druga je slozenija i donosi ubrzanje jedino u slucaju ponavljanja izracunavanja (inace mzoda ima i nesto gubitaka ako se racuna samo jednom) pa je necu raditi.
Code:

Private Sub cmdStart_Click()
    Dim Start As Long
    Dim i As Long
    
    Start = txtStart.Text + 1
    If Start Mod 2 = 0 Then Start = Start + 1
    For i = Start To 2147483647 Step 2
        If IsPrime(i) Then
            txtResult.Text = i
            Exit For
        End If
    Next i
End Sub

Private Function IsPrime(Number As Long) As Boolean
    Dim SquareRoot As Long
    Dim i As Long
    
    IsPrime = True
    SquareRoot = Sqr(Number)
    If Not (Number Mod 2 = 0) Then
        For i = 3 To SquareRoot Step 2
            If Number Mod i = 0 Then
                IsPrime = False
                Exit For
            End If
        IsPrime = True
        Next i
    Else
        IsPrime = False
    End If
End Function


[Ovu poruku je menjao Shadowed dana 26.01.2008. u 12:53 GMT+1]
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Zadatak Za takmicenje.26.01.2008. u 11:48 - pre 197 meseci
Evo i te optimizacije. Namerno postujem oba jer je ono iznad manje/vise ono sto prvo pada na pamet kao resenje.
Tj. evo samo razlike:
Code:

    For i = Start To 2147483647 Step 2
        If (i - 1) Mod 6 = 0 Or (i + 1) Mod 6 = 0 Then
            If IsPrime(i) Then
                txtResult.Text = i
                Exit For
            End If
        End If
    Next i

Poenta je u tome da se dvaki prost broj moze zapisati u obliku 6k-1 ili 6k+1 gde je k prirodni broj (ali nije svaki broj u tom obliku prost), zato nema potrebe vrsiti proveru za "prostocom" broja ako nije u tom obliku (ali je ipak neophodno ako jeste).

Druga optimizacija se tice cinjenice da nije neophodno proveravati deljivost broja svim brojevima od 2 do korena iz datog broja, vec samo deljivost sa prostim brojevima iz tog opsega. Mislim (ali nisam siguran) da bi racunanje tih brojeva oduzelo vise vremena od ove metode, ali kada se jednom uradi, smestaju se u niz pa se nadalje koriste odatle. Otuda primedba da bi prvo racunanje bilo sporije ali bi prosecno vreme kod vise izracunavanja bilo manje.
Ovo je dobro ukoliko na nekom takmicenju ili necemu slicnom dajes samo izvrsni fajl ako znas da mere vreme, jer to rade uvek tako sto ponavljaju mnogo puta i za to izmere vreme pa podele sa brojem ponavljanja.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: Zadatak Za takmicenje.07.02.2008. u 16:23 - pre 197 meseci
Nesto slabo interesovanje :)
Hajd' dodatak: Generisati sve proste brojeve u Long opsegu (gore naveden) za sto krace vreme.
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Zadatak Za takmicenje.08.02.2008. u 15:28 - pre 197 meseci
pa nije ti ovo C forum nego VB, gde si nasao od VB programera da pisu nesto sto radi brzo :)

ja sam uvek mrzeo te zadatke sa vremenskim ogranicenjem (dobro ovde nema ogranicenja, ali kao da ima) jer kad odem na takmicenje ja uradim tacno zadatake i prodjem na republicko al tamo mi zakinu na vremenu (i tamo uradim bar dva od tri tacno) i nista ne uradim... a ionako nikad nisam voleo pascal :)
 
Odgovor na temu

stefanpn
Total anonymous
Programer

Član broj: 172809
Poruke: 509
77.46.195.*



+1 Profil

icon Re: Zadatak Za takmicenje.15.02.2008. u 02:19 - pre 197 meseci
Ja sam to radio na takmicenju jos u 8. osnovne, 2000-te i evo ga moje resenje sa takmicenja. Nije brzo ali moze da posluzi...

Code:

For t = 0 To 32760
    For s = 2 To 10
        x = 0
        For i = 1 To Int(t / s)
            x = x + s
        Next i
        If t - x = s - 1 Then ok = 1 Else ok = 0
        If ok = 0 Then GoTo sledeci
        If ok = 1 And s = 10 Then Print t
    Next s
sledeci:
Next t


Mrzi me da sad to nesto kao prepravljam pa je u originalu iz 2000-te (Radi i u QBasic-u)

Pozdrav

A u ja sam se zeznuo ovo je resenje zadatka koji trazi brojeve koji pri deljenju sa svim brojevima od 1 do x daju ostatak za jedan manji od broja sa kojim delimo. X < broja

[Ovu poruku je menjao stefanpn dana 15.02.2008. u 14:31 GMT+1]
 
Odgovor na temu

[es] :: Visual Basic 6 :: Zadatak Za takmicenje.

[ Pregleda: 2773 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.