Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi




Скачать 151.58 Kb.
НазваниеЛабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi
Дата конвертации15.02.2016
Размер151.58 Kb.
ТипЛабораторная работа
источникhttp://fysllia.narod.ru/Delphi.doc
Лабораторная работа №1

Знакомство с интегрированной средой разработки Borland Delphi


Цели: Ознакомиться с интегрированной средой разработки приложений Borland Delphi 7. Научится создавать и настраивать проект консольного приложения.


Средства: персональный компьютер, установленная операционная система Microsoft Windows, IDE Borland Delphi 7.


Ход работы

1. Исправьте логическую ошибку в программе из листинга 3, выполните набор тестов и докажите правильность работы программы.


Листинг 3

program debug;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

a, b: Intger;

begn

Write ('Input first number: ');

ReadLn (a);

Write ('Input second number: ');

ReadLn (b);

WriteLn ('The average is: ' a + b / 2);

ReadLn;

end.


Математическая модель: ( a+ b) / 2



Текст программы и размещение исходных данных при вводе:

program ex1;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

a, b: Integer;

begin

Write ('Input first number: ');

ReadLn (a);

Write ('Input second number: ');

ReadLn (b);

WriteLn ('The average is: ', (a + b) / 2);

ReadLn;

end.


Результаты выполнения программы




Приступим к тестированию. Подготовим тестовый набор данных, запишем их в виде строк таблицы:


Первое значение (a)

Второе значение (b)

Ожидаемый результат

Результат программы

Тест пройден

0

10

5

5

Да

10

0

5

5

Да

1

2

1,5

1,5

Да


2. Разработайте алгоритм вычисления среднего геометрического значения трех чисел и реализуйте его в виде программы на языке Pascal. Проведите полный цикл анализа данной задачи по схеме, приведенной в документе «Общие указания»


Математическая модель:




Текст программы:

program ex1_2;

{$APPTYPE CONSOLE}

uses

SysUtils, math;

var

a, b, c: Integer;

res : real;

begin

Write ('1 znach: ');

ReadLn (a);

Write ('2 znach: ');

ReadLn (b);

Write ('3 znach: ');

ReadLn (c);

res:=Power(a*b*c, 1/3);

WriteLn ('crednee geometr= ', res);

ReadLn;

end.


Результаты выполнения программы




Приступим к тестированию. Подготовим тестовый набор данных, запишем их в виде строк таблицы:


Первое значение (a)

Второе значение (b)

Третье значение (с)

Ожидаемый результат

Результат программы

Тест пройден

3

3

3

3

3

Да

5

6

10

6,694329

6,694329

Да

1

2

2

1,587401

1,587401

Да


Вывод: В ходе выполнения этой лабораторной работы знакомились с интегрированной средой разработки приложений Borland Delphi 7. Научилась создавать и настраивать проект консольного приложения.


Лабораторная работа №2

Базовые алгоритмические конструкции


Цели: Изучить три базовые алгоритмические конструкции: линейную, ветвящуюся, циклическую. Научиться представлять линейные, ветвящиеся и циклические алгоритмы на блок-схемах. Научиться представлять базовые алгоритмические конструкции на языке программирования Object Pascal.


Средства: персональный компьютер, установленная операционная система Microsoft Windows, IDE Borland Delphi 7.


Ход работы:

1. Введите программу из листинга 1. Выполните ее для набора тестовых данных и докажите, корректность реализации алгоритма.


Математическая модель:




Алгоритм решения линейного уравнения в виде программы на языке Object Pascal:

program linear;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

a, b, x: Single;

begin

Write ('Input a: ');

ReadLn (a);

Write ('Input b: ');

ReadLn (b);

x:= -b / a;

WriteLn ('The result is: ', x);

readln;

end.


Результаты выполнения программы




Приступим к тестированию. Подготовим тестовый набор данных, запишем их в виде строк таблицы:


Первое значение (a)

Второе значение (b)

Ожидаемый результат

Результат программы

Тест пройден

3

6

-2

-2

Да

1

1

-1

-1

Да

0

3

-

Выход

нет


Анализ алгоритма: не предусмотрено деление на 0, следовательно, делаем проверку а≠0.




2. Нарисуйте блок-схему и реализуйте алгоритм «РЕШЕНИЕ КВАДРАТНОГО УРАВНЕНИЯ». Выполните анализ получившейся программы с точки зрения использованных синтаксических конструкций языка Object Pascal. Докажите корректность реализации алгоритма.


Математическая модель:

d=b2 - 4ac





Алгоритм решения квадратного уравнения в виде программы на языке Object Pascal:

program ex2_2;

{$APPTYPE CONSOLE}

uses

SysUtils;

var a, b, c, d, x1, x2 : real;

begin

writeln('Vvedite :');

write('a= '); readln(a);

write('b= '); readln(b);

write('c= '); readln(c);

d:=sqr(b) - 4*a*c;

if (d<0) then

begin

writeln('deistvit kornei net');

end

else

begin

x1 := (-b + sqrt (d))/ (2*a);

x2 := (-b - sqrt (d))/ (2*a);

writeln('korni x1=', x1:1:4, ' x2 =', x2:1:4);

end;

readln;

end.


Результаты выполнения программы




3. Переработайте алгоритм «РЕШЕНИЕ КВАДРАТНОГО УРАВНЕНИЯ» для учета наличия комплексных корней, а также равенства одного или нескольких коэффициентов a, b, c нулю. Проведите полный анализ задачи в соответствии с требованиями из документа «Общие указания».


Математическая модель:

Если а=0 находим по формуле: x=-c/b; делаем проверку, если b=0 корней нет, т.к. делить на 0 нельзя.

Дискриминант рассчитываем по формуле:

d=b2 - 4ac



Если дискриминант отрицательный проверяем наличие комплексных корней:





Алгоритм решения квадратного уравнения в виде программы на языке Object Pascal:

program ex2_3;

{$APPTYPE CONSOLE}

uses

SysUtils;

var a, b, c, d, x1, x2, ix,x : real;

begin

writeln('Vvedite :');

write('a= '); readln(a);

write('b= '); readln(b);

write('c= '); readln(c);

d:=sqr(b) - 4*a*c;

if (a=0) then

begin

if (b=0) then

writeln('kornei net voobce')

else

begin

x:=-c/b;

writeln('x= ', x);

end;

end

else

if (d<0) then

begin

writeln('deistvit kornei net');

x1:=(-b )/ (2*a);

ix:=(sqrt (-d))/ (2*a);

writeln('kompleksnie korni x1=', x1:1:4, '+', ix:1:4, 'i x2 =', x1:1:4, '-', ix:1:4, 'i');

end

else

begin

x1 := (-b + sqrt (d))/ (2*a);

x2 := (-b - sqrt (d))/ (2*a);

writeln('korni x1=', x1:1:4, ' x2 =', x2:1:4);

end;

readln;

end.


Результаты выполнения программы




4. Нарисуйте блок-схему и реализуйте алгоритм «Вычисление чисел последовательности Фибоначчи» с использованием как цикла с предусловием, так и цикла со счетчиком. Выполните анализ получившейся программы с точки зрения использованных синтаксических конструкций языка Object Pascal. Докажите корректность реализации алгоритма.





Алгоритм на языке Object Pascal:

program ex2_4;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

n, i: integer;

A: array [1..100] of integer;

begin

Write ('Input n: ');

ReadLn (n);

A[1]:=1;

A[2]:=1;

i:=2;

while i
begin

A[i+1]:=A[i]+A[i-1];

i:=i+1;

end;

for i:=1 to n do

WriteLn ('The result is: ', A[i]);

readln;

end.


Результаты выполнения программы




Вывод: В ходе выполнения этой лабораторной работы изучили три базовые алгоритмические конструкции: линейную, ветвящуюся, циклическую. Научилась представлять линейные, ветвящиеся и циклические алгоритмы на блок-схемах. Научилась представлять базовые алгоритмические конструкции на языке программирования Object Pascal.


Лабораторная работа №3

Контейнеры данных: Массивы


Цели: Познакомиться с концепцией контейнера данных. Изучить базовые операции над контейнерами данных. Изучить простейший контейнер – массив, рассмотреть типы массивов, операции над массивами. Научиться использовать массивы в программах на языке программирования Object Pascal.


Ход работы


1. Нарисуйте блок-схему и реализуйте алгоритм «ВСТАВКА ЭЛЕМЕНТА В ДИНАМИЧЕСКИЙ МАССИВ». Проанализируйте этот алгоритм с точки зрения временной сложности. Докажите корректность реализации алгоритма.

2. Нарисуйте блок-схему и реализуйте алгоритм «УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ ДИНАМИЧЕСКОГО МАССИВА». Проанализируйте этот алгоритм с точки зрения временной сложности. Докажите корректность реализации алгоритма.

3. Разработайте программу, заполняющую массив из 100 элементов случайными числами и выводящую элементы этого массива на экран. Для вывода элементов массива воспользуйтесь алгоритмом «ПЕЧАТЬ МАССИВА». Проведите полный анализ задачи. Проанализируйте используемые алгоритмы с точки зрения временной сложности.


Листинг программ:

program ex3_1_2_3;

{$APPTYPE CONSOLE}

uses

SysUtils;

var

A: array of Integer;

k: integer;

Procedure Massiv ( i: integer; b: integer);

var

j: integer;

begin

SetLength (A, Length (A)+1);

for j:=Length(a)-1 downto i do

A[j+1]:=A[j];

A[i]:=b;

end;

Procedure Udal (i: integer);

var

j: integer;

begin

for j:=i+1 to length(A) do

A[j-1]:=A[j];

SetLength (A, Length (A)-1);

end;

Procedure print (var P: array of Integer);

var

i: integer;

begin

for i:=Low(P) to High(P) do

write(' ', P[i]);

writeln;

end;

begin

SetLength (A, 100);

for k:=1 to 100 do

A[k]:=random(50);

writeln('isxodni massiv,');

print(A);

Massiv(5, 9);

writeln('massiv posle vstavki v 5 pozicii chisla 9 ');

print(A);

udal(8);

writeln('massiv posle udal 8 pozicii');

print(A);

readln;

end.


Результаты выполнения программы



С точки зрения временной сложности при вставки и удалении элемента массива в начало массива - медленнее, чем в конец массива, т.к все элементы массива после заданной позиции смещаются.


Вывод: В ходе выполнения той лабораторной работы я ознакомиться с концепцией контейнера данных. Изучила базовые операции над контейнерами данных. Изучила простейший контейнер – массив, рассмотреть типы массивов, операции над массивами. Научилась использовать массивы в программах на языке программирования Object Pascal.

Лабораторная работа №4

Алгоритмы сортировки


Цели: Познакомиться с 3 алгоритмами сортировки данных: пузырьковой сортировкой (bubble sort), сортировкой вставками (insertion sort), быстрой сортировкой (quick sort). Исследовать временную сложность алгоритмов сортировки, идентифицировать средний, лучший и худший случаи, изучить поведение алгоритмов в каждом из случаев. Научиться реализовывать алгоритмы сортировки на языке программирования Object Pascal.


1. Нарисуйте блок-схему и реализуйте алгоритм «ВСТАВКА ЭЛЕМЕНТА В ДИНАМИЧЕСКИЙ МАССИВ». Проанализируйте этот алгоритм с точки зрения временной сложности. Докажите корректность реализации алгоритма.

БЛОК _СХЕМА


program bubble;

{$APPTYPE CONSOLE}

uses

SysUtils, Windows;

type

TBinaryPredicate = function (x, y: Integer): Boolean;

function Greater (x, y: Integer): Boolean;

begin

Result:= x > y;

end;

function Lower (x, y: Integer): Boolean;

begin

Result:= x < y;

end;

procedure BubbleSort (var A: array of Integer; Op: TBinaryPredicate);

var

i, j: Integer;

t: Integer;

begin

for i:= High (A) downto Low (A) do

for j:= Low (A) to i - 1 do

if not Op (A[j], A[j + 1]) then

begin

t:= A[j];

A[j]:= A[j + 1];

A[j + 1]:= t;

end;

end;

const

TestCount = 5;

TestRuns: array [1..8] of Integer = (100, 500, 1000, 1500, 2000, 5000, 10000, 50000);

var

A: array of Integer;

i, j, k: Integer;

Start, Stop, Frequency: Int64;

Total: Double;

begin

Randomize;

QueryPerformanceFrequency (Frequency);

for k:= Low (TestRuns) to High (TestRuns) do

begin

SetLength (A, TestRuns[k]);

WriteLn ('Running test N', k, ' with SIZE(A) = ', TestRuns[k]);

Total:= 0;

for i:= 1 to TestCount do

begin

for j:= Low (A) to High (A) do

A[j]:= Random (MaxByte);

QueryPerformanceCounter (Start);

BubbleSort (A, Lower);

QueryPerformanceCounter (Stop);

Total:= Total + (Stop - Start) / Frequency;

end;

WriteLn ('Avg.Total = ', (Total / TestCount * 1E3): 0: 2, 'msec');

Total:= 0;

for i:= 1 to TestCount do

begin

QueryPerformanceCounter (Start);

BubbleSort (A, Lower);

QueryPerformanceCounter (Stop);

Total:= Total + (Stop - Start) / Frequency;

end;

WriteLn ('Sorted.Total = ', (Total / TestCount * 1E3): 0: 2, 'msec');

Total:= 0;

for i:= 1 to TestCount do

begin

BubbleSort (A, Greater);

QueryPerformanceCounter (Start);

BubbleSort (A, Lower);

QueryPerformanceCounter (Stop);

Total:= Total + (Stop - Start) / Frequency;

end;

WriteLn ('Rev.Sorted.Total = ', (Total / TestCount * 1E3): 0: 2, 'msec');

WriteLn;

end;

ReadLn;

end.


Таблица 1

Размер массива N

Общий случай, мс

(General)

Уже сортирован, мс

(Sorted)

Сортирован в

обратном порядке, мс

(Rev.Sorted)

100

0,05

0,04

0,04

500

1,57

1,07

1,19

1000

6,67

5,99

5,13

1500

15,36

11,81

11,92

2000

31,21

21,95

30,08

5000

208,96

114,95

135,22

10000

635,58

480,65

649,38

50000

20983,63

12646,30

19328,59


Лучший случай - уже сортированный, средний отсортированный в обратном порядке и худший несортированный массив, для этого алгоритма с точки зрения входных данных.




2. Нарисуйте блок-схему и реализуйте алгоритм «СОРТИРОВКА МАССИВА ВСТАВКАМИ». Проанализируйте этот алгоритм с точки зрения временной сложности (восходящим или нисходящим методом анализа), исследуйте данный алгоритм на устойчивость. Идентифицируйте лучший, средний и худший случаи для этого алгоритма с точки зрения входных данных. Постройте графики зависимости времени выполнения алгоритма от размера входных данных для трех идентифицированных случаев. Для анализа алгоритма можно воспользоваться программой из п.1.




С точки зрения входных данных лучший случай – массив уже отсортирован, средний - случайные значения и худший случаи - сортировка в обратную сторону.

Алгоритм является усойчивым.

3. Представьте алгоритм «БЫСТРАЯ СОРТИРОВКА МАССИВА» в виде словесно-формульного описания. Проведите полное исследование данного алгоритма аналогично п.2.

procedure QuickSort (var A: array of Integer; Left, Right: Integer);

var

i, j: Integer;

Middle, t: Integer;

begin

repeat

i:= Left;

j:= Right;

Middle:= A[(Left + Right) div 2];

repeat

while A[i] < Middle do

Inc (i);

while A[j] > Middle do

Dec (j);

if i <= j then

begin

t:= A[i];

A[i]:= A[j];

A[j]:= t;

Inc (i);

Dec (j);

end;

until i > j;

if Left < j then

QuickSort (A, Left, j);

Left:= i;

until i >= Right;

end;

Приведем словесно-формульное описание алгоритма.


БЫСТРАЯ СОРТИРОВКА МАССИВА

Входные данные: A = aleft, aleft+1, aleft+2, …, aright – сортируемый массив; left и right – границы сортируемой области

Промежуточные данные: i, j – счетчики обработанных элементов

Выходные данные: A – массив.

  1. i:= Left; j:= Right; Middle= значению среднего элемента между left и right

  2. Пока Аi меньше Middle – увеличиваем i на единицу.

  3. Пока Аj больше Middle – уменьшаем j на единицу

  4. Если i меньше j меняем местами элементы Аi и Аj. Увеличиваем i на единицу, уменьшаем j на единицу.

  5. Пока i не больше j переходим к шагу 2.

  6. Если left меньше j рекурсивно вызываем функцию сортировки для участка массива от left до j.

  7. left=i;

  8. Пока i меньше right переходим к шагу 1.

Лабораторная работа №5

Алгоритмы поиска


Цели: Познакомиться с основными алгоритмами поиска данных в контейнерах: последовательным поиском (sequential search) и бинарным поиском (binary search). Исследовать временную сложность алгоритмов поиска, идентифицировать средний, лучший и худший случаи, изучить поведение алгоритмов в каждом из случаев. Провести формальное доказательство корректности алгоритмов поиска на основе утверждений и инвариантов. Научиться реализовывать алгоритмы сортировки на языке программирования Object Pascal.


Средства: персональный компьютер, установленная операционная система Microsoft Windows, IDE Borland Delphi 7.


Ход работы

  1. Нарисуйте блок-схему, реализуйте на языке Object Pascal и докажите корректность реализации алгоритма «ПОСЛЕДОВАТЕЛЬНЫЙ ПОИСК В МАССИВЕ». Докажите корректность алгоритма теоретически, используя инварианты. Какой инвариант имеет смысл выбрать для доказательства? Проанализируйте этот алгоритм с точки зрения временной сложности теоретически (восходящим или нисходящим методом анализа), и практически – выполнив поиск в массиве для 100, 500, 1000, 1500, 3000, 5000 и 10000 элементов. Приведите таблицы измерений, постройте графики зависимости времени поиска от размера массива. Идентифицируйте лучший, средний и худший случаи для этого алгоритма с точки зрения входных данных.


function PoslPoisk (A: array of Integer; P: Integer): integer;

var

i: Integer;

begin

for i:= Low(A) to High(A) do

if A[i]=P then

begin

PoslPoisk:=i;

exit;

end;

PoslPoisk:=-1;

end;


Лучший случай когда элемент находится ближе к началу массива, средний – в середине массива и худший случаи – ближе к концу массива.




  1. Представьте алгоритм «БИНАРНЫЙ ПОИСК В МАССИВЕ» в виде словесно-формульного описания. Проведите полное исследование данного алгоритма аналогично п.2.

function BinarPoisk (A: array of Integer; P: Integer): integer;

var

i: Integer;

low1: integer;

high1: integer;

begin

low1:=low(A);

high1:=high(A);

repeat

i:=(low1+high1) div 2;

if A[i]=P then

begin

binarPoisk:=i;

exit;

end;

if A[i]

if A[i]>p then high1:=i-1;

until low1>high1;

binarPoisk:=-1;

end;



  1. Разработайте алгоритм «ВСТАВКА ЭЛЕМЕНТА В ОТСОРТИРОВАННЫЙ МАССИВ». Проведите полный анализ задачи в соответствии с требованиями. Определите временную сложность. В качестве алгоритма поиска используйте бинарный поиск.


Procedure Vstavka (P: Integer);

var

i: Integer;

begin

i:=high(A);

SetLength (A, Length (A)+1);

while (i>= Low(A)) and (A[i]>p) do

begin

A[i+1]:=A[i];

dec(i);

end;

A[i+1]:=P;

end;




Лучший случай когда элемент необходимо вставить ближе к концу массива, средний – в середине массива и худший случаи – ближе к началу массива.

Похожие:

Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconУчебное пособие разработка Windows-приложений в среде Borland Delphi Практические работы
Целью учебного пособия является формирование практических навыков разработки и отладки Windows-приложений в среде Borland Delphi
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconИнтегрированная среда разработки программного обеспечения Visual Basic, Borland Delphi
Интегрированная) среда разработки программного обеспечения (англ. Ide, Integrated development environment) — система программных...
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconДипломная работа Научный руководитель директор Томского филиала зао «Финам»
Интернет-трейдинг, фондовый рынок, технический анализ, график, заявки, сделки, тренды, индикаторы, borland delphi
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconЛабораторная работа по теме
Мбоу «сош №8 г. Петровска Саратовской области» Лабораторная работа в среде ms dos
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconBorland Delphi Installation Notes

Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconЛабораторная работа №1 Программирование линейных алгоритмов
Цель лабораторной работы: изучить основные элементы визуальной среды, освоить использование простейших компонентов delphi для ввода/вывода...
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconЛабораторная работа №4 Приложение, предлагающее ввести строку, определяющее количество символов в ней и выводящее результат, согласуя окончание слова «символов»
Все занятия по Delphi в данном пособии представляют собой самостоятельное выполнение учащимися практических работ. Только вводные...
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconКонспект урока в 9 классе по теме: «Магний»
Методы работы: индивидуальная работа, рассказ учителя, фронтальная эвристическая беседа, дополнения учителя, лабораторная работа,...
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconТема урока: Знакомство со средой программирования Turbo Pascal
Повторение пройденного материала на предыдущем уроке: алфавит языка программирования Pascal, структура программы, операторы ввода...
Лабораторная работа №1 Знакомство с интегрированной средой разработки Borland Delphi iconЛабораторная работа «Работа с программой-оболочкой Far Manager»
И если два – три десятка английских слов и их сокращений (команды ос) выучить можно довольно быстро, то запомнить названия и расположение...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©kzdocs.docdat.com 2012
обратиться к администрации
Документы
Главная страница