Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8523
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Советник
Рейтинг: 5925
∙ повысить рейтинг »
lamed
Статус: Академик
Рейтинг: 5541
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1208
Дата выхода:01.10.2011, 16:00
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:162 / 172
Вопросов / ответов:1 / 1

Консультация # 184066: Здравствуйте! Помогите сделать задачу по теме "Объектно-ориентированное программирование". Составить описание класса для определения одномерных массивов строк фиксированной длины. Предусмотреть возможность обращения к отдельным строкам массива по индексам, контроль выхода за пределы индексов, выполнения операций поэлементного сцепл...


Консультация # 184066:

Здравствуйте! Помогите сделать задачу по теме "Объектно-ориентированное программирование".

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

Дата отправки: 22.09.2011, 15:30
Вопрос задал: Посетитель - 372181 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Сергей Бендер (Бакалавр):

Здравствуйте, Посетитель - 372181!

Вот программа. По любым вопросам -- пишите.

Код :
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.

Консультировал: Сергей Бендер (Бакалавр)
Дата отправки: 29.09.2011, 21:26
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное