Newsgroup: it.comp.lang.pascal
Titolo: Esercizietto...

...Ciao raga, come da oggetto ho un esercizietto da sottoporvi:
Sia dato un array di interi di lunghezza N con N multiplo di 3. Scrivere una
funzione che restituisca true se esistono almeno due terzine uguali.
Es:
2 6 7 8 5 4 9 2 0 2 6 7
La funzione restituisce true poichè la prima e la quarta terzina sono
uguali.
Io ho fatto questo: (le spiegazioni a dopo!)
Program Ricerca;
type range=1..100;
     tipo=array[range] of integer;
var stringa:tipo;
    lunghezza,indice:integer;
    finale:boolean;
function terzine(lunghezza:integer;var stringa:tipo):boolean;
var b,Ricerca:tipo;
    volte,i,j,h:integer;
    controllo:boolean;
begin
controllo:=false;
h:=1;
volte:=lunghezza div 3;
for i:=1 to volte do begin
                     for j:=1 to lunghezza do b[j]:=stringa[j];
                     Ricerca[1]:=b[H];
                     Ricerca[2]:=b[H+1];
                     Ricerca[3]:=b[H+2];
                     b[H]:=0;
                     b[h+1]:=0;
                     b[h+2]:=0;
                     H:=h+3;
                     J:=1;
                     while not J>lunghezza do begin
                                              if (Ricerca[1]=B[J]) and
(Ricerca[2]=B[J+1]) and (Ricerca[3]=B[J+2])
                                              then controllo:=true;
                                              J:=J+3;
                                              end;
                     end;
if controllo=false then terzine:=false
else terzine:=true;
end;
{------------------------------MAIN---------------------------------}
begin
writeln;
write('Inserisci la lunghezza della stringa: ');
readln(lunghezza);
writeln;
for indice:=1 to lunghezza do begin
                              write('Inserisci la cifra della',indice,'ø
posizione: ');
                              readln(stringa[indice]);
                              end;
finale:=terzine(lunghezza,stringa);
writeln(finale);
readln;
{------------------------------------SPIEGAZIONE-------------------------
In pratica procedo copiando l'array originale in un altro nel quale azzererò
la terzina presa in considerazione dopo averla copiata in un altro array
di ricerca. Successivamente andrò a fare i confronti. }
Grazie per tutti quelli che risponderanno o semplicemente visualizzeranno
questo post.
Byez Gianni

Ok risolto :)
Program Ricerca;
type range=1..100;
     tipo=array[range] of integer;
var stringa:tipo;
    lunghezza,indice:integer;
function terzine(lunghezza:integer;var stringa:tipo):boolean;
var b,Ricerca:tipo;
    volte,i,j,h:integer;
    controllo:boolean;
begin
controllo:=false;
h:=1;
volte:=lunghezza div 3;
for i:=1 to volte do begin
                     for j:=1 to lunghezza do b[j]:=stringa[j];
                     Ricerca[1]:=b[h];
                     Ricerca[2]:=b[h+1];
                     Ricerca[3]:=b[h+2];
                     b[H]:=0;
                     b[h+1]:=0;
                     b[h+2]:=0;
                     H:=h+3;
                     J:=1;
                     while J<lunghezza do begin
                                              if (Ricerca[1]=B[J]) and
(Ricerca[2]=B[J+1]) and (Ricerca[3]=B[J+2])
                                              then begin
                                                   controllo:=true;
                                                   J:=J+3;
                                                   end
                                              else J:=J+3;
                                              end;
                     end;
if controllo=false then terzine:=false
else terzine:=true;
end;
begin
writeln;
write('Inserisci la lunghezza della stringa: ');
readln(lunghezza);
writeln;
for indice:=1 to lunghezza do begin
                              write('Inserisci la cifra della ',indice,'ø
posizione: ');
                              readln(stringa[indice]);
                              end;
writeln(terzine(lunghezza,stringa));
readln;