Newsgroup: it.scienza.informatica
Titolo: divisori dispari di n

Dall'esame di ieri (informatica di base):
Siamo nella shell di linux.. trovare uno script
che dato dallo standard input un numero naturale,
stampi sullo standard output tutti i suoi divisori dispari!
Come si fa se non ho una funzione che calcola il resto???
devo trasformare la shell in una macchina a registri?!?!?
HUMMMMMMMMMMMMMPHHHHH
(Mi rode da matti perchè ho fatto tutti gli esercizi tranne questo)...
aghrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmffffffffffffffffffffffffff

 ha scritto nel messaggio
news:pN9jb.286937$R32.9...@news2.tin.it...

Non conosco bene la shell di Linux, comunque avresti potuto procedere per
sottrazioni consecutive ..

rrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmffffffffffffffffffffffffff
se è lo stesso che "non ho fatto io" 9 su dieci non mi sembrano male
.. e come hanno detto loro era alla portata di chi aveva studiato
(quindi non io!)
in bocca al lupo per il resto !
Ciao
CiPi at Work
Italy
(ops ... non essere ingordo se mi vuoi rispondere)

> Come si fa se non ho una funzione che calcola il resto???
Sapendo che dati n,m appartenenti a Z (con m diverso da 0), allora esistono 
due interi q,r (quoziente e resto) tali che n=mq+r (0<=r<|b|).
Es: n=5, m=2
int q=n/m; /* q=2 */
r=n-(m*q); /* r=1 */

 devo trasformare la shell in una macchina a registri?!?!?
ce l'ha la moltiplicazione? allora basta ed avanza...
ti descrivo l'algoritmo in spannometri (leggi, non mi ricordo una cippa di
shell script...)
for i=3,sqrt(n) (se non c'è sqrt fai con n, è lo stesso...)
  q=n/i (o come si fa la divisione in uno script)
  if n=q*i then
    echo i
  fi
rof ( ;) )
ciao

Come si fa se non ho una funzione che calcola il resto???
L'operatore modulo (%) non funziona?
-- 
Linux Registered User #181013
[Exokernels] Although one approach to eliminating bloated, buggy,
unreliable operating systems is to make them smaller, a more radical
one is to eliminate the operating system altogether.

 devo trasformare la shell in una macchina a registri?!?!?
Dipende dalla shell. Per esempio nella bash esiste la funzione
resto (remainder) il cui simbolo e' %.
Supponendo che la tua shell non abbia il resto,
ma abbia una funzione che calcola la
divisione tra interi, (tipo 13 / 3 = 4 )
allora e' comunque banale:
il resto della divisione di A / N e' uguale a
A - (A/N)*N
ciao.
g.

 stampi sullo standard output tutti i suoi divisori dispari!
Se l'esame era su carta, credo che il tuo prof avrebbe accettato
anche codice non perfettamente corretto nella sintassi purche'
si capisse che tu volevi calcolare il resto di una divisione.
In bash, mi pare, si puo' fare con '%'

   fi

 ha scritto nel messaggio
news:2003101609540...@despammed.com...


 "%"..
Tieni conto, per i prossimi esami, che se avessi scritto *in qualche modo*
(anche 'a parole') che cio' che volevi fare era l'operazione di divisione
intera, credo che il 99% dei prof non avrebbe sottilizzato, e avrebbe
preso per buona la tua risposta, se sostanzialmente corretta.
Comunque, 9/10 mi pare una buona prestazione :)
Ciao, in bocca al lupo!
HH

Anche se dalle risposte che ti hanno dato si ricava facilemnte la
soluzione non ne ho vista nessuna bene ordinata, eppoi mi andava di
scrivere  :-]
Eccoti un po' di pseudocodice:
for i:=1 to n step 2       /* cioč a due alla volta
  if (n mod i) = 0 then print(i)
endfor
Piů breve di cosě....!
Per l'operatode di mod (resto della divisione intera) usi il %
ciau

 stampi sullo standard output tutti i suoi divisori dispari!
Anche se vi facevano usare le operazioni base era facilissimo su.
Bastava che stampassi tutti i numeri dispari minori o uguali di Numero/2
tali che se Y è la divisione tra Numero e X (candidato), Y*X = Numero.
-- 
| /
| \Byte - Andrea Briganti - kbytesys(aaattt)
tiscali.it
CSLug member: 
http://cslug.linux.it
 - JID: 
kb...@jabber.linux.it
***Il sapere umano appartiene al mondo