Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Esercizi di Informatica e Architettura dei Computer, Esercizi di Elementi di Informatica

ESERCIZI INFORMATICA

Tipologia: Esercizi

2012/2013

Caricato il 30/09/2013

simmyg
simmyg 🇮🇹

4.6

(4)

5 documenti

1 / 11

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Informatica
compendio di esercizi
Alessio Plebe
2011–2012
pf3
pf4
pf5
pf8
pf9
pfa

Anteprima parziale del testo

Scarica Esercizi di Informatica e Architettura dei Computer e più Esercizi in PDF di Elementi di Informatica solo su Docsity!

Informatica

compendio di esercizi

Alessio Plebe

e-mail: [email protected]

1 Macchina di Turing

Gli esercizi sono all’incirca in ordine progressivo di difficolt`a. Quelli contrassegnati con un asterisco sono

particolarmente difficili, il lettore non si preoccupi se non riesce a risolverli. Notare che, come in generale

nella programmazione, non vi `e necessariamente una sola TM che risolve un problema, quindi negli

esercizi in cui e richiesto di costruire una TM , il risultato potra anche essere differente dalla soluzione

indicata, senza per questo essere erroneo.

T.1 Calcola il nastro di I/O finale, dato quello di partenza, e la TM

⇓ A B

STATO INPUT NUOVOSTATO CASELLA OUTPUT 0 A 1 ⇒ B 0 B 1 ⇒ - 1 A 2 - - 1 B 2 - A 2 - - - -

T.2 Calcola il nastro di I/O finale, dato quello di partenza, e la TM

⇓ G G

STATO INPUT NUOVOSTATO CASELLA OUTPUT 0 G 1 ⇒ B 0 B 1 ⇒ - 1 G 2 ⇐ - 1 B 2 ⇒ - 2 G 4 - B 2 B 3 ⇐ - 3 - 4 - G 4 - - - -

T.3 Questa TM contiene un loop , e quindi potrebbe continuare all’infinito, sai dire qual’`e la condizione che

la ferma?

STATO INPUT NUOVOSTATO CASELLA OUTPUT 0 x 1 ⇒ o 0 o 0 ⇒ x 1 x 1 ⇒ o 1 o 2 - - 2 - - - -

21 Architettura dei computer

Gli esercizi sono all’incirca in ordine progressivo di difficolt`a. Quelli contrassegnati con un asterisco

sono particolarmente difficili, il lettore non si preoccupi se non riesce a risolverli. Notare che, come in

generale nella programmazione, non vi `e necessariamente una sola soluzione a un problema, quindi negli

esercizi in cui e richiesto di costruire una porzione di assembler, il risultato potra anche essere differente

dalla soluzione indicata, senza per questo essere erroneo.

A.1 Calcola la situazione finale, dopo l’esecuzione di questo frammento di assembler

1000 1001

1003 .... 1006 1007 1008 1009 100A 100B 100C

1002

mov $100A R mov 20 R add R2 R mov R1 $

0 400000

820 0 1000

744

10003

343234

80 325 67588567

....

R

R R

PC

CPU

RAM

PS

A.2 Calcola la situazione finale, dopo l’esecuzione di questo frammento di assembler

1000 1001

1003

1002

mov $100A R mov −10 R

0 400000

820 0 1000

744

130

80 325 67588567

1006 ....

mov R3 $100D

100C 100D 100E 100F

100B

100A

add −20 R add R2 R

....

R

R R

PC

CPU

RAM

PS

A.3 Calcola la situazione finale, dopo l’esecuzione di questo frammento di assembler

100F

1011

1010

mov $200F R

0 400000

820 10000 100E

0

130

80 325 4

1012 ....

200C 200D 200E 200F

200B

200A

100E add R2 R

add R2 R

mov R2 $200E

mov R2 $200D

....

R

R R

PC

CPU

RAM

PS

A.4 Calcola il contenuto della locazione di RAM 100B dopo l’esecuzione di questo frammento di assembler

0 0 0 0 0 0 0 0 0 0^ Z

1000 1001

1003

1005 1006 1007 1008 1009 100A 100B

5 1002 add^ R1^ R 0 3 1000

1004

3 4

add −1 R jmpz $

mov R2 $100B

jmp $

....

R

R R

PC PS

CPU

RAM

A.5 Sai dire se la CPU in queste condizioni pu`o trovarsi in un loop infinito, e spiegare la tua risposta?

0 0 0 0 0 0 0 0 0 0^ Z

1000 1001

1003

1005 1006 1007 1008 1009 100A 100B

1002

mov $100A R 10 20 3 1000

1004

3 4

mov 1 R

jmpz $ jmp $ mov R2 $100B

mov R2 R

add −1 R

....

R

R R

PC PS

CPU

RAM

A.

Calcola il contenuto della locazione di RAM 100B

0 0 0 0 0 0 0 0 0 0^ Z

FFF

10 20 3 FFF

mov $100A R 1000 mov 0 R 1001

1003

1005 1006 1007 1008 1009 100A 100B

1002

1004

4

jmpz $ jmp $

mov R2 R add R1 R add −1 R

add −1 R jmpz $ jmp $ mov R3 $100B 3

....

R

R R

PC PS

CPU

RAM

A.

Calcola il contenuto in 100B, sempre nel A.6, nel caso in cui inizialmente 100A contenesse 5

A.8 Scrivi un pezzo di assembler che sommi due numeri che si trovano in RAM agli indirizzi 3003 e 3004 ,

aggiunga 5 alla loro somma, e metta il risultato all’indirizzo 3005

A.

Scrivi un pezzo di assembler che, dati due numeri n e m , che si trovano in RAM agli indirizzi 100A e 100B, calcoli nm , e lo scriva all’indirizzo 100C

P.10 Avendo definito la funzione che segue, cosa risponder`a l’inteprete Python nella successiva istruzione?

def balbluz( s ): ... return s[ 0:2 ] + s ... balbluz( "sai" )

P.11 Avendo definito la funzione che segue, cosa risponder`a l’inteprete Python nella successiva istruzione?

def pari( x ): ... return x == 2 * ( x / 2 ) ... [ pari( 4 ), pari( 3 ) ]

P.12 Avendo definito la funzione che segue, cosa risponder`a l’inteprete Python nella successiva istruzione?

def maschfemm( s ): ... if s[ -1 ] == "o": ... return s[ 0:-1 ] + "a" ... if s[ -1 ] == "a": ... return s[ 0:-1 ] + "o" ... return s ... [ maschfemm( ’Carlo’ ), maschfemm( ’Angela’ ) ]

P.13 Avendo definito la funzione dell’esercizio P.12, cosa risponder`a l’inteprete Python con questa istru-

zione?

map (maschfemm, [ ’caro’, ’amico’, ’bravo’, ’e’, ’bello’ ] )

P.14 Avendo definito la funzione che segue, cosa risponder`a l’inteprete Python nella successiva istruzione?

def somma( n ): ... s = 0 ... while n > 0: ... s = s + n ... n = n - 1 ... return s ... somma( 5 )

P.

Avendo definito la funzione che segue, cosa risponder`a l’inteprete Python nella successiva istruzio- ne?

def conta( c, s ): ... n = 0 ... for l in s: ... if c == l: ... n = n + 1

... return n ...

conta( "b", "basta bere abbondantemente" )

P.

Avendo definito la funzione che segue, cosa risponder`a l’inteprete Python nella successiva istruzio- ne?

def stringl( l ):

balbluz( "sai" ) ## P.11 Avendo definito la funzione che segue, cosa rispondera l’inteprete Python nella successiva istruzione? >>> def pari( x ): ... return x == 2 * ( x / 2 ) ... >>> [ pari( 4 ), pari( 3 ) ] ## P.12 Avendo definito la funzione che segue, cosa rispondera l’inteprete Python nella successiva istruzione? >>> def maschfemm( s ): ... if s[ -1 ] == "o": ... return s[ 0:-1 ] + "a" ... if s[ -1 ] == "a": ... return s[ 0:-1 ] + "o" ... return s ... >>> [ maschfemm( ’Carlo’ ), maschfemm( ’Angela’ ) ] ## P.13 Avendo definito la funzione dell’esercizio P.12, cosa rispondera l’inteprete Python con questa istru- **zione?** map (maschfemm, [ ’caro’, ’amico’, ’bravo’, ’e’, ’bello’ ] ) ## P.14 Avendo definito la funzione che segue, cosa rispondera l’inteprete Python nella successiva istruzione? >>> def somma( n ): ... s = 0 ... while n > 0: ... s = s + n ... n = n - 1 ... return s ... >>> somma( 5 ) ## P. Avendo definito la funzione che segue, cosa rispondera l’inteprete Python nella successiva istruzio- ne?** >>> def conta( c, s ): ... n = 0 ... for l in s: ... if c == l: ... n = n + 1 ... return n ... >>> conta( "b", "basta bere abbondantemente" ) ## P. **Avendo definito la funzione che segue, cosa rispondera l’inteprete Python nella successiva istruzio- ne? >>> def stringl( l ): ... s = "" ... for w in l: ... s = s + " " + w ... return s ... stringl( [ ’tutto’, ’quello’, ’che’, ’vuoi’ ] )

P.17 Scrivi una funzione che produca il superlativo di un aggettivo dato, tenendo conto di maschile, fem-

minile e plurali, ovvero che sia risultati di questo tipo:

iss ( ’bella’ ) ’bellissima’ iss( ’brutti’ ) ’bruttissimi’ iss( ’cattivo’ ) ’cattivissimo’

P.

Scrivi una funzione che produca il vezzeggiativo di un aggettivo dato, tenendo conto di maschi- le, femminile e plurali, tenendo conto della particolarit`a delle vocali finali, ovvero he riesca a dare risultati di questo tipo:

ucc( ’cara’ ) ’caruccia’ ucc( ’freddo’ ) ’fredduccio’ ucc( ’teneri’ ) ’tenerucci’ ucc( ’tiepide’ ) ’tiepiducce’

P.

Riscrivi la funzione somma che effettua lo stesso calcolo di quella all’esercizio P.14, ma usando la ricorsione.

A.4 10

A.5 Si, perch´e l’istruzione a 1003 , mov R2 R3, non avendo risultato 0, spegne il bit Z del registro PS , e quindi la jumpz $1006 non avverr`a

mai

A.6 10

A.7 35

A.

1000 1001 1003 ....

3005

1002 add R2 R mov R1 $

0

820 0 1000

744

10003

3003 343234 3004

mov $3003 R mov $3004 R

R ....

R R

PC

CPU RAM

PS

A.

0 0 0 0 0 0 0 0 0^ Z 0

1000 1001 1003 1005 1006 1007 1008 1009 100A 100B

10 1002 20 3 1000

1004

3 4 100B

mov R3 $100C

jmp $

jmpz $

add −1 R

mul R2 R

mov $100B R mov 1 R

mov $100A R

R ....

R R

PC PS

CPU RAM

P.1 ’ciao ciao ’

P.2 [3, ’si’, ’no’, 2]

P.3 [20, ’forti’, 20, ’forti’, 20, ’forti’]

P.4 [’sole’, 1.3, ’A’]

P.5 ’ve’

P.6 [’alba’, ’giorno’]

P.7 ’sole’

P.8 ’orbi’

P.9 ’ulb’

P.10 ’sasai’

P.11 [True, False]

P.12 [’Carla’, ’Angelo’]

P.13 [’cara’, ’amica’, ’brava’, ’e’, ’bella’]

P.14 15

P.15 4

P.16 ’ tutto quello che vuoi’

P.

def iss( p ): ... return p[ 0 : -1 ] + ’issim’ + p[ -1 ] ...

P.

def ucc( p ): ... if p[ -1 ] in [ ’i’, ’e’ ]: ... return p[ 0 : -1 ] + ’ucc’ + p[ -1 ] ... return p[ 0 : -1 ] + ’ucci’ + p[ -1 ] ...

P.

def somma( n ): ... if n < 1: ... return 0 ... return n + somma( n - 1 ) ... end