infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Alex Alex din Noiembrie 03, 2015, 00:19:58



Titlul: PSEUDOCOD - Structuri de date -
Scris de: Alex Alex din Noiembrie 03, 2015, 00:19:58
Salutare!
Am urmatoarea problema:
1) Pentru un nr n citit de la tastatura se va afisa:
-multimea divizorilor lui n
-nr divizorilor lui n
-suma divizorilor lui n

Trebuie sa fac un algoritm care sa imi rezolve toate cele 3 cerinte sau trebuie sa fac cate un algoritm pentru fiecare cerinta in parte?

Am incercat ceva, la prima cerinta

n, i intreg
i <- 0
citeste n
{pentru n <- 0, 9
         executa
     i <- i + n
  {daca n % i = 0
         atunci
             scrie i
  }
}
    

Nu cred ca am scris bine algoritmul, va rog sa imi explicati ce trebuie sa fac.
Va multumesc anticipat! :D



Titlul: Răspuns: PSEUDOCOD - Structuri de date -
Scris de: FMI Razvan Birisan din Noiembrie 03, 2015, 20:00:50
Poți să rezolvi toate cerințele cu un singur algoritm. :ok:
Nu înÈ›eleg dacă cerinÈ›a se referă la numărul de divizori proprii sau improprii ai numărului n.  :-k

Acum, ceea ce nu înțeleg la algoritmul tău:
- de ce n <- 0,9 ???
- de ce i <- i+n ???
- unde e rezolvarea celorlalte 2  :-'

Ceea ce ar trebui să faci este să parcurgi cu o structură pentru ( div <- 2,n/2 ) posibili divizori ai numărului și să verifici dacă sunt divizori proprii ( adică dacă n % div = 0 ) . În cazul în care sunt, îi scrii, îi numeri și îi însumezi.

n,div,nr,sum intreg
citeste n
nr = 0
sum = 0
pentru div <- 2,n/2 executa
{
    daca n % div = 0 atunci
    {   
         scrie div,_
         nr = nr+1
         sum = sum + div
    }
}
scrie nr, sum


Titlul: Răspuns: PSEUDOCOD - Structuri de date -
Scris de: Alex Alex din Noiembrie 03, 2015, 20:56:01
Mersi, pentru ajutor, dar vreau sa te intreb cum numar? prin procesul de incrementare? si in algoritmul tau se va incrementa variabila div cu 1?
Daca poti te rog sa imi explici mai detaliat ti-as fi recunoscator :D

Si n-am inteles de ce variabila div <- 2, n/2 ? Nu ar fi div <- 1, div? adica div ia valori de la 0 pana la el insusi inclusiv? ex: divizorii lui 6: 1, 2, 3, 6 ?



Titlul: Răspuns: PSEUDOCOD - Structuri de date -
Scris de: FMI Razvan Birisan din Noiembrie 04, 2015, 17:46:57
Variabila care "numără" divizorii e nr.

nr = 0
daca n % div = 0 atunci
    nr = nr+1

( daca div e un divizor a lui n , atunci nr e incrementat )

Div ia valori de la 2 pentru că orice număr are ca divizori improprii numărul și 1. Nu are sens să verific dacă 6 e divizibil cu 1 pentru că știu deja asta. Am zis mai sus că nu am înțeles dacă cerința se referă la numărul de divizori proprii, dar am presupus că așa e.

ex:
divizorii improprii a lui 6: 1,6
divizorii proprii a lui 6: 2,3

Dacă vrei să afișezi și divizorii improprii, poți să faci mici modificări în algoritm.


Titlul: Răspuns: PSEUDOCOD - Structuri de date -
Scris de: Alex Alex din Noiembrie 08, 2015, 19:57:44
de ce div ia valori de la 2 pana la n/2 ?
adica de ce div <-2, n/2 si nu div <-2, n
?

* nu se specifica daca divizori proprii sau improprii


Titlul: Răspuns: PSEUDOCOD - Structuri de date -
Scris de: FMI Razvan Birisan din Noiembrie 08, 2015, 21:57:42
Pentru că n nu mai are niciun divizor după n/2 în afară de n. Nu are rost să verifici dacă n e divizibil cu n/2+1,n/2+2... pentru că știi sigur că nu e.

Dacă e vorba de divizori improprii ( de obicei, atunci când nu se specifică, e vorba de divizorii proprii ), poți modifica algoritmul astfel:

n,div,nr,sum intreg
citeste n
nr = 0
sum = 0
scrie 1,
pentru div <- 2,n/2 executa
{
    daca n % div = 0 atunci
    {   
         scrie div,
         nr = nr+1
         sum = sum + div
    }
}
scrie n
scrie nr, sum