Newsgroup: it.comp.java
Titolo: Programmazione strutturata: un aiuto

Ciao a tutti,
Ho fatto le selezioni per la partecipazione ad un corso di
programmazione strutturata. Mi hanno sottoposto un problema da
risolvere ma dal momento che le mie conoscenze di programmazione sono
molto approssimative (è per questo che voglio iniziare il corso) ho
l'impessione di non averne imbroccata una. Qualcuno può darmi una
mano?
Il problema è questo:
Nel seguito descriviamo un problema da risolvere. Per tale problema è
fornita una soluzione, in termini di un algoritmo espresso mediante
pseudocodice.
Abbiamo però omesso una parte (sottoblocco?) dell'algoritmo,
lasciandola indicata con "???". Anche per questa parte forniamo una
specifica algoritmica, indicante tutti i passi da eseguire. I vari
passi sono dati in modo disordinato.
Il candidato dovrebbe riordinare i passi dell'algoritmo "???". Per
ricostruire l'ordine giusto, assegnare ad ogni passo un numero
progressivo (1 = primo passo). Assegnare 0 (zero) agli eventuali passi
che non debbano rientrare nell'algoritmo.
Il programma gestisce la tabella dati di un condominio composto da sei
scale (1..6). La tabella viene costruita leggendo dati da un file. Per
ogni condomino sono memorizzati i seguenti dati: NOME, COGNOME
(stringhe di al più 30  caratteri), SCALA, INTERNO (interi), PAGATO,
DAPAGARE (numeri reali).
Uno degli scopi del programma (quello che qui ci interessa) è, data la
tabella del condominio, una somma di denaro (numero reale) e due
interi (scala e interno), aggiornare i dati sui pagamenti per
l'appartamento in questione, aggiungendo la somma data a quelle pagate
dal condomino e diminuendo corrispondentemente le somme da pagare. Nel
caso in cui la quota da pagare sia ancora superiore al 30% delle somme
già versate, si dovrà inoltre applicare un interesse di mora del 5%,
modificando di conseguenza la somma da pagare. Di tutto ciò si occupa
il sottoblocco "???" da riordinare.
Ecco l'algoritmo generale:
1.	definire il tipo CONDOMINO, come record contenente i campi: nome,
cognome, scala, interno, pagato, daPagare (definiti secondo quanto
sopra specificato);
2.	definire il tipo TABELLACONDOMINIO, come array di record CONDOMINO,
opportunamente dimensionato (sia NMAX il numero di appartamenti del
condominio);
3.	definire le variabili globali
a.	Tab, di tipo TABELLACONDOMINIO;
b.	sc, un intero per indicare la scala di un appartamento
c.	in, un intero per indicare l'interno identificante un appartamento
d.	pag, un reale indicante la cifra da contabilizzare per un certo
appartamento;
e.	Trovato, una variabile logica (booleana);
f.	i, un contatore intero;
4.	Scaricare dal file i dati sul condominio, memorizzandoli nella
tabella
5.	Gestione dei dati in Tab (omettiamo i particolari non importanti ai
fini della soluzione dell'esercizio) &#8230;
a.	...
b.	Supponendo di dover modificare l'orario di partenza in un volo,
i.	Richiedere in input scala e interno dell'appartamento per il quale
contabilizzare un pagamento (l'input viene ricevuto in sc e in);
ii.	Richiedere in input la somma versata all'amminisratore per
l'appartamento in questione (l'input viene ricevuto in pag);
iii.	"???"
c.	...
6.	Operazioni di terminazione del programma
Ed ecco lo pseudocodice che dovrebbe risolvere "???", da riordinare
a.	se Trovato è FALSE
b.	se Trovato =TRUE
c.	altrimenti incrementare i di 1
d.	mentre (i<Num) or (Trovato=FALSE)
e.	mentre (i<=Num) and (Trovato=FALSE)
f.	modificare il campo pagato del record Tab[i] aggiungendogli pag e
il campo dapagare del record Tab[i] sottraendogli pag
g.	inizializzare Trovato =FALSE
h.	inizializzare Trovato =TRUE
i.	se il campo scala del record Tab[i] è uguale a sc, allora assegna
Trovato=TRUE
j.	se il campo dapagare del record Tab[i] è maggiore del campo pagato
diviso 10 per 3, riassegnarlo con il suo prodotto per 1.05
k.	se il campo scala del record Tab[i] è uguale a sc, e il campo
interno del record Tab[i] è uguale a in allora assegnare Trovato=TRUE
l.	genera un messaggio di errore ("dati sull'appartamento errati") e
termina
m.	incrementa i di 1
n.	inizializzare i=1
o.	inizializzare i=2
Io ho rislto ordinando cos' il codice:
n. inizializzare i=1
g. inizializzare Trovato =FALSE
e. mentre (i<=Num) and (Trovato=FALSE)
k  se il campo scala del record Tab[i] è uguale a sc, e il campo
interno del record Tab[i] è uguale a in allora assegnare Trovato=TRUE
b. se Trovato =TRUE
f.  modificare il campo pagato del record Tab[i] aggiungendogli pag e
il campo
    dapagare del record Tab[i] sottraendogli pag
j. se il campo dapagare del record Tab[i] è maggiore del campo pagato
diviso 10
   per 3, riassegnarlo con il suo prodotto per 1.05 
c. altrimenti incrementare i di 1
l  genera un messaggio di errore ("dati sull'appartamento errati") e
termina
Le altre le ho omesse perchè mi sembrava non c'entrassero.
Sono disperato aiutatemi!! Potete indicarmi la sequenza giusta?
papesatan

Ma quanto sei OT....e non lo hai nemmeno segnalato....
e poi problemi di strutturata.....uno capisce i problemi che
si possono avere all'inizio e cerca di risolverli e quì si fa con molto
piacere, ma quì si rasenta la follia.

>un corso di programmazione strutturata. Mi hanno >sottoposto un problema
ROFTL!!!