Program Ordinamento_E_Ricerca; uses crt; const MaxDim=502; type indice=1..MaxDim; parola=string[15]; Elenco=record dim:Indice; Dato:Array[indice] of parola end; var x:parola;V:Elenco;posto:indice;Esiste:boolean; Procedure LeggiParole(var v:elenco); begin with v do begin dim:=1; repeat write('Parola(',dim,') [INVIO a vuoto PER FINE] :'); readln(Dato[dim]); dim:=dim+1 until (dato[dim-1]='') or (dim=MaxDim); dim:=dim-2 end end; Procedure Ordina(var V:Elenco); var i,k:indice; procedure scambia(var a,b:parola); var p:parola; begin p:=a;a:=b;b:=p end; begin with V do for i:=1 to dim-1 do for k:=i+1 to dim do if dato[i]>dato[k] then scambia(dato[i],dato[k]) end; Procedure Cerca(x:parola;v:elenco;var k:indice;var trovata:boolean); var i,j:indice; begin i:=1;j:=v.dim;trovata:=false; with v do while (i<=j) and (not trovata) do begin k:=(i+j)div 2; if xdato[k] then i:=k+1 else trovata:=true end end; Procedure stampa(v:elenco); var i:indice; begin for i:=1 to v.dim do write(v.dato[i]:10);writeln end; BEGIN clrscr; writeln(' Ordinamento di parole e ricerca binaria.');writeln; writeln(' L''algoritmo distingue tra maiuscole e minuscole.'); writeln(' In caso di "numeri", l''ordinamento é lessicografico.'); writeln(#7); LeggiParole(V);Ordina(V);Stampa(V); repeat write('Parola da cercare [INVIO a vuoto per FINE] :'); readln(x);if x<>'' then begin cerca(x,V,posto,Esiste);write('"',x,'"'); if esiste then writeln(' si trova in posizione ',posto) else writeln(' non é in elenco');writeln('-----') end until x=''; writeln(' Fine ricerca.');READLN END.