Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab3_s2.doc
Скачиваний:
3
Добавлен:
01.09.2019
Размер:
377.86 Кб
Скачать

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

Построение таблицы значений и графика функции

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

1. Построение таблицы значений функции

1.1. Общие сведения

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

1.2. Постановка задачи

Известно, что важной характеристикой полевого транзистора, представляющей его свойства, является стоко-затворная вольт-амперная характеристика. Для нее имеется следующая зависимость тока Ic от напряжения между затвором и стоком Uz:

Ic=Icmax(1‑Uz/U0)2, где Icmax – максимальны ток стока при Uz=0, U0 – напряжение отсечки.

Итак, требуется для заданной зависимости Ic=Icmax(1‑x/U0)2построить таблицу значений функции Ic при изменении аргумента x=Uz в диапазоне от a до b с заданным шагом h.

1.3. Алгоритм

  1. Ввод исходных данных: вид и параметры U0, Icmax функции, границы отрезка [a, b], шаг его разбиения h.

  2. Задание начального значения аргумента x=Uz=a;

  3. Вычисление значения функции Ic в точке x и вывод на экран дисплея;

  4. Увеличение значения аргумента x=x+h;

  5. Проверка условия x<b. Если оно выполняется, то переход к п.3 алгоритма, в противном случае – останов.

1.4. Реализация алгоритма в C++ Builder

После запуска C++ Builder и открытия окна формы (модуль Form1) разместим в нем следующие объекты вкладки стандарт панели визуальных компонент:

  • поля редактирования Edit1Edit5 для ввода исходных данных: значений левой a и правой b границ интервала, шага h изменения аргумента функции, значения параметров U0, Icmax функции;

  • метки Label1Label13 для вывода заголовков и пояснений;

  • кнопки Button1Button3 для управления работой программы;

  • таблицу (объект StringGrid вкладки Additional панели визуальных компонент) для размещения и вывода результата.

С помощью инспектора объектов (Object Inspector) определяются заголовки для объектов Form1, Label1Label7 путем ввода соответствующего текста в поле Caption вкладки Properties. Например, для окна Form1 в поле Caption вводится текст "Таблица значений функции Ic=Icmax(1-Uz/Uo)^2"; для метки Label1 – текст "Исходные данные", для метки Label2 – текст "a – левая граница" и т.д.

Графический элемент StringGrid предназначен для представления табличных данных. Он имеет следующие свойства: Name – имя объекта, ColCount количество столбцов в таблице, FixedCols количество зафиксированных столбцов, RowCount – количество строк в таблице, FixedRows – количество зафиксированных строк, Cells[col][row] – содержимое ячейки таблицы на пересечении столбца с номером col и строки с номером row (нумерация производится с нулевого значения). Определим с помощью инспектора объектов следующие свойства StringGrid: Name = Tab1, ColCount = 2, FixedCols = 0, FixedRows = 1, RowCount = 2.

Общий вид окна формы с выбранными компонентами представлен на Рис.3.1.

Рис.3.1. Окно формы для построения таблицы значений функции Ic=Icmax(1‑Uz/U0)2

Для управления работой программы с каждой кнопкой связывается событие "щелкнуть" (Click). При щелчке на кнопке Button1 программа должна ввести исходные данные – значения a, b, h, Icmax, U0. Для хранения данных в раздел private класса формы TForm1 (файл Unit1.h) добавляются свойства a, b, h, x, Icmax, U0 вещественного типа и M целого типа (отвечает за количество полученных значений функции). Массив вещественных чисел Y[200] служит для хранения вычисленных значений функции f(x). Затем после двойного щелчка кнопки Button1 и попадания в окно редактора кода вводятся следующие операторы присваивания:

a = StrToFloat(Edit1->Text);

b = StrToFloat(Edit2->Text);

h = StrToFloat(Edit3->Text);

Icmax = StrToFloat(Edit4->Text);

U0 = StrToFloat(Edit5->Text);

Здесь стандартная функция StrToFloat преобразует символьные представления значения поля Text объектов Edit1 – Edit5 в соответствующие вещественные значения.

Для вычисления функции f(x) в раздел public класса TForm1 в файле Unit1.h введем метод

float f(float x) { /* Определение функции f(x) */

float r = 1-x/U0;

return Icmax*r*r;

}

Далее после двойного щелчка кнопки Button2 и попадания снова в окно редактора кода вводятся операторы, реализующие алгоритм вычисления значения функции и их вывод в таблицу Tab1. При этом сначала в ячейки Cells[0][0] и Cells[1][0] таблицы Tab1 заносятся обозначения колонок "x" и "f(x)" соответственно. Затем в цикле для каждого нового значения аргумента x вычисляются значения функции f(x). Эти значения преобразуются в символьное представление с помощью стандартной функции FloatToStr и выводятся в ячейки 0-й строки (0-я и 1-я колонки) таблицы Tab1. Заметим, что для обращения к ячейкам таблицы используется запись Tab1->Cells[0][i], в которой Tab1 есть название таблицы, Cells[0][i] – ячейка таблицы, находящаяся на пересечении 0-й колонки и i-й строки.

Аналогично после двойного щелчка кнопки Button3 и попадания в окно редактора кода вводится оператор вызова метода Close(), завершающего работу программы. В результате программа будет иметь следующий вид:

Файл Unit1.h

#ifndef Unit1H

#define Unit1H

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Grids.hpp>

#include <ExtCtrls.hpp>

class TForm1 : public TForm

{

__published: // IDE-managed Components

TEdit *Edit1;

TEdit *Edit2;

TEdit *Edit3;

TEdit *Edit4;

TEdit *Edit5;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TStringGrid *Tab1;

TImage *Image1;

TButton *Button4;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

private: // User declarations

float a,b,h,x,Icmax,U0;

int M;

float Y[200];

public: // User declarations

__fastcall TForm1(TComponent* Owner);

float f(float x) { /* Определение функции f(x) */

float r = 1-x/U0;

return Icmax*r*r;

}

};

extern PACKAGE TForm1 *Form1;

#endif

Файл Unit1.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

a = StrToFloat(Edit1->Text);

b = StrToFloat(Edit2->Text);

h = StrToFloat(Edit3->Text);

Icmax = StrToFloat(Edit4->Text);

U0 = StrToFloat(Edit5->Text);

}

void __fastcall TForm1::Button2Click(TObject *Sender)

{

int i;

/* Вычисление значений функции и построение таблицы */

M = (b-a)/h + 1; /* Определение количества точек */

Tab1->RowCount = M + 1; /* Задание числа строк в таблице */

Tab1->Cells[0][0] = " x";

Tab1->Cells[1][0] = " f(x)";

i=0; x = a;

while(x<=b) {

Y[i] = f(x);

Tab1->Cells[0][i+1]=FloatToStr(x); /* вывод в SttringGrid */

Tab1->Cells[1][i+1]=FloatToStr(Y[i]); /* сохраняем в массиве Y */

x = x+h;

i++;

}

}

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Close();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]