• Главная
  • Блог
  • Пользователи
  • Форум
  • Литературное творчество
  • Музыкальное творчество
  • Научно-техническое творчество
  • Художественно-прикладное творчество

Программа решения квадратных уравнений

Опубликовано Ласкин Виталий Олегович вкл 14.11.2011 - 1:56
Автор: 
Пинясов Виктор

В данной работе содержится технический проект к программе составленной в среде Lazarus.

Скачать:

ВложениеРазмер
Файл kvadratnye_uravneniya.rar364.6 КБ

Предварительный просмотр:

ГОУ СПО «ЗУБОВО-ПОЛЯНСКИЙ ПЕДАГОГИЧЕСКИЙ КОЛЛЕДЖ»

Утверждаю

Руководитель:

___________  Ласкин В.О.

«___» ______________ 2011 г.

ПРОГРАММА РЕШЕНИЯ КВАДРАТНЫХ УРАВНЕНИЙ

Технический проект

Листов 15

Исполнитель,         ______________         Пинясов В.

Зубова Поляна, 2011 г.

 СОДЕРЖАНИЕ

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К ТЕХНИЧЕСКОМУ ПРОЕКТУ        ………….3

Общие положения        …………………………………………………………3

Структура входных и выходных данных        …………………………………3

Алгоритм решения задачи        ………………………………………………..3

Формы данных        ……………………………………………………………..6

Листинг программного кода        ………………………………………………7

Конфигурация технических средств        ……………………………………14

План работ        ………………………………………………………………14

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ        …………………………15

 ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К ТЕХНИЧЕСКОМУ ПРОЕКТУ

1. Общие положения

Данный документ является техническим проектом на создание программы решения квадратных уравнений. Цели  и назначение программы указаны в техническом задании.

2. Структура входных и выходных данных

Входными данными являются коэффициенты квадратного уравнения вида , где a, b, c могут быть представлены целыми числами, а также десятичными дробями. Программа так же предусматривает ввод коэффициентов в виде обыкновенных дробей, поэтому общий вид квадратного уравнения сводится к следующему:

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

x, x1, x2, «Данное выражение не является уравнением», «Нет действительных корней» (если не стоит флажок «Комплексные решения»), ,  (если стоит флажок «Комплексные решения»).

3. Алгоритм решения задачи

Уравнение   можно представить в виде

Сделаем подстановку , , .

Получим

Общий алгоритм решения данного уравнения представлен в таблице 1.

№

a

b

c

Решение

1

a=0

b=0

c=0

Данное выражение не является уравнением

2

a=0

b=0

c<>0

Данное выражение не является уравнением

3

a=0

b<>0

c=0

4

a=0

b<>0

c<>0

5

a<>0

b=0

c=0

6

a<>0

b=0

c<>0

Если  то

Иначе «Нет действительных корней» или  (если стоит флажок «Комплексные решения»)

7

a<>0

b<>0

c=0

8

a<>0

b<>0

c<>0

Если  то

Если  то

Если  то «Нет действительных корней» или                 (если стоит флажок «Комплексные решения»)

Таблица 1. Решения квадратного уравнения в зависимости от введенных коэффициентов

Исходя из этого, общий алгоритм решения можно представить в виде следующей блок-схемы:

Рисунок 1. Алгоритм нахождения корней

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

 4. Формы данных

В программе представлены две формы: главная и форма ввода данных.

меню MainMenu1

Корни уравнения Label13, Label14

Найти или нет комплексные корни CheckBox1

уравнение

Рисунок 2. Главная форма программы

Уравнение имеет следующую структуру:

Label2

Label8

Label6

Label5

Label3

Label9

Label1

Label10

Label4

Label7

Label12

Label11

Рисунок 3. Структура уравнения

MenuItem1

MenuItem5

Меню состоит из следующих элементов:

MenuItem4

MenuItem2

MenuItem3

Числители и знаменатели дробей

Label3

Label4

Button1

Label6

Label5

Label2

Label1

CheckBox3

CheckBox2

CheckBox1

Указывает целое число или в виде обыкновенной дроби

Рисунок 4. Окно ввода данных

5. Листинг программного кода

Листинг 1.

// Процедура при нажатии на меню файл

procedure TForm1.MenuItem1Click(Sender: TObject);

begin

  if (Form1.Label9.Caption<>'') then

     begin

     Form1.MenuItem3.Enabled:=true;

     Form1.CheckBox1.Enabled:=true;

  end;

end;

Листинг 2.

// процедура при нажатии на меню новый

procedure TForm1.MenuItem2Click(Sender: TObject);

begin

  if  (form2.Visible=false) then

  Form1.Label1.Caption:='';

  Form1.Label1.Font.Style:=[fsUnderline];

  Form1.Label5.Caption:='';

  Form1.Label5.Font.Style:=[fsUnderline];

  Form1.Label8.Caption:='';

  Form1.Label8.Font.Style:=[fsUnderline];

  Form1.Label2.Caption:='';

  Form1.Label3.Caption:='';

  Form1.Label4.Caption:='';

  Form1.Label6.Caption:='';

  Form1.Label7.Caption:='';

  Form1.Label9.Caption:='';

  Form1.Label10.Caption:='';

  Form1.Label11.Caption:='';

  Form1.Label12.Caption:='';

  Form1.CheckBox1.Checked:=false;

  Form1.CheckBox1.Visible:=false;

  Form1.Label13.Caption:='';

  Form1.Label14.Caption:='';

  Form1.MenuItem3.Enabled:=false;

  form2.Visible:=true;

end;

Листинг 3.

// процедура при нажатии на меню решить

procedure TForm1.MenuItem3Click(Sender: TObject);

var af, asec, bf, bsec, cf, csec, a, b, c, d: real;

begin

   // запись данных

   if (Form1.Label1.Caption='') then

      af:=0

   else af:=StrToFloat(Form1.Label1.Caption);

   if (Form1.Label10.Caption='') then

      asec:=1

   else asec:=StrToFloat(Form1.Label10.Caption);

   if (Form1.Label5.Caption='') then

      bf:=0

   else bf:=StrToFloat(Form1.Label5.Caption);

   if (Form1.Label11.Caption='') then

      bsec:=1

   else bsec:=StrToFloat(Form1.Label11.Caption);

   if (Form1.Label8.Caption='') then

      cf:=0

   else cf:=StrToFloat(Form1.Label8.Caption);

   if (Form1.Label12.Caption='') then

      csec:=1

   else csec:=StrToFloat(Form1.Label12.Caption);

   // решение уравнения

   a:=af*bsec*csec;

   b:=bf*asec*csec;

   c:=cf*bsec*asec;

   if ((a=0)and(b=0)) then

      Form1.Label13.Caption:='Данное выражение не является уравнением'

   else if (((a=0)and(b<>0))and(c=0)) then

      Form1.Label13.Caption:='x=0'

   else if (((a=0)and(b<>0))and(c<>0)) then

      Form1.Label13.Caption:='x='+FloatToStr(-c/b)

   else

      begin

      d:=b*b-4*a*c;

      if (d=0) then

         Form1.Label13.Caption:='x='+FloatToStr(-b/(2*a));

      if (d>0) then

         begin

         Form1.Label13.Caption:='x1='+FloatToStr((-b+sqrt(d))/(2*a));

         Form1.Label14.Caption:='x2='+FloatToStr((-b-sqrt(d))/(2*a));

      end;

      if (d<0) then

         begin

         if (Form1.CheckBox1.Checked=false) then

            Form1.Label13.Caption:='нет действительных корней'

         else

            begin

            Form1.Label13.Caption:='x1='+FloatToStr(-b/(2*a))+'+'+FloatToStr(sqrt(-d)/(2*a))+'i';

            Form1.Label14.Caption:='x2='+FloatToStr(-b/(2*a))+'-'+FloatToStr(sqrt(-d)/(2*a))+'i';

         end;

      end;

   end;

end;

Листинг 4.

// Процедура при нажатии на меню выход

procedure TForm1.MenuItem4Click(Sender: TObject);

begin

   form1.Close;

   form2.Close;

end;

Листинг 5.

// привязка файла справки

// справка должна находится по указанному пути

// Необходимо подключить модуль Windows

procedure TForm1.MenuItem5Click(Sender: TObject);

begin

   ShellExecute (Form1.Handle, nil, '.\help.chm', nil, nil, SW_RESTORE);

end;

Листинг 6.

// процедура при щелчке на a - целое

procedure TForm2.CheckBox1Change(Sender: TObject);

begin

  if (CheckBox1.Checked=true)  then

     begin

     label2.Visible:=false;

     edit2.Visible:=false;

     edit2.Text:='1';

     label1.Caption:='Введите число:';

     end

 else

     begin

     label2.Visible:=true;

     edit2.Visible:=true;

     edit2.Text:='';

     label1.Caption:='Введите числитель:';

     end;

end;

Листинг 7.

// процедура при щелчке на b - целое

procedure TForm2.CheckBox2Change(Sender: TObject);

begin

   if (CheckBox2.Checked=true)  then

      begin

      label4.Visible:=false;

      edit4.Visible:=false;

      edit4.Text:='1';

      label3.Caption:='Введите число:';

      end

   else

      begin

      label4.Visible:=true;

      edit4.Visible:=true;

      edit4.Text:='';

      label3.Caption:='Введите числитель:';

   end;

end;

Листинг 8.

// процедура при щелчке на с - целое

procedure TForm2.CheckBox3Change(Sender: TObject);

begin

   if (CheckBox3.Checked=true)  then

      begin

      label6.Visible:=false;

      edit6.Visible:=false;

      edit6.Text:='1';

      label5.Caption:='Введите число:';

      end

   else

      begin

      label6.Visible:=true;

      edit6.Visible:=true;

      edit6.Text:='';

      label5.Caption:='Введите числитель:';

   end;

end;

Листинг 9.

// Процедура при щелчке по кнопке Сохранить

procedure TForm2.Button1Click(Sender: TObject);

var otstup:integer;

begin

 // Проверка вводимых данных

  If (((Proverka(CheckBox1.Checked, Edit1.Text, Edit2.Text))

     and(Proverka(CheckBox2.Checked, Edit3.Text, Edit4.Text)))

     and(Proverka(CheckBox3.Checked, Edit5.Text, Edit6.Text)))

  then

      begin

      // заполнение элементов главной формы

      // заполнение первой дроби

      postroenie(Form2.Edit1, Form2.Edit2, Form1.Label1, Form1.Label10);

        // запись х в квадрате

        if (Form1.Label1.Caption<>'') then

           begin

           Form1.Label2.Caption:='x';

           Form1.Label3.Caption:='2';

           end;

        // запись первого плюса

        if ((Form2.Edit1.Text<>'0')and((Form2.Edit3.Text<>'0')or

           (Form2.Edit5.Text<>'0'))) then

           Form1.Label4.Caption:='+';

      // заполнение второй дроби

      postroenie(Form2.Edit3, Form2.Edit4, Form1.Label5, Form1.Label11);

        // запись х после второй дроби

        if (Form1.Label5.Caption<>'') then

           Form1.Label6.Caption:='x';

        // запись второго плюса

        if ((Form2.Edit3.Text<>'0')and(Form2.Edit5.Text<>'0')) then

           Form1.Label7.Caption:='+';

      // заполнение третьей дроби

      postroenie(Form2.Edit5, Form2.Edit6, Form1.Label8, Form1.Label12);

      if ((Form1.Label1.Caption='')and(Form1.Label5.Caption=''))

        and(Form1.Label8.Caption='')) then

         begin

         Form1.Label8.Caption:='0';

         Form1.Label8.Font.Style:=[];

         end;

      // заполнение правой части уравнения

      Form1.Label9.Caption:='=0';

      Form1.CheckBox1.Visible:=true;

      // установка отступов для элементов главной формы

      otstup:=17;

      if (Form1.Label1.Caption<>'') then

         begin

         Form1.Label1.Left:=otstup;

         Form1.Label10.Left:=otstup;

         otstup:=otstup+postroenie(Form2.Edit1, Form2.Edit2, Form1.Label1,

         Form1.Label10);

         end;

      if (Form1.Label2.Caption<>'') then

         begin

         Form1.Label2.Left:=otstup;

         otstup:=otstup+Form1.Label2.Width;

         end;

      if (Form1.Label3.Caption<>'') then

         begin

         Form1.Label3.Left:=otstup;

         otstup:=otstup+Form1.Label3.Width;

         end;

      if (Form1.Label4.Caption<>'') then

         begin

         Form1.Label4.Left:=otstup;

         otstup:=otstup+Form1.Label4.Width;

         end;

      if (Form1.Label5.Caption<>'') then

         begin

         Form1.Label5.Left:=otstup;

         Form1.Label11.Left:=otstup;

         otstup:=otstup+postroenie(Form2.Edit3, Form2.Edit4, Form1.Label5,

         Form1.Label11);

         end;

      if (Form1.Label6.Caption<>'') then

         begin

         Form1.Label6.Left:=otstup;

         otstup:=otstup+Form1.Label6.Width;

         end;

      if (Form1.Label6.Caption<>'') then

         begin

         Form1.Label7.Left:=otstup;

         otstup:=otstup+Form1.Label7.Width;

         end;

      if (Form1.Label8.Caption<>'') then

         begin

         Form1.Label8.Left:=otstup;

         Form1.Label12.Left:=otstup;

         if (Form1.Label8.Caption='0') then

         otstup:=otstup+Form1.Label8.Width

      else

         otstup:=otstup+postroenie(Form2.Edit5, Form2.Edit6, Form1.Label8,Form1.Label12);

         end;

      Form1.Label9.Left:=otstup;

      Form2.Close;

   end

   else

     messageDlg('Данные введены не корректно', MtInformation, [MbOk], 0 );

 end;

Листинг 10.

// функция проверки данных на допустимость вввода

function TForm2.proverka(a:boolean; b, c:string): boolean;

var n: real;

  i, k:integer;

begin

     if (a=true) then

        begin

        If (TryStrToFloat(b, n)) then  // если первое поле вещественное возвращаем true

          result:=true

        else  result:=false;

        end

     else

        begin

        If (((TryStrToInt(b, i))and(TryStrToInt(c, k)))and(k<>0)) then

           // если поля целые и второе поле не ноль возвращаем true

           result:=true

        else  result:=false;

     end;

end;

Листинг 11.

// функция построения дробей

function TForm2.postroenie(a, b: TEdit; c, d: TLabel): integer;

var s: integer;

begin

  if (a.Text='0') Then

     begin

     c.Caption:='';

     d.Caption:='';

     result:=c.Width;

    end

  else

    begin

    if (b.Text='1') Then

       begin

       d.Caption:='';

       c.Caption:=a.Text;

       c.Font.Style:=[];

       result:=c.Width;

       end

    else

        begin

        c.Caption:=a.Text;

        d.Caption:=b.Text;

        s:=c.Width;

        if (d.Width>s) Then

        s:=d.Width;

        result:=s;

    end;

  end;

end;

6. Конфигурация технических средств

Минимальная конфигурация:

• тип процессора. Pentium и выше;

• объем оперативного запоминающего устройства 32 Мб и более;

• объем свободного места на жестком диске 40 Мб.

Рекомендуемая конфигурация:

• тип процессора. Pentium II 400;

• объем оперативного запоминающего устройства 128 Мб;

• объем свободного места на жестком диске 60 Мб.

4.4. Требования к программной совместимости. Программа должна работать под управлением семейства опе рационных систем Win 32 (Windows /XP/Vista/Seven и т. п.).

7. План работ

  1. Получение технического задания;
  2. Составление алгоритма решения задачи;
  3. Написание программного кода;
  4. Тестирование программы;
  5. Составление отчетной документации;
  6. Сдача проекта.

 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Алексеев, Е.Р. Самоучитель по программированию на Free Pascal и Lazarus / Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер  Донецк.: ДонНТУ, Технопарк ДонНТУ УНИТЕХ, 2009.  503 с.
  2. Гагарина Л.Г. Технология разработки программного обеспечения: учебное пособие / Л.Г. Гагарина, Е.В. Кокорева, Б.Д. Виснадул. – М.: ИД «Форум»: ИНФРА-М, 2008. – 400 с.
  3. Мансуров, К.Т. Основы программирования в среде Lazarus, 2010. – 772 с.

Интернет ресурсы:

http://freepascal.ru – информационный портал для разработчиков.

http://www.delphisources.ru – статьи по программированию


Поделиться:

Зимовье зверей

Кактусы из сада камней

Мороз и заяц

Пейзаж

Рисуем "Ночь в лесу"