67461
Процедуры и функции для работы со строками string
Лекция
Информатика, кибернетика и программирование
Объявление класса Имя класса = clss Имя базового класса privte Объявление закрытых полей и методов Все что объявлено здесь может быть использовано только в данном модуле protected Объявление открытых полей и методов Все что объявлено здесь может быть использовано и в данном модуле и во всех...
Русский
2014-09-10
150 KB
0 чел.
Лекция 9
Процедуры и функции для работы со строками string
function Length(S: string): byte;
Возвращает длину строки S. Значение длины равноценно значению Ord(s[0]), поскольку код «нулевого» байта строки есть её текущая длина.
function Copy(S: string; iStart, iLength: byte): string;
Возвращает подстроку строки S набор из iLength символов, начинающийся с символа с номером iStart. Нумерация символов в строке начинается с единицы.
Замечание: Copy(S, n, 1) равноценно S[n].
procedure Delete(S: string; iStart, iLength: byte);
Удаляет из строки S её подстроку набор из iLength символов, начинающийся с символа с номером iStart. Нумерация символов в строке начинается с единицы.
function Index(S, SWhat: string): byte;
Ищет первое вхождение подстроки sWhat в строку S. Результат номер символа, начиная с которого найдено вхождение. Результат ноль, если вхождение не найдено.
function Str(X: <числовой тип>): string;
Возвращает строковое выражение числа X.
procedure Val(S: string; var X: <числовой тип>; IER: integer);
Пытается преобразовать строку S в число и занести его в параметр-переменную X. Если попытка завершается удачно, IER=0, в противном случае IER<>0.
Граф. Основные понятия и определения
(http://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0))
Граф, или неориентированный граф это упорядоченная пара , для которой выполнены следующие условия:
(а значит и, , иначе оно было бы мультимножеством) обычно считаются конечными множествами. Многие хорошие результаты, полученные для конечных графов, неверны (или каким-либо образом отличаются) для бесконечных графов. Это происходит потому, что ряд соображений становится ложным в случае бесконечных множеств.
Вершины и рёбра графа называются также элементами графа, число вершин в графе порядком, число рёбер размером графа.
Вершины и называются концевыми вершинами (или просто концами) ребра . Ребро, в свою очередь, соединяет эти вершины. Две концевые вершины одного и того же ребра называются соседними.
Два ребра называются смежными, если они имеют общую концевую вершину.
Два ребра называются кратными, если множества их концевых вершин совпадают.
Ребро называется петлёй, если его концы совпадают, то есть .
Степенью вершины называют количество инцидентных ей рёбер(при этом петли считают дважды).
Вершина называется изолированной, если она не является концом ни для одного ребра; висячей (или листом), если она является концом ровно одного ребра.
Ориентированный граф (сокращённо орграф) это упорядоченная пара , для которой выполнены следующие условия:
Дуга это упорядоченная пара вершин , где вершину называют началом, а концом дуги. Можно сказать, что дуга ведёт от вершины к вершине .
Объектно-ориентированное программирование (ООП)
Понятие класса дополнение к понятию типа.
Тип [обычной] переменной определяет множество значений, которые она способна принимать, и множество операций, которые над ней можно производить.
Класс [объектной] переменной определяет и множество значений, которые она способна принимать, и множество операций, которые над ней можно производить, и множество операций, которые она сама над собой способна производить.
Три принципа ООП:
Инкапсуляция соединение в единой структуре данных и программных кодов (т.н. методов), предназначенных для обработки именно этих данных.
Наследование возможность построения нового класса на основе существующего (т.н. базового, или родительского) класса с дополнением и/или переопределением данных и методов. Наследование есть механизм передачи данных и методов родительского класса в дочерний класс.
Полиморфизм возможность обращения по одному имени к разным методам.
Объектом, или объектной переменной принято называть конкретный экземпляр переменной заданного класса.
По сути (но не по синтаксису), объектная переменная есть указатель на первый байт области памяти, выделенной под поля объекта. Эта область памяти предоставляется объекту тогда, когда он «начинает жить», и высвобождается тогда, когда он свою жизнь завершает.
Вместе с «рождением» первого экземпляра объекта заданного класса в память загружается и его инкапсулированные программные коды. Второй и последующие экземпляры, занимая под свои поля новые области памяти, пользуются уже загруженным кодом первого экземпляра.
Три группы атрибутов объекта:
Методы процедуры и функции, описываемые при описании класса, предназначенные для приема объектом данных извне, изменения данных внутри объекта (модификации полей), подачи данных от объекта внешним «потребителям».
Свойства (для пользователя объекта) параметры (числовые, символьные, строковые и прочих типов), характеризующие состояние объекта в данный момент. Обращение к свойствам объекта внешне выглядит как обращение к полям переменной типа «запись».
Свойства (для программиста класса) процедуры и функции, назначение которых совпадает с назначением методов. В среде программистов не утихают споры о праве свойств на существование.
События это то, что с объектом «может произойти», и на что можно предусмотреть реакцию кода класса.
Объявление класса
<Имя класса> = class(<Имя базового класса>)
private
<Объявление закрытых полей и методов>
// Все, что объявлено здесь, может быть использовано только в данном модуле
protected
<Объявление открытых полей и методов>
// Все, что объявлено здесь, может быть использовано
// и в данном модуле, и во всех классах-наследниках данного класса
public
<Объявление открытых полей и методов>
// Все, что объявлено здесь, может быть использовано везде, где виден класс
published
<Объявление открытых полей и методов>
end;
Всё, что объявлено в разделе published, может быть использовано везде, где виден класс.
Раздел published может присутствовать, только если включен режим «динамическая идентификация типа данных» (Run-time type information, Run-time type identification, RTTI), который позволяет определить тип данных переменной или объекта во время выполнения программы.
Режим RTTI должен быть включен с помощью ключа {$M+}.
http://www.rsdn.ru/Forum/message/704173.flat.aspx
Конструктор
Объявление:
constructor TList1.Create;
begin
inherited Create;
// inherited;
pHead := Nil;
pTail := Nil;
nItems := 0;
end;
Обращение:
MyList1 := TList1.Create;
Обращение происходит к методу класса.
Деструктор
Объявление:
destructor TList1.Destroy;
begin
inherited Destroy;
// inherited;
end;
Обращение:
MyList1.Destroy;
Обращение происходит к методу объекта.
Пример построения линейного однонаправленного списка,
использующий ООП
Проект строится в «DOS-овском» режиме и имеет имя Project1 (по умолчанию). Для его построения из верхнего меню следует пройти маршрутом:
File New Other Console Application.
Список формируется на основе данных из текстового файла, содержащего чётное количество строк. Каждая нечётная строка содержит фамилию работника, каждая чётная его месячный заработок.
Образец такого файла:
Inanov
24000
Sidorov
19000
Petrov
28000
Petrov
17500
Andrianov
21000
Andreev
27500
Yakovlev
32500
Проект состоит из четырёх файлов, содержащих коды на языке Pascal.
Файл Project1.dpr обращается к кодам (описаниям классов), представленным в трёх файлах-«устройствах» Unit1.pas, Unit2.pas, Unit3.pas, присоединённых к проекту.
В файле Unit1.pas описан базовый класс MyList1Class, способный к формированию линейного однонаправленного списка в оперативной памяти. Каждый новый элемент списка ставится в конец списка. Назначение методов класса пояснено комментариями.
В файле Unit2.pas описан класс MyList2Class наследник базового класса MyList1Class. Все методы базового класса сохраняют силу, а в дополнение появляются два новых метода: PrependItem и PrependFromFile. С их помощью каждый новый элемент списка ставится в начало списка.
Текст файла Project1.dpr:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1 in 'Unit1.pas',
Unit2 in 'Unit2.pas',
Unit3 in 'Unit3.pas';
var
MyList1: MyList1Class;
MyList2: MyList2Class;
MyList3: MyList3Class;
begin
MyList1 := MyList1Class.Create;
MyList1.AppendFromFile('c: List1.txt');
MyList1.ShowList;
WriteLN;
MyList2 := MyList2Class.Create;
MyList2.PrependFromFile('c: List2.txt');
MyList2.ShowList;
WriteLN;
MyList3 := MyList3Class.Create;
MyList3.InsertFromFile('c: List1.txt');
MyList3.ShowList;
Readln;
end.
Текст файла Unit1.pas:
unit Unit1;
interface
type
pPersonType = ^PersonType;
PersonType = record
sName: string[40];
Salary: double;
pNext: pPersonType;
end;
MyList1Class = Class(TObject)
protected
pHead, pTail: pPersonType;
public
constructor Create;
destructor Destroy;
function AloneItem(sName: string; Salary: double;
var pNew: pPersonType): boolean;
procedure AppendItem(sName: string; Salary: double);
procedure AppendFromFile(sFileName: string);
procedure ShowList;
end;
implementation
constructor MyList1Class.Create;
begin
pHead := Nil;
pTail := Nil;
end;
destructor MyList1Class.Destroy;
begin
// Код будет написан позже!
end;
function MyList1Class.AloneItem(sName: string; Salary: double;
var pNew: pPersonType): boolean;
begin
New(pNew);
if pNew = Nil then Halt; // Нет места в памяти прекращаем работу.
pNew^.sName := sName;
pNew^.Salary := Salary;
pNew^.pNext := Nil;
if pHead = Nil then
begin
pHead := pNew; pTail := pNew;
AloneItem := True;
end
else
AloneItem := False;
end;
procedure MyList1Class.AppendItem(sName: string; Salary: double);
var
pNew: pPersonType;
begin
if not AloneItem(sName, Salary, pNew) then
begin
pTail^.pNext := pNew;
pTail := pNew;
end;
end;
procedure MyList1Class.AppendFromFile(sFileName: string);
var
F: Text;
sName: string[40];
Salary: double;
begin
Assign(F, sFileName);
{$I-}
Reset(F);
{$I+}
if IOResult <> 0 then
begin
WriteLN('File ', sFileName, ' not found');
Halt;
end;
while not EOF(F) do
begin
Readln(F, sName);
Readln(F, Salary);
AppendItem(sName, Salary);
end;
end;
procedure MyList1Class.ShowList;
var pCurr: pPersonType;
begin
pCurr := pHead;
Writeln('Name':40, ' ', 'Salary');
Writeln('----':40, ' ', '------');
while pCurr <> Nil do
begin
Writeln(pCurr^.sName:40, ' ', pCurr^.Salary:8:2);
pCurr := pCurr^.pNext;
end;
end;
end.
Текст файла Unit2.pas:
unit Unit2;
interface
uses Unit1;
type
MyList2Class = Class(MyList1Class)
public
procedure PrependItem(sName: string; Salary: double);
procedure PrependFromFile(sFileName: string);
end;
implementation
procedure MyList2Class.PrependItem(sName: string; Salary: double);
var
pNew: pPersonType;
begin
if not AloneItem(sName, Salary, pNew) then
begin
pNew^.pNext := pHead;
pHead := pNew;
end;
end;
procedure MyList2Class.PrependFromFile(sFileName: string);
var
F: Text;
sName: string[40];
Salary: double;
begin
Assign(F, sFileName);
{$I-}
Reset(F);
{$I+}
if IOResult <> 0 then
begin
WriteLN('File ', sFileName, ' not found');
Halt;
end;
while not EOF(F) do
begin
Readln(F, sName);
Readln(F, Salary);
PrependItem(sName, Salary);
end;
end;
end.
Текст файла Unit3.pas:
unit Unit3;
interface
uses Unit1, Unit2, Math;
type
MyList3Class = Class(MyList2Class)
public
function CompareTwoRecords(var R1, R2: PersonType): integer;
procedure InsertItem(sName: string; Salary: double);
procedure InsertFromFile(sFileName: string);
end;
implementation
function MyList3Class.CompareTwoRecords(
var R1, R2: PersonType): integer;
// Функция возвращает:
// 1, если запись R1 «меньше» записи R2
// +1, если запись R1 «больше» записи R2
// 0, если запись R1 «равна» записи R2
var
l1, l2, l0, i: integer;
begin
l1 := Length(R1.sName);
l2 := Length(R2.sName);
l0 := Min(l1, l2);
for i := 1 to l0 do
if R1.sName[i] < R2.sName[i] then
begin
CompareTwoRecords := -1;
exit;
end
else
if R1.sName[i] > R2.sName[i] then
begin
CompareTwoRecords := +1;
exit;
end;
if l1 < l2 then
begin
CompareTwoRecords := -1;
exit;
end
else
if l1 > l2 then
begin
CompareTwoRecords := +1;
exit;
end;
if R1.Salary < R2.Salary then
begin
CompareTwoRecords := -1;
exit;
end
else
if R1.Salary > R2.Salary then
begin
CompareTwoRecords := +1;
exit;
end;
// Если уж сюда попали, значит, никаких различий между записями не найдено.
CompareTwoRecords := 0;
end;
procedure MyList3Class.InsertItem(sName: string; Salary: double);
var
pNew, pCurr, pPrev: pPersonType;
pc: pChar;
begin
if AloneItem(sName, Salary, pNew) then EXIT;
if CompareTwoRecords(pNew^, pHead^) < 0 then
begin
pNew^.pNext := pHead;
pHead := pNew;
exit;
end;
pPrev := pHead;
pCurr := pPrev^.pNext;
while pCurr <> Nil do
begin
if CompareTwoRecords(pNew^, pCurr^) < 0 then
begin
pPrev^.pNext := pNew;
pNew^.pNext := pCurr;
exit;
end;
pPrev := pCurr;
pCurr := pCurr^.pNext;
end;
pPrev^.pNext := pNew;
pTail := pNew;
end;
procedure MyList3Class.InsertFromFile(sFileName: string);
var
F: Text;
sName: string[40];
Salary: double;
begin
Assign(F, sFileName);
{SI-}
Reset(F);
{SI+}
if IOResult <> 0 then
begin
WriteLN('File ', sFileName, ' not not found');
Halt;
end;
while not EOF(F) do
begin
ReadLN(F, sName);
ReadLN(F, Salary);
InsertItem(sName, Salary);
end;
end;
end.
А также другие работы, которые могут Вас заинтересовать | |||
22698. | Національний банк України | 24.5 KB | |
2 Забезпечити високий рівень довіри в суспільстві до банків завдяки створенню дієвої системи нагляду за банківською діяльністю системи захисту інтересів вкладників та інвесторів системи оперативного кредитування комерційних банків з метою підвищення їх ліквідності. 3 Забезпечити високий ступінь незалежності і самостійності НБУ в проведенні монетарної політики з питань що стосуються сталості грошей чітко розмежувати кредитну діяльність банківської системи і фінансову діяльність уряду виключити пряме кредитування НБУ бюджетних витрат... | |||
22699. | Залучення іноземних інвестицій в Україну | 27 KB | |
На приплив іноземних інвестицій можна впливати лише побічно а саме: шляхом приведення інституційних та правових норм в Україні відповідно до міжнародних вимог. Для залучення іноземних інвестицій в Україну та їх ефективного використання необхідно: 1. На державному рівні відмовитися від мети залучення іноземних інвестицій будьякою ціною тобто не ставити іноземні компанії в більш привілейоване положення ніж національні. | |||
22700. | Ситсема держорганів, щ о регулюють ЗЕД | 34 KB | |
ситсема держорганів щ о регулюють ЗЕД Державне регулювання зовнішньоекономічної діяльності здійснюється для того щоб забезпечити: 1 захист економічних інтересів України та законних інтересів субєктів зовнішньоекономічної діяльності; 2 створення рівних можливостей для субєктів зовнішньоекономічної діяльності розвивати всі види підприємницької діяльності незалежно від форм власності та всі напрями використання доходів і здійснення інвестицій; 3 заохочення конкуренції та ліквідацію монополізму в сфері зовнішньоекономічної діяльності.... | |||
22701. | Експорт та імпорт України | 26.5 KB | |
Існує заборона експорту або імпорту того чи іншого товару для захисту національних інтересів економічна безпека захист культурних цінностей фінансові положення тощо. Сьогодні ні розміри експорту ні його структура не можуть задовольнити Україну. Розміри експорту поки що недостатні: в 1995 р. У його структурі найбільшу частку мають сировина матеріали і товари народного споживання 876; машини і устаткування 103 інші товари у тому числі послуги 21 що вказує на дуже неефективну структуру експорту оскільки майже 90 його... | |||
22702. | Структурна політика розвитку | 35.5 KB | |
сукупних економічних проблем які виникають внаслідок структурних зрушень всередині галузей народного господарства та між ними регіонами і між групами підприємств структурна політика розвитку.Структурна політика розвитку використовується там і тоді де і коли виникає потреба у скороченні періоду адаптації галузей і регіонів до необхідних змін макроекономічної структури та коли структурні зрушення мають стати соціально вигідними для економічних суб'єктів. Заходи держави орієнтовані на галузі народного господарства визначаються як галузева... | |||
22703. | Зовнішньоекономічна діяльність | 26 KB | |
ЗЕЗ це комплексна система різних форм міжнародного співробітництва. ЗЕЗ категорія історична: продукт цивілізації виникає з появою держави та розвивається разом з нею. ЗЕЗ виступають елементом зростання та прискорення. В залежності від ефективності ЗЕЗ розглядають класифікацію. | |||
22704. | Українська класифікація товарів ЗЕД | 19 KB | |
Вона розроблена на базі гармонізованої системи опису та кодування товарів яка існує в світі з 1983 р. Цифрові коди товарів уніфіковано з гармонізованою системою в світі. | |||
22705. | Географічна і галузева структура прямих іноземних інвестицій | 27 KB | |
Географічна і галузева структура прямих іноземних інвестицій Державний комітет статистики зафіксував у 2002 році рекордний для України показник залучення прямих іноземних інвестицій у 107 млрд. Галузева структура іноземних інвестицій визначається значною диференціацією. Більше 60 іноземних інвестицій зосереджено у п'яти галузях харчовій промисловості внутрішній торгівлі машинобудуванні фінансах та паливній промисловості. Безпосередньо в 2000 році до галузей промисловості надійшло лише близько 42 прямих іноземних інвестицій тоді як... | |||
22706. | Основні системні наслідки економічного спаду 1992-1999 рр | 44.5 KB | |
Об'єкт економічної стратегії в Україні на початку періоду трансформації характеризувався складною і недосконалою структурою великою кількістю неузгоджених чинників розвитку що мають різну природу. Надмірний негативний вплив цих чинників став можливим через значну розбалансованість економічної стратегії неузгодженість її елементів. Ефективність економічної стратегії на цьому етапі може бути оцінена як вкрай низька. В основі його виникнення і поширення лежить відсутність економічної свободи і надмірно високі податки. | |||