Potrebna pomoc oko zadatka za informatiku

poruka: 59
|
čitano: 35.038
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Koristi sorted sa reverse=True:

 

a = int(input('Prvi broj:'))
b = int(input('Drugi broj:'))
c = int(input('Treći broj:'))
print(sorted([a, b, c], reverse=True))

9 godina
offline
Potrebna pomoc oko zadatka za informatiku

Vjerojatno ništa, kao i svi koji se registriraju na forum očekujući da će drugi za njih sve riješiti bez imalo truda. Umjesto da bar nešto sami pokušaju, pa makar to i apsolutno krivo bilo.

Moj PC  
0 0 hvala 0
6 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Hvala Vam puno. nisam se uopce sjetio toga.

6 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku
Pozdrav. Imao sam zadatak da napisem program u pythonu koji uspisuje da li je godina prestupna i ja sam ovako napisao:
n=int(input('Unesi godinu'))
if n%100==0:
print('Godina nije prestupna')
elif n%400==0:
print('Godina je prestupna')
elif n%4==0:
print('Godina je prestupna')
else:
print('Godina nije prestupna')

ali prof mi kaze da netreba tako no ovaj program radi.
Ako bi mi netko mogao mozda pokazat kako to resiti na neki drugi nacin?
 
0 0 hvala 0
6 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku
Evo razloga zasto sam proveravao sa 100 i 400.
11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Pokreni svoj program i unesi godinu 2000. Tvoj program javi da nije prestupna, što nije točno.

 

Problem je što program prvo provjerava da li je godina djeljiva sa 100. Godina 2000 zadovoljava ovaj uvjet pa program ispisuje poruku i izlazi iz if naredbe -  provjera da li je 2000 djeljivo s 400 se neće izvršiti.

 

Najjednostavnije je zamijeniti prvi i drugi uvjet.

 

 

15 godina
offline
Re: Potrebna pomoc oko zadatka za informatiku
martin5487 kaže...
Pozdrav. Imao sam zadatak da napisem program u pythonu koji uspisuje da li je godina prestupna i ja sam ovako napisao:
n=int(input('Unesi godinu'))
if n%100==0:
print('Godina nije prestupna')
elif n%400==0:
print('Godina je prestupna')
elif n%4==0:
print('Godina je prestupna')
else:
print('Godina nije prestupna')

ali prof mi kaze da netreba tako no ovaj program radi.
Ako bi mi netko mogao mozda pokazat kako to resiti na neki drugi nacin?

 

martin5487 kaže...
Evo razloga zasto sam proveravao sa 100 i 400.

 pažljivo čitaj.. moraš smisliti odgovor, rečenicu koja će na kraju dati točan rezultat, neovisno koja je godina.. s izuzetcima.

da je samo svaka 4 tad bi bilo lako, if n 4=0.. zbog korekcije, svaka 100ta, mada je djeljiva, nije prijestupna, opet zbog korekcije svaka 400ta je.. to su izuzetci.

izuzetke testiraš samo kad su potrebni, ne za svaku drugu npr neparnu godinu koja nije izuzetak.. pa ne može biti ni izuzetak-izuzetka.

..tad bi zadatak bio precizno-struktutno-logički napravljen. Kao diagram toka, skup-podskup-rekurzija..

 

prvi if koji zaovolji uvjet, se uzme za true, else je kad ni jedan if nije zadovoljen (pravilo)

 

da je samo if djeljivo s 4..true (prijestupna) i else-false (nije prijestupna), tad bi dobio točno osim za 100tu.. false

kad dodaš za 100tu-izuzetak, moraš i 400tu kao izuzetak-izuzetka..true

to je zadatak, tako ga čitaš.

sve ostalo je else=false.

 

probaj, .. unutar if 4, unutar if 100 if 400.. i sve godine koje uneseš, moraju biti točne, 1234, 999, 1000, 2111, 2100, 2000.. 1999, 2001..

za test, uvijek koristi brojeve za koje znaš točan odgovor-rezultat.

-u tvom rješenju, godina npr 400, 1600, 2000.. bi dala netočan odgovor, jer bi dijeljenje sa 100 zadovoljilo uvjet, ne bi se uopće izvršilo djeljenje s 400..

ako zamjeniš ta dva redosljeda if 400 pa if 100, odgovor je točan. tj kad prvo djeliš sa 400 i to da true (točno) tad je djeljenje sa 100 nepotrebno, ako nije djeljivo s 400, prolazi do djeljenja sa 100 npr 200 i 300, 500, 600..

to su dva načina, pravi redosljed ili unutar ifa, dodatni test, uvod u rekurzije.. i logiku grananja uvijeta koji se (ne)izvršavaju.

zgodno je pratiti u debuggeru izvršavanje.. tad vidiš petlju i kako se izvršava, kad izlazi .. i tako otkriješ zašto je redosljed postavljanja testiranja važan, izuzetci.

C64/TurboModul-OpenSourceProject.org.cn.部分作品为网上收集整理,供开源爱好者学习使用
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

Ahaa. Sad mi je jasno. Hvala Vam puno!!

 

 
0 0 hvala 1
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

pozdrav. hitno mi treba pomoc oko dva zadatka.

a) napisati program koji ispisuje da li je broj deljiv sa 9, ali bez upotrebe ˝else˝.(znam da treba to ici ovako : a=int(input('unesi broj'))

                                                                                 if a%9==0:

                                                                                     print('broj je deljiv')

                                                                                 else:

                                                                                     print('broj nije deljiv'); ali kako to bez grananja?)

b)napisati program koji ispisuje kojije broj veći ,a koji manji ali bez upotrebe min i max(znam da je sa upotrebom min i max ovako:Ž
a=int(input('unesi prvi broj'))

b=int(input('unesi drugi broj'))

print('najveći je',max(a,b))

print('najmanji je',min(a,b))

 
0 0 hvala 0
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

i da li po prioritetu operatora u python-u idu: aritmetički, logički,operatori poređenja

 
0 0 hvala 0
7 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku
Poruka je uređivana zadnji put pet 10.11.2017 20:54 (112358).
11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Zadatak a) se može riješiti pomoću dictionaryja:

DJELJIV = {True: 'broj je djeljiv', False: 'broj nije djeljiv'}
a = int(input('unesi broj'))
print(DJELJIV[a % 9 == 0])

 

Zadatak b) se može napraviti ovako:

a=int(input('unesi prvi broj'))
b=int(input('unesi drugi broj'))

if a > b:
    print('najveći je', a, 'najmanji je', b)
elif b > a:
    print('najveći je', b, 'najmanji je', a)

6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

pitanje: kako riječima objasniti sta petlja radi. znam da prvo uzima broj od 1 do n+1 ali ne razumem zasto dalje pise z_djelitelja=0:

n=int(input('unesi broj'))

for i in range(1,n+1):

   zbroj_djelitelja=0

   for j in range(1,i):

     if i%j==0:

       zbroj_djelitelja+=j

   if zbroj_djelitelja==i:

       print(i,end=' ')

ako netko moze da mi napise kako procitati taj program u cijelosti?

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Dakle, prvo treba opisati što algoritam uopće radi, a zatim tehniku na koji način to radi.

 

Algoritam za uneseni integer n traži savršene brojeve u intervalu [1, n]. Savršeni broj n je onaj prirodni broj čija suma djeljitelja koji su manji od n je jednaka n.

 

Vanjskom petljom prolazimo kroz zadani interval [1, n].

Varijabla z_djeljitelja nam služi da u nju zbrojimo sve djeljitelje svakog pojedinog broja i iz vanjske petlje. Zato varijablu resetiramo na 0 za svaki pojedini broj.

Unutarnjom petljom tražimo djeljitelje svakog broja i iz vanjske petlje u intervalu [1, i) i zbrajamo ih u varijablu z_djeljitelja.

Ako nam je zbroj djeljitelja broja i jednak broju i, ispišemo broj.

Poruka je uređivana zadnji put čet 7.12.2017 17:01 (Floki).
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

Pozz svima potrebna mi je pomoc oko iscitavanja ovog koda.

 

import math

parni=int(input('unesi paran broj'))

for nep in range(3,parni//2+1,2):

    p=True

    for nep2 in(nep,parni-nep):

    if p:

    for k in range(2,round(math.sqrt(nep2))+1):

    if nep2%k==0:

     p=False

   if p:

     print('{} +{}' .format(nep,parni-nep))

 

 

 

uglavnom znam da program ispsuje parni broj pomocu zbira prostih brojeva,Potrebno mi je da mi iscita netko svaki korak posebno.Hvala od srca svakom tko mi pomogne. ;)

 
0 0 hvala 0
6 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Hvala puno. Samo mi jos nije jasno zasto moramo pisati prvu petlju ovu vanjsku. Da li bi program radio i bez nje.

11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku
majstorp kaže...

Pozz svima potrebna mi je pomoc oko iscitavanja ovog koda.

 

import math

parni=int(input('unesi paran broj'))

for nep in range(3,parni//2+1,2):

    p=True

    for nep2 in(nep,parni-nep):

    if p:

    for k in range(2,round(math.sqrt(nep2))+1):

    if nep2%k==0:

     p=False

   if p:

     print('{} +{}' .format(nep,parni-nep))

 

 

 

uglavnom znam da program ispsuje parni broj pomocu zbira prostih brojeva,Potrebno mi je da mi iscita netko svaki korak posebno.Hvala od srca svakom tko mi pomogne. ;)

 

Navedeni program ne radi ništa jer ima gomilu grešaka - pogrešna, neuparena i nekonzistentna indentacija, zatvorena zagrada viška, korištenje varijable prije inicijalizacije i naopaki poziv funkcije sqrt.math (treba math.sqrt)

 

Ono što preostane nakon minimalnih ispravaka

import math

parni=int(input('Unesi paran broj'))

for nep in range(3, parni // 2 + 1, 2):
    p=True
    for nep2 in range(nep, parni-nep):
        if p:
            for k in range(2,round(math.sqrt(nep2)) + 1):
                if nep%2==0:
                    p=False
    if p:
        print('{} + {}'.format(nep,parni-nep))

 

je program koji ispisuje sve kombinacije unesenog pozitivnog parnog broja kao zbroja dva pozitivna brojeva od kojih je prvi neparan broj veći ili jednak 3 i manji ili jednak od drugog broja.

 

6 -> 3 + 3

8 -> 3 + 5

10 -> 3 + 7, 5 + 5

12 -> 3 + 9, 5 + 7

14 -> 3 + 11, 5 + 9, 7 + 7

...

 

1. Glavna petlja kroz varijablu nep provlači sve neparne brojeve veće ili jednake od 3 i manje od polovice unesenog parnog broja.

2. Na početku petlje varijabla p se postavlja na True.
3. Slijede dvije ugniježđene petlje koje efektivno ne rade ništa. Uvjet nep % 2 == 0 nikad nije ispunjen (jer je varijabla nep uvijek neparna) pa vrijednost varijable p ostaje nepromijenjena.

4. Na dnu se ispisuje (jer je p uvijek True) trenutna vrijednost varijable nep i razlika između parni i nep.

6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

Pozdrav, potrebna mi je pomoć oko iščitavanja svakog koraka zadatka:

 

n=int(input('unesi broj'))

ima=False

for i in range (1, n // 2, 2):

    t=i

    pom=n

    while pom > 0:

       pom-=t

       t+=2

    if pom ==0

       ima =True

       for j in range (i, t , 2):

           print(j,end= '  ')

if not ima:

    print('Nema')

 

Znam da program ispisuje sve konbinacije neparnih broje koje u zbiru daje uneseni broj n, ali ne znam kako iščitati zadatak. Unaprijed hvala. :D

 

 
0 0 hvala 0
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

pozdrav! Naisao sam na zadatak koji ne razumem u potpunosti.Ako bi netko bio ljubazan i objasnio ga bio bih jako zahvalan.

def upis(n):
  x=[0]*n
  for i in range (n):
   x[i]=int(input())
  return x
n=int(input('broj elenata:'))
print('prva lista')
a=upis(n)
print('druga lista:')
b=upis(n)
s=0
for i in range(n):
s+=a[i]*b[i]
print(s)

 
0 0 hvala 0
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

Pozdrav pronasao sam ovaj zadak i razumem kako radi ali ne znam kako da ga zapisem preko funkcija da bi izbegao ponavljanja u zadatku. Ako bi netko mogao da mi pomogne. Hvala

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Priprema ispisa za fout može se premjestiti u funkciju (i malo pojednostaviti jer je '{0}.format(p) isto što i p)

 

def ispis(p, n):
    if n > 1:
      return '{0}{1}'.format(p, n)
    else:
        return p

fin = open('ulaz.txt', 'r')
fout = open('izlaz.txt', 'w')
retci = fin.readlines()
for r in retci:
    p = ''
    n = 0
    for t in r.strip():
        if t == p or p == '':
            n += 1
        else:
            fout.write(ispis(p, n))
            n = 1
        p = t
    fout.write(ispis(p, n) + '\n')
fout.close()

 

Tvoja petlja radi isto što i funkcija groupby iz modula itertools pa se može izbaciti ponovljeni kod za ispis nakon petlje:

 

from itertools import groupby

fin = open('ulaz.txt', 'r')
fout = open('izlaz.txt', 'w')
retci = fin.readlines()
for r in retci:
    for p, grupa in groupby(r.strip()):
        n = len(list(grupa))
        if n > 1:
            fout.write('{0}{1}'.format(p, n))
        else:
            fout.write(p)
    fout.write('\n')
fout.close()

 

Može i ovako

6 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Hvala Vam puno! Sad mi je jasnije. Hvala jos jednom.

6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku
Pozdrav,pronašao sam sljedeći zadatak i čini mi se jako zanimljiv, ali nisam siguran kako radi pa ako bi netko mogao samo da mi ga ukratko pojasni.Unaprijed hvalaa:)
from time import*
from random import*
def najbliži_1(a):
   broj_1,broj_2=a[0],a[1]
   for i in range (len(a)-1):
     for j in range(i+1,len(a)):
       if abs(a[i]-a[j])< abs(broj_1-broj_2)and a[i]!=a[j]:
         broj_1,broj_2=a[i],a[j]
   return broj_1,broj_2
def najbliži_2(a):
   a.sort()
   broj_1,broj_2=a[0], a[1]
   for i in range(len(a)-1):
     if abs(a[i]-a[i+1]) < abs (broj_1-broj_2) and a[i]!=a[i+1]:
       broj_1,broj_2=a[i],a[i+1]
   return broj_1, broj_2
def main():
   a=[randint(1,100000) for i in range(5000)]
   t1=clock()
   print(najbliži_1(a))
   t2=clock()
   print(najbliži_2(a))
   t3=clock()
   print('funkcija 1:{0:5f}'.format(t2-t1))
   print('funkcija 2:{0:5f}'.format(t3-t2))
main()

 

 
0 0 hvala 0
6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku
Pozdrav,pronašao sam sljedeći zadatak u pythonu i čini mi se jako zanimljiv, ali nisam siguran kako radi pa ako bi netko mogao samo da mi ga ukratko pojasni.Unaprijed hvalaa:)
from time import*
from random import*
def najbliži_1(a):
   broj_1,broj_2=a[0],a[1]
   for i in range (len(a)-1):
     for j in range(i+1,len(a)):
       if abs(a[i]-a[j])< abs(broj_1-broj_2)and a[i]!=a[j]:
         broj_1,broj_2=a[i],a[j]
   return broj_1,broj_2
def najbliži_2(a):
   a.sort()
   broj_1,broj_2=a[0], a[1]
   for i in range(len(a)-1):
     if abs(a[i]-a[i+1]) < abs (broj_1-broj_2) and a[i]!=a[i+1]:
       broj_1,broj_2=a[i],a[i+1]
   return broj_1, broj_2
def main():
   a=[randint(1,100000) for i in range(5000)]
   t1=clock()
   print(najbliži_1(a))
   t2=clock()
   print(najbliži_2(a))
   t3=clock()
   print('funkcija 1:{0:5f}'.format(t2-t1))
   print('funkcija 2:{0:5f}'.format(t3-t2))
main()

 

 
0 0 hvala 0
6 godina
offline
Re: Potrebna pomoc oko zadatka za informatiku

Kad dođeš kod doktora prvo kažeš što te boli, pa bi bilo dobro da daš zadatak a ne samo da zaljepiš kod koji bi ja sad trebao čitat i pokušat razumjet što je pjesnik htio reći

Trust nobody, become the best !
11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Program ispisuje rezultate i brzinu izvršavanja dviju funkcija tako da im pošalje istu listu od 5.000 random cijelih brojeva iz intervala [1, 100.000].

 

Obje funkcije za zadanu listu vraćaju jedan par različitih elementa čija je razlika najmanja - npr. za listu [1, 3, 10, 3] rezultat je (1, 3). Funkcije ne koriste isti algoritam - prva uspoređuje elemente "svaki-sa-svakim", dok druga prvo sortira listu pa provjera samo sljedbenik svakog elementa.

 

 

Ovo je primjer rezultata:

(47755, 47754)
(154, 155)
funkcija 1:3.388098
funkcija 2:0.002507

6 godina
neaktivan
offline
Potrebna pomoc oko zadatka za informatiku

hvala Vam puno. opet imam jos  jedno pitanje.

 

kod ovog zadata razumijem sve osim razloga zasto je ispisano traženje srednje vrednosti toliko komplikovano.zar ne bi mogla jednostavno pocetak+kraj//2

 

from random import*
def binarno_traženje(e, a):
   početak, kraj = 0, len(a) - 1
   while početak <= kraj:
     sredina = početak + (kraj - početak) // 2
     print(sredina,a[sredina])
     if a[sredina] == e:
       return sredina
     elif a[sredina] > e:
       kraj = sredina - 1
     else:
       početak = sredina + 1
   return -1

a=[]
n=int(input('Unesi broj elemnata liste'))
for i in range(n):
   a.append(randint(1,9*n))
a.sort
print (a)
e=int(input('unesi traženi broj'))
index = binarno_traženje(e,a)

if index==-1:

   print('nema trazenog broja',e,'u listi')

else:

   print('index broja',e,'je',index')

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: Potrebna pomoc oko zadatka za informatiku

Program ne traži srednju vrijednost, nego poziciju traženog broja e u listi od n random brojeva metodom binarnog pretraživanja.

 

Za početak program ima sintaktičku grešku - zadnji jednostruki navodnik u zadnjoj liniji je višak. Drugi problem je što linija a.sort ne radi ništa. Za binarno pretraživanje lista mora biti sortirana, a za izvršavanje metode/funkcije treba navesti zagrade a.sort().

11 godina
offline
Re: Potrebna pomoc oko zadatka za informatiku
Bobobo-bo Bo-bobo kaže...

Program ne traži srednju vrijednost, nego poziciju traženog broja e u listi od n random brojeva metodom binarnog pretraživanja.

Ja mislim da on pita zasto "sredina = početak + (kraj - početak) // 2"
umjesto "sredina = (početak + kraj) // 2"

Matematicki je isto i ja bi isto stavio ovo drugo, ali nije bas da je prevelika razlika.

Nova poruka
E-mail:
Lozinka:
 
vrh stranice