1. Realizza il documento di specifica per l’operazione Ricerca() in una tabella ordinata.
| Interfaccia: Ricerca(IN T: TTabella; IN K: TChiave; OUT D: TDato). La tabella e la chiave primaria in ingresso, il dato in uscita. |
| Prerequisiti: Nessuno. |
| Effetti: Se il dato con chiave K esiste all'interno della tabella T allora viene restituito in D altrimenti ... |
| Esempi d'uso: ... |
2. A partire dalle operazioni presenti nella specifica di un ADT DATA: Giorno?(), Mese?(), Anno?() realizza le operazioniUguali?():
| Interfaccia: Uguali?(IN D1, D2: TDATA; OUT R: Logico). Nella pratica si tratterà di una funzione... |
| Prerequisiti: Nessuno. |
| Effetti: La risposta è "VERO" se le due date D1 e D2 sono uguali ... |
| Esempi d'uso: Se D1 è "23 gennaio 2003" e D2 ... allora ... (la rappresentazione fisica delle date non è importante...) |
| Codifica: (il linguaggio è a scelta...) |
Function UgualiDate(D1, D2: TData): Boolean;Begin UgualiDate:=(Giorno(D1) = Giorno(D2)) And (Mese(D1) = Mese(D2)) And (Anno(D1) = Anno(D2));End;oppure int UgualiDate(TData D1, TData D2){ return(Giorno(D1)==Giorno(D2) && Mese(D1)==Mese(D2) && Anno(D1)==Anno(D2));}oppure Function UgualiDate(D1 As TData, D2 As TData) As Boolean UgualiDate = (Giorno(D1)=Giorno(D2)) And (Mese(D1)=Mese(D2)) And (Anno(D1)=Anno(D2))End FunctionPrecede?():
| Interfaccia: Precede?(IN D1, D2: TDATA; OUT R: Logico). |
| Prerequisiti: Nessuno. |
| Effetti: La risposta è "VERO" se D1 precede D2 ... |
| Esempi d'uso: Se D1 ... e D2 ... allora ... |
| Codifica: |
Function PrecedeDate(D1, D2: TData): Boolean;Begin if(Anno(D1)<Anno(D2)) Then PrecedeDate:=True else if(Anno(D1)=Anno(D2)) And (Mese(D1)<Mese(D2)) Then PrecedeDate :=True else if(Anno(D1)=Anno(D2)) And (Mese(D1)=Mese(D2)) And (Giorno(D1)<Giorno(D2)) Then PrecedeDate:=True else PrecedeDate:=False;End;oppure int PrecedeDate(TData D1, TData D2){ if(Anno(D1)<Anno(D2)) return(1); else if(Anno(D1)==Anno(D2) && Mese(D1)<Mese(D2)) return(1); else if(Anno(D1)==Anno(D2) && Mese(D1)==Mese(D2) && Giorno(D1)<Giorno(D2)) return(1); else return(0);}oppure Function PrecedeDate(D1 As TData, D2 As TData) As Boolean if(Anno(D1)<Anno(D2)) Then PrecedeDate=True else if(Anno(D1)=Anno(D2)) And (Mese(D1)<Mese(D2)) Then PrecedeDate =True else if(Anno(D1)=Anno(D2)) And (Mese(D1)=Mese(D2)) And (Giorno(D1)<Giorno(D2)) Then PrecedeDate=True else UgualiDate=FalseEnd Function 3. Indica i risultati finali attesi dopo l’esecuzione di ciascuna sequenzaI valori di X, Y e S sono (quelli a destra...) Create(S); Push(S, X); Push(S, Y); Pop(S, X); X=6, X=6, X=6, X=5Y=5, Y=5, Y=5, Y=5S={}, S={6}, S={6, 5}, S={6} Idem Crea(C); Accoda(C, X); Accoda(C, Y); Servi(C, X);X=50, X=50, X=50, X=50Y=60, Y=60, Y=60, Y=60C={}, C={50}, C={60, 50}, C={60} 4. Realizza un sottoprogramma che trasferisca in una coda gli elementi presenti in uno stack.
| Interfaccia: Trasferisci(IN/OUT S: TSTACK; IN/OUT C: TCODA). |
| Prerequisiti: Nessuno. Se le strutture dati sono di dimensione fissa occorre che ci sia lo spazio sufficiente in C. |
| Effetti: Lo stack viene "svuotato" e i suoi elementi vanno a "riempire" la coda. |
| Esempi d'uso: Se S = { A, B, C } e C = { } allora dopo l'esecuzione si avrà S = { } e C = { A, B, C } |
| Codifica: |
Procedure Trasf_S_in_C(Var S: TStack; Var C: TCoda);Var E: Elemento;Begin While(Not IsEmpty(S)) do begin Pop(S, E); Accoda(C, E); end;End;oppure Sub Trasf_S_in_C(ByRef S As TStack, ByRef C As TCoda)Dim E As Elemento Do While(Not IsEmpty(S)) Call Pop(S, E) Call Accoda(C, E) LoopEnd Sub oppure void Trasf_S_in_C(TStack *S, TCoda *C){ Elemento E; while(!IsEmpty(S)) { Pop(S, E); Accoda(C, E); }} |