Консультация № 181662
28.12.2010, 20:38
75.00 руб.
29.12.2010, 11:45
0 4 2
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
Задание:
С помощью ПСП сформировать двухмерный MxN массив из элементов.
В качестве элементов использовать слова из K..L символов A..Z (одномерный массив символов латинского алфавита).
Таким образом, M и N – соответственно число строк и столбцов формируемой таблицы; K и L – соответственно минимальное и максимальное число букв в формируемых словах – элементах массива.
Осуществить подсчет элементов, удовлетворяющих условиям задания. Проверку заданных условий поиска реализовать с использованием типа множества.
Вывести на экран сформированный массив в виде таблицы, выделив цветом подсчитанные элементы. Ниже вывести результат подсчета выделенных элементов.

Условие задачи
Выделить цветом и подсчитать число слов, удовлетворяющих следующим условиям.
1. Число гласных букв в правой половине слова не меньше, чем в левой.
2. Слово принадлежит строке, в которой есть не менее трех подряд идущих шестибуквенных слов
K=2, L=7, M=20, N=10

Обсуждение

давно
Старший Модератор
31795
6196
28.12.2010, 20:46
общий
Вам нужно написать программу?
Если да, тогда какой язык?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.12.2010, 22:12
общий
Простите забыл). В паскале
Неизвестный
01.01.2011, 16:26
общий
это ответ
Здравствуйте, Посетитель - 356254!
Вот код программы:
Код:
uses
crt;

const
K = 2;
L = 7;
M = 20;
N = 10;
LS = 6;
gls = ['a', 'e', 'i', 'o', 'u', 'y'];

function RandomAB(a, b: byte): byte;
begin
RandomAB := random(b - a + 1) + a;
end;

var
a: array [1..M, 1..N+1] of string[L];
len, i, j, y, m1, gl, gr, count, ll: integer;
b: boolean;

begin
clrscr;
randomize;
count := 0;
for i := 1 to M do
for j := 1 to N do
begin
a[i, j] := '';
len := randomAB(K, L);
for y := 1 to len do
a[i, j] := a[i, j] + chr(randomAB(ord('a'), ord('z')));
end;

Textcolor(15);
for i := 1 to M do
begin
m1 := 0;
y := 0;
b := false;
for j := 1 to N do
begin
if length(a[i, j]) = LS then
if not b then
begin
y := 1;
b := true
end
else
inc(y)
else if b then
begin
b := false;
if y > m1 then
m1 := y;
y := 0;
end
end;
for j := 1 to N do
begin
if m1 >= 3 then
begin
gl := 0;
gr := 0;
ll := Length(a[i, j]);
for y := 1 to ll div 2 do
if a[i, j][y] in gls then
inc(gl);
if (ll mod 2) = 0 then
len := ll div 2 + 1
else
len := ll div 2 + 2;
for y := len to ll do
if a[i, j][y] in gls then
inc(gr);
if gr >= gl then
begin
inc(count);
textColor(12);
end;
end;
write(a[i, j]:(L+1));
textcolor(15);

end;
end;
WriteLn;
WriteLn('Count: ', count);
readln;
end.

Проверял в Free Pascal.
Пример работы:

Удачи!!!
давно
Академик
320937
2216
02.01.2011, 19:26
общий
это ответ
Здравствуйте, Посетитель - 356254! С Новым годом!
Используются две функции, что делает код проще. ABC-Pascal
Код:
{
С помощью ПСП сформировать двухмерный MxN массив из элементов.
В качестве элементов использовать слова из K..L символов A..Z (одномерный массив символов латинского алфавита).
Таким образом, M и N – соответственно число строк и столбцов формируемой таблицы; K и L – соответственно минимальное и максимальное число букв в формируемых словах – элементах массива.
Осуществить подсчет элементов, удовлетворяющих условиям задания. Проверку заданных условий поиска реализовать с использованием типа множества.
Вывести на экран сформированный массив в виде таблицы, выделив цветом подсчитанные элементы. Ниже вывести результат подсчета выделенных элементов.

Условие задачи
Выделить цветом и подсчитать число слов, удовлетворяющих следующим условиям.
1. Число гласных букв в правой половине слова не меньше, чем в левой.
2. Слово принадлежит строке, в которой есть не менее трех подряд идущих шестибуквенных слов
K=2, L=7, M=20, N=10
}
uses
crt;

const
K = 2;
L = 7;
M = 8; { 20; для тестирования}
N = 8; { 10; для тестирования}
LS = 6;
vowels = ['a', 'e', 'i', 'o', 'u', 'y'];

type
TMatrix = array[1..M,1..N] of string[L];

function RandomAB(a, b: byte): byte;
begin
RandomAB := random(b - a + 1) + a;
end;

function VowelsCmp(s: string): boolean;
{ Возвращает истину, если в правой части слова не меньше гласных ,чем в левой }
var
len, half : integer;
i : integer;
LVowels, RVowels: integer;
begin
len := length(s);
half := len div 2;

LVowels := 0;
for i:= 1 to half do
if s[i] in vowels then
inc(LVowels);

RVowels := 0;
for i:= len-half+1 to len do
if s[i] in vowels then
inc(RVowels);
VowelsCmp := RVowels >= LVowels;
end;

function HasNWords(m: TMatrix; cols, nrow, len, count: integer): boolean;
{ Проверка на count и более len-буквенных слов подряд }
var
j: integer;
n: integer;
begin
HasNWords := false;
n:= 0;
for j:= 1 to cols do
begin
if length(m[nrow, j])=len then
inc(n)
else
n:= 0;
if n=count then
begin
HasNWords := true;
exit;
end;
end;
end;

var
mat: TMatrix;
len, i, j, y, count: integer;
b: boolean;

begin
clrscr;
randomize;
for i := 1 to M do
for j := 1 to N do
begin
mat[i, j] := '';
len := randomAB(K, L);
for y := 1 to len do
mat[i, j] := mat[i, j] + chr(randomAB(ord('a'), ord('z')));
end;

count := 0;
Textcolor(16);
for i := 1 to M do
begin
b:= HasNWords(mat, n, i, 6, 3);
for j := 1 to N do
begin
if b and VowelsCmp(mat[i,j]) then
begin
TextColor(12);
inc(count);
end
else
TextColor(16);
write(mat[i, j]:(L+1));
end;
WriteLn;
end;
WriteLn;
WriteLn('Всего элементов по условию : ', count);
readln;
end.

Пример работы

В связи с Новым годом, тестирование и комментарии не были достаточными. Задавайте вопросы в мини-форуме.
Удачи!
Форма ответа