-Рубрики

 -Метки

dj gvozd fashion shmotomoda.ru Вечер а я останусь абракадабра авторские частушки арт ашдвао бесплатно бесплатно бонус в букмекерских блогун блокнот боли в позвоночнике бонус от букмекерских контор бесплатно букмекерские с бонусом буш видео восточные развлечения все умрут доступ на pron сайт в подарок есентуки женщины заработок зима игры истории как найти сауну как не попасть в просак как поднять в топ яндекса как правильно сделать флешмоб как сделать так чтобы не болело как убежать в лес какой подобрать подарок к новому году картинки киевский бти кипр клавогонки комендантский час комиксы кот кошечки кризис мат медведев мисс мира - 2008 мода море наращивание ногтей необычная вода новый год ня! няшки онлайн казино оптимизация в сети отдых пароход педикюр перевозка пластиковые контейнеры покер президент приколы продажа столов продвижение в поисковиках пушки рабочее место новое рамки раскрутка расценки ролики сайты салон красоты воронеж сауна москва свежесть секреты качественных дверей скачать бесплатно красивую эротику скачать быстро скука снасти сом стопитсот стопицот.ру строительство тату торт удача уроки gimp услуги уход за лицом уход за ногтями факты фото фрукты хакеры хаккеры цитата частушки шмотомодонька шпора

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в StopitsoT

 -Сообщества

Читатель сообществ (Всего в списке: 6) АРТ_АРТель В_АТАКУ Умелые_ручки Fake_MusicalMagazine ru_garfield This_is_Erotic

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 11.11.2008
Записей: 1021
Комментариев: 2479
Написано: 6584


Основы программирования в Delphi 7 (сборный пост)

Понедельник, 22 Декабря 2008 г. 20:53 + в цитатник
Напоминаем, чтобы научиться хорошо программировать, нужно отлично выучить математика онлайн.

1. Элементы языка Паскаль

1.1. Имена (идентификаторы)
[a..z, A..Z, 0..9, _ ]

1.2. Зарезервированные слова
Заголовки: program, unit, procedure, function.
Блоки описания: const, var, label, type.
Создания новых типов: array, string, record…end, file, file of…
Операторные скобки: begin…end.
Операторы:
if … then … else …;
case … of …

end;
for … to … do …;
for … downto … do …;
repeat …
until …;
while … do …;
with … do …

1.3. Специальные символы
Следующие одиночные символы являются специальными символами.
# $ & ' ( ) * + , – . / : ; < = > @ [ ] ^ { }
Следующие символьные пары являются также специальными символами.
(* (. *) .) .. // := <= >= < >
 Левая скобка - [ - эквивалентна символьной паре левой скобки и точки - (.; правая скобка - ] - эквивалентна символьной паре точки и правой скобки -.)
 Левая скобка+звездочка и звездочка+правая скобка - (* *)- эквивалентна левой и правой скобкам - { }.
 Обратите внимание, что !, " (апостроф), %, ?, \, _ (подчеркивание), |, ~ (тильда) - не специальный символы.

1.4. Программа в Delphi
program Pr0;
{$APPTYPE CONSOLE}
var
x, y: real;
begin
X:=2;
Y:=(x+2.3)/(Sqr(x)+1);
Writeln(‘y=’,y:8:3);
Readln;
end.

Программа в Delphi называется проектом и состоит из небольшой головной части, имеющей расширение *.dpr, вспомогательных файлов *.res, *dsk, *.dof, *.cnf, и нескольких модулей, имеющих расширение *.pas (рис. 2). В первое время мы будем работать в режиме консоли (без форм), поэтому необходима команда компилятора
{$APPTYPE CONSOLE}
При запуске проекта на выполнение (команда меню Run/Run или клавиша F9) создаются файлы с расширением *.exe и *.dcu.

Проект — это вся совокупность файлов, из которых Delphi создает приложение. Один проект соответствует одному приложению. В состав проекта Delphi обязательно входят следующие элементы:
• Файл проекта (его расширение .DPR). Это программный код на языке Object Pascal, который генерируется автоматически и содержит ссылки на все модули проекта и инициализирует приложение. При создании нового проекта файл содержит следующие строки:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
• Файлы всех модулей, входящих в проект (*.PAS). Любая форма из состава проекта обязательно имеет свой модуль, однако, обратное утверждение не всегда верно, и могут существовать чисто программные модули. В каждом модуле может содержаться только одна форма. При создании новой формы генерируется текст файла Unit1.pas.
• Значения свойств формы и ее компонентов сохраняются в файле ресурсов *.DFM.
• Файл ресурсов приложения (*.RES). В него входят ресурсы, не вошедшие в формы, например, значок приложения, который будет виден при его свертывании.
• Файл параметров проекта (*.DOF). Все параметры среды разработчика ориентированы на проект и могут быть сохранены и затем восстановлены при загрузке этого проекта.
• В Delphi 4 добавлен еще один файл - файл конфигурации проекта с расширением *.CFG.
• При компиляции проекта и отдельных модулей создаются бинарные файлы *.EXE и *.DCU.
Так как проект состоит из большого количества файлов, то рекомендуется для каждого проекта создавать свой каталог.

1.5. Разделы описания
1.5.1. Описание переменных
Прежде чем использовать переменную, константу, новый тип, процедуру или функцию их надо описать. Для описания переменных служит служебное слово VAR.

var <список имен переменных>: <тип>;

Например,

var
i,k : integer;
x,y : real;
S : string;
Ch : char;
Каждая группа переменных состоит из имен переменных, разделенных запятыми, символа двоеточия “:” и имени типа. Группы переменных разделяются символом точка с запятой “:”
1.7.2. Описание типов
Новые типы данных описываются в разделе, который начинается служебным словом TYPE:
type <имя типа> = <описание типа>;

type
TNameFile=string[80];
TPoint=array[1..3] of real;
TF=file of real;

Как правило, имена типов начинаются с символа T.
1.5.3. Описание констант
Новые константы описываются в разделе, который начинается служебным словом CONST:
сonst <имя константы>[: тип] = <значение>;
Const
a=17; b=-12.56e-2; c=$FF; c=’A’; c=#$41; c=#65;
ch0=’A’; ch1=#65;
MyName=’Петя’;
Целые и вещественные константы могут представляться в десятичной записи как последовательности цифр без запятых или пробелов со знаками + или -. Цифры с десятичными точками или показателями степени обозначают вещественные числа. Если в записи константы используется символ E или e, это означает "умножить мантису на десять в степени". Например, 7E-2 = 7*10^-2, и 12.25e+6 = 12.25e6 = 12.25*10^6.
Префикс знака доллара указывает шестнадцатеричное число, например, $1F=1*16+15=31. Шестнадцатеричные числа могут задаваться в пределах от $00000000 до $FFFFFFFF.
Строка это массив ASCII-символов с кодами от 0 до 255 (ASCII – American Standard Code for Information Interchange). Строка может быть ссылкой на строку (тип string или string[n]), набором символов, или комбинацией ссылки на строку и наборов символов.
Два последовательных апострофа в строке обозначают один символ - апостроф.
'BORLAND' { BORLAND }
'You''ll see' { You'll see }
'' { пустая строка }
' ' { пробел }
Набор символов – последовательность из одного или более управляющих символов, которые состоят из символа #, за которым следует целое число от 0 до 255 (десятичное или шестнадцатеричное) - код соответствующего ASCII-символа: #89#111#117 = 'You'. Можно объединить строки с наборами символов. Например,
'Line 1'+#13+#10+'Line 2'.
1.6. Исполняемые операторы
Исполняемые операторы – операторы (присваивания, if, for, case, while, repeat) и вызовы процедур. Операторы разделяются между собой символом точка с запятой “;”.
Синтаксис опрераторов if, for, case, while требует использование только одного оператора. Если требуется выполнить несколько операторов, то они объединяются в один с помощью составного оператора begin … end.

begin
I := 10;
while I > 0 do begin
x:=Sin(Pi*i);
I := I - 1;
End;
end;
Существует большое количество библиотек процедур, функций и классов, которые обладают своими процедурами и функциями (методами). Эти библиотеки существуют в виде файлов (*.dcu) или могут быть созданы программистом.

1.7. Выражение. Оператор присваивания
Для начала нам потребуется оператор присваивания:

W := A;

где W – переменная, A – выражение.
Для создания выражений можно использовать константы, переменные, функции, операции и скобки ( и ). Выражение - конструкция, которая возвращает величину. Например,
X { переменная }
@X { адрес переменной }
15 { целая константа }
Calc(X,Y) { вызов функции }
X * Y { произведение X и Y }
Z / (1 - Z) { частное Z и (1 - Z) }
X = 1.5 { логическая }
not Done { отрицание логической }
['a','b','c'] { множество }
Char(48) { символ с кодом 48 }
1.9.1. Арифметические функции
function Abs(X: Extended): Extended; // модуль
function ArcTan(X: Extended): Extended;
function Cos(X: Extended): Extended;
procedure Dec(var X[ ; N: Longint]) ; // Dec(x,N) eqv x:=x-N;
function Exp(X: Extended): Extended;
function FloatToStr(Value: Extended): string;
function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string;
procedure Inc(var X[ ; N: Longint]) ; // Inc(x,N) eqv x:=x+N;
function IntToStr(Value: Integer): string;
function Ln(X: Real): Real;
function Pi: Extended; // возвращает 3.1415926535897932385.
function Random [ ( Range: Integer) ] ; // случайное число
function Round(X: Extended): Int64; // целая часть
function Sin(X: Extended): Extended;
function Sqr(X: Extended): Extended; // квадрат
function Sqrt(X: Extended): Extended; // корень
procedure Str(X [: Width [: Decimals ]]; var S);
function StrToFloat(const S: string): Extended;
function StrToInt(const S: string): Integer;
function Trunc(X: Extended): Int64; // целая часть
Другие математические функции собраны в стандартном модуле Math.
1.7.2. Примечания
Tan(x) = Sin(x) / Cos(x)
ArcSin(x) = ArcTan (x/sqrt (1-sqr (x)))
ArcCos(x) = ArcTan (sqrt (1-sqr (x)) /x)
Loga(x) = Exp(x*Ln(a))
1.7.3. Примеры
var x : real;
S : string;
begin
x := Exp(1.0);
Writeln(x:3:2);
Str(ln(x):3:2, S);
Writeln('x = ' + FloatToStr(x) + '; ln(x) = ' + S);
Readln;
End.

StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 20:56 (ссылка)
1.8. Операции
@, not, ^, *, /, div, mod, and, shl, shr, as, +, –, or, xor, =, >, <, <>, <=, >=, in, is
Операторы @, not и ^ - унарные.

1.9. Операторы для строк (String)
Операторы отношения =, <>, <, >, <= и >= применимы для строк. Оператор + соединяет две строки.
Следующие правила относятся к соединению строк:
Операнды для + могут быть строками, упакованными строками или символами.
Результат совместим с любым типом строки. Тем не менее, если операнды - короткие строки или символы и их суммарная длина больше чем 255, то результат ограничивается длиной 255 символов.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 20:58 (ссылка)
Для операций and и or полезны правила Моргана:

not (A and B) = (not A) or (not B)
not (A or B) = (not A) and (not B)

Операторы отношения используются для сравнения двух операндов. Операторы =, <>, <= и >= могут применяться к множествам; = и <> могут применяться к указателям.
Операторы отношения =, <>, <, >, <= и >= применимы для строк. Оператор + соединяет две строки.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 20:59 (ссылка)
2. Структура: программы, процедуры, функции, модуля
Процедуры и функции – программные блоки (подпрограммы), которые могут вызываться из разных частей программы. При вызове в них передаются фактические параметры (константы, переменные, выражения), которые в подпрограммах воспринимаются как формальные параметры.

2.1. Структура программы

program NameProg;
Раздел описания типов, констант, переменных,
процедур, функций
Begin
Радел операторов
end.

2.2. Структура функции

function NameFunc(список параметров): ТИП;
Раздел описания типов, констант, переменных,
процедур, функций
Begin
Радел операторов;
Result:=…;
NameFunc:=…;
End;

Возвращаемое значение в теле функции может присваиваться или имени функции или специальной переменной Result.
Пример списка параметров:
X,y: integer; a,b,c: real; var s: string
Пример: Вычислить площадь треугольника, зная координаты вершин.
Листинг 3. Площадь треугольника
program Pr3;
{$APPTYPE CONSOLE}
var
x1,y1, x2,y2, x3,y3, S: real;

function Distance(x1,y1,x2,y2: real): real;
// вычисление длины отрезка
begin
Result := Sqrt(Sqr(x2-x1) + Sqr(y2-y1));
end;

function FSurface(x1,y1,x2,y2,x3,y3: real): real;
// вычисление площади треугольника по формуле Герона
// x1,y1,x2,y2,x3,y3 – формальные параметры
var
a,b,c,p: real;
begin
a:=Distance(x1,y1,x2,y2);
b:=Distance(x2,y2,x3,y3);
c:=Distance(x3,y3,x1,y1);
p:=(a+b+c)/2;
Result:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;

begin
Write(‘x1=’); Readln(x1); Write(‘y1=’); Readln(y1);
Write(‘x2=’); Readln(x2); Write(‘y2=’); Readln(y2);
Write(‘x3=’); Readln(x3); Write(‘y3=’); Readln(y3);
// x1,y1,x2,y2,x3,y3 – фактические параметры
S:=FSurface(x1,y1,x2,y2,x3,y3);
PSurface(x1,y1,x2,y2,x3,y3,S);
Write(‘S=’,S:12:4);
Readln;
end.
2.3. Структура процедуры

Procedure NameProc(список параметров);
Раздел описания типов, констант, переменных,
Процедур, функций
Begin
Радел операторов
End;

Листинг 4. Пример процедуры
procedure PSurface(x1,y1,x2,y2,x3,y3: real;var S: real);
var
a,b,c,p: real;
begin
a:=Distance(x1,y1,x2,y2); b:=Distance(x2,y2,x3,y3);
c:=Distance(x3,y3,x1,y1); p:=(a+b+c)/2;
S:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;

2.4. Структура модуля
unit NameUnit;
Interface
Uses …; // подключение других модулей
Секция описания типов, констант, переменных,
Заголовки процедур, функций, доступных из секции реализации
Implementation
Uses …; // подключение других модулей
Секция описания локальных типов, констант, переменных.
Тексты процедур, функций
Initialization
Секция операторов, выполняемых при инициализации
Finalization
Секция операторов, выполняемых при завершении работы
end.

Имя модуля и имя файла, в котором записан модуль должны совпадать.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 20:59 (ссылка)
Пример модуля
unit Lib;
interface
var x1,y1, x2,y2, x3,y3, S: real;
function Distance(x1,y1,x2,y2: real): real;
function FSurface(x1,y1,x2,y2,x3,y3: real): real;

implementation
function Distance(x1,y1,x2,y2: real): real;
begin
Result:=Sqrt(Sqr(x2-x1)+Sqr(y2-y1));
end;

function FSurface(x1,y1,x2,y2,x3,y3: real): real;
var a,b,c,p: real;
begin
a:=Distance(x1,y1,x2,y2); b:=Distance(x2,y2,x3,y3);
c:=Distance(x3,y3,x1,y1); p:=(a+b+c)/2;
Result:=Sqrt(p*(p-a)*(p-b)*(p-c));
end;

end.
Листинг 6. Программа с подключением модуля
program Pr4;
uses Lib;
{$APPTYPE CONSOLE}
begin
Write(‘x1=’); Readln(x1); Write(‘y1=’); Readln(y1);
Write(‘x2=’); Readln(x2); Write(‘y2=’); Readln(y2);
Write(‘x3=’); Readln(x3); Write(‘y3=’); Readln(y3);
S:=FSurface(x1,y1,x2,y2,x3,y3); Write(‘S=’,S:12:4);
Readln;
end.
2.5. Список параметров
2.5.1. Область видимости
Все константы, переменные, типы, функции, процедуры, описанные в процедуре или функции, являются локальными и доступны только внутри этой подпрограммы или в её подпрограммах (процедурах и функциях).
Все константы, переменные, типы, функции, процедуры, описанные в родительской подпрограмме ранее, чем дочерняя подпрограмма, доступны дочерней подпрограмме. Для дочерней подпрограммы эти константы, переменные, типы, функции, процедуры являются глобальными.
Если модуль подключает к себе другой модуль, то константы, переменные, типы, функции, процедуры, описанные в разделе interface подключенного модуля доступны подпрограммам подключающего модуля. Переменные, типы, функции, процедуры, описанные в разделе implementation доступны только подпрограммам этого модуля.
Для организации перекрестного подключения модулей необходимо хотя бы одно подключение реализовать в разделе implementation.
Необходимо избегать использования глобальных переменных, т.к.:
подпрограмма становится менее универсальной;
возрастает вероятность недопустимого изменения глобальной переменной в подпрограмме.
2.5.2. Формальные и фактические параметры
Формальные параметры - это список имен переменных, следующий за именем подпрограммы, через которые передается информация от родительской подпрограммы в дочернюю, либо обратно. В этом списке может быть указан тип переменных.
Для того чтобы вызвать процедуру или функцию, необходимо к ней обратиться. Вызов процедуры NameProc производится оператором вида: NameProc(P1,P2,P3,...). Здесь P1, P2, P3 – фактические параметры. При различных вызовах подпрограммы в этом списке могут быть различные переменные и константы. Но должны выполняться следующие условия: фактические и формальные параметры должны соответствовать по числу, по типу и по смыслу.
2.5.3. Параметры-значения, параметры-переменные, нетипизированные параметры
Формальный параметр-значение при вызове подпрограммы копирует свое значение у фактического параметра. При этом для него выделяется дополнительная память и при изменении этой копии значение фактического параметра-значения (оригинала) – не меняется. Более того, фактический параметр-значение может быть константой или выражением.
Формальный параметр-значение Фактический параметр-значение
function Sin(x: real): real; Y:=Sin((x+Pi)/2);
Перед формальным параметром-переменной указывается служебное слово var и соответствующий фактический параметр должен быть переменной. Дополнительная область памяти для формального параметра-переменной не выделяется и, при изменение его внутри подпрограммы, меняется значение и фактического параметра.
Формальный параметр-переменная Фактический параметр-переменная
Procedure Surf(a,b,c: real; var S: real); SurF(1.2, 2+1, Sin(3.5), S);
Если для формального параметра-переменной не указан тип, то фактический параметр-переменная может быть ссылкой на переменную любого типа. В этом случае он называется нетипизированным параметром-переменной.
3. Операторы
3.2. Оператор IF
Существует две формы оператора IF:

if <ВЫРАЖЕНИЕ> then <ОПЕРАТОР>;
if <ВЫРАЖЕНИЕ> then <ОПЕРАТОР1> else <ОПЕРАТОР2>;

Выражение должно быть логического типа. Перед else нельзя ставить “;”.
Пример 1: if J <> 0 then A := I/J;
Пример 2: if J <> 0 then A := I/J else A := 0;
Пример 3. Решение квадратного уравнения Ax2+Bx+C=0.
Листинг 7. Решение квадратного уравнения
program PrSqr;
{$APPTYPE CONSOLE}
var A,B,C,D: real;
begin
Write(‘A=’); Readln(A); Write(‘B=’); Readln(B);
Write(‘C=’); Readln(C);
if A = 0 then
if B = 0 then
if C = 0 then Writeln(‘X - любое’)
else Writeln(‘нет корней’)
else Writeln(‘X = ’,-C/B:8:2)
else begin
D := B*B-4*A*C;
if D < 0 then Writeln(‘Нет вещественных корней’)
else begin
D:=Sqrt(D);
Writeln(‘X1=’,(-B+ D)/(2*A),‘X2=’,(-B-D)/(2*A));
end
end;
end.
Пример 4. Даны длины трех отрезков. Если они могут образовать треугольник, то вычислить его площадь.
Листинг 8. Площадь треугольника
program Pr8;
{$APPTYPE CONSOLE}
var a,b,c,p,S : real;
begin
Write(‘a=’); Readln(a); Write(‘b=’); Readln(b);
Write(‘c=’); Readln(c);
If (a+b>c) and (a+c>b) and (b+c>a) then
begin
P:=(a+b+c)/2;
S:=Sqrt(p*(p-a)*(p-b)*(p-c));
Writeln(‘S=’,S:8:2);
end
else Writeln(‘Не треугольник’);
Readln;
end.
3.1. Оператор FOR

for := <Нач_Значение> to <Кон_Значение> do <Оператор>;

for := <Нач_Значение> downto <Кон_Значение> do <Оператор>;

Счетчик count – локальная переменная перечислимого типа.
Нач_Значение и Кон_Значение – выражения того же типа, что и счетчик count.
Пример 1. Вычислить сумму
Листинг 9. Сумма ряда
program Pr9;
{$APPTYPE CONSOLE}
const n=20;
var S,x,a : real;
i,Sign : integer;
begin
x:=0.2; Sign:=-1; a:=1; S:=a;
for i:=1 to n do
begin // составной оператор
Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
end;
Writeln(‘S = ’, S:8:2);
Readln;
end.
3.2. Оператор WHILE

while <УСЛОВИЕ> do <ОПЕРАТОР>;

где УСЛОВИЕ - выражение логического типа. Цикл while выполняется до тех пор, пока УСЛОВИЕ = true.
Пример 2. Вычислить сумму
Листинг 10. Сумма ряда
program Pr10;
{$APPTYPE CONSOLE}
const n=20;
var S,x,a : real;
i,Sign : integer;
begin
x:=0.2; Sign:=-1; a:=1; S:=a; i:=0;
while i < n do
begin // составной оператор
i:=i+1;
Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
end;
Writeln(‘S = ’, S:8:2);
Readln;
end.
Пример 3. Вычислить сумму
Листинг 11. Сумма ряда
program Pr11;
{$APPTYPE CONSOLE}
const
n=20; Eps=1.0e-6;
var S,x,a : real;
i,Sign : integer;
begin
x:=0.2; Sign:=-1; a:=1; S:=a; i:=0;
while Abs(a) > Eps do
begin
i:=i+1; Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
end;
Writeln(‘S = ’, S:8:2);
Readln;
end.

Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:00 (ссылка)
3.3. Оператор цикла REPEAT
где УСЛОВИЕ - выражение логического типа. Цикл repeat…until выполняется до тех пор, пока УСЛОВИЕ = false.

Листинг 12. Сумма ряда
x:=0.2; Sign:=-1; a:=1; S:=a; i:=0;
repeat
i:=i+1;
Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
until Abs(a)<=Eps;

Пример 4. Методом деления отрезка пополам с точностью Eps=10-6 решить уравнение ex-2=0.
Листинг 13. Метод деления пополам
program Pr13;
{$APPTYPE CONSOLE}
const Eps=1.0e-6;
var x,a,b : real;

function F(x: real): real;
begin
Result:=Exp(x)-2;
End;

begin
a:=0; b:=10;
repeat
x:=(a+b)/2; y:=F(x);
if F(a)*F(x)<0 then b:=x else a:=x;
until Abs(b-a) < Eps;

Writeln(‘x = ’, (a+b)/2:8:2);
Readln;
end.
Пример 5. Вычислить сумму цифр числа.
Листинг 14. Сумма цифр числа

Var
n,Sum: integer;
Begin
Write(‘N=’); Readln(N);
Sum:=0;
repeat
Sum := Sum + N mod 10;
N := N div 10;
until N=0;
Writeln(‘Sum = ’, Sum);
Readln;
End.

Пример 5. Вычислить максимальное значение функции (x^2-3x+2)/Sqrt(x^3-1) в узловых точках на интервале [a,b], если он разбит на n частей.
Листинг 15. Максимум функции
const n=20;
var i: integer;
X,Y,h,MaxValue: real;

function F(x: real): real;
begin
Result := (x*x-3*x+2)/Sqrt(x*x*x-1);
end;

begin
Write(‘A=’); Readln(A); Write(‘B=’); Readln(B);
h := (B-A)/n; x := A; MaxValue := F(x);
while x MaxValue then MaxValue := y;
end;
Writeln(‘MaxValue = ’, MaxValue:8:2);
Readln;
End.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:00 (ссылка)
3.4. Оператор выбора CASE
ВЫРАЖЕНИЕ - любое выражение порядкового типа (тип строки не допустим);
caseList - число, объявленная константа или другое выражение, которое компилятор может вычислить не выполняя программу. Результат должен быть порядковым типом, совместимым с типом ВЫРАЖЕНИЕ. Например, 7, true, 4 + 5 * 3, 'A' и Integer('A'). Диапазон, имеющий форму First..Last, где First и Last удовлетворяют предыдущим условиям. Список, имеющий форму item1,..., itemn, в котором каждый пункт удовлетворяет предыдущим условиям.
Каждый caseList должен быть уникальным; диапазоны и списки не могут перекрыться.
Если ВЫРАЖЕНИЕ принимает одно из значений caseList1,…, caseListn, то выполняется соответствующий оператор. Иначе выполняются операторы, стоящие после else.
Пример 1.
case I of
1..5 : Name := 'Low';
6..9 : Name := 'High';
0, 10..99: Name := 'Out of range';
else Name := '';
end;
Пример 2.
case MyColor of
Red : X := 1;
Green : X := 2;
Blue : X := 3;
Yellow, Orange, Black: X := 0;
end;
Пример 3. Калькулятор.
Листинг 16. Калькулятор
program Pr15;
{$APPTYPE CONSOLE}
var x,y,z : real;
ch : char;
begin
Write(‘x=’); Readln(x); Write(‘y=’); Readln(y);
Write(‘Ch=’); Readln(ch);
Case ch of
‘+’: z:=x+y;
‘-’: z:=x-y;
‘*’: z:=x*y;
‘/’: z:=x/y;
else Write(‘Недопустимая операция’);
End;
Writeln(‘z = ’, z:8:2);
Readln;
end.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:01 (ссылка)
3.2.1. Оператор FOR
for := <Нач_Значение> to <Кон_Значение> do <Оператор>;
for := <Нач_Значение> downto <Кон_Значение> do <Оператор>;
Счетчик count – локальная переменная перечислимого типа.
Нач_Значение и Кон_Значение – выражения того же типа, что и счетчик count.
Пример 1. Вычислить сумму
Листинг 9. Сумма ряда
program Pr9;
{$APPTYPE CONSOLE}
const n=20;
var S,x,a : real;
i,Sign : integer;
begin
x:=0.2; Sign:=-1; a:=1; S:=a;
for i:=1 to n do
begin // составной оператор
Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
end;
Writeln(‘S = ’, S:8:2);
Readln;
end.

3.2.2. Оператор WHILE

while <УСЛОВИЕ> do <ОПЕРАТОР>;

где УСЛОВИЕ - выражение логического типа. Цикл while выполняется до тех пор, пока УСЛОВИЕ = true.
Пример 2. Вычислить сумму
Листинг 3.4. Сумма ряда
program Pr10;
{$APPTYPE CONSOLE}
const n=20;
var S,x,a : real;
i,Sign : integer;
begin
x:=0.2; Sign:=-1; a:=1; S:=a; i:=0;

while i < n do
begin // составной оператор
i:=i+1;
Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
end;

Writeln(‘S = ’, S:8:2);
Readln;
end.
Пример 3. Вычислить сумму
Листинг 3.5. Сумма ряда
program Pr11;
{$APPTYPE CONSOLE}
const n=20; Eps=1.0e-6;
var S,x,a : real;
i,Sign : integer;
begin
x:=0.2; Sign:=-1; a:=1; S:=a; i:=0;

while Abs(a) > Eps do
begin
i:=i+1; Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
end;

Writeln(‘S = ’, S:8:2);
Readln;
end.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:02 (ссылка)
3.2.3. Оператор цикла REPEAT
где УСЛОВИЕ - выражение логического типа. Цикл repeat…until выполняется до тех пор, пока УСЛОВИЕ = false.
Листинг 3.6. Сумма ряда
x:=0.2; Sign:=-1; a:=1; S:=a; i:=0;
repeat
i:=i+1;
Sign:=-Sign; a:=Sign*a*x/i;
S:=S+a;
until Abs(a)<=Eps;







Пример 4. Методом деления отрезка пополам с точностью Eps=10-6 решить уравнение ex-2=0.
Листинг 3.7. Метод деления пополам
program Pr13;
{$APPTYPE CONSOLE}
const Eps=1.0e-6;
var x,a,b : real;
function F(x: real): real;
begin
Result:=Exp(x)-2;
End;
begin
a:=0; b:=10;
repeat
x:=(a+b)/2; y:=F(x);
if F(a)*F(x)<0 then b:=x else a:=x;
until Abs(b-a) < Eps;
Writeln(‘x = ’, (a+b)/2:8:2);
Readln;
end.
Пример 5. Вычислить сумму цифр числа.
Листинг 3.8. Сумма цифр числа
Var n,Sum: integer;
Begin
Write(‘N=’); Readln(N);
Sum:=0;
repeat
Sum := Sum + N mod 10;
N := N div 10;
until N=0;
Writeln(‘Sum = ’, Sum);
Readln;
End.
Пример 5. Вычислить максимальное значение функции (x2-x+2)
/Sqrt(x3-1) в узловых точках на интервале [a,b], если он разбит на n частей.
Листинг 3.9. Максимум функции
const n=20;
var i: integer;
X,Y,h,MaxValue: real;
function F(x: real): real;
begin
Result := (x*x-3*x+2)/Sqrt(x*x*x-1);
end;
begin
Write(‘A=’); Readln(A); Write(‘B=’); Readln(B);
h := (B-A)/n; x := A; MaxValue := F(x);
while x MaxValue then MaxValue := y;
end;
Writeln(‘MaxValue = ’, MaxValue:8:2);
Readln;
End.

3.3. Оператор выбора CASE
case ВЫРАЖЕНИЕ of
caseList1: ОПЕРАТОР1;
...
caseListn: ОПЕРАТОРn;
else
ОПЕРАТОРы;
end;

ВЫРАЖЕНИЕ - любое выражение порядкового типа (тип строки не допустим);
caseList - число, объявленная константа или другое выражение, которое компилятор может вычислить не выполняя программу. Результат должен быть порядковым типом, совместимым с типом ВЫРАЖЕНИЕ. Например, 7, true, 4 + 5 * 3, 'A' и Integer('A'). Диапазон, имеющий форму First..Last, где First и Last удовлетворяют предыдущим условиям. Список, имеющий форму item1,..., itemn, в котором каждый пункт удовлетворяет предыдущим условиям.
Каждый caseList должен быть уникальным; диапазоны и списки не могут перекрыться.
Если ВЫРАЖЕНИЕ принимает одно из значений caseList1,…, caseListn, то выполняется соответствующий оператор. Иначе выполняются операторы, стоящие после else.
Пример 1.
case I of
1..5 : Name := 'Low';
6..9 : Name := 'High';
0, 10..99: Name := 'Out of range';
else Name := '';
end;
Пример 2.
case MyColor of
Red : X := 1;
Green : X := 2;
Blue : X := 3;
Yellow, Orange, Black: X := 0;
end;
Пример 3. Калькулятор.
Листинг 3.10. Калькулятор
program Pr15;
{$APPTYPE CONSOLE}
var x,y,z : real;
ch : char;
begin
Write(‘x=’); Readln(x); Write(‘y=’); Readln(y);
Write(‘Ch=’); Readln(ch);

case ch of
‘+’: z:=x+y;
‘-’: z:=x-y;
‘*’: z:=x*y;
‘/’: z:=x/y;
else Write(‘Недопустимая операция’);
end;

Writeln(‘z = ’, z:8:2);
Readln;
end.

Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:02 (ссылка)
Глава 4. Типы данных
Таблица 4.1. Классификация типов
Простые
Порядковые
Целые
Логический boolean
Символьный char
Перечислимый (val_1,…, val_N)
Диапазоны a_min .. a_max
Вещественные (действительные)
Строковый
Строка string, string[n]
нуль-терминированные строки PChar
Структурный
Массив array … of …
Множество set of …
Запись record … end
Файл
Текстовый textfile
Типизированный file of …
Нетипизированный file
Класс class … end
Ссылки на класс (метакласс)
интерфейсы
Указатели
Типизированные ^,@
нетипизированные pointer
Процедурный
Процедура procedure
Функция function
Variant для хранения любых типов, кроме структур, указателей и Int64.

Порядковые типы включают в себя целые, символьные, логические, перечислимые типы и диапазоны. Порядковый тип определяет множество величин, в котором каждая величина, кроме первой, имеет предшественника и каждая величина, кроме последней, имеет следующий. Каждая величина имеет порядковый номер. Для целых типов порядковый номер величины равен числу; для всех других порядковых типов кроме диапазонов, первая величина имеет порядковый номер 0, следующая величина имеет порядковый номер 1, и так далее.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:02 (ссылка)
Пример, High(Byte) = 255; Succ(2) = 3.
Процедуры Inc и Dec уменьшают и увеличивают значения на порядковых типах. Например, Inc(I) эквивалентно I := Succ(I).
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:02 (ссылка)
4.1. Целые и логический типы
Значениями логического типа BOOLEAN может быть одна из предварительно объявленных констант false (ложь) или true (истина).
Данные логического типа занимают один байт памяти. При этом значению false соответствует нулевое значение байта, а значению true соответствует любое ненулевое значение байта. Например: false всегда в машинном представлении: 00000000; true может выглядеть таким образом: 00000001 или 00010001 или 10000000.
Однако следует иметь в виду, что при выполнении операции присваивания переменной логического типа значения true, в соответствующее поле памяти всегда записывается код 00000001.
Над логическими типами возможны операции булевой алгебры - НЕ (not), ИЛИ (or), И (and), исключающее ИЛИ (xor) - последняя реализована для логического типа не во всех языках. В этих операциях операнды логического типа рассматриваются как единое целое - вне зависимости от битового состава их внутреннего представления.
Кроме того, следует помнить, что результаты логического типа получаются при сравнении данных любых типов.
В языке C данные логического типа отсутствуют, их функции выполняют данные числовых типов, чаще всего - типа int. В логических выражениях операнд любого числового типа, имеющий нулевое значение, рассматривается как "ложь", а ненулевое - как "истина". Результатами логического типа являются целые числа 0 (ложь) или 1 (истина).
Тип integer представляет собой подмножество целых чисел. Типы Integer и Cardinal рекомендуется использовать там, где это возможно, поскольку операционная система работает с ними наиболее оптимально. В таблице приведены диапазоны и необходимый размер памяти.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:03 (ссылка)
Тип Диапазон Формат
Boolean False..True 8-bit
Integer –2147483648..2147483647 Со знаком 32-bit
Cardinal 0..4294967295 Без знака 32-bit
Shortint –128..127 Со знаком 8-bit
Smallint –32768..32767 Со знаком 16-bit
Longint –2147483648..2147483647 Со знаком 32-bit
Int64 –263..263–1 Со знаком 64-bit
Byte 0..255=$FF Без знака 8-bit
Word 0..65535=$FFFF Без знака 16-bit
Longword 0..4294967295=$FFFFFFFF Без знака 32-bit
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:03 (ссылка)
Арифметические операции с целыми возвращают величину типа Integer, который эквивалентен 4-х байтному Longint. Операции возвращают величину типа Int64, если операнды типа Int64.
Примечание: Большинство стандартных функций усекают целые аргументы типа Int64 до 32 битов. Тем не менее, функции High, Low, Succ, Pred, Inc, Dec, IntToStr и IntToHex полностью поддерживают аргументы типа Int64. Функции Round, Trunc, StrToInt64 и StrToInt64Def возвращают значения типа Int64. Несколько функций, включая Ord, совсем не воспринимают параметры типа Int64.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:03 (ссылка)
4.2. Вещественные типы

Тип Диапазон Значащих цифр Размер в байтах
Real48 2.9 x 10–39 .. 1.7 x 1038 11–12 6
Single 1.5 x 10–45 .. 3.4 x 1038 7–8 4
Double 5.0 x 10–324 .. 1.7 x 10308 15–16 8
Extended 3.6 x 10–4951 .. 1.1 x 104932 19–20 10
Comp –263+1 .. 263 –1 19–20 8
Currency –922337203685477.5808.. 922337203685477.5807 19–20 8
Real 5.0 x 10–324 .. 1.7 x 10308 15–16 8
TDateTime 8
Примечания: 6-байтовый тип Real48 использовался в ранних версиях Object Pascal и назывался Real. Можно использовать директиву компилятора {$REALCOMPATIBILITY ON} для того, чтобы вернуть тип Real снова к 6-ти байтовому типу.
Т.к. формат Real48 не родной для Intel CPU, то использование его приводит к более медленному исполнению программы, чем для других типов вещественных.
Тип Extended обладает большей точностью, чем другие вещественные типы. Однако, необходимо быть осторожным, используя Extended, если создаются файлы данных для других платформ.
Тип Currency - данные с фиксированной точкой, которые минимизируют округление ошибок при денежных вычислениях. Они используется как масштабированные 64-битовое целое с четырьмя значимыми цифрами после запятой. Если используется с другими вещественными типами, то величины типа Currency автоматически делятся или умножаются на 10000.
В отличие от порядковых типов (все целые, символьный, логический), значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в памяти машины абсолютно точно, значение вещественных типов определяет число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:03 (ссылка)
4.3. Перечислимый тип
4.3.1. Логическая структура
Перечислимый тип определяет упорядоченное множество идентификаторов (имен). Величины не имеют значений и их порядковый номер следуют в той последовательности, в которой имена указаны.
Синтаксис: type typeName = (val1, ..., valn)
Значения являются неповторяющимися в пределах программы идентификаторами, количество которых не может быть больше 256, например,
type color=(red,blue,green);
work_day=(mo,tu,we,th,fr);
winter_day=(december,january,february);
TMode = (mEdit, mWrite, mRead);
Если объявлен перечислимый тип, то в разделе описания переменных необходимо описать переменную этого типа, которой можно присвоить одно из допустимых значений:
var MyColor: TColor;
...
MyColor := Red;
Для того, чтобы избежать конфликтов с зарезервированными словами рекомендуется указывать для имен перечислимого типа префиксы:
type
TSound = (tsClick, tsClack, tsClock);
TMyColor = (mcRed, mcBlue, mcGreen, mcYellow, mcOrange);
Answer = (ansYes, ansNo, ansMaybe);
Можно использовать конструкцию (val1,..., valn) непосредственно при описании переменной:
var MyCard: (Club, Diamond, Heart, Spade);
Но при этом нельзя объявить другую переменную, использующей эти же постоянные имена. Таким образом недопустимо
var MyCard1: (Club, Diamond, Heart, Spade);
var MyCard2: (Club, Diamond, Heart, Spade);

4.3.2. Машинное представление
Для переменной перечислимого типа выделяется один байт (ограничение ¬- 256), в который записывается порядковый номер присваиваемого значения. Порядковый номер определяется из описанного типа, причём нумерация начинается с 0. Имена из списка перечислимого типа являются константами, например,
var B,С: color;
begin
B:=bluе; // B=1
C:=green; // С=2
Write(ord(B):4,ord(C):4);
end.
После выполнения данного фрагмента программы на экран будут выданы цифры 1 и 2. Содержимое памяти для переменных B и C при этом следующее: В - 00000001; С - 00000010.
4.3.3. Операции
На физическом уровне над переменными перечислимого типа определены операции создания, уничтожения, выбора, обновления. При этом выполняется определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора его значение.
На логическом уровне переменные перечислимого типа могут быть использованы только:
• в выражениях булевского типа;
• в операциях сравнения;
При этом сравниваются порядковые номера значений.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:03 (ссылка)
4.4. Диапазоны
Тип диапазон представляет собой подмножество величин порядкового типа (называемого базовым типом). Любая конструкция Low..High, где Low и High - постоянные выражения того же самого порядкового типа и Low меньше чем High, обозначает тип диапазон, который включает все величины между Low и High. Например, если
type TColors = (Red, Blue, Green, Yellow, White, Black);
можно определить диапазон
type TMyColors = Green..White;
Другие примеры:
type
SomeNumbers = -128..127;
Caps = 'A'..'Z';
Если для определения диапазона используются числовые или символьные константы, то этот тип можно указывать при описании переменной:
var SomeNum: 1..500;
Порядковый номер каждой величины диапазона берется из базового типа.
Следующий пример вызовет ошибку:
type Percentile = 0..99;
var I: Percentile;
...
I := 100;
Использование постоянных выражений в определении диапазона приводит к синтаксическим проблемам. В любой декларации типа, когда первый значимый символ после «=» - левая скобка, компилятор считает, что определяется перечислимый тип. Следовательно, код
const X = 50; Y = 10;
type Scale = (X - Y) * 2..(X + Y) * 2;
Приведет к ошибке. Необходимо определить тип несколько иначе:
type Scale = 2 * (X - Y)..(X + Y) * 2;
Один из способов образования новых типов из уже существующих - ограничение допустимого диапазона значений некоторого стандартного скалярного типа или рамок описанного перечислимого типа. Это ограничение определяется заданием минимального и максимального значений диапазона. При этом изменяется диапазон допустимых значений по отношению к базовому типу, но представление в памяти полностью соответствует базовому типу.
Данные интервального типа могут храниться в зависимости от верхней и нижней границ интервала независимо от входящего в этот предел количества значений в виде, представленном в таблице 2.4. Для данных интервального типа требуется память размером один, два или четыре байта, например,
var A: 220..250; // Занимает 1 байт
В: 2221..2226; // Занимает 2 байта
C: 'A'..'K'; // Занимает 1 байт
begin
A:=240; C:='C'; B:=2222;
end.
После выполнения данной программы содержимое памяти будет следующим:
A - 11110000; C - 01000011; B - 10101110 00001000.
4.4.1. Операции
На физическом уровне над переменными интервального типа определены операции создания, уничтожения, выбора, обновления. Дополнительные операции определены базовым типом элементов интервального типа.
Таблица 4.1.
Базовый тип Максимально допустимый диапазон Размер требуемой памяти
ShortInt -128..127 1 байт
Integer -32768..32767 2 байта
LongInt -2147483648..2147483647 4 байта
Byte 0..255 1 байт
Word 0..65535 2 байта
Char chr(ord(0))..chr(ord(255)) 1 байт
Boolean False..True 1 байт
Примечание: запись chr(ord(0)) в таблице следует понимать как: символ с кодом 0.
А) Интервальный тип от символьного: определение кода символа и, наоборот, символа по его коду.
Пусть задана переменная типа tz:'d'..'h'. Данной переменной присвоено значение 'e'. Байт памяти отведенный под эту переменную будет хранить ASCII-код буквы 'e' т.е. 01100101 (в 10-ом представлении 101).
Б) Интервальный тип от перечислимого: определение порядкового номера идентификатора по его значению и, наоборот, по номеру идентификатора - его значение.
На логическом уровне все операции, разрешенные для данных базового типа, возможны и для данных соответствующих интервальных типов.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:03 (ссылка)
4.5. Символьный тип
Символьный тип Char – один из основных типов – представлен двумя типами AnsiChar и WideChar. Переменные типа AnsiChar – занимают 1 байт памяти (8-бит) и позволяют использовать символы ANSI. Величины WideChar требуют 2 байта памяти (16-бит) и позволяют использовать символы набора Unicode. Первые 256 символов Unicode соответствуют символам ANSI. Тип Char эквивалентен AnsiChar.
Тип Размер Может хранить
ANSIChar 1 Один символ ANSI
WideChar 2 Один символ Unicode
Char 1 Эквивалентен ANSIChar (пока)
Константа типа string длиной 1, например, 'A', может обозначить символьную величину.
Функция Chr(X: Byte): Char возвращает символьную величину для любого целого в диапазоне AnsiChar или WideChar; например, Chr(65) возвращают букву A.
Функция Ord(X): Longint – возвращает порядковый номер символа в таблице ANSI или Unicode.
Пример 1. Вывести на экран таблицу символов и их коды.
Листинг 4.1. Расширенная таблица ANSI
var i: byte;
begin
for i:=0 to $FF do Write(Chr(i),i:3,' ');
Readln;
end.
Значением символьного типа char являются символы из некоторого предопределенного множества. В большинстве современных персональных ЭВМ этим множеством является ASCII (American Standard Code for Information Intechange - американский стандартный код для обмена информацией). Это множество состоит из 256 разных символов, упорядоченных определенным образом и содержит символы заг- лавных и строчных букв, цифр и других символов, включая специальные управляющие символы. Допускается некоторые отклонения от стандарта ASCII, в частности, при наличии соответствующей системной поддержки это множество может содержать буквы русского алфавита. Порядковые номера ( кодировку) можно узнать в соответствующих разделах технических описаний.
Значение символьного типа char занимает в памяти 1 байт. Код от 0 до 255 в этом байте задает один из 256 возможных символов ASCII таблицы.
Например: символ "1" имеет ASCII код 49, следовательно машинное представление будет выглядеть следующим образом: 00110001.
ASCII, однако, не является единственно возможным множеством. Другим достаточно широко используемым множеством является код EBCDIC (Extended Binary Coded Decimal Interchange Code - расширенный двоично-кодированный десятичный код обмена), применяемый в системах IBM средней и большой мощности. В EBCDIC код символа также занимает один байт, но с иной кодировкой, чем в ASCII.
И ASCII, и EBCDIC включают в себя буквенные символы только латинского алфавита. Символы национальных алфавитов занимают "свободные места" в таблицах кодов и, таким образом, одна таблица может поддерживать только один национальный алфавит. Этот недостаток преодолен во множестве UNICODE, которое находит все большее распространение прежде всего в UNIX-ориентированных системах. В UNICODE каждый символ кодируется двумя байтами, что обеспечивает более 64 тыс. возможных кодовых комбинаций и дает возможность иметь единую таблицу кодов, включающую в себя все национальные алфавиты. UNICODE, безусловно, является перспективным, однако, повсеместный переход к двухбайтным кодам символов может вызвать необходимость переделки значительной части существующего программного обеспечения.
Специфические операции над символьными типами - только операции сравнения. При сравнении коды символов рассматриваются как целые числа без знака. Кодовые таблицы строятся так, что результаты сравнения подчиняются лексикографическим правилам: символы, занимающие в алфавите места с меньшими номерами, имеют меньшие коды, чем символы, занимающие места с большими номерами. В основном символьный тип данных используется как базовый для построения интегрированного типа "строка символов", рассматриваемого в 4.6.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:04 (ссылка)
4.6. Строковый
4.6.1. Логическая структура строки
Строка - это линейно упорядоченная последовательность символов, принадлежащих конечному множеству символов, называемому алфавитом.
Строки обладают следующими важными свойствами:
• их длина, как правило, переменна, хотя алфавит фиксирован;
• обычно обращение к символам строки идет с какого-нибудь одного конца последовательности, т.е. важна упорядоченность этой последовательности, а не ее индексация; в связи с этим свойством строки часто называют также цепочками;
• чаще всего целью доступа к строке является на отдельный ее элемент (хотя это тоже не исключается), а некоторая цепочка символов в строке.
Говоря о строках, обычно имеют в виду текстовые строки - строки, состоящие из символов, входящих в алфавит какого-либо выбранного языка, цифр, знаков препинания и других служебных символов. Действительно, текстовая строка является наиболее универсальной формой представления любой информации: на сегодняшний день вся сумма информации, накопленной человечеством - от Ветхого Завета до нашего учебного пособия - представлена именно в виде текстовых строк. В наших дальнейших примерах этого раздела будем работать именно с текстовыми строками. Однако, следует иметь в виду, что символы, входящие в строку могут принадлежать любому алфавиту. Так, в языке PL/1, наряду с типом данных "символьная строка" - CHAR(n) - существует тип данных "битовая строка" - BIT(n). Битовые строки, составляются из 1-битовых символов, принадлежащих алфавиту: { 0, 1 }. Все строковые операции с равным успехом применимы как к символьным, так и к битовым строкам.
Кодирование символов было рассмотрено в главе 2. Отметим, что в зависимости от особенности задачи, свойств применяемого алфавита и представляемого им языка и свойств носителей информации могут применяться и другие способы кодирования символов. В современных вычислительных системах, однако, повсеместно принята кодировка всего множества символов на разрядной сетке фиксированного размера (1 байт).
Хотя строки рассматриваются в главе, посвященной полустатическим структурам данных, в тех или иных конкретных задачах изменчивость строк может варьироваться от полного ее отсутствия до практически неограниченных возможностей изменения. Ориентация на ту или иную степень изменчивости строк определяет и физическое представление их в памяти и особенности выполнения операций над ними. В большинстве языков программирования (C, PASCASL, PL/1 и др.) строки представляются именно как полустатические структуры.
В зависимости от ориентации языка программирования средства работы со строками занимают в языке более или менее значительное место. Рассмотрим три примера возможностей работы со строками.
Язык C является языком системного программирования, типы данных, с которыми работает язык C, максимально приближены к тем типам, с которыми работают машинные команды. Поскольку машинные команды не работают со строками, нет такого типа данных и в языке C. Строки в C представляются в виде массивов символов. Операции над строками могут быть выполнены как операции обработки массивов или же при помощи библиотечных (но не встроенных!) функций строковой обработки.
В языках универсального назначения обычно строковый тип является базовым в языке: STRING в PASCAL, CHAR(n) в PL/1. (В PASCAL длина строки, объявленной таким образом, может меняться от 0 до n, в PL/1 чтобы длина строки могла меняться, она должна быть объявлена с описателем VARING.) Основные операции над строками реализованы как простые операции или встроенные функции. Возможны также библиотеки, обеспечивающие расширенный набор строковых операций.
Язык REXX ориентирован прежде всего на обработку текстовой информации. Поэтому в REXX нет средств описания типов данных: все данные представляются в виде символьных строк. Операции над данными, не свойственные символьным строкам, либо выполняются специальными функциями, либо приводят к прозрачному для программиста преобразованию типов. Так, например, интерпретатор REXX, встретив оператор, содержащий арифметическое выражение, сам переводит его операнды в числовой тип, вычисляет выражение и преобразует результат в символьную строку. Целый ряд строковых операций является простыми операциями языка, а встроенных функций обработки строк в REXX несколько десятков.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:04 (ссылка)
Тип Макс длина #0 в конце Используется для
ShortString 255 Нет Для старых версий
AnsiString ~2^31 (2GB) Есть ANSI-символы
String 255/2GB Есть/нет ANSI/Unicode-символы
WideString ~2^30 есть Unicode-символы; серверах COM и интерфейсах
PChar есть
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:04 (ссылка)
По умолчанию {$H+}, компилятор интерпретирует String (когда она появляется без заключенного в скобки числа) как AnsiString с символом #0 на конце.
AnsiString, иногда называют длинной строкой, - предпочтительный тип для большинства целей. Типы String могут смешиваться в выражениях; компилятор автоматически выполняет необходимые преобразования.
Объявление длинной строки:
var S: string;
Стандартная функция Length возвращает число символов в строке. Процедура SetLength устанавливает длину строки. Сравнение строк определяется упорядочением символов в соответствующей позиций.
Если S: string и i переменная целого типа, то S[i] представляет i-й символ в S. Для ShortString или AnsiString, S[i] - типа AnsiChar; для WideString, S[i] - типа WideChar. S[i]:= 'A’ назначают «А» для второго символа S. В следующем примере используется стандартная функция UpCase для того, чтобы преобразовать S в верхний регистр:
var I: Integer;
begin
for I:=1 to Length(s) do S[I] := UpCase(S[I]);
end;
function UpperCase(const S: string): string; - возвращает строку, преобразуя ASCII символы 'a'..'z' в верхний регистр.
function AnsiUpperCase(const S: string): string; - преобразовывает все символы строки в верхний регистр. Эта функция поддерживает мульти-байтовые символьные таблицы (MBCS).
function StrUpper(Str: PChar): PChar; - преобразовывает Str в верхний регистр и возвращает Str.
function AnsiLowerCase(const S: string): string;
function LowerCase(const S: string): string;

Будьте осторожными с индексами строк, т.к. обращение к символу за концом строки может привести к ошибке. Можно назначить переменной string константы или любое другое выражение типа string. Длина строки изменяется динамически при присваивании. Примеры:
S := 'Петя!';
S := 'Hello, ' + 'Петя!';
S := ' '; { пробел }
S := ''; { пустая строка }
Короткая строка ShortString может содержать от 0 до 255 символов, занимая от 1 до 256 байтов памяти. Первый байт хранит длину строки. Если S - переменная типа ShortString, то Ord(S[0]), аналогично Length(S), возвращает длину S; изменение S[0], подобно SetLength, изменяет длину S. Короткие строки ShortString использую 1-байтовые символы ANSI и поддерживаются только для совместимости со старыми версиями.
Например,
var S: string[100];
описывает переменную S, котора может содержать до 100 символов.
4.6.2. Процедуры и функции для строк
Базовыми операциями над строками являются:
• определение длины строки; Length
• присваивание строк;
• конкатенация (сцепление) строк;
• выделение подстроки;
• поиск вхождения.
Операция определения длины строки имеет вид функции, возвращаемое значение которой - целое число - текущее число символов в строке. Операция присваивания имеет тот же смысл, что и для других типов данных.
Операция сравнения строк имеет тот же смысл, что и для других типов данных. Сравнение строк производится по следующим правилам. Сравниваются первые символы двух строк. Если символы не равны, то строка, содержащая символ, место которого в алфавите ближе к началу, считается меньшей. Если символы равны, сравниваются вторые, третьи и т.д. символы. При достижении одной конца одной из строк строка меньшей длины считается меньшей. При равенстве длин строк и попарном равенстве всех символов в них строки считаются равными.
Результатом операции сцепления двух строк является строка, длина которой равна суммарной длине строк-операндов, а значение соответствует значению первого операнда, за которым непосредственно следует значение второго операнда. Операция сцепления дает результат, длина которого в общем случае больше длин операндов. Как и во всех операциях над строками, которые могут увеличивать длину строки (присваивание, сцепление, сложные операции), возможен случай, когда длина результата окажется большей, чем отведенный для него объем памяти. Естественно, эта проблема возникает только в тех языках, где длина строки ограничивается. Возможны три варианта решения этой проблемы, определяемые правилами языка или режимами компиляции:
• никак не контролировать такое превышение, возникновение такой ситуации неминуемо приводит к труднолокализуемой ошибке при выполнении программы;
• завершать программу аварийно с локализацией и диагностикой ошибки;
• ограничивать длину результата в соответствии с объемом отведенной памяти;
Операция выделения подстроки выделяет из исходной строки последовательность символов, начиная с заданной позиции n, с заданной длиной l. В языке PASCAL соответствующая функция называется COPY. В языках PL/1, REXX соответствующая функция - SUBSTR - обладает интересным свойством, отсутствующим в PASCAL. Функция SUBSTR может употребляться в левой части оператора присваивания. Например, если исходное значение некоторой строки S - 'ABCDEFG', то выполнение оператора: SUBSTR(S,3,3)='012'; изменит значение строки S на - 'AB012FG'.
При реализации операции выделения подстроки в языке программирования и в пользовательской процедуре обязательно должно быть определено правило получения результата для случая, когда начальная позиция n задана такой, что оставшаяся за ней часть исходной строки имеет длину, меньшую заданной длины l, или даже n превышает длину исходной строки. Возможные варианты такого правила:
• аварийное завершение программы с диагностикой ошибки;
• формирование результата меньшей длины, чем задано, возможно даже - пустой строки.
Операция поиска вхождения находит место первого вхождения подстроки-эталона в исходную строку. Результатом операции может быть номер позиции в исходной строке, с которой начинается вхождение эталона или указатель на начало вхождения. В случае отсутствия вхождения результатом операции должно быть некоторое специальное значение, например, нулевой номер позиции или пустой указатель.
На основе базовых операций могут быть реализованы и любые другие, даже сложные операции над строками. Например, операция удаления из строки символов с номерами от n1 включительно n2 может быть реализована как последовательность следующих шагов:
• выделение из исходной строки подстроки, начиная с позиции 1, длиной n1-1;
• выделение из исходной строки подстроки, начиная с позиции n2+1, длиной длина исходной строки - n2;
• сцепление подстрок, полученных на предыдущих шагах.
Впрочем, в целях повышения эффективности некоторые вторичные операции также могут быть реализованы как базовые - по собственным алгоритмам, с непосредственным доступом к физической структуре строки.

Для работы со строками предназначены процедуры и функции:
function Length(s: string): integer - возвращает длину строки;
function Copy(s: string; n1,n2: integer): string - возвращает часть строки;
function Pos(s1: string; s: string): byte - ищет s1 подстроку в строке s;
procedure Delete(var s: string; i,l: integer) - удаляет часть строки;
procedure Insert(s1: string; var s: string; i: integer) - вставляет подстроку s1 в строку s;
function ConCat(s1[,s2,..,sn]: string): string - об'единяет строки.
Procedure Val(s: string; var x; var Code: integer) -
Function StrToInt(s: string): integer
function FloatToStr(Value: Extended): string;
function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string;
function IntToStr(Value: Integer): string;
procedure Str(X [: Width [: Decimals ]]; var S);
function StrToFloat(const S: string): Extended;
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:05 (ссылка)
Глава 5. Формы, компоненты, события
5.1. Пример проекта “2*2”
В этом проекте мы сможем в компонентах TEdit вводить два числа и, нажав кнопку, получить на форме в компоненте TLabel произведение этих чисел.
Создадим новый проект (File/New Application).
Создадим новый каталог и, не запуская проект на компиляцию и выполнение, запишем все файлы проекта командой File/Save Project As. В файле Project1.dpr содержится головная часть программы:
Листинг 5.1. Головная часть программы
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
В файле Unit1.pas - описание класса TForm1:
Листинг 5.2. Модуль Unit1
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.DFM}
end.
На форму Form1 выставим четыре компонента TLabel (Label1, Label2, Label3, Label4), с помощью которых будем делать надписи на форме, две кнопки: для выполнения вычислений BitBtn1 и выхода из программы BitBtn2, и два компонента для ввода целых чисел: SpinEdit1 и SpinEdit2.
В инспекторе объектов свойству Caption компонентов Label1, Label2, Label3, Label4, BitBtn1, BitBtn2 назначим следующие значения (рис. 5.1):
Label1.Caption=‘x=’
Label2.Caption=‘y=’
Label3.Caption=‘z=’
Label4.Caption=‘’
BitBtn1.Caption=‘Вычислить’
BitBtn2.Caption=‘Выход’
Осталось определить события, которые будут возникать при нажатии клавиш BitBtn1 и BitBtn2.
Дважды щелкнем на компоненте BitBtn2 или в Инспекторе Объектов на странице событий для компонента BitBtn2 щелкнем в строке onClick. В модуле Unit1.pas появится заготовка процедуры:
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
end;
В этой процедуре вызовем метод Close, который закроет форму Form1 и, следовательно, закончит выполнение всего проекта.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:05 (ссылка)
Точно также создадим заготовку процедуры на нажатие клавиши BitBtn2, в которой свойству Caption компонента Label4 присвоим произведение значений из компонентов SpinEdit1 и SpinEdit2, преобразованное в строку с помощью функции IntToStr:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Label4.Caption:=IntToStr(SpinEdit1.Value*SpinEdit2.Value);
end;
Откомпилируйте программу к запустите ее на выполнение командой Run/Run или нажатием клавиши F9.
Ответить С цитатой В цитатник
nicht-   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:06 (ссылка)
ща проблююсь.задолбал паскаль.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:06 (ссылка)
Точно также создадим заготовку процедуры на нажатие клавиши BitBtn2, в которой свойству Caption компонента Label4 присвоим произведение значений из компонентов SpinEdit1 и SpinEdit2, преобразованное в строку с помощью функции IntToStr:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Label4.Caption:=IntToStr(SpinEdit1.Value*SpinEdit2.Value);
end;
Откомпилируйте программу к запустите ее на выполнение командой Run/Run или нажатием клавиши F9.
Лекция 6
5.2. Обзор компонентов
Прежде, чем начать этот очень краткий обзор сделаем два замечания: 1) к обсуждению принципов объектно-ориентированного программирования, на которых построены все компоненты, мы вернемся позже в главе 17; 2) описание всех классов и компонентов Delphi не входит в число наших задач и для более подробного знакомства с ними, конечно же, необходимо изучать встроенный Help или обратиться к книгам Архангельского А.Я. или Фаронова В.
Delphi представляет пользователю богатый набор компонентов, визуально представленных на линейках главного окна. Заполнение линейки выполняется один раз в момент настройки системы командой Component/Install Packages…. В появившемся окне необходимо нажать кнопку Add, перейти в папку $(Delphi)\lib и в ней отметить файлы *.bpl. Имеется возможность создавать новые линейки и новые компоненты. Рассмотрим некоторые из них, входящие в стандартный комплект поставки, и не связанные с базами данных и с работой в Internet:
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:06 (ссылка)
5.2.1. Линейка Standard
Компонент Краткое описание
MainMenu Главное меню формы
PopMenu Всплывающее меню, вызываемое правой клавишей мыши
Label Метка. Одна или несколько строк статического текста
Edit Редактор строки
LabeledEdit Редактор строки + метка над ним
Memo Многострочный редактор текста (до 64 К)
Button Кнопка. Основной обработчик события onClick
CheckBox Переключатель да/нет с независимой фиксацией. Основное свойство логического типа Checked
RadioButton Переключатель да/нет с зависимой фиксацией. Обычно используется в группе, в которой свойство Checked = True может быть только у одного компонента
ListBox Список строк для выбора одной из них
ComboBox Редактор строки с выпадающим списком вариантов
ScrollBar Линейки скроллинга
GroupBox Компонент, позволяющий объединять другие элементы в группу
RadioGroup Группа радиокнопок. Эквивалентен оператору case
Panel Несущая конструкция для других компонентов
ActionList Централизованный список реакции проекта на события от различных управляющих элементов
5.2.2. Линейка Additional
BitBtn Кнопка с надписью и пиктограммой
SpeedButton Кнопка с пиктограммой с зависимой или независимой фиксацией. Несколько таких кнопок могут быть объединены в группу, в которой может быть нажата только одна кнопка
MaskEdit Редактор строки, соответствующей шаблону. Может фильтровать строку, например, по шаблону числа или даты
StringGrid Таблица с массивом строк на каждую ячейку
DrawGrid Таблица с ячейками, которые могут содержать строки и изображения
Image Компонент для рисования и вывода изображений из графических файлов (BMP, WMF, JPG)
Shape Компонент для рисования простейших фигур: прямоугольников, эллипсов и т.д.
Bevel Компонент для выделения и разграничения областей на форме
ScrollBox Окно с линейками скроллинга
CheckListBox TCheckListBox выводит список с CheckBox для каждого пункта.
Splitter TSplitter делит область клиента формы на части.
Добавьте Splitter к форме между двумя компонентами для того, чтобы позволить пользователям одновременно менять размеры компонентов (один уменьшается, другой - увеличивается). Splitter ставится между компонентом, выровненным на одном крае формы и компонентами, которые заполняют остальную часть клиентской области.
StaticText Компонент TstaticText функционирует подобно Tlabel, за исключением того что он произошел от TwinControl и, следовательно, обладает окном и позволяет оперировать им.
Chart Диаграммы. Мощный компонент для построения диаграмм различных типов

5.2.3. Линейка Win32
TabControl Набор закладок, позволяющих управлять видом окна
PageControl Комплект страниц с закладками. На каждой странице могут быть свои элементы.
ImageList Компонент является массивом изображений одинакового размера, на каждое из которых можно ссылаться по индексу.
RichEdit TRichEdit – гибкий текстовый редактор, который позволяет изменять шрифтовые атрибуты и вводить параграфы, форматирующие информацию. Может сохранять информацию в Расширенном Текстовом Формате RTF (Rich Text Format).
TrackBar Ползунок, позволяющий плавно изменять величину переменной
UpDown Две кнопки со стрелками, позволяющие уменьшать или увеличивать значение числовой переменной
ProgressBar Индикатор изменения величины для медленных процессов
Animate Компонент для показа клипов (AVI) без звука
DateTimePicker TdateTimePicker строковый редактор с выпадающим календарем для выбора даты или времени.
MonthCalendar TMonthCalendar – отдельный календарь, в котором пользователь может выбрать дату или область дат.
TreeView TTreeView представляет окно, которое отображает иерархический список пунктов.
ListView TListView выводит список пунктов различными способами. Пункты могут отображаться в столбцах с заголовками столбца и подпунктами, вертикально или горизонтально, малыми или большими символами.
HeaderControl Вертикальная или горизонтальная полоса заголовков, разделенная на секции. Размеры секций можно менять мышью во время выполнения проекта
StatusBar Компонент TstatusBar является строкой панелей, обычно выровненных внизу формы, для вывода информации о приложении
ToolBar TToolBar - контейнер для размещения и управления визуальными компонентами типа BitBtn.
PageScroller TpageScroller определяет дисплейную область для узкого окна. Если компонент больше чем дисплейная область TpageScroller, то на краях окна появляются управляющие скроллингом линейки.
5.2.4. Линейка System
Timer Невизуальный компонент для отсчета времени
PaintBox Прямоугольная область для рисования
MediaPlayer Компонент для управления средствами мультимедиа (фильмы, звуки)
OleContainer Компонент для реализации механизма OLE (внедренные и связанные объекты)
5.2.5. Линейка Dialogs
На линейке компонентов Dialogs расположено несколько стандартных диалогов Windows. Они предназначены для открытия и записи файлов, установки параметров принтера и шрифтов, цвета, поиска и замещения текста.
OpenDialog Компонент для выбора имени файла
SaveDialog Компонент для выбора имени файла при записи
OpenPictureDialog Компонент для выбора имени графического файла
SavePictureDialog Компонент для выбора имени графического файла при записи
FontDialog Компонент для выбора имени и свойств шрифта
ColorDialog Компонент для выбора цвета
PrintDialog Компонент для настройки параметров печати текста
PrinterSetupDialog Компонент для настройки параметров печати
FindDialog Компонент для подготовки шаблона поиска в тексте
ReplaceDialog Компонент для подготовки шаблона поиска и замены в тексте
Стандартный диалог OpenDialog предназначен для поиска файла по дискам и папкам. Основным методом этого компонента, как и многих других компонентов диалога, является функция логического типа Execute, которая, обычно, используется в операторе if: if OpenDialog1.Execute then… Полное имя файла возвращается свойством OpenDialog1.FileName .
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:07 (ссылка)
TSaveDialog выводит диалоговое окно для выбора имени файла и сохранения файлов. Диалог появляется при вызове метода Execute. Когда пользователь нажимает Save, диалог закрывается и выбранное имя файла загружается в свойство FileName.
TOpenPictureDialog выводит диалоговое окно для выбора и открытия графических файлов. Этот компонент отличается от TOpenDialog тем, что включает прямоугольную область предварительного просмотра. Предварительный просмотр возможен для битовых изображений (BMP), иконок (ICO), метафайлов (WMF) и расширенных метафайлов (EMF).
TSavePictureDialog выводит диалоговое окно для выбора имен файлов и сохранения графических файлов. Этот компонент отличается от TsaveDialog тем, что включает прямоугольную область предварительного просмотра. Предварительный просмотр возможен для битовых изображений (BMP), иконок (ICO), метафайлов (WMF) и расширенных метафайлов (EMF).
TFontDialog выводит диалоговое окно для выбора шрифтов. Диалог активизируется вызовом метода Execute. При нажатия OK диалог закрывается и выбранный шрифт загружается в свойство Font.
Компонент TColorDialog выводит диалоговое окно для выбора цветов. Диалог активизируется вызовом метода Execute. При нажатии OK, диалог закрывается и выбранный цвет загружается в свойство Color.
Компонент TPrintDialog выводит стандартное диалоговое окно для начала печати на принтере. Диалог модальный и активизируется вызовом метода Execute.
TPrinterSetupDialog выводит диалоговое окно для выбора конфигурации принтеров. Содержимое диалога изменяется в зависимости от выбранного драйвера принтера. Диалог активизируется вызовом метода Execute.
Компонент TFindDialog выводит диалоговое окно для ввода шаблона поиска. Диалог активизируется вызовом метода Execute.
TReplaceDialog - разновидность диалога TFindDialog, предназначенная для ввода как строки поиска, так и строки замещения (редактирование типа «найти и заменить»). Подобно диалогу Find, диалог Replace активизируется вызовом метода Execute.
Помимо диалогов, представленных на линейке компонентов Dialogs существует несколько полезных процедур и функции, каждая из которых динамически создает окно диалога. В основном эти процедуры собраны в модуле Dialogs.
Диалог MessageBox описан в модуле Application и представляет собой функцию типа Integer:

function MessageBox(Text, Caption: PChar; Flags: Longint): Integer;

Функция инициализирует форму, название которой определяется параметром Caption, а сообщение или вопрос - параметром Text. Эти два параметра типа нуль-терминированной строки PChar. Тип PChar, строго говоря, является указателем, о которых более обстоятельный разговор пойдет в главе ХХХ. Пока же мы заметим, что строку символов можно передавать в качестве параметра PChar.
Параметр Flags определяет набор кнопок на форме. В модуле Windows приведены следующие предопределенные константы для параметра Flags:
MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_ABORTRETRYIGNORE = $00000002;
MB_YESNOCANCEL = $00000003;
MB_YESNO = $00000004;
MB_RETRYCANCEL = $00000005;
MB_ICONHAND = $00000010;
MB_ICONQUESTION = $00000020;
MB_ICONEXCLAMATION = $00000030;
MB_ICONASTERISK = $00000040;
MB_USERICON = $00000080;
MB_ICONWARNING= MB_ICONEXCLAMATION;
MB_ICONERROR = MB_ICONHAND;
MB_ICONINFORMATION = MB_ICONASTERISK;
MB_ICONSTOP = MB_ICONHAND;

В качестве примера можно привести запрос на удаление:

if Application.MessageBox('Удалить запись?','Удаление',
MB_OKCANCEL) = IDOK then
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:07 (ссылка)
Функция MessageBox возвращает целое значение:
IDABORT 3 Нажата кнопка Abort.
IDCANCEL 2 Нажата кнопка Cancel.
IDIGNORE 5 Нажата кнопка Ignore.
IDNO 7 Нажата кнопка No.
IDOK 1 Нажата кнопка OK.
IDRETRY 4 Нажата кнопка Retry.
IDYES 6 Нажата кнопка Yes.
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:07 (ссылка)
В модуле Dialogs представлено несколько полезных процедур и функций, каждая из которых создает окно диалога.
Функция CreateMessageDialog вызывается для того, чтобы создать форму диалога, которая будет использована несколько раз в приложении. CreateMessageDialog возвращает диалог типа определенного параметром DlgType и с кнопками указанными параметром Buttons. Синтаксис этого диалога имеет следующий вид:

function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons): TForm;

Тип TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom) определяет величины, описывающие тип сообщения. Следующая таблица описывает эти возможные величины:

Значение Value
mtWarning Сообщение содержит желтый восклицательный знак.
mtError Сообщение содержит красный знак стоп.
MtInformation Сообщение содержит синий "i".
MtConfirmation Сообщение содержит зеленый знак вопроса.
mtCustom Сообщение не содержит битовое изображение.

CreateMessageDialog не отображает диалоговую форму. Приложение должно сделать видимым эту форму в нужный момент:

MainForm:=CreateMessageDialog('?',MtInformation,[mbYes, mbNo]);
MainForm.Visible:=true;

Синтаксис диалога MessageDlg выглядит так:

function MessageDlg(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;

Диалог MessageDlg вызывается для того, чтобы выводить сообщение Msg и получать ответ. Параметр Atype определяет тип диалога. Параметр Abuttons определяет набор кнопок. Параметр HelpCtx используется для определения ID контекстной помощи, которая должна появляться при нажатии кнопки подсказки или нажатии F1.
MessageDlg возвращает номер кнопки, выбранной пользователем: MrNone, mrAbort, mrYes, mrOk, mrRetry, mrNo, mrCancel, mrIgnore, mrAll.
Этот диалог может быть, например, использован вот в таком виде:

if MessageDlg('Удалить запись?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then

В описании диалога MessageDlgPos добавляются два целых параметра X, Y: Integer, которые позволяют задавать координаты верхнего левого угла формы диалога:

function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;

Диалог MessageDlgPosHelp имеет дополнительный параметр HelpFileName, позволяющий использовать не встроенную подсказку, а свой файл помощи:

function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Integer;

Очень простой диалог ShowMessage позволяет вывести строку сообщения Msg:

procedure ShowMessage(const Msg: string);

В описании диалога ShowMessagePos добавляются два целых параметра X, Y: Integer, которые позволяют задавать координаты верхнего левого угла формы диалога:

procedure ShowMessagePos(const Msg: string; X, Y: Integer);

Функция диалога InputBox позволяет ввести строку:

function InputBox(const ACaption, APrompt, ADefault: string): string;

Возможно, например, такое использование этой функции:

s:= InputBox('Окно ввода', 'Введите:', 'Начальная строка');

Функция логического типа InputQuery также позволяет ввести строку Value:

function InputQuery(const ACaption, APrompt: string;
var Value: string): Boolean;

Если ввод заканчивается нажатием кнопки Ok, то функции вернет True. Например,

s:='Начальная строка';
if InputQuery('Input Box', 'Prompt', s) then…;
Ответить С цитатой В цитатник
StopitsoT   обратиться по имени Понедельник, 22 Декабря 2008 г. 21:07 (ссылка)
5.3. Компоненты для ввода и вывода информации
Delphi представляет несколько компонентов для работы со строками и числами. В основном эти компоненты находится на линейках Standard, Additional, Samples. Коротко перечислим эти компоненты.
Компонент TLabel предназначен для вывода одной или нескольких строк. Для вывода одной или нескольких строк также предназначен компонент StaticText.
С помощью компонента TEdit можно редактировать строку. Есть еще три строковых редактора: компонент ComboBox позволяет редактировать строку или выбрать ее из предлагаемого списка, компонент MaskEdit позволяет для редактируемой строки задавать шаблон редактирования, компонент SpinEdit позволяет редактировать и изменять только целые числа.
Компонент TMemo представляет собой простой текстовый редактор.
Для вывода нескольких строк и выбора одной из них предназначен компонент ListBox.
Два компонента CheckBox и RadioButton могут быть использованы для ввода информации типа «да/нет», а компонент RadioGroup может быть использован для выбора одного из многих вариантов.
Ответить С цитатой В цитатник
Комментировать К дневнику Страницы: [1] 2 [Новые]
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку