Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторная работа №6

Читайте также:
  1. A) работает со всеми перечисленными форматами данных
  2. Be on the make - продолжать работать
  3. E) Работа в цикле
  4. I. Самостоятельная работа
  5. I. Самостоятельная работа
  6. I. Самостоятельная работа
  7. I.11. РАБОТА БЕЗ КАКОЙ-ЛИБО МОТИВАЦИИ

Группа: ТК-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 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Двумерные массивы| Что необходимо сделать в первую очередь в случае эвакуации из зоны аварии на химически-опасном объекте с выбросом АХОВ прибыв на место размещения?

mybiblioteka.su - 2015-2024 год. (0.024 сек.)