русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Условный оператор if.


Дата добавления: 2013-12-23; просмотров: 1488; Нарушение авторских прав


Not – отрицание, And – умножение, Or – логическое сложение, а также отношения ‹, ›, =, ‹=, ›=, ‹›.

Шаблоны классов

Виртуальные классы

Для того чтобы при множественном наследовании один и тот же базовый класс не порождал для объекта производного класса несколько объектов базового класса, при объявлении производного класса такой базовый класс указывается с ключевым словом virtual и называется виртуальным классом. Например:

class А : virtual public В { }

Абстрактные классы

Абстрактным классом называется класс, который содержит хотя бы одну чисто виртуальную функцию. Абстрактный класс не может быть явно использован для создания объектов.

Как правило, абстрактный класс применяется для описания интерфейса, который должен быть реализован всеми его производными классами.

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

Шаблоны методов

Шаблоны методов позволяют описывать одинаковую реализацию для различных типов параметров. Шаблон метода позволяет описать одну реализацию метода для всех допустимых значений параметров. Фактически шаблон метода заменяет набор перегружаемых методов с различными типами параметров.

Шаблон метода - это еще одно проявление полиморфизма языка С+ + . Шаблоны методов используют в качестве параметра тип переменной.

В момент компиляции при вызове метода, не имеющего прототипа, выполняется поиск шаблона метода, из которого вызываемый метод может быть сгенерирован.

Шаблон метода указывается ключевым словом template, за которым в угловых скобках указывается список типов, используемых для параметров функции и типа возвращаемого значения. Например:

template <class Tl>

T1 Fx (Т1 x, Т1 у) {return х+у;}



При использовании шаблона компилятор заменит для вызываемого метода тип шаблона на тип, указанный при вызове метода ( Т1 на int в следующем примере). Например:

int i1=1;

int i2=2;

std: :cout<<Fx(i1,i2) ;

Шаблоны классов позволяют определить параметризированный тип.

Шаблоны классов аналогично шаблонам функций позволяют на этапе компиляции создавать определения классов.

Шаблон класса указывается ключевым словом template, за которым в угловых скобках указывается список типов для создания параметризированного класса. Имя шаблона класса указывается после ключевого слова class.

Для создания объекта на основе шаблона класса после имени шаблона в угловых скобках указывается конкретный тип:

имя_шаблона_класса <тип> имя_объекта. Например:

template cclass Tl> // Описание шаблона класса

class А

{

Т1 x,у;

public:

А() ;

~А () ;

Т1 Fx() ;

void Fy (Т1 а, Т1 Ь) ;

};

template <class Т1> А< Т1>::А() {} //Реализация методов шаблона класса

template <class Т1> А< T1>::~А() {}

template <class Т1>Т1 А< Tl>::Fx(){ return х*у;}

template <class T1>void A< Tl>::Fy(T1 a, T1 b) {x=a; y=b;}

int main(int argc, char* argv[])

{ int i1=1;

int i2=2;

double x=i.5; double y=2.5;

A <int> Fl; // Создание объекта с использованием шаблона класса

A <int> *pFl=&Fl; // Указатель на объект параметризированного типа

pFl->Fy<i1, i2);

Std: :COUt<<pFl->Fx() <<Std: : endl ;

A <double> F2;

A <double> *pF2=&F2;

pF2->Fy (x, y) ;

Std::cout<<pF2->Fx()<<Std::endl;

return 0;

 

 

Константы.

В языке Object Pascal существуют константы двух видов: обычные и именованные.

Константа целого типа представляется числом, записанным в общепринятом виде -5, 267 и т.д.

Для обозначения вещественных констант существует две формы представления:

1) Форма с фиксированной запятой – для такого представления в качестве символа разделяющего целую и дробную части используется точка 1.1

2) Форма с плавающей запятой (экспоненциальная запись) – эта форма записи основана на том, что любое число можно представить в алгебраическом виде, т.е. как произведение числа меньшего десяти (мантисса) на число 10 в некоторой степени, эта степень называется порядком.

 

Именованная константа отличается от обычной тем, что у неё есть имя, поэтому вместо указания значения константы в программе можно использовать её имя, это удобно в том случае, когда константа используется многократно или имеет большую длину. Чтобы задать именованную константу следует объявить её в разделе описание констант, который обозначается служебным словом Const. Например:

Const

Price=250;

Name=’Иванов И. И.’;

Radius=2.567;

Переменные.

Переменной называется такая величина, которая во время выполнения программы может изменять своё значение.

Любая переменная, перед тем как будет использована в программе, должна быть объявлена в разделе обозначения служебных слов Var.

Объявление переменных должно содержать её имя и тип. Именем переменной (идентификатором) называется буквенно-цифровая последовательность символов, которая может включать некоторые специальные символы. Например:

А1 Х r_1

Замечание: запрещается использовать в качестве имён переменных:

I. Служебные слова языка программирования

II. Включать в символ (в имя) пробел

Пример: пусть некоторая программа содержит следующий раздел по описанью

Var

k:integer;

x,y,w:real;

s:string;

p,q:boolean;

Этот фрагмент объявлений говорит о том, что в программе будет использована переменная k – целого типа, переменные x,y,w – вещественного типа, s – строкового типа, p и q логического типа.

Выражения.

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

Выражения бывают арифметическими и логическими. Если в результате выполнения выражения получается число, то выражение называется арифметическим, если же в результате выполнения выражения получается значение истинности, то выражение называется логическим. Тип

Выражения определяется типом входящих в него величин и результатом выполнений.

Значение выражения вычисляется с учётом расставленных скобок и старшинства операций. Порядок выполнения операций следующий:

Not;

*, /, div, mod, and;

+, -, or;

‹, ›, =, ‹=, ›=, ‹›.

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

определить значение данного выражения и порядок его выполнения

1) false; 2) false; 3) true; 4) true; 5) true; 6) true (1+5).

Истина принимается за 1, ложь за 0. 1+0=1; 1+1=1; 1*0=0;

Стандартные функции и процедуры.

Обычный вид Object Pascal

 

Формулы преобразования.

Обычный вид Object Pascal

 

Возведение в степень.

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

 

 

Пример:

К числу стандартных функций относятся также функции преобразования типов:

Trunc(x) – вычисление целой части вещественного числа;

Round(x) – округление вещественного числа до ближайшего значения; пример:

Ord(n) – определение порядкового номера аргумента n. Если аргумент данной функции будет символ то результатом выполнения будет код этого символа;

Chr(n) – определение символа по его коду;

Frac(n) – вычисление дробной части вещественного числа;

FloatToStr(n) – применяется для преобразования вещественного числа в строку символов;

IntToStr(n) – применяется для преобразования целого числа в сроку символов;

StrToFloat – служит для преобразования строки символов в вещественное число;

StrToInt(n) – применяется для преобразования строки символов в целое число;

FloatToStrF – данная функция преобразует вещественное число в строку символов, но в отличие от FloatToStr позволяет получать изображение числа в различных форматах.

Обращение к этой функции в общем виде записывается так:

S:=FloatToStrF(значение, формат, точность, кол-во цифр);

S – это строковое изображение числа,

Значение – это число, для которого необходимо получить строковое изображение,

Формат – именованная константа,

Точность – общее количество цифр содержащихся в числе,

Количество цифр – количество знаков после запятой для изображаемого числа.

В качестве именованной константы для формата могут применяться следующие константы: ffGeneral и ffEponent.

ffGeneral – общий цифровой формат. В данном формате число изображается с десятичной точкой, разделяющей дробную и целую часть.

ffEponent – научный формат. В этом формате число изображается в экспоненциальном виде.

Модуль Math (математический).

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

Функции модуля Math имеют следующий вид:

Замечание:следует помнить, что для того чтобы использовать функции модуля Math его необходимо подключить к программе. Для этого следует добавить имя модуля в раздел Uses …, …, …, …, Math;

Оператор присваивания.

В общем виде этот оператор записывается следующим образом:

идентификатор – это имя переменной;

:= символ присваивания;

выражение – арифметическое или логическое выражение.

Работа оператора присваивания заключается в следующем:

1. следует помнить, что тип выражения и тип переменной обязательно должны соответствовать друг другу (первый тип целого и выражение только целого, вещественного – вещественного);

2. допускается присваивать переменной, которая объявлена как вещественная значения выражения целого по типу, а наоборот нельзя!

Пример: записать по правилам языка Object Pascal выражение .

1) без использования модуля Math

2) с использованием модуля Math

Записать по правилам языка Object Pascal

Записать на языке Object Pascal оператор присваивания если известно

1)

2) Math

используя модуль Math, получим:

 

Программирование в среде Delphi. Основные понятия. Этапы создания оконного приложения.

 

После запуска среды Delphi на экране можно увидеть:

1) главное окно – содержит главное меню;

2) панели инструментов;

3) Палитра Компонентов;

4) окно формы с заголовком - Form1

5) окно редактора кода с заголовком - Unit1.pas;

6) окно инспектора объектов с заголовком - Object Inspector;

7) дерево объектов с заголовком - Object View Tree, в этом окне располагаются (размещаются) компоненты находящиеся на форме.

 

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

Методы представляют собой функции или процедуры определяющие поведение компонентов.

Событием называется то, что происходит во время выполнения приложения. В среде Delphi у каждого события есть имя. Например: щелчок мышью это событие с именем OnClick; двойной щелчок мышью это событие с именем OnDoubleClick; при нажатии клавиши клавиатуры возникает событие OnKeyDown; а при отпускании клавиши клавиатуры появляется событие OnKeyUp.

Реакцией, на какое либо событие может быть определенное действие. Например: реакция на событие OnClick произошедшее по щелчку на командной кнопке может быть выполнение расчётов и вывод результата на экран.

В среде Delphi реакция на событие реализуется как процедура обработки события, поэтому задачей пользователя среды Delphi является написание процедур обработки событий.

Таким образом, процесс создания простейшего оконного приложения можно разбить на 2 этапа:

I. конструирование формы;

II. написание процедур обработки событий.

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

Для того чтобы придать компоненту необходимые свойства следует использовать вкладку Properties (свойства) окна инспектора объектов.

Для того чтобы программа выполнила какое-то действие необходимо перейти ко второму этапу – этапу программирования.

Пример: создать оконное приложение для вычисления площади круга произвольного радиуса.

Порядок создания следующий

1. Запустить среду Delphi

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Со страницы Standart палитры компонентов поместим на форму 4 компонента: Label1, Label2, Edit1, Button1.

Label1 и Label2 – так называемые метки, т.е. компоненты предназначенные для отображения текстовой информации. Отображаемый в них текст может размещаться в них как на этапе конструирования формы, так и на этапе выполнения программ.

Edit1 – строка ввода, т.е. компонент предназначенный для ввода символьной строки.

Button1 – это командная кнопка предназначенная для формирования события при нажатии на неё.

4. Установим свойства для окна формы и размещённых в окне компонентов: щёлкнув по свободному месту окна формы, перейдём в окно инспектора и заменим свойство Caption (заголовок) с Form1 на Вычисление площади круга произвольного радиуса. Выделим щелчком мышью метку Label1, перейдём в окно инспектора объектов и установим следующие свойства:

Alignment:taCenter – это свойство определяет способ выравнивания текста в внутри метки

AutoSize:False – данное свойство характеризует способ изменения размера метки. Если значением свойства будет False – то размеры метки автоматически не меняются, если True – то в зависимости от длинны выводимого текста изменяются и размеры метки.

WordWrap:True – данное свойство разрешает (запрещает) перенос текста по строкам в области метки.

Caption: Лабораторная работа №4, Вариант 30 – данное свойство является основным для метки, оно определяет тот текст который будет расположен внутри метки.

Font щелкнув по кнопке с 3 точками установим следующие свойства

Font

Щёлкнув по компоненту Label2, установим при помощи инспектора объектов, свойства:

Caption:

Font

Остальные свойства компонента Label2 принимаются по умолчанию.

Выделяя компонент Edit1, щелчком мышью, установим свойства:

Text: пусто

Font

Выделяя командную кнопку Button1, установим свойства:

Caption: Счёт

Font

5. Вновь выполнить сохранение командой File→Save all

6. Создадим обработчик события с именем OnClick для командной кнопки Button1 – для этого выполняется двойной щелчок по командной кнопке в результате откроется заготовка процедуры обработки события. В эту заготовку необходимо вставить операторы решающие поставленную задачу

Procedure TForm1.Button1Click(Sender: TObject);

var s,r:real; //*

begin

r:=StrToFloat(Edit1.Text); //*

s:=pi*sqr(r); //*

Label2.Caption:=’Площадь круга =’+

FloatToStrF(s,ffGeneral,7,2); //*

end;

 

Замечание: строки отмеченные символом //* необходимо вставить пользователем в заготовку обработчика события.

7. Выполнить сохранение командой File→Save all

8. Запустить программу на выполнение нажатием служебной клавиши F9, командой Run→Run или кнопкой ► на панели инструментов. В случае отсутствия ошибок на экране появится окно формы, в которое записывается символьное изображение числа. Например: 5,25. после щелчка по командной кнопке счёт в окне формы появится результат решения задач (вместо метки Label2).

9. Выполнить сохранение командой File→Save all.

 

Линейный вычислительный процесс.

Линейным называется такой вычислительный процесс, при котором все вычисления проходят последовательно без замкнутых циклических участков и разветвлений.

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

Пример.

Создать оконное приложение для вычислений по формулам:

x=0,57 y=1,3 z=7

Решение:

1. Запустить среду Delphi.

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Разместить в окне формы компоненты Label1, Label2, Label3, Label4, Label5, Edit1, Edit2, Edit3, Button1.

4. Установить необходимые свойства для размещённых компонентов и окна формы:

Form1

Caption: Линейный вычислительный процесс

Label1

Alignment: taCenter (выравнивание по центру)

Auto Size: False

Word Wrap: True (перенос слов)

Font

Caption: Лабораторная работа №5, Вариант 30

Label2, Label3, Label4

Caption: ’x=’ ’y=’ ’z=’ соответственно

Font

Label5

Caption: пусто

Font

Edit1, Edit2, Edit3

Text: пусто

Font

Button1

Caption: Решение

Font

5. Выполнить сохранение командой File→Save all.

6. Создать обработчик события с именем onClick для командной кнопки Button1. Выполнив двойной щелчок по командной кнопке, в появившуюся заготовку обработчика события запишем необходимые команды (операторы).

 

procedure TForm1.Button1Click(Sender: TObject);

var a,b,x,y,z:real;

begin

x:=StrToFloat(Edit1.Text);

y:=StrToFloat(Edit2.Text);

z:=StrToFloat(Edit3.Text);

a:=power(cotan(y-1),3/4);

b:=(ln(power(x,7))-exp(y+z))/(abs(z-y*y*y+sin(x)));

Label5.Caption:=’a=’+FloatToStr(a)+#13+’b=’+FloatToStr(b);

end;

Замечание:

1) следует помнить, что, так как в программе были использованы функции модуля Math то необходимо подключить имя модуля в раздел Uses, т.е. вставить имя модуля Math перед (;) в конце перечисления имён раздела Uses (……,Math;).

2) Символы #13 обозначают то, что в области метки Label5 текс будет располагаться в две строки, другими словами #13 обозначает переход к новой строке вывода.

7. Выполнить сохранение командой File→Save all.

8. Запустить программу на выполнение.

9. Ввести исходные данные в компоненты Edit и нажать кнопку Решение. Замечание: данные вещественного типа вводятся в компонент Edit с запятой, а не точкой.

10. Выполнить сохранение командой File→Save all.

 

Разветвляющийся вычислительный процесс.

Разветвляющимся – называется такой вычислительный процесс, при котором вычисления могут протекать по одному из возможных направлений в зависимости от выполнения некоторых условий.

Для реализации такого прочеса обычно используют условный оператор if в полной и краткой форме, оператор варианта case и безусловный оператор goto.

В общем виде этот оператор записывается так:

if, then, else – служебные слова языка программирования.

<условие> – это логическое выражение.

<оператор-1,2> – любые операторы языка программирования.

Рассмотренная форма условного оператора является полной. Работа условного оператора заключается в следующем: если условие истинно то выполняется <оператор-1>, в противном случае работает <оператор-2>.

В кратком виде условный оператор записывается так

работа такого оператора состоит в следующем: если условие истинно то выполняется оператор стоящий после слова then, если же условие ложно, то выполняется следующий по тексту программы оператор.

Замечание:

1. если после слова then или else необходимо выполнить два или более операторов, то эти операторы следует заключить в операторные скобки, т.е. слова begin………end. Определённая группа операторов заключённых в операторные скобки называется – составным оператором.

2. запрещается перед словом else ставить символ (;). ;else

Пример.

Даны три числа a,b,c. Создать оконное приложение для поиска максимального из них.

Компонент Memo является текстовым редактором. Он расположен на странице Стандарт палитры компонентов. Компонент Memo может содержать много строчек вывода. Основным свойством компонента Memo является свойство Lines. Это свойство задаёт список строк помещённых в редактор.

Функция Add добавляет строку в текстовый редактор.

Процедура Clear удаляет строки из списка.

Обработчик события onClick для командной кнопки Button1 имеет следующий вид:

 

Procedure TForm1.Button1Click(Sender: TObject);

var a,b,c,max:integer;

begin

a:=StrToInt(Edit1.Text);

b:=StrToInt(Edit2.Text);

c:=StrToInt(Edit3.Text);

if a>b then max:=a else max:=b;

if c>max then max:=c;

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’max=’+IntToStr(max));

end;

Замечание:

1) Для компонентов Label1, Label2, Label3, Label4, Edit1, Edit2, Edit3 свойства аналогичны рассмотренным в предыдущей задаче.

2) После щелчка по компоненту Memo1, необходимо перейти в окно инспектора объектов и активизировать свойство Lines, выполнить щелчок по кнопке с трёмя точками, в результате откроется окно String List Editor, в этом окне следует удалить надпись Memo1, после чего закрыть окно щелчком по кнопке OK. Полезно использовать свойство Font так же как и для других компонентов.

3) В задачах на поиск min отличается от задачи на поиск max именем переменной.

4) При решении данного примера условный оператор if в полной и краткой форме.

Циклический вычислительный процесс.

Циклическим называется процесс многократного вычисления по одним и тем же расчётным формулам.

Циклы бывают арифметическими и итерационными.

Если заранее известно количество повторений вычислений то цикл называется арифметическим, если же число вычислений не задано, а имеется лишь условие окончания (продолжения) вычислений, то цикл называется итерационным.

В языке программирования для организаций циклических вычислительных процессов используются специальные операторы циклов. Таких операторов три:

ü Оператор цикла с параметром;

ü Оператор цикла с предварительным условием while;

ü Оператор цикла с последующим (пост) условием repeat.

Оператор цикла с параметром.

Этот оператор чаще всего используется для организации арифметических циклов. Этот оператор в общем виде записывается следующим образом:

for, to, downto, do – служебные слова языка программирования

<параметр цикла> – это переменная любого скалярного типа кроме вещественного.

<выражение 1> – начальное значение цикла.

<выражение 2> – конечное значение цикла.

Замечание:следует помнить, что тип выражения 1 и 2 должен обязательно соответствовать типу параметра цикла.

<тело цикла> – это совокупность повторяющихся операторов.

Замечание:если телом цикла является два и более операторов, то эти операторы заключаются в операторные скобки begin…end.

Работа оператора цикла с параметром заключается в следующем:

Шаг 1. Параметр цикла принимает начальное значение.

Шаг 2. Выполняется тело цикла.

Шаг 3. Параметр цикла автоматически изменяется на шаг.

Шаг 4. Вновь выполняется тело цикла, и так до тех пор пока параметр цикла выполнится последний раз.

Замечание:

1)Если параметром цикла является переменная целого типа, шаг изменения параметра цикла может быть равен 1 или -1, при этом если начальное значение параметра цикла меньше конечного, то шаг изменения параметра цикла равен 1 и в записи оператора цикла используется служебное слово to.Если же начальное значение параметра цикла больше конечного, то шаг изменения параметра цикла равен -1 и в записи оператора цикла используется служебное слово downto.

2)запрещается ставить точку с запятой после служебного слова do.

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

При вычислении произведения начальное значение переменной в которую будет накапливаться произведение должно быть равно 1, а закон накопления произведения имеет вид:

Пример: создать оконное приложение для накопления суммы

1. Запустить среду Delphi.

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Разместить в окне формы компоненты Label1, Label2, Edit1, Button1, Memo1.

4. Установим свойства для окна формы и размещённых в окне компонентов:

Form1

Caption: Циклический вычислительный процесс

Label1

Alignment: taCenter

AutoSize: False

WordWrap: True

Caption: Лабораторная работа №7 Вариант 30

Font:

Label2

Caption: х=

Font:

Edit1

Text: пусто

Font:

Memo1

Lines: удалить надпись Memo1 и нажать кнопку ОК

Font:

Button1:

Caption: Счёт

Font:

5. Вновь выполнить сохранение командой File→Save all.

6. Создадим обработчик события с именем onClick для командной кнопки Button1. Выполнив двойной щелчок по командной кнопке, в появившуюся заготовку обработчика события запишем необходимые команды (операторы).

 

Procedure TForm1.Button1Click(Sender: TObject);

var

s,x:real;

i:integer;

begin

x:=StrToFloat(Edit1.Text);

s:=0;

for i=1 to 10 do s:=s+sqr(x)/(2*i+1);

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’S=’+FloatToStr(s));

end;

7. Выполнить сохранение командой File→Save all.

8. Запустить программу на выполнение.

9. Ввести исходные данные в компоненты Edit и нажать кнопку счёт.

10. Выполнить сохранение командой File→Save all.

Пример 2.

Найти z если известно что n>m

Запишем обработчик события onClick для решения данного примера.

 

Procedure TForm1.Button1Click(Sender: TObject);

var

z,n,m,f1,f2,f3:real;

i:integer;

begin

n:=StrToFloat(Edit1.Text);

m:=StrToFloat(Edit2.Text);

f1:=1;

for i:=1 to n do f1:=f1*i;

f2:=1;

for i:=1 to m do f2:=f2*i;

f3:=1;

for i:=1 to n-m do f3:=f3*i;

z:=f1/(f2*f3);

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’z=’+FloatToStr(z));

end;

Пример 3.

Запишем обработчик события onClick для решения данного примера.

 

Procedure TForm1.Button1Click(Sender: TObject);

var

s,x,f:real;

i,j:integer;

begin

x:=StrToFloat(Edit1.Text);

s:=0;

for i=1 to 10 do

begin

f:=1;

for j:=1 to i=1 do f:=f*j;

S:=S+power(-1,i)*sin(i*x)/f;

end;

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’S=’+FloatToStr(s));

end;

Комментарий: при решении данного примера была использована структура вложенного цикла. Данная структура состоит из внешнего цикла (по параметру i) и внутреннего цикла (по параметру j). Следует учитывать что при использовании таких стуруктур вначале работает внутренний цикл а потом внешний т.е. для каждого значения параметра i цикл по параметру j полностью работает, а только потом происходит изменение параметра i.

 

Компонент StringGrid.

Данный компонент находится на странице Additional палитры компонентов. Компонент StringGrid является таблицей, предназначенной для отображения двумерной информации (например элементов матрицы).

В таблице может находиться произвольное количество строчек и столбцов, если зафиксировать необходимое количество первых строчек и столбцов таблицы, то можно задавать заголовки строчкам и столбцам таблиц, эти заголовки будут постоянно присутствовать в окне компонента. На пересечении строчек и столбцов находятся ячейки. Каждая ячейка может содержать одну символьную строку. Если для ячеек задан режим редактирования, то на этапе выполнения программы разрешается редактировать данные, находящиеся в ячейках.

Нумерация строк и столбцов таблицы начинается с 0. координаты каждой ячейки задаются парой чисел, первое из которых является номером столбца, а второе номером строки. Например ячейка с координатами (3,5) находится в 4 столбце и в 6 строке.

Рассмотрим основные свойства компонента StringGrid.

ColCount – задаёт число столбцов в таблице.

RowCount – задаёт число строк в таблице.

FixedCols – задаёт число фиксированных столбцов в таблице, по умолчанию значением этого свойства является 1.

FixedRows – задаёт количество фиксированных строчек в таблице, по умолчанию значением этого свойства является 1.

Options – задаёт флаги, определяющие поведение таблиц. Например если значением флага goEditing является True, то ячейки таблицы могут редактироваться.

Cells – содержит двумерный массив символьных строк принадлежащих ячейку с текущими координатами.

Cols – содержит список строк принадлежащих столбцу с текущим индексом.

Rows – содержит список строк принадлежащих ячейке с текущим индексом строки.

Событием по умолчанию для компонента StringGrid является событие onClick.

Массивы

Массивом называется упорядоченная последовательность значений одного и того же типа имеющая общее имя.

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

Характеристиками любого массива могут служить его размерность и длина.

Длинной массива называется количество элементов находящихся в массиве, размерность массива определяется количеством индексов у элементов. Если индекс 1 то массив называется одномерным, если 2 то двумерным (m×n) и т.д.

В языке программирования существует несколько способов объявления массивов. Массивы можно объявлять в разделе описания простых переменных (var), в общем виде такое объявление записывается так:

var

<имя>:array[<тип индексов>] of <тип элементов>;

array, of – служебные слова языка программирования.

Имя – идентификатор массива.

Тип индексов – может быть любым скалярным типом, кроме вещественного. Чаще всего индексы бывают целого типа или отрезком целого типа.

Отрезком типа называется наложение ограничений (минимального и маквимального) на данные этого типа. Например если в разделе типов будет сказано:

type

t=1..10

var

a:t;

то а может принимать значения от 1 до 10.

Тип элемента может быть любым типом. Пример:

var

a:array[1..8] of integer;

b:array[1..3,1..5] of real;

Данный фрагмент объявлений говорит о том, что в программе будет использована переменная «а», являющаяся одномерным массивом целого типа длинной 8 элементов, а также переменная «b» являющаяся двумерным массивом (матрицей) имеющей три строки и 5 столбцов, вещественного типа.

Другим способом объявления массивов может быть совместное использование разделов описания типов и простых переменных. Например:

type

t=array[1..8] of integer;

t1=array[1..3,1..5] of real;

var

a:t;

b:t1;

Данный фрагмент объявлений говорит о том, что в программе будет использована переменная «а», являющаяся одномерным массивом целого типа длинной 8 элементов, а также переменная «b» являющаяся двумерным массивом (матрицей) имеющей три строки и 5 столбцов, вещественного типа.

Для того чтобы получить доступ к элементу массива в программе следует записать имя массива а в квадратных скобках индекс (индексы) элемента массива. Например:

a[5] – пятый элемент массива.

b[2,3] – элемент матрицы находящийся во второй строке и в третьем столбце.

Следует помнить что для обработки массива, ввода и вывода элементов массива следует обязательно использовать операторы циклов. Пример:

Пусть задан одномерный массив вещественного типа длинной 5 элементов. Создать оконное приложение для поиска максимального и минимального значения а также их местоположения в массиве.

1. Запустить среду Delphi.

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Разместить в окне формы компоненты StringGrid1, Button1, Memo1.

4. Зададим необходимые свойства для окна формы и размещённых компонентов.

Form1

Caption: Обработка одномерных массивов

StringGrid1

FixedCols: 0

FixedRows: 0

ColCount: 5

RowCount: 1

Активизируем свойство Options двойным щелчком и установим значение флага goEditing: True

Memo1

Lines: удалить надпись Memo1 и нажать кнопку ОК.

Button1

Caption: Поиск

5. Вновь выполнить сохранение командой File→Save all.

6. Создадим обработчик события с именем onClick для командной кнопки Button1. Выполнив двойной щелчок по командной кнопке, в появившуюся заготовку обработчика события запишем необходимые команды (операторы).

 

Procedure TForm1.Button1Click(Sender: TObject);

var

a:array[1..5] of real;

max,min:real;

nmax,nmin,i:integer;

begin

for i:=1 to 5 do a[i]:=StrToFloat(StringGrid1.Cells[i-1,0]);

max:=a[1];

min:=a[1];

for i:=1 to 5 do if a[i]>=max then

begin

max:=a[i];

nmax:=i;

end;

for i:=1 to 5 do if a[i]<=min then

begin

min:=a[i];

nmin:=i;

end;

Memo1.Clear;

Memo1.Lines.Add(’max=’+FloatToStr(max));

Memo1.Lines.Add(’nmax=’+IntToStr(nmax));

Memo1.Lines.Add(’min=’+FloatToStr(min));

Memo1.Lines.Add(’nmin=’+IntToStr(nmin));

end;

Пример 2. Пусть дан одномерный массив «а» вещественного типа длиной 5 элементов. Определить количество положительных элементов в массиве и найти сумму отрицательных элементов

Обработчик события OnClick для данной задичи имеет вид:

Procedure TForm1.Button1Click(Sender: TObject);

var

a:array[1..5] of real;

s:real;

kol,i:integer;

begin

for i:=1 to 5 do a[i]:=StrToFloat(StringGrid1.Cells[i-1,0]);

s:=0;

kol:=0;

for i:=1 to 5 do

if a[i]<0 then s:=s+a[i] else

if a[i]>0 then kol:=kol+1;

Memo1.Clear;

Memo1.Lines.Add(’Сумма отрицательных элементов=’+FloatToStr(s));

Memo1.Lines.Add(’Количество положительных элементов =’ +IntToStr(kol));

end;

Обработка двумерных массивов.

Обработка двумерных массивов отличается от обработки одномерных массивов тем, что необходимо использовать ещё один цикл, так как у элементов двумерного массива два переменных индекса.

Ещё одним важным свойством компонента StringGrid является свойство DefaultColWidth – данное свойство задаёт ширину ячейки компонента StringGrid (по умолчанию значением этого свойства является 64). Практически всегда удобно чтобы вся таблица StringGrid размещалась в окне формы. Известно, что если массив имеет большую длину то в окне формы можем наблюдать лишь часть этого массива при этом полосы прокруток позволяют увидеть не поместившуюся часть массива. В связи с этим можно изменить значение свойства DefaultColWidth на 30 в этом случае весь массив будет присутствовать в окне формы и полос прокруток не будет.

Пример.

В целочисленной матрице А(4×4) поменять местами первую и четвёртую строки.

Решим эту задачу трёма способами:

1) основан на использовании свойства Cells (ячейки) компонента StringGrid

2) основан на использовании свойства Rows (строк) компонента StringGrid

3) связан с непосредственной обработкой матрицы А

Решение.

1. Запустить среду Delphi.

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Разместить в окне формы компоненты StringGrid1, StringGrid2, Button1, Button2, Button3, Button4.

4. Зададим необходимые свойства для окна формы и размещённых компонентов.

Form1

Caption: Обработка двумерных массивов

StringGrid 1 и StringGrid 2

FixedCols: 0

FixedRows: 0

ColCount: 4

RowCount: 4

Активизируем свойство Options двойным щелчком и установим значение флага goEditing: True.

Button1, Button2, Button3

Caption: Решение 1, Решение 2, Решение 3.

Button4

Caption: Очистить

5. Вновь выполнить сохранение командой File→Save all.

6. Создадим обработчик события с именем onClick для командной кнопки Button1. Выполнив двойной щелчок по командной кнопке, в появившуюся заготовку обработчика события запишем необходимые команды (операторы).

 

Procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

begin

for i:=0 to 3 do

begin

StringGrid2.Cells[i,0]:=StringGrid1.Cells[i,3];

StringGrid2.Cells[i,3]:=StringGrid1.Cells[i,0];

StringGrid2.Cells[i,1]:=StringGrid1.Cells[i,1];

StringGrid2.Cells[i,2]:=StringGrid1.Cells[i,2];

end;

 

Активизируем командную кнопку Button 2 и создадим обработчик события onClick, для решения поставленной задачи вторым способом.

 

Procedure TForm1.Button2Click(Sender: TObject);

begin

StringGrid2.Rows[0]:=StringGrid1.Rows[3];

StringGrid2.Rows[3]:=StringGrid1.Rows[0];

StringGrid2.Rows[1]:=StringGrid1.Rows[1];

StringGrid2.Rows[2]:=StringGrid1.Rows[2];

end;

 

Активизируем командную кнопку Button 3 и создадим обработчик события onClick, для решения поставленной задачи третьим способом используя двумерный массив.

Procedure TForm1.Button3Click(Sender: TObject);

var

a:array[0..3,0..3] of integer;

i,j,c:integer;

begin

for i:=0 to 3 do

for j:=0 to 3 do

a[i,j]:=StrToInt(StringGrid1.Cells[j,i]);

for j:=0 to 3 do

begin

a:=a[0,j];

a[0,j]:=a[3,j];

a[3,j]:=c;

end;

for i:=0 to 3 do

for j:=0 to 3 do

StringGrid2.Cells[j,i]:=IntToStr(a[i,j]);

end;

Активизируем командную кнопку Button 4 и создадим обработчик события onClick.

 

procedure TForm1.Button4Click(Sender: TObject);

var i,j:integer;

begin

for i:=0 to 3 do

for j:=0 to 3 do

StringGrid2.Cells[j,i]:= ' '

end;

 

7. Выполнить сохранение командой File→Save all.

8. Запустить программу на выполнение нажатием служебной клавиши F9, командой Run→Run или кнопкой ► на панели инструментов.

9. Выполнить сохранение командой File→Save all.

Пример 2.

Дана матрица А(4×3) найти номер столбца в котором находится минимальный элемент матрицы и вывести на экран столбец содержащий этот элемент.

1. Запустить среду Delphi.

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Разместить в окне формы компоненты StringGrid1, StringGrid2, Button1.

4. Зададим необходимые свойства для окна формы и размещённых компонентов.

Form1

Caption: Обработка двумерных массивов

StringGrid1

FixedCols: 0

FixedRows: 0

ColCount: 3

RowCount: 4

Активизируем свойство Options двойным щелчком и установим значение флага goEditing: True.

StringGrid2

FixedCols: 0

FixedRows: 0

ColCount: 1

RowCount: 4

Активизируем свойство Options двойным щелчком и установим значение флага goEditing: True.

Button1

Caption: Решение

5. Вновь выполнить сохранение командой File→Save all.

6. Создадим обработчик события с именем onClick для командной кнопки Button1. Выполнив двойной щелчок по командной кнопке, в появившуюся заготовку обработчика события запишем необходимые команды (операторы).

Procedure TForm1.Button1Click(Sender: TObject);

var

a:array[1..4,1..3] of real;

min:real;

nmin,i,j:integer;

begin

for i:=1 to 4 do

for j:=1 to 3 do

a[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

min:=a[1,1];

nmin:=1;

for i:=1 to 4 do

for j:=1 to 3 do

if a[i,j]<min then

begin

min:=a[i,j];

nmin:=j;

end;

for i:=1 to 4 do

StringGrid2.Cells[0,i-1]:=FloatToStr(a[i,nmin]);

end;

7. Выполнить сохранение командой File→Save all.

8. Запустить программу на выполнение нажатием служебной клавиши F9, командой Run→Run или кнопкой ► на панели инструментов.

9. Выполнить сохранение командой File→Save all.

Пример 3.

Дана матрица А(5×5) найти сумму и количество элементов находящихся выше главной диагонали.

Обработчик события onClick для решения поставленной задачи будет иметь вид:

Procedure TForm1.Button1Click(Sender: TObject);

var

a:array[1..5,1..5] of real;

s:real;

kol,i,j:integer;

begin

for i:=1 to 5 do

for j:=1 to 5 do

a[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

s:=0;

kol:=0;

for i:=1 to 5 do

for j:=1 to 5 do

if j>i then

begin

s:=s+a[i,j];

kol:=kol+1

end;

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’S=’+FloatToStr(s));

Memo1.Lines.Add(’kol=’+IntToStr(kol));

end;

Пример 4.

Для матрицы А(5×5) определить количество элементов кратных 5.

Procedure TForm1.Button1Click(Sender: TObject);

var

a:array[1..5,1..5] of integer;

kol,i,j:integer;

begin

for i:=1 to 5 do

for j:=1 to 5 do

a[i,j]:=StrToInt(StringGrid1.Cells[j-1,i-1]);

for i:=1 to 5 do

for j:=1 to 5 do

if a[i,j] mod 5=0 then

kol:=kol+1;

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’kol=’+IntToStr(kol));

end;

Подпрограммы.

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

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

Использование подпрограмм позволяет сократить объем программы, улучшить её структуру, уменьшить вероятность ошибок и облегчить процесс отладки программы.

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

В языке программирования Подпрограммы реализуются в двух видах:

ü Подпрограммы – процедуры

ü Подпрограммы – функции

Процедуры.

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

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

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

Общая форма записи имеет вид:

Procedure <имя> (<список формальных параметров>);

Procedure – служебное слово.

<имя>– идентификатор процедуры.

Список формальных параметровэто последовательность через запятую имён переменных с указанием типа этих переменных.

Примечание: если список включает переменные разных типов, то используется символ (;) отделяющий один тип от другого.

Формальные параметры бывают:

ü Параметрами-значениями

ü Параметрами-переменными

Перед параметрами-переменными в списке формальных параметров обязательно должно стоять служебное слово var.

Параметры-значения используются для передачи внутрь процедуры исходных данных. Параметры-переменные являются результатом работы процедуры.

Для обращения к подпрограмме в главной программе используется специальный оператор вызова подпрограмм.

В общем виде он записывается так:

<имя>(<список фактических параметров>)

имя – идентификатор процедуры.

Список фактических параметров – это последовательность через запятую конкретных имён переменных в решаемой задаче.

Следует помнить что параметры формальные и фактические должны соответствовать друг другу по трём признакам:

ü По количеству.

ü По типу.

ü По порядку следования.

Пример.

Найти n>m

1. Запустить среду Delphi.

2. Выполнить сохранение командой File→Save all, на этапе сохранения необходимо создать папку, в которой будут находиться все файлы, связанные с данным приложением. Открыв эту папку необходимо сохранить файлы с именами Project1 и Unit1. имена этих файлов предлагаются автоматически.

3. Разместить в окне формы компоненты Label1, Label2, Edit1, Edit2, Memo1, Button1.

4. Зададим необходимые свойства для окна формы и размещённых компонентов.

Label1

Caption: n=

Label2

Caption: m=

Edit1 и Edit2

Text: пусто

Button1

Caption: Результат

Memo1

Lines: удалить надпись Memo1 и нажать кнопку ОК

5. Вновь выполнить сохранение командой File→Save all.

6. перейдём в окно ввода программы. Используя бегунок найдём раздел implementation и после директивы {$R *.dfm} запишем текст процедуры для вычисления факториала.

Procedure fakt(m:integer; var f:integer);

var i:integer;

begin

f:=1;

for i:=1 to m do f:=f*i

end;

Используя клавишу F12 вновь вернёмся в окно формы и выполнив двойной щелчок по командной кнопке создадим обработчик события onClick.

Procedure TForm1.Button1Click(Sender: TObject);

var

m,n,f1,f2,f3:integer;

z:real;

begin

n:=StrToInt(Edit1.Text);

m:=StrToInt(Edit2.Text);

fakt(n,f2);

fakt(m,f2);

fakt(n-m,f3);

z:=f1/(f2*f3);

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’z=’+FloatToStr(z));

end;

 

Пример 2.

После размещения на форме компонентов StringGrid1, StringGrid2, Memo1, Button1, перейдём в окно ввода программы при помощи клавиши F12 и в разделе implementation и после директивы {$R *.dfm} запишем процедуру для накопления суммы элементов одномерного массива.

Type t=array[1..10] of real;

Procedure Summa(z:t;n,k,:integer; var s:real);

var i:integer;

begin

s:=0;

for i:=n to k do

s:=s+z[i];

end;

Используя клавишу F12 вновь вернёмся в окно формы и выполнив двойной щелчок по командной кнопке создадим обработчик события onClick.

Procedure TForm1.Button1Click(Sender: TObject);

var

x,y,w:t,s1,s2,s3:real;

i:integer;

s:real;

begin

for i:=1 to 10 do x[i]:=StrToFloat(StringGrid1.Cells[i-1,0]);

for y:=1 to 10 do y[i]:=StrToFloat(StringGrid2.Cells[i-1,0]);

for i:=1 to 10 do w[i]:=x[i]*y[i];

Summa(x,2,10,S1);

Summa(y,3,8,S2);

Summa(z,1,9,S3);

S:=(S1+S2)/S3;

Memo1.Clear;

Memo1.Lines.Add(’Результат:’);

Memo1.Lines.Add(’S=’+FloatToStr(S));

end;

 

Функции.

Функция – это подпрограмма, результат выполнения которой может быть одно единственное значение. Считается, что функция является частным случаем процедуры.

Отличия функции от процедуры заключаются в том, что:

1. Результат выполнения функции – одно значение, а результат процедуры одно или несколько значений.

2. Результат выполнения функции передаётся в вызванную программу по имени этой функции, а результат выполнения процедуры является параметром процедуры (параметром переменной) и передаётся в главную программу по имени этого параметра.

3. Для обращения к функции, необходимо использовать какой либо оператор языка программирования (например, оператор присваивания), а для обращения к процедуре используется специальный оператор вызова процедуры.

4. Функция от процедуры отличается заголовком.

В общем виде заголовок функции записывается следующим образом:

function <имя>(<список формальных параметров>):<тип результата>;

function – служебное слово языка программирования.

список формальных параметров – последовательность через запятую имён переменных с указанием их типов.

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

function <имя> :<тип результата>;

Следует помнить, что при использовании функции тело функции обязательно должно иметь оператор присваивания, в левой части которого указана переменная result, эта переменная не требует объявлений ёё значением и является результат работы функций.

Пример.

Создать оконное приложение для вычисления значения

Исходя из анализа условия задачи, будем применять функцию для вычисления факториала.

 

 



<== предыдущая лекция | следующая лекция ==>
Виртуальные методы | Delphi. Основные понятия ООП. Принципы ООП.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.107 сек.