Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2016, 00:23   #1
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию Разработать класс «Комплексное число»

Доброго времени суток, уважаемые эксперты. Задали следующую задачу:

1) Разработать класс «Комплексное число».
2) Определить в нем конструктор,
3) перегрузить арифметические операции,
4) операции сравнения,
5) операцию преобразования в строку
6) и статический метод получения комплексного числа из строки

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

В общем прошу помощи в том как можно исправить мой код или реализовать может эту задачу иными способами.

Вот мой код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  TComplex=class(TObject)
   private
    x : integer; // целая часть
    y : real; // комплексная часть
   public
    constructor Create(x:Integer; y:real) overload; //конструктор
    //procedure Arigmetika() overload; //арифметические операции
    //procedure Sravnenie() overload; //операции сравнения
    //procedure STR() overload; //преобразованиe в строку
    //procedure StatikStr() overload; //получениe комплексного числа из строки
    destructor Free();

  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  c : TComplex;
implementation

{$R *.dfm}

constructor TComplex.Create(x:Integer; y:real);
begin
//Inherited Create();
self.x := x;
self.y := y;
end;

destructor TComplex.Free();
begin
x := 0;
y := 0;
//Inherited;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

  if (Edit1.Text<>'') and (Edit2.Text<>'') then
  begin
  c.Create(StrToInt(Edit1.Text),StrToFloat(Edit2.Text));
  //c.x:=StrToInt(Edit1.Text);
  //c.y:=StrToFloat(Edit2.Text);
  //form1.Caption:=IntToStr(c.x);
  end
  else ShowMessage('Введите Х и У');

end;

end.
Ниже прилагаю сам проект:
Вложения
Тип файла: rar Комплексное число (Класс).rar (173.2 Кб, 10 просмотров)
Armageddets вне форума Ответить с цитированием
Старый 04.03.2016, 03:05   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

найди того, кто тебя научил писать overload везде, где оно нах не нужно, и оторви ему зад голову руки язык.
Код:
private
    x : integer; // целая часть :))))) охренеть - не встать!
    y : real; // комплексная часть
   public
а потом сходи на википедию и посмотри, чо такое комплексное число, математик хренов.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось MihalNik; 04.03.2016 в 03:47. Причина: зад
min@y™ вне форума Ответить с цитированием
Старый 04.03.2016, 03:11   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А вот потом поговорим, что такое конструктор, и как его правильно вызывать.
Программист хренов.
Код:
c.Create(StrToInt(Edit1.Text),StrToFloat(Edit2.Text));
Так делать разрешено только Чаку Норрису.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 04.03.2016, 04:04   #4
vlad1389
Форумчанин
 
Регистрация: 02.02.2016
Сообщений: 290
По умолчанию

Armageddets Не обращай внимания, он у нас контуженный
Код:
c := TComplex.Create(StrToInt(Edit1.Text),StrToFloat(Edit2.Text));
vlad1389 вне форума Ответить с цитированием
Старый 04.03.2016, 12:59   #5
Armageddets
Форумчанин
 
Регистрация: 30.06.2012
Сообщений: 145
По умолчанию

Цитата:
Сообщение от vlad1389 Посмотреть сообщение
Armageddets Не обращай внимания, он у нас контуженный
Код:
c := TComplex.Create(StrToInt(Edit1.Text),StrToFloat(Edit2.Text));
Спасибо большое.
Armageddets вне форума Ответить с цитированием
Старый 04.03.2016, 13:08   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Последний раз редактировалось MihalNik; Сегодня в 03:47. Причина: зад
Тебе слово "жопа" не понравилась, цензурщик? Это гнойная форма синдрома вахтёра.







Твой ход, "уважаемый".
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.03.2016, 12:15   #7
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Виталий (по почте) иль Владимир (по скайпу).. (Armageddets который)
Не хотим учиться, всё на грабли наступаем, предлагал же..

Как конструктор вызвать уже подсказали, про перегрузку операторов min@y™ толсто намекнул, но не пояснил.
Поясняю: перегрузка операторов (ключевое слово class operator) имеет мало общего с перегрузкой подпрограмм (ключевое слово overload), и доступна перегрузка операторов начиная с дельфи 2009, в отличие от перегрузки подпрограмм (доступной емнип, с дельфи2). Возможно, ещё есть некоторая путаница, если в задании было указано сделать перегруженные варианты самой перегрузки операторов - возможность написать несколько версий работы одного и того же оператора (например, сложения) для разных типов данных, например, просто с числом, и с другим комплексным числом.
Чтобы реализовать перегрузку операторов, можно руководствоваться этой статьёй
По комплексным числам тоже промашка, общее понимание легко составиь из википедии, суть в том что действительная и мнимая части просто считаются отдельно, тип же данных для них удобно выбрать любой из действительных (а не целых, как сделано в коде), но предпочтение лучше отдать Single или Double.
Ещё замечу, что обнулять переменные в деструкторе нет смысла.
И делать так проверку программы (та, что по кнопке) с точки зрения инкапсуляции (одного из столпов ООП) - некорректно, т.к. используется хитрая фича дельфи, которая сразу сломается, если класс комплексного числа перенести в другой модуль, а именно возможность доступа к полям класса в том же модуле, где объявлен класс (т.н. дружественность), чтобы этого избежать, надо добавить в класс комплексного числа свойства, доступные только для чтения (т.к. присваивание данных полям должны быть либо в конструкторе, либо в результате написанных Вами операций), ну и для корректности перенести всё же класс в отдельный модуль.
Примерный вид кода для свойств:
Код:
private 
  FX: Single;
public
  property X: Single read FX;
Предложение озвученное 4 года назад, в принципе, ещё в силе, особенно, если есть желание учиться на ниве геймдева.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработать класс на С# Sail1993 Помощь студентам 1 13.02.2015 10:56
Комплексное число на Java+C# goaldjalex Фриланс 0 04.06.2013 11:26
Комплексное число(С++) _LDA_ Помощь студентам 7 04.12.2012 20:43
найти комплексное число по его модулю tanek Помощь студентам 3 04.10.2011 15:25
Комплексное число Владимир_король Помощь студентам 1 10.05.2010 12:02