Читайте также: |
|
Группа: ТК-11
Выполнил: Остальцев Павел
Задание:
С помощью ПСП сформировать двухмерный MxN массив из элементов.
В качестве элементов использовать слова из K..L символов A..Z,
представленные одномерными массивами - векторами.
M и N - соответственно число строк и столбцов матрицы, представляемой формируемым двухмерным массивом;
K и L - соответственно минимальное и максимальное число букв в формируемых словах - одномерных массивах.
Вывести на экран сформированный массив в виде таблицы слов-элементов, выделив цветом или мерцанием элементы, указанные в варианте.
Подсчитать выделенные элементы и вывести результат на экран в
отдельном окне.
С помощью стандартных средств CRT и операторв цикла осуществить
возможность повтора программы.
Вариант:
Описание выполнимых действий:
Запишем «шапку» программы в которой укажем все библеотеки, переменные и константы.
Program lab_6;
uses crt;
const K=2; L=7; M=20; N=10;
Glas: Set of char=['a', 'e','i','u','y','o'];
var i,j,s,t,g,z,a,usl:integer;
Mas:array [1..M,1..N] of string;
h,key:char;
p:string;
Наша программа будет состоять из нескольких процедур. Запишем первую процедуру, которая будет отвечать за создание массива:
procedure massiv_sozdanye;
begin
Формирование слов в массиве будет происходить случайным образом, поэтому воспользуемся функцией randomize. Формирование массива происходит путем повтора операции записи символа в определенной строке в определенном столбце в соответствии с условиями длины слова, количества строчек и количества столбцов:
randomize;
for i:=1 to M do
begin
for j:=1 to N do
begin
g:=random(l-k+1)+k;
for z:=1 to g do
begin
a:=random(25)+97;
h:=chr(a);
p:=p+h;
end;
Mas[i,j]:=p;
p:='';
end;
end;
end;
Далее составим процедуру, которая будет выполнять условие 1, т.е. закрашивать красным цветом слова, в которых одна из двух средних букв в слове-гласная.
Описшем переменную WS с присвоением ей типа boolean:
procedure part1;
var WS: array[1..M,1..N] of boolean;
При формировании массива условие 1 будет проверять каждую ячейку на его соответствие:
begin
usl:=0;
for i:=1 to M do
for j:=1 to N do
begin
if (((mas[i,j][length(mas[i,j])div 2] in glas)
or (mas[i,j][length(mas[i,j]) div 2+1] in glas))
and (length(mas[i,j]) mod 2=0))
or ((length(mas[i,j]) mod 2<>0)
and (mas[i,j][length(mas[i,j]) div 2+1] in glas))
then
begin
WS[i,j]:=true;
usl:=usl+1;
end
else WS[i,j]:=false;
end;
Полученные результаты соответсвия необходимо вывести на экран закрасив определенным цветом. В нашем примере это красный цвет.
for i:=1 to M do
begin
for j:=1 to N do
begin
if WS[i,j] then textcolor(red) else textcolor(white);
write(Mas[i,j]:8);
end;
writeln;
end;
textcolor(white);
writeln ('Zakrasheno ',usl,' slov');
end;
В следующую процедуру включим выполнение условия 2, т.е. закрашивание слов которые принадлежат столбцу, в котором есть не менее трех слов, имеющих по две гласные буквы
Опишем переменные:
procedure part2;
var ch:array [1..N] of integer;{описание доп массива, каждый элемент которого будет равен числу слов, имеющих по две гласные буквы, в соответствующем столбике}
Выполним обращение программы к каждому эллементу массива с проверкой на условие:
begin
usl:=0;
for j:=1 to n do
ch[j]:=0;
for i:=1 to m do
begin
for j:=1 to n do
begin
a:=0;
for g:=1 to length(mas[i,j]) do
if (mas[i,j][g] in glas) then
a:=a+1;
if a=2 then
ch[j]:=ch[j]+1;
end;
end;
Далее необходимо что бы программа обратившись к каждому элементу массива выделила цветом весь столбец, если выполняется условие 2.
for i:=1 to M do
begin
for j:=1 to N do
begin
if (ch[j]>=3)
then
begin
textcolor(red);
usl:=usl+1;
end
else textcolor(white);
write (Mas[i,j]:8);
end;
writeln;
end;
textcolor(white);
writeln ('Zakrasheno ',usl,' slov');
end;
Следующей частью программы будет выполнение всех перечисленных процедур с выводом сообщения о повторе программы с последующим ожиданием действий пользователя.
Для удобства использования программы используем вопросно-остветную форму выполнения программы, то есть если пользователь не нуждается в выполнении определенного блока, то программа его пропустит.
Запишем это в виде сравнения вводимых данных:
begin
Repeat
massiv_sozdanye;
writeln('press part of the program (1/2)');
key:=readkey;
if key='1' then
begin
part1;
writeln('restart program (y/n)?');
key:=readkey;
end;
Следующая блок программы будет выполнятбся тем же образом:
if key='2' then
begin
part2;
writeln('restart program (y/n)?');
key:=readkey;
end;
Оба этих блока будут выполняться пока пользователь не введет n, что по условию выводит программу из цикла:
Until (key='n') {Конец цикла репит, в скобках написаны условия выхода из цикла}
End;
Программа:
Program lab_6;
uses crt;
const K=2; L=7; M=20; N=10;
Glas: Set of char=['a', 'e','i','u','y','o'];
var i,j,s,t,g,z,a,usl:integer;
Mas:array [1..M,1..N] of string;
h,key:char;
p:string;
procedure massiv_sozdanye;
begin
randomize;
for i:=1 to M do
begin
for j:=1 to N do
begin
g:=random(l-k+1)+k;
for z:=1 to g do
begin
a:=random(25)+97;
h:=chr(a);
p:=p+h;
end;
Mas[i,j]:=p;
p:='';
end;
end;
end;
procedure part1;
var WS: array[1..M,1..N] of boolean;
begin
usl:=0;
for i:=1 to M do
for j:=1 to N do
begin
if (((mas[i,j][length(mas[i,j])div 2] in glas)
or (mas[i,j][length(mas[i,j]) div 2+1] in glas))
and (length(mas[i,j]) mod 2=0))
or ((length(mas[i,j]) mod 2<>0)
and (mas[i,j][length(mas[i,j]) div 2+1] in glas))
then
begin
WS[i,j]:=true;
usl:=usl+1;
end
else WS[i,j]:=false;
end;
for i:=1 to M do
begin
for j:=1 to N do
begin
if WS[i,j] then textcolor(red) else textcolor(white);
write(Mas[i,j]:8);
end;
writeln;
end;
textcolor(white);
writeln ('Zakrasheno ',usl,' slov');
end;
procedure part2;
var ch:array [1..N] of integer;
begin
usl:=0;
for j:=1 to n do
ch[j]:=0;
for i:=1 to m do
begin
for j:=1 to n do
begin
a:=0;
for g:=1 to length(mas[i,j]) do
if (mas[i,j][g] in glas) then
a:=a+1;
if a=2 then
ch[j]:=ch[j]+1;
end;
end;
for i:=1 to M do
begin
for j:=1 to N do
begin
if (ch[j]>=3)
then
begin
textcolor(red);
usl:=usl+1;
end
else textcolor(white);
write (Mas[i,j]:8);
end;
writeln;
end;
textcolor(white);
writeln ('Zakrasheno ',usl,' slov');
end;
begin
Repeat
massiv_sozdanye;
writeln('press part of the program (1/2)');
key:=readkey;
if key='1' then
begin
part1;
writeln('restart program (y/n)?');
key:=readkey;
end;
if key='2' then
begin
part2;
writeln('restart program (y/n)?');
key:=readkey;
end;
Until (key='n')
end.
Блок-Схема.
Дата добавления: 2015-10-30; просмотров: 116 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Двумерные массивы | | | Что необходимо сделать в первую очередь в случае эвакуации из зоны аварии на химически-опасном объекте с выбросом АХОВ прибыв на место размещения? |