Второе задание (тут возможно потребуется правка; подробно - после листинга):
Код:
Uses CRT;
Const
M=20;
N=10;
Vow=['A','E','I','O','U','Y'];
VAR
W:Array[1..M,1..N] of String;
i,j,k,N2v,q:Integer;
Lng:Array[1..M,1..N] of Byte;
C:Set of Byte;
b:Boolean;
BEGIN
C:=[];
Randomize;
ClrScr;
TextColor(7);
Writeln('Initial Array:');
Writeln;
For i:=1 to M do
Begin
For j:=1 to N do
begin
Lng[i,j]:=2+Random(5);
W[i,j]:='';
For k:=1 to Lng[i,j] do
W[i,j]:=W[i,j]+Chr(65+Random(26));
Write(W[i,j]:7);
end;
Writeln;
End;
Writeln('Press "Enter" to continue...');
Readln;
ClrScr;
N2v:=0;
Writeln('Words containing 2 vowels are red:');
For i:=1 to M do
Begin
For j:=1 to N do
begin
q:=0;
For k:=1 to Lng[i,j] do
If W[i,j][k] in Vow then Inc(q);
If q=2 then
begin
Inc(N2v);
textcolor(12);
Write(W[i,j]:7);
end
else
begin
textcolor(7);
Write(W[i,j]:7);
end;
end;
Writeln;
End;
Textcolor(7);
Writeln(N2v,' words');
Writeln('Press "Enter" to continue...');
Readln;
ClrScr;
N2v:=0;
Writeln('Words in columns containing at least 1 word finishing with vowel (blue):');
For j:=1 to N do
begin
b:=false;
i:=0;
Repeat
Inc(i);
If W[i,j][Lng[i,j]] in Vow then b:=true;
Until b or (i=M);
If b then C:=C+[j];
end;
For i:=1 to M do
Begin
For j:=1 to N do
begin
If j in C then
begin
Inc(N2v);
textcolor(1);
Write(W[i,j]:7);
end
else
begin
textcolor(7);
Write(W[i,j]:7);
end;
end;
Writeln;
End;
Textcolor(7);
Writeln(N2v,' words');
Readln;
End.
Возможные исправления связаны с тем, что я использую черный DOS-экран низкого разрешения, и указанное количество слов у меня в него не лезет. Если у Вас этого ограничения нет, то следует строку
Lng[i,j]:=2+Random(5);
заменить на
Lng[i,j]:=2+Random(6);
и во всех трёх выводах массива вместо строк
Write(W[i,j]:7);
записать
Write(W[i,j]:8);
Далее, если у Вас экран не черный, а белый, то, вероятно, всюду строку
textcolor(7);
следует заменить на
textcolor(0);