Ajde da prvo malo prokomentarisem:
1. Predpostavicu da vazi komutativnost, odnosno da je aabbccdd = abcdabcd = cadbabdc idt.
2. A elemente ne moramo posmatrati uopste jer koliko god da ih ima (ili ih uopste nema) rec je ispravna
3. C elemenata moze biti 1 i samo 1
4. D elemenata moze biti 1 i samo 1
5. B elemenata mora biti paran broj ili 0
6. u reci moze biti iskljucivo A, B, C i D elemenata
7. A=a, B=b, C=c, D=d
Ako je ovo sto sam gore predpostavio tacno, onda ce ti sledeci kod pomoci:
Code:
Program ProveraReci;
Const
MaxReci = 100;
MaxLen = 50;
Var
k,
X : Integer;
Reci : Array [1..MaxReci] Of String;
Duzine : Array ['A'..'D'] Of Integer;
Ch : Char;
Function UpperCase (S : String) : String;
Var
x : Integer;
Begin
For X := 1 To Length (S) Do
S [x] := UpCase (S [x]);
UpperCase := S;
End;
Begin
Repeat
Write ('Koliko reci zelite da unesete (1-', MaxReci, ')? ');
ReadLn (k);
If (k < 1) Or (K > MaxReci) Then
Write ('Pogresan unos ! ');
Until (K >= 1) And (K <= MaxReci);
For X := 1 To K Do Begin
Repeat
Write ('Unesite rec pod rednim brojem ', x, ': ');
ReadLn (Reci [x]);
If Length (Reci [x]) > MaxLen Then
WriteLn ('Predugacka rec! Maksimalna duzina je ', MaxLen, ' znakova!')
Else
Reci [x] := UpperCase (Reci [x]);
Until (Length (Reci [x]) <= MaxLen);
End;
For X := 1 To K Do Begin
Write (x, ': Rec ', Reci [x], ' je ');
For Ch := 'A' To 'D' Do Begin
Duzine [Ch] := 0;
While Pos (Ch, Reci [x]) > 0 Do Begin
Inc (Duzine [Ch]);
Delete (Reci [x], Pos (Ch, Reci [x]), 1);
End;
End;
If Length (Reci [x]) > 0 Then
WriteLn ('neispravna jer ima ilegalnih karaktera')
Else If Duzine ['C'] <> 1 Then
WriteLn ('neispravna jer nema 1 i samo 1 element C ')
Else If Duzine ['D'] <> 1 Then
WriteLn ('neispravna jer nema 1 i samo 1 element D ')
Else If (Duzine ['B'] Mod 2) <> 0 Then
WriteLn ('neispravna jer ima neispravan broj B elemenata')
Else
WriteLn ('ispravna');
End;
readln;
End.
Program je testiran u TP7.0, ne znam da li For petlje sa Char-ovima rade u predhodnim verzijama.