ProgramMastermind;Usescrt;VarA,B:array[1..4]ofinteger;i,tentativa,certos:integer;Beginclrscr;randomize;fori:=1to4doA[i]:=random(3)+1;writeln('Tem 10 tentativas para acertar os 4 digitos');writeln('gerados aleatoriamente e que so podem ser 1,2,3');writeln;tentativa:=0;repeattentativa:=tentativa+1;fori:=1to4dobeginrepeatWrite('Escreva o ',i,'§ digito: ');readln(B[i]);untilB[i]in[1..3]end;certos:=0;fori:=1to4doifA[i]=B[i]thencertos:=certos+1;writeln;writeln(certos,' Certos');writeln;until(certos=4)or(tentativa=10);Ifcertos=4thenWriteln('Acertou em ',tentativa,' tentativas')elsewriteln('Nao conseguiu acertar');writeln;writeln('Os digitos escondidos eram: ');fori:=1to4dowriteln(a[i]);readkey;end.
Versão completa
programmastermind2;(* MASTERMIND P@P v2.0 *)constMaxTent=10;// Número máximo de tentativasNDigs=4;// Número de dígitos da sequência a adivinharStrEmpty:string='';ExisteEPosCorrecta=#219;ExisteEPosIncorrecta=#177;NaoExiste=#32;typeStrTent=string[NDigs];varsequencia:StrTent;// Sequência gerada aleatoriamentetentativa:StrTent;// Tentativa do utilizadorcorreccao:StrTent;// Indicação dos dígitos correctost:byte=1;// Nº tentativacerto:boolean;// Sequência está 100% correcta?functionInt2Str(i:integer):string;(* Converte Integer para String *)beginStr(i,Int2Str);end;functionOrdena(s:StrTent):StrTent;(* Ordena uma string que contém os caracteres da correcção *)varj,l:integer;// contadores geraisaux:char;// auxiliar para efectuar a trocabeginforj:=1toNDigsdoforl:=jtoNDigsdoif((s[j]in[ExisteEPosIncorrecta,NaoExiste])and(s[l]=ExisteEPosCorrecta))or((s[j]=NaoExiste)and(s[l]=ExisteEPosIncorrecta))thenbeginaux:=s[j];s[j]:=s[l];s[l]:=aux;continue;end;Ordena:=s;end;procedureCriarSequencia(varseq:StrTent);(* Gera sequência de forma aleatória *)varj:byte;beginrandomize;forj:=1toNDigsdoseq:=seq+Int2Str(random(10));end;procedureCorrecto(constseq,tent:StrTent;vartransmissor:boolean;varcorr:StrTent);(* Compara "tent" com "seq", indica se é igual com "transmissor" e indica correcção por "corr" *)varj:byte;functionContem(constdig:char;constseq:StrTent):boolean;(* "seq" contém o caracter "dig"? *)varj:byte;beginContem:=false;forj:=1toNDigsdoifseq[j]=digthenbeginContem:=true;break;end;end;begintransmissor:=true;corr:=StrEmpty;forj:=1toNDigsdoifseq[j]=tent[j]then// número está na posição correctacorr:=corr+ExisteEPosCorrectaelsebeginifseq[j]<>tent[j]thenbegintransmissor:=false;ifContem(tent[j],seq)then// número existe mas está noutra posiçãocorr:=corr+ExisteEPosIncorrectaelsecorr:=corr+NaoExiste;// número não existeend;end;end;begin(* BLOCO PRINCIPAL *)CriarSequencia(sequencia);correccao:=StrEmpty;repeatwrite('Tentativa ',t,': ');readln(tentativa);Correcto(sequencia,tentativa,certo,correccao);writeln('Resultado: ',#179,Ordena(correccao),#179);inc(t);until(t>=MaxTent)orcerto;ifcertothenwriteln('Acertou!')elsewriteln('Passou as ',MaxTent,' tentativas...');readln;// pausaend.