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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2011, 08:47   #1
Chevy
Новичок
Джуниор
 
Регистрация: 21.09.2011
Сообщений: 2
По умолчанию Описание численных типов и математических операций

Доброго времени суток!
Столкнулся с проблеммой в коде, задача путает типы данных при решении.
Допустим вместо integer выводит real, и наоборот.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
if checkbox1.Checked=true then begin
if checkbox2.Checked=true then begin
if radiobutton1.Checked=true then
begin
edit3.Text:=floattostr(strtofloat(edit1.Text)+strtofloat(edit2.Text));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='(integer)';
for i:=1 to length(edit2.Text) do
if edit2.Text[i]=',' then label5.Caption:='(real)';
end;
if radiobutton2.Checked=true then
begin
edit3.Text:=floattostr(strtofloat(edit1.Text)*strtofloat(edit2.Text));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='(integer)';
for i:=1 to length(edit2.Text) do
if edit2.Text[i]=',' then label5.Caption:='(real)';
end;
if radiobutton3.Checked=true then
begin
edit3.Text:=floattostr(strtofloat(edit1.Text)-strtofloat(edit2.Text));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='(integer)';
for i:=1 to length(edit2.Text) do
if edit2.Text[i]=',' then label5.Caption:='(real)';
end;
if radiobutton4.Checked=true then
begin
if edit2.Text='0' then edit3.Text:='ERROR' else begin
edit3.Text:=floattostr(strtofloat(edit1.Text)/strtofloat(edit2.Text));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='(integer)';
for i:=1 to length(edit2.Text) do
if edit2.Text[i]=',' then label5.Caption:='(real)';
end;
if radiobutton5.Checked=true then
begin
edit3.Text:=floattostr(sqr(strtofloat(edit1.Text)-strtofloat(edit2.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end;
if radiobutton6.Checked=true then
begin
edit3.Text:=floattostr(sqrt(strtofloat(edit1.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end;
if radiobutton7.Checked=true then
begin
edit3.Text:=floattostr(sin(strtofloat(edit1.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end;
if radiobutton8.Checked=true then
edit3.Text:=floattostr(cos(strtofloat(edit1.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end;
if radiobutton9.Checked=true then
begin
if edit1.Text='0' then edit3.Text:='ERROR' else begin
edit3.Text:=floattostr(ln(strtofloat(edit1.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end; end;
if radiobutton10.Checked=true then
edit3.Text:=floattostr(exp(strtofloat(edit1.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end;
if radiobutton11.Checked=true then
edit3.Text:=floattostr(abs(strtofloat(edit1.Text)));
label3.Caption:='(integer)';
for i:=1 to length(edit3.Text) do
if edit3.Text[i]=',' then label3.Caption:='(real)';
label4.Caption:='(integer)';
for i:=1 to length(edit1.Text) do
if edit1.Text[i]=',' then label4.Caption:='(real)';
label5.Caption:='';
end; end;
end.


Заранее благодарен!
Chevy вне форума Ответить с цитированием
Старый 30.09.2011, 08:55   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Посмотрев на такое оформление кода, отпадает всякое желание разбираться в нем. Можно было вообще все в одну строку оформить. А что? Компилируется, работает - нет проблем.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.09.2011, 09:11   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
if checkbox1.Checked=true then begin
  if checkbox2.Checked=true then begin
     if radiobutton1.Checked=true then begin
        edit3.Text:=floattostr(strtofloat(edit1.Text)+strtofloat(edit2.Text));
        if pos(',', edit3.text)>0 then label3.Caption:='(real)' else label3.Caption:='(integer)';
        if pos(',', edit1.text)>0 then label4.Caption:='(real)' else label4.Caption:='(integer)';
        if pos(',', edit2.text)>0 then label5.Caption:='(real)' else label5.Caption:='(integer)';
     end;
     if radiobutton2.Checked=true then begin
       edit3.Text:=floattostr(strtofloat(edit1.Text)*strtofloat(edit2.Text));
       if pos(',', edit3.text)>0 then label3.Caption:='(real)' else label3.Caption:='(integer)';
       if pos(',', edit1.text)>0 then label4.Caption:='(real)' else label4.Caption:='(integer)';
       if pos(',', edit2.text)>0 then label5.Caption:='(real)' else label5.Caption:='(integer)';
     end;
дальше редактируйте сами, может быть и сами же увидите вашу ошибку. а может быть еще и найдете способ не писать сто раз одно и тоже
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.09.2011 в 09:14.
evg_m вне форума Ответить с цитированием
Старый 30.09.2011, 18:36   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

ОУ МАЙ ГАД! (голосом Дженис из "Друзей")
Автор - выполните пожалуйста пару преобразований кода и потом уже выкладывайте, если ошибка не исчезнет (а я уверен на 95%, она исчезнет, когда Вы уберёте кашу написанную самостоятельно и замените её на "авто-код")
Один совет Вам уже дали.
Мои советы : 1. убрать к чертям 10 радиобатонов и создать несколько Tradiogroup, в которые на вписать Ваши категоризированные наборы радиобатоном в виде свойства Items, доступ к выбранному радиобатону в конкретной группе(на конкретном радиогрупе) осуществляется посредством RadioGroup.ItemIndex . После чего можно написать один красивый case RadioGroup.ItemIndex of ...
2. Смех в том, что все действия по определению вещественного /целого числа повторяются везде, в то время как их надо вынести за вышеуказанный case, а в самом кейсе оставить только вычисление по формуле - в зависимости от нажатого радиобатона
итого : код сократится до 3 проверок всех эдитов (а я бы ещё присоветовал сделать циклом прогон по эдитам – но в данной задаче это не нужно, просто я люблю гибкость) и кейса на 10 позиций
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Описание типов. Антон Лысенко Помощь студентам 9 18.10.2011 11:07
Вычисления в математических задачах armenka Паскаль, Turbo Pascal, PascalABC.NET 0 06.04.2011 11:52
Dll библиотека, описание нескольких типов данных Vol666 Общие вопросы Delphi 2 19.05.2010 12:13
Бейсик. Найти сумму численных значений элементов одномерного массива Марька Помощь студентам 4 16.03.2010 23:01
программирование численных алгоритмов решения простейших инженерно-экономических задач Оксана_В Паскаль, Turbo Pascal, PascalABC.NET 5 09.04.2009 19:10