- •Оглавление
- •Часть 1. Краткое описание Delphi 8
- •Часть 2. Технология ado для баз данных access 186
- •9.1. Общие сведения 289
- •Введение
- •Часть 1. Краткое описание Delphi
- •1. Работа со средой delphi
- •1.1. Ознакомление с delphi
- •1.2. Вкладка дизайнера формы (design)
- •1.3. Вкладка редактора кода программы
- •1.4. Окно object inspector
- •1.5. Окно project manager
- •1.6. Окно палитры инструментов
- •1.7. Создание первого проекта приложения
- •1.8. Сохранение проекта
- •1.8. Сохранение проекта
- •1.9. Компиляция
- •2. Основа языка delphi
- •2.1. Основные понятия языка
- •2.1.1. Элементы языка
- •2.1.2. Пример простой программы
- •2.1.3. Типы данных
- •2.1.4. Операции и выражения
- •2.1.5. Стандартные функции
- •2.1.6. Ввод и вывод на дисплей
- •2.1.7. Оператор присваивания
- •2.2. Операторы языка паскаль
- •2.2.1. Составной оператор
- •2.2.2. Условный оператор
- •2.2.3. Сложные условия
- •2.2.4. Оператор выбора case
- •2.2.5. Оператор цикла for
- •2.2.6. Оператор цикла while
- •2.2.7. Оператор цикла repeat
- •2.2.8. Вложенные циклы
- •2.2.9. Прочие операторы
- •2.3. Общая структура программы
- •2.3.1. Перечень разделов программы
- •2.4. Массивы
- •2.4.1. Одномерные массивы
- •2.4.2. Сортировка массивов и поиск элемента в массиве
- •2.4.3. Многомерные массивы
- •2.5. Функции и процедуры
- •2.5.1. Описание функций
- •2.5.2. Обращение к функции
- •2.5.3. Процедуры
- •2.5.4. Параметры-значения и параметры-переменные
- •2.5.5. Локальные и глобальные переменные
- •2.5.6. Pекурсия
- •2.6. Строки символов
- •2.6.1. Задание строк
- •Var имя: string[длина];
- •2.6.2. Функции и процедуры для обработки строк
- •2.7. Порядковые типы данных
- •2.7.1. Перечисляемый тип данных
- •2.7.2. Интервальный тип данных
- •2.7.3. Порядковые типы данных
- •2.7.4. Дополнение:тип данных tDateTime (дата-время)
- •2.8. Множества
- •2.8.1. Значения типа множество
- •2.8.2. Операции на множествах
- •2.9. Записи
- •2.9.1. Поля записи
- •2.9.2. Оператор with
- •2.9.3. Последовательный поиск в массиве записей
- •2.9.4. Двоичный поиск в массиве записей
- •2.10. Файлы
- •2.10.1. Основные свойства файлов
- •2.10.2. Типизированные файлы
- •2.10.3. Текстовые файлы
- •2.10.4. Поиск файлов
- •2.11. Динамическая память
- •2.11.1. Динамические переменные и указатели
- •2.11.2. Динамические списки
- •2.11.3. Деревья
- •2.12. Программные модули
- •2.12.1. Модули, формируемые пользователем
- •2.12.2. Стандартные модули
- •2.12.3. Примеры программ
- •3. Главная форма
- •3.1. Свойства главной формы
- •3.2. События главной формы
- •4. Описание некоторых компонентов
- •4.1. Компонент tpanel (панели)
- •4.2. Компонент tbutton (кнопка)
- •4.3. Дополнительные кнопки
- •4.4. Компонент tlabel (надписи)
- •4.5. Компонент tedit (Строки ввода)
- •4.6. Компонент тМето (многостроч. Поле ввода)
- •4.7. Свойства и методы класса tstrings
- •4.8. Компонент checkbox (флажок)
- •4.9. Компонент tradiobutton (кнопки выбора)
- •4.10. Компонент MainMenu (главное меню программы)
- •4.11. Компонент timage
- •4.12. Компонент tstringgrid (сетка)
- •4.13. Компонент ttimer(таймер)
- •5. Отладка программ
- •5.1. Типы ошибок
- •5.2. Отладка программы
- •5.2.1. Трассировка программы
- •5.2.2. Точки останова программы
- •5.2.3. Наблюдение значений переменных
- •Часть 2. Технология ado для баз данных access
- •6. Создание баз данных access
- •6.1. Определение понятия баз данных
- •6.2. Интерфейс программы access
- •6.3. Создание базы данных в access 2007
- •6.3.1. Создание двухтабличной базы данных
- •6.3.2. Создание базы данных с вычисляемыми полями
- •6.4. Выбop формата для новой базы данных
- •6.5. Создание пустой базы данных
- •6.6. Открытие и закрытие базы данных
- •6.7. Создание таблиц в режиме конструктора
- •6.7.1. Выбор первичного ключа
- •6.7.2. Изменение полей и таблиц
- •6.7.3. Копирование полей
- •6.7.4. Перемещение полей
- •6.7.5. Удаление полей
- •6.7.6. Операции с таблицами
- •6.8. Создание базы данных в access 2003
- •6.9. Установление связей между таблицами
- •6.10. Обеспечение целостности записей в базе данных
- •6.11. Редактирование и удаление связей
- •7. Система доступа к данным ado
- •7.1. Общие сведения
- •7.2. Компонент adoConnection
- •7.2.1. Свойства компонента adoConnection.
- •7.2.2. Методы компонента adoConnection
- •7.3.Компонент аdоТable
- •7.3.1. Свойства компонента tadoTable
- •7.3.2. Методы компонента tadoTable
- •7.4. Компонент adoQuery
- •7.5. Компонент adoDataSet
- •7.5.1.Свойства компонента adoDataSet
- •7.5.2. Методы компонента adoDataSet
- •7.5.3. Cобытия компонента adoDataSet
- •7.6. Компонент DataSource
- •7.7.Комнонент DataGrid
- •7.7.1 Cвойства компонента DataGrid
- •7.7.2. Методы и события компонента DataGrid
- •7.8. Компонент adocommand
- •8. Управление базами данных
- •8.1. Приложение для управления базами данных
- •8.2. Свойства полей базы данных
- •8.3. Редактирование базы данных
- •8.4. Сортировка данных
- •8.5. Поиск данных в базе
- •8.5.1. Фильтрация данных в базе
- •8.5.2. Нахождения информации методом Locate
- •9.1. Общие сведения
- •9.2. Основные операторы запроса
- •9.2.1. Агрегатные функции
- •9.2.2. Подзапросы
- •9.3. Операторы наполнения баз данных sql
- •9.3.1. Ввод значений
- •9.3.2. Удаление значений
- •9.3.3. Изменение значений
- •9.4. Операторы создания баз данных sql
- •9.4.1. Команда создания таблицы.
- •9.4.2. Первичные ключи таблицы
- •9.4.3. Индексы таблицы
- •9.4.4. Добавление в таблицу новых столбцов
- •10. Реализация sql- запросов
- •10.1. Компонент tadoQuery для sql- запросов
- •10.2. Форма для реализация sql-запроса
- •11. Генератор отчетов Quick Reports
- •11.1.Описание Quick Reports
- •11.2. Печать записи с помощью Quick Reports
- •11.3. Печать таблиц с помощью Quick Reports
- •394026 Воронеж, Московский просп., 14
2.12.2. Стандартные модули
Стандартные процедуры и функции языка расположены в модулях, которые поставляются в оттранслированном виде вместе с компилятором (стандартные модули).
Подробнее информацию о функциях и процедурах, содержащихся в стандартных модулях, можно получить, используя справочную систему.
2.12.3. Примеры программ
Задача 1: Составить программу для вычисления площади треугольника по заданным значениям длин сторон а, Ь, с, используя формулу Герона
S = p(p-a)(p-b\p-c),
где р = (а + b + с)/2- полупериметр.
В вычислениях участвуют величины действительного типа а, b, с, р и S.
Имена переменных описываются в разделе описания переменных.
В разделе операторов вначале необходимо записать оператор ввода значений а, b, с; затем в операторах присваивания вычислить р и S и вывести результаты вычисления S.
Программа имеет вид:
program artr;
var a, b, с, р, s: real;
begin
read(a, b, c);
p:=(a+b+c)/2;
s:=sqrt(p*(p-a)*p-b)*(p-c));
writeln(' s=', s); end.
Задача 2: Составить программу для вычисления корней квадратного уравнения ах2 + bх + с = 0.
Корни квадратного уравнения определяются из выражения
в том случае, если b - 4ас > 0.
В противном случае вычисляются значения
е=- и
Для получения решения достаточно одного условия, например Ь2 - 4ас > 0. Чтобы программа позволяла получать результат при любых исходных данных, необходимо предусмотреть проверку коэффициента на условие а = 0, так как в этом случае
корень уравнения определяется по формуле
Программа имеет вид:
program corni;
label 20;
var a,b,c,d,e,f,x,xl,x2,z: real;
begin read(a,b,c);
if a=0then begin
x:=b/c; writeln(x); goto 20 end else
begin
d:=b*b-4.0*a*c; z:=2.0*a;
e:=-b/z;
f:=sqrt(abs(d))/z
end;
if d>=0 then
begin
xl:=e+f;
x2:=e-f; writeln(xl,x2); end
else writeln(e,'+- i*',f);
20:;
end.
Задача З: Составить программу для определения по номеру квадранта значений координат точек, принадлежащих данному квадранту.
Программу для реализации данного условия можно выполнить с помощью условного оператора. Однако программа с оператором выбора будет более наглядной.
Программа имеет вид:
program kvadr;
var n:integer; begin
read (n); case n of
1: writeln ('значения координат х и у > 0 ');
2: writeln ('значения координат х < 0 и у > = О'); 3: writeln ('значения координат х < 0 и у < О'); 4: writeln ('значения координат х > = 0 и у < 0');
end
end.
Задача 4: Составить программу для вычисления значений функции при изменении аргумента х от значения x0 до значения xk с шагом h.
Чтобы получить результаты вычислений, необходимо в цикле после вычисления функции организовать вывод его.
Программа имеет вид:
program funyi;
label 50;
var x,y,xn,xk,hx: real; begin
read(xn,xk,hx);
x:=xn;
50: y:=(x*x*x-4*x+l)/(abs(x)+l);
writeln(x:4:2,' ',y); x:=x+hx;
if x<=xk then goto 50 end.
Задача 5: Составить программу для вывода значений элементов, кратных трем, для целочисленного массива N (4).
Удобно воспользоваться оператором цикла FOR, в котором параметром цикла является индекс элементов массива; кратность трем проверяется в условном операторе.
Программа имеет вид:
program krat3; const indmax=4;
var i: integer;
n: array [l..indmax] of integer; begin
for i:=l to indmax do begin read(n[i]);
if (n[i] div 3) * 3 = n[i] then writeln(n[i]:5)
end
end,
':
Задача 6: Составить программу для определения значения k = 1,2,3,..., при котором функция xk/k становится меньше а.
Такая постановка требует организации цикла с неизвестным числом повторений. Параметром цикла является изменяющееся значение k. Возведение в степень вычисляется по рекуррентной формуле.
Программа имеет вид:
program iterw;
var k: integer;
p, x, a: real;
begin
read(a,x);
k:=l;
p:=x;
while p/k >= a do
begin
p:=p*x;
k:=k+l
end;
write(k);
end.
Задача 7: Составить программу для вывода на печать положительных элементов матрицы А (10, 15). В каждой строке печатать элементы, относящиеся к данной строке матрицы. Если в строке нет положительных элементов, то она должна быть пустой.
Программа имеет вид:
program matr;
const imax=10; jmax=15;
vary: integer;
a: array [l..imax, 1..jmax] of real; begin
for i:=l to imax do begin
for j:=l to jmax do begin
read(a[i,j]);
if a[i,j] > 0 then write(a[i,j]:5:2);
end;
writeln;
end;
end.
Задача 8: Составить программу для вычисления z=(а+b+х;)/2, где значение а изменяется от 0 с шагом 0,2; значение b изменяется от b0 с шагом hb, значение Xi задано массивом (х1 х2,...,х20). Значения а,b и xi изменяются одновременно, т.е. при первом выполнении цикла а=0, b=b0, xi=x1; при втором -а=0,2; b=b0+hb, xi=х2 и т.д.
Программа имеет вид:
program funz;
const a0=0; ha=0.2; nk=20;
var i: integer;
a,b,b0,hb,z: real;
x: array [L..nk] of real;
begin
read(b0,hb); a:=a0;
b:=b0;
for i:=l to nk do begin
read(x[i]);
z:=(a+b+x[i])/2;
write(z:6:2);
a:=a+ha;
b:=b+hb;
end;
end.
Задача 9: Составить программу для записи подряд в массив Y положительных, а массив Z отрицательных элементов массива X(x1,x2,... ,x100).
Для запоминания исходного массива X и формируемых массивов Y и Z необходимо выделять одинаковое количество полей памяти. Чтобы элементы в массивах Y и Z запоминались подряд, необходимо в программе при выполнении поставленных условий вычислять соответствующий индекс.
Программа имеет вид:
program sort;
const nmax= 10;
var i,n,k: integer;
x,y,z: array[l..nmax] of real; begin
for i:=l to nmax do read(x[i]); k~0;
n:=0;
for i:=l to nmax do
if x[i]>0 then begin
k:=k+l;
y[k]:=x[i]
end
else
begin
n:=n+l;
z[n]:=x[i]
end;
for i:=l to k do writeln(y[i]:6:2);
for i:=l to n do writeln(z[i]:6:2); end.
Задача 10: Составить программу для приближенного
вычисления определенного интеграла методом
прямоугольников с шагом интегрирования h.
Приближенное значение можно производить по формуле
где n=(b-a)/h
Программа имеет вид: program intrl;
var i,n: integer;
a,b,n,x,y: real; begin
read(a,b,h);
n:=trunc(b-a/h)+1; x:=a; y:=0;
for i:=l to n do
begin
y:=y+(exp(x)+l)/x*h; x:=x+h end;
writeln(y)
end.
Задача 11: Составить программу для вычисления среднего геометрического положительных элементов массива
Х(x1,x2,...,Х40).
В программе используется прием накопления произведения. Следовательно, до начала цикла необходимо задать, например, Р=1.
В цикле перед накапливанием произведения необходимо выбирать положительные элементы массива.
Программа имеет вид:
program sredg; const imax=40;
var p,s:real;
n,i. integer;
x: array [1..imax] of real; begin
for i:=l to imax do read(x[i]);
p:=1;
n:=0;
for i:=l to imax do
if x[i] > 0 then
begin
p:=P*x[i]; n:=n+l;
end;
s:=exp(n*ln(p)); write('s=',s:8:3)
end.
Задача 12: Составить программу для вычисления п!, считая, что . В этом случае начальное значение произведения может быть равно 2 (2!).
Программа имеет вид:
program fact;
var n,nf,i: integer; begin
read(n);
nf:=2;
for i:=3 to n do nf:=nP*i
write('nf=',nf:10) end.
Задача 13: Составить программу для вычисления суммы членов бесконечного ряда с точностью до члена ряда, меньшего
При этом вычисление текущего члена ряда выполнить по формуле , где уn - текущий член ряда; jn-1 - предыдущий член ряда.
Программа с оператором цикла REPEAT имеет вид: program ryd;
var x,eps,y,z: real;
n: integer; begin
read(x,eps); z:=l;
n:=0;
y:=1;
repeat
n:=n+l;
y:=y*x/n;
z:=z+y
until у < eps; write(z);
end.
Задача 14: Составить программу для вычисления полинома степени (n-1), n > 30.
Программа имеет вид: program polinom;
const nn=30;
var i,n: integer;
x,y: real;
a: array [l..nn] of real; begin
read(x,n);
for i:=l to n do read(a[i]); y:=a[l];
for i:=2 to n do
y:=y*x+a[i];
write(y);
end.
Задача 15: Составить программу для нахождения наибольшего значения функции при изменении аргумента х от а до b с шагом h.
Программа имеет вид:
program max;
var a,b,c,h,x,y,ymax: real; begin
read(a,b,c,h); ymax:=-le30;
x:=a;
while x <= b do begin
y:=abs(c)*exp(c*x-x*x);
if y>ymax then ymax:=y; x:-x+h;
end;
write(ymax); end.
Задача 16: Составить программу для нахождения экстремума функции при изменении аргумента х от 0 до b/с с шагом h.
Функция у всегда положительна и имеет один экстремум. При с > 0 функция имеет минимум, а при с < 0 - максимум. Поэтому сначала надо определить знак с и присвоить переменной N значение +1, если с положительно (функция имеет минимум), и значение -1, если с отрицательно (функция имеет максимум).
Программа имеет вид:
program minmax;
label 40;
const d=0;
var a,b,c,e,h,x,y,ym: real;
n: integer; begin
read(a,b,c,h);
if с > 0 then n:=l else n:=-l; ym:=n*le30;
x:=d;
e:=b/c;
repeat
y:=abs(a)*exp(b*x+c*x*x); if n*ym <= n*y then goto 40
else
begin
ym:=y;
x:=x+h
end;
until x > e;
40: write(ym,n) end.
Задача 17: Составить программу для нахождения наименьшего элемента массива Х(x1,x2 ,... ,х50) и его порядкового номера.
Значения элементов массива X после ввода размещаются в памяти ЭВМ. В качестве начального значения наименьшего целесообразно взять значение первого элемента. Сравнение выбранного элемента следует начинать со вторым, третьим и т.д. При выполнении условия хi; < XMIN необходимо выполнять оператор присваивания XMIN:=X[I]; и IMIN:=I; Так как значение первого элемента может оказаться наименьшим, то перед циклом наряду с оператором ХМ1:=Х[1]; необходимо записать IMIN:=1; Программа имеет вид:
program minx; const nmas=50;
var xmin: real;
i, imin,n: integer;
x: array [1..nmas] of real; begin
read(n);
for i:=l to n do read (x[i]); xmin:=x[l];
imm:=l;
for i:=2 to n do
if x[i]<xmin then
begin
xmin:=x[i];
imin:=i;
end;
write(xmin,imin);
end.
Задача 18: Составить программу для упорядочивания элементов массива А(А1 А2, ..., А200), расположив их по убыванию в том же массиве.
При решении необходимо использовать метод сортировки вставками: пусть первые i элементов уже упорядочены по убыванию; берется (1+1)-й элемент и размещается среди первых i элементов так, чтобы упорядоченными оказались уже первые (i+1) элементов; этот метод применяется при i от 1 до 199. Программа имеет вид:
program sort_insert; const N=200;
type masl=array[l.. N] of real; var a:masl;
ai:real;
i,j:integer;
begin
for i:=l to N do read(a[i]); (*ввод элементов массива*)
for i:=2 to N do
begin
ai:=a[i];j:=i-l;
while (j>=l) and (a[j]<ai) do (*перемещение элементов*)
begin
a[j+l]:=[aj]; j:=j-1;
end;
a[j+l]:=ai; (*вставка элемента*)
end;
for i:=l to N do writeln(a[i]); (*вывод элементов *)
(*отсортированного массива*) end.
Задача 19: Составить программу для вычисления
где Х(х1,х2,... ,х20); а у b; значения у изменяются с шагом h.
Чтобы вычислить сумму произведений, необходимо во внешнем цикле изменять параметр i, а во внутреннем цикле - параметр k. При изменении параметра k вычисляется факториал, накапливается произведение и изменяется значение у.
Программа имеет вид:
program rez;
const nm=20;
var i,k,kf,nxd,ny: integer; a,b,h,p,y,z: real;
x: array [1..nm] of real; begin
read(a,b,h,nxd);
for i:=l to nxd do read(x[i]); z:=0;
ny:=trunc((b-a)/h)+l; for i:=l to nxd do
begin
p:=1;
kf:=1
y:=a;
for k:=l to ny do begin
kf:=kf*k;
p:=p*(x[i]+y)/kf;
y:=y+h;
end;
z:=z+p
end;
write('z=',z); end.
"
Задача 20: Составить программу для определения числа
Сочетаний , используя функцию при вычислении факториала.
Программа имеет вид:
program number; var ncm: real;
n,m,l: integer;
function fact (k: integer): integer; var p,i: integer;
begin
p:=l;
for i:=l to k do
p:=p*i;
fact:=p
end;
begin read(n,m);
I:=n-m;
ncm:=fact(n)/fact(m)/fact(I); write('chislo sochetaniy = ', ncm)
end.
Задача 21: Составить программу для вычисления функции: , где
Функцию для вычисления сумм в общем виде можно представить как:
Программа имеет вид:
program funy; const nk=50; type ind=l..nk;
mas=array[ind] of real;
var np, nt, nr, i: integer; p,t,r: mas;
x,j: real;
function sum (z:mas; nz: integer): real;
var y: integer;
s: real; begin
S:=0;
for y:=l to nz do
s:=s+z[y];
sum:=s; end;
begin
read(np,nt,nr);
for i:=l to np do read(p[i]);
for i:=l to nt do read(t[i]);
for i:=l to nr do read(r[i]); j:=sum(p,np)*x*x+sum(t,nt)*x+sum(r,nr);
write('j='j);
end.
Задача 22: Составить программу для вычисления функции z, используя для вычисления процедуру:
Формальными параметрами процедуры будут переменная х и результат с именем R. Чтобы избежать двукратного вычисления е2х, вводится дополнительный оператор присваивания С:=ЕХР(2.0*Х).
Программа имеет вид:
program funth;
var a,b,z,tl,t2,t3: real;
procedure th(x:real; var r:real);
begin
c:=exp(2.0*x):
r:=(c-l)/(c+l)
end; begin
read(a,b);
th(a,tl);
th(a-b,t2);
th(a*a-b*b,t3); z:=(tl+t2*t2)/sqrt(t3); write(z);
end.
Задача 23: Составить программу с процедурой без параметров для вычисления полярных координат и f =arctg (у/к) по прямоугольным координатам х и у (х > 0). Программа имеет вид:
program polkorl; var x,y,r,f: real;
n,i: integer; procedure polar; begin
r:=sqrt(x*x+y*y); f:=arctan(y/x);
end;
begin
read(n);
for i:=l to n do
begin
read(x,y);
polar;
write(r,f);
end
end.
Задача 24: Составить программу с процедурой без параметров для вычисления значений где ri и fi полярные координаты вектора с прямоугольными координатами
хi = i/(l+i2);
yi = 1/i.
Программа имеет вид:
program polkor2;
var x,y,r,f,d,s: real; i,n: integer; procedure polar;
begin
r:=sqrt(x*x+y*y); f:=arctan(y/x);
end;
begin
d:=1.0; s:=0;
read(n);
for i:=l to n do
begin
x:=i/(l+i*i); y:=l/i;
polar;
d:=d*r; s:=s+f
end;
write(d,s);
end.
Задача 25: Сформировать единичную матрицу В(10x10). Программа имеет вид:
program matrl;
const size=10;
var i,y: integer;
b: array [1.. size,1.. size] of integer;
begin
for i:=l to size do
for y:=l to size do
if y:=l then b[i,y]:=l
else b[i,y]:=0;
writeln(' ': 17,'edinichaya matrica');
writeln;
for i:=l to size do
for y:=l to size do
write(' ':3,b[i,y]:2)
end.