11 - ESERCIZI VARI

 

 

 

 Può darsi che in certi casi tu trovi opportuno tracciare

 il diagramma di flusso dell’algoritmo prima di metterti a scrivere il programma;

 in tal caso, ricorda la forma che convenzionalmente si assegna ai vari blocchi:

 OVALE per INIZIO/FINE;  PARALLELOGRAMMO per INPUT/OUTPUT;

 RETTANGOLO per ELABORAZIONE;  ROMBO per SELEZIONE.

 

Iniziare o meno col diagramma di flusso

dipende dalla tua volontà, oltre che dal tipo di esercizio.

 

 

Esercizio 22)

 

Si simula ripetutamente il lancio di un dado, mediante l’istruzione x:=random(6)+1,

e ci si arresta non appena esce il numero 6.  Quanti “colpi” sono stati effettuati in totale?

 

Esercizio 23)

 

PREMESSA

Un intero si dice “perfetto” se è uguale alla somma dei suoi divisori,

inclusa l’unità ma escluso il numero stesso:

ad esempio 28 è un numero perfetto,

perché ha come divisori (a parte sé stesso)  1, 2, 4, 7, 14,  e  .

 

Letto in input un intero n, stabilire se n è un numero “perfetto”.

 

Esercizio 24)

 

Elenco dei numeri perfetti  ≤ m, con m letto in ingresso.

 

Esercizio 25)

 

Elenco degli interi da a fino a b, con a, b letti in input,

coi numeri PRIMI scritti in rosso, i PERFETTI in verde (textcolor).

Utilizza una opportuna “ampiezza” (vedi paragrafo 3) per collocare i numeri ordinatamente sul monitor:

ad es., write(n:10) fa scrivere l’intero n allineato a destra, in un campo la cui ampiezza è di 10 caratteri.

 

Esercizio 26)

 

Il computer “inventa” un intero pseudocasuale non superiore a 100

e invita l’utente a indovinarlo, dandogli 7 tentativi al massimo.

Ogni volta che l’utente “tenta”, il computer gli dice

“più alto…” oppure “più basso…” o “giusto!!!” a seconda dei casi.

Il gioco si deve arrestare quando l’utente indovina,

oppure quando sono stati effettuati i 7 tentativi concessi.

 

Esercizio 27)

 

Si lancia un dado finché escano due risultati consecutivi uguali,

e si conta il numero di colpi effettuato.

 

Esercizio 28)

 

Programma “fuochi_di_artificio”. Output desiderato:

 

……..BOOM!

…BOOM!

……BOOM!

 

con 10 “esplosioni”

e un numero pseudocasuale di puntini prima di ogni esplosione.

Ci deve essere un ritardo opportuno fra la comparsa di ciascun puntino e il successivo,

nonché fra una riga e la successiva.

Vogliamo far comparire la scritta BOOM! in colore, anch’esso (pseudo)casuale.

Ricordiamo che a tale scopo si ricorre all’istruzione textcolor (n) dove n è il codice del colore desiderato.

 

Esercizio 29)

 

Scrivi un programma che, letti in ingresso due interi positivi y, k, calcoli la somma algebrica

 

  

 

Ad esempio, se y=2 e k=5, l’output dovrà essere il numero 21.

 

Esercizio 30)

 

PREMESSA: le equazioni di 2° grado

  è la FORMULA RISOLUTIVA DELL’EQUAZIONE   

 

Esempio di applicazione della formula:

 

 

La quantità  che sta sotto radice quadrata nella formula risolutiva, è chiamata

“delta” o “discriminante” e indicata col simbolo  (la lettera greca “delta” maiuscola).

 

Sono possibili tre casi:

 

·    se  ,  l’equazione ha due soluzioni distinte

·    se  ,  l’equazione ha una sola soluzione (si può anche dire che ha “due soluzioni coincidenti”)

·    se  ,  l’equazione non ha nessuna soluzione ( = è impossibile)

 

Scrivi un programma che,

letti in input i 3 coefficienti a, b, c di un’equazione di 2° grado, ne fornisca le soluzioni.

 

Converrà far calcolare innanzitutto il delta; poi:

 

if delta > 0 then … ;

if delta = 0 then … ;

if delta < 0 then …

 

Le variabili a, b, c, delta dovranno essere di tipo real e si vuole l’output in notazione non esponenziale.

 

 

 

 Esercizio 31)

 

       Scrivi un programma per la

       risoluzione di un sistema di 1° grado

a*x+b*y=c,

a1*x+b1*y=c1

col metodo di Cramer.

 

L’utente verrà invitato a inserire semplicemente i 6 numeri  a, b, c, a1, b1, c1.

 

 

Esercizio 32)

 

Si chiama “successione di Fibonacci” la sequenza di numeri  0   1   1   2   3   5   8   13   21 …

costruita nel modo seguente:

 

·      i primi due numeri della sequenza sono 0 e 1 rispettivamente;

·      a partire dal terzo, ciascun termine della sequenza è ottenuto sommando i due termini che lo precedono.

 

Scrivi un programma che, letto in input n, scriva i primi n termini della successione di Fibonacci.

 

 

Esercizio 33)

 

Un metodo per calcolare la radice cubica di un numero, approssimata per difetto a meno di 0.1

(cioè, con la prima cifra decimale esatta), è il seguente:

i)    dato il radicando x, si parte da un valore intero y che sia una approssimazione per difetto di ;

ii)    poi si passa a considerare, via via, i numeri  y;  y+0.1;  y+0.2;  y+0.3; …

  ciascuno di questi numeri viene elevato al cubo, finché il risultato superi x.

Allora il valore cercato sarà il penultimo fra i numeri considerati.

Ad esempio, data l’operazione , si partirà da  e si farà:

;  poi ;  poi ;  quindi il valore cercato è  4.1.

 

Scrivi un programma che, letti in input il radicando x (la variabile x dovrà essere di tipo real)

e un numero intero, fornito dall’utente, che sia approssimazione per difetto di ,

determini e mandi in output il valore  approssimato per difetto a meno di  0.1.

 

 

        

       AVVERTENZA (INTERESSANTE):

        può darsi che a volte il valore in output non sia quello corretto.

        Ad esempio, con x = 125, l’output anziché essere 5.0 potrà essere inaspettatamente 5.1.

        Per comprendere il motivo di questo strano fenomeno, vai a rileggere il paragrafo 7b a pag. 173.

 

 

 

Esercizio 34)

 

Un intero n letto in input è sottoposto alla seguente procedura:

·         lo si fa diventare  se è dispari;

·         lo si fa diventare la metà, ossia , se è pari.

Il procedimento viene poi iterato sul nuovo numero ottenuto,

fino ad arrestarsi quando si ottenga il valore 1.

Ad esempio, se , in questo modo si genera la sequenza:

22    11    34    17    52    26    13    40    20    10    5    16    8    4    2    1

I numeri con cui si è provato finora ad innescare questa procedura iterativa si sono tutti “abbattuti a 1”

dopo un numero più o meno alto di passi;

la comunità matematica sta tentando di provare che questo “abbattersi a 1”

deve necessariamente aver luogo per ciascun numero intero,

ma fino ad oggi questa congettura non è ancora stata dimostrata.

 

Scrivi un programma PASCAL che, letto in input un intero n fornito dall’utente,

mandi in output la successione dei numeri che si ottengono sottoponendo n alla procedura descritta.

L’algoritmo si deve arrestare quando n diventa uguale a 1,

e deve contare il numero di passi che sono stati necessari.

 

 

Esercizio 35)

 

Se tre interi  a, b, c  sono tali che  ,

allora si dice che  a, b, c  costituiscono una “terna pitagorica”.

 

Utilizzando delle strutture FOR … DO … “annidate”,

dovresti riuscire a scrivere un programma che fornisca in output un elenco di terne pitagoriche;

ad es., tutte le terne pitagoriche nelle quali c non sia superiore ad un numero N scelto dall’utente.

 

Esercizio 36) 

 

Una terna pitagorica si dice “fondamentale”

se i suoi 3 elementi sono numeri primi fra loro ( = privi di divisori comuni)

Ad esempio, la terna (5, 12, 13) è fondamentale, mentre la (6, 8, 10) non lo è.

 

Modifica il programma precedente in modo che le terne fondamentali

compaiano, nell’elenco, scritte in rosso: textcolor (12).

 

Tieni conto del fatto che, in una terna (a, b, c) tale che ,

i tre numeri a, b, c sono primi fra loro se e solo se sono primi fra loro due qualsiasi di essi

(sapresti giustificare questa affermazione?)

 

Esercizio 37) 

 

Si lancia n volte una moneta, con n letto in ingresso.

Si vuole stabilire quale è stato il numero massimo di risultati consecutivi uguali.

Ad esempio, se la successione dei lanci è stata

1 0 1 1 1 0 1 1 0 0 0 0 1 1 0 0 1,

la risposta è “4”.

 

 

Esercizio 38) 

 

Per noi esseri umani è facile, letto un numero intero a, calcolare quanto vale la somma delle sue cifre.

Ad esempio, se , la somma delle cifre di a è 14.

Non è invece altrettanto immediato far sì che il computer, dopo aver letto da tastiera un intero a

per effetto di un’istruzione read (a) contenuta in un programma PASCAL,

calcoli il valore della somma delle cifre di a.

Voglio dire:

se si comunicano al computer le cifre del numero UNA PER UNA, allora il problema è banale;

ma se invece si digita alla tastiera IL NUMERO a,

e il computer, eseguendo una read (a), lo acquisisce in memoria "tutto in una volta",

allora far calcolare dal computer la somma delle cifre di a è un po’ più complicato.

Ci vuoi provare?

 

Esercizio 38’)

 

Esistono dei numeri naturali, non superiori a 10000, che siano uguali al

CUBO DELLA SOMMA DELLE PROPRIE CIFRE?

In caso affermativo, quali e quanti sono?

Scrivi un programma PASCAL che risponda a questo quesito.