Консультация № 184066
22.09.2011, 15:30
60.32 руб.
0 5 1
Здравствуйте! Помогите сделать задачу по теме "Объектно-ориентированное программирование".

Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, печать (вывод на экран) элементов массива и всего массива.

Обсуждение

Неизвестный
22.09.2011, 21:32
общий
В каком Паскале? В одном классе - один массив?
Неизвестный
22.09.2011, 22:48
общий
PascalABC
Ну не знаю, может и один.
давно
Профессионал
304622
583
26.09.2011, 14:22
общий
Поясните, что такое "выполнения операций поэлементного сцепления двух массивов с образованием нового массива,"

Это из А=('qwe','asd','zxc') и B=('rty','fgh','vbn') сделать:
1) C=('qwe','asd','zxc','rty','fgh','vbn')
или
2) C=('qwerty','asdfgh','zxcvbn')?

Вариант 2) ближе к понятию "поэлементное сцепление", но противоречит условию, что строки фиксированной длины.
Неизвестный
26.09.2011, 15:38
общий
Адресаты:
Да я и сам не знаю, сделайте как нибудь, чтобы полегче мне было разобраться.
давно
Профессионал
304622
583
29.09.2011, 21:26
общий
это ответ
Здравствуйте, Посетитель - 372181!

Вот программа. По любым вопросам -- пишите.
[code h=200]
const l=5; //длина строки
nmax=100; //максимальный размер массива строк

type mystring=string[l]; // строка фиксированной длины l
masstring=array[1..nmax] of mystring;
List = class
a:masstring; // сам массив
len:integer; // текущий размер
ierror:boolean; // флаг ошибки при последнем запуске
// контроле индекса -- Check
constructor Create;
function Check(i:integer):boolean;
procedure Add(s:mystring);
constructor Join(l1,l2:List);
function GetElement(i:integer):mystring;
procedure Merge(l:List);
procedure PrintElement(i:integer);
procedure PrintList;
end;

// создание пустого массива
constructor List.Create;
var i:integer;
begin
len:=0;
for i:=1 to nmax do
a[i]:='';
ierror:=false;
end;

// контроль выхода за пределы индексов
// результат подаётся и в выход функции
// и в переменную
function List.Check(i:integer):boolean;
begin
if (i<=len) and (i<=nmax)
then begin
Check:=true;
ierror:=false;
end
else begin
Check:=false;
ierror:=true;
end;
end;

// добавление нового элемента
procedure List.Add(s:mystring);
begin
inc(len); // размер len увеличивается и проверяется
if Check(len)
then a[len]:=s
else dec(len);// если нельзя уменьшается обратно
end;

// Второй конструктор: создание нового массива поэлементным
// сцеплением двух существующих массива
constructor List.Join(l1,l2:List);
var i:integer;
begin
i:=1;
while l1.Check(i) or l2.Check(i) do //проверяется i в обоих массивах
begin
// из того массива, где не получено ошибки, берётся элемент
if not l1.ierror then Add(l1.GetElement(i));
if not l2.ierror then Add(l2.GetElement(i));
inc(i)
end;
end;

// Получение элемента
function List.GetElement(i:integer):mystring;
begin
if Check(i)
then GetElement:=a[i]
else GetElement:='';
end;

// Включение другого массивак с проверкой повторяющихся элементов
procedure List.Merge(l:List);
var i,j:integer;
s:mystring;
begin
i:=1;
while l.Check(i) do //проверяется очередной индекс другого массива
begin
s:=l.GetElement(i); // берётся элемент из другого массива
// поиск взятого элемента в своём массиве
j:=1;
while Check(j) and (s<>GetElement(j)) do
inc(j);
// если выход из цикла произошёл по превышению индекса в другом
// массиве, значит совпадения не найдено и элемент s можно добавлять
if ierror then Add(s);
inc(i);
end;
end;

// вывод элемента
procedure List.PrintElement(i:integer);
var s:mystring;
begin
s:=GetElement(i);
if ierror
then write('Error: wrong index')
else write(s);
end;

// вывод всего массива
procedure List.PrintList;
var i:integer;
begin
for i:=1 to len do
begin
PrintElement(i);
writeln;
end;
end;

var mylist1,mylist2,mylist3,mylist4:List;

begin
mylist1:=List.Create;
mylist1.Add('qwert');
mylist1.Add('asdfg');
mylist1.Add('zxcvb');
writeln('mylist1');
mylist1.PrintList;

mylist2:=List.Create;
mylist2.Add('yuiop');
mylist2.Add('hjkl;');
mylist2.Add('nm,./');
writeln('mylist2');
mylist2.PrintList;

writeln('mylist3: Join mylist1 + mylist2');
mylist3:=List.Join(mylist1,mylist2);
mylist3.PrintList;

mylist4:=List.Create;
mylist4.Add('zxcvb');
mylist4.Add('12345');
mylist4.Add('yuiop');
mylist4.Add('67890');
writeln('mylist4');
mylist4.PrintList;

mylist3.Merge(mylist4);
writeln('Merge mylist4 -> mylist3');
mylist3.PrintList;

readln;
end.[/code]
Форма ответа