Как правильно делить?

Тема в разделе "Delphi - FAQ", создана пользователем Inbox, 18 июн 2007.

Статус темы:
Закрыта.
  1. Inbox

    Inbox Гость

    Поправте плиз

    var
    X,Y:Integer;
    begin
    X:=floattostr(edit1.text);
    Y:=X/100;


    Если я пишу: Y:=X+100;
    То всё считает а деление как правильно реализовать?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Inbox
    Обьявляетй
    X,Y:НЕ Integer; а
    X,Y:real;
     
  3. Inbox

    Inbox Гость

    procedure TForm1.Button1Click(Sender: TObject);
    var
    VisPomR,VisSecR1,VisSecR2,VisSecR3,VisSecR4:Integer;
    SummSec:Integer;
    KoeffR:Integer;


    VisPomR:=StrToint(Edit1.Text);
    VisSecR1:=StrToint(Edit2.Text);
    VisSecR2:=StrToint(Edit3.Text);
    VisSecR3:=StrToint(Edit4.Text);
    VisSecR4:=StrToint(Edit5.Text);

    SummSec:=(VisSecR1+VisSecR2+VisSecR3+VisSecR4);

    KoeffR:=(SummSec/416);//здесь выдаёт ошибку

    Меняю / на '+' или '*' то всё нормально считает..........

    Обьявляетй
    X,Y:НЕ Integer; а
    X,Y:real;

    Ща попробуем!!

    Обьявляетй
    X,Y:НЕ Integer; а
    X,Y:real;

    Ща попробуем!!

    Ооооо!! Точна
    Всё работает........
    Спасибо!!
    Чо то я запяматовал!!
     
  4. Inbox

    Inbox Гость

    var
    X:Integer;
    Н:Real;
    begin
    X:=floattostr(edit1.text);
    Y:=X/100;
    Image.top:=(Y+50);

    Теперь это не работает!
    в чёмдело?
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Inbox
    Что такое Y ?
    зачем нужен Н ?

    Image.top - это

    Delphi syntax:

    property Top: Integer;

    Читайте хэлп, и вообще в вашем случае надо использовать div

    var
    X, Y:Integer;

    begin
    X:=Inttostr(edit1.text);
    Y:=X div 100;
    Image.top:=(Y+50);
     
  6. Inbox

    Inbox Гость

    var
    VisPomR,VisSecR1,VisSecR2,VisSecR3,VisSecR4:Integer;
    MvisSekR1,MvisSekR2,MvisSekR3,MvisSekR4,MvisSekR:Real;
    KolSecR:Integer;
    SummSec:Real;
    KoeffR:Real;

    begin
    VisPomR:=StrToint(Edit1.Text);
    VisSecR1:=StrToint(Edit2.Text);
    VisSecR2:=StrToint(Edit3.Text);
    VisSecR3:=StrToint(Edit4.Text);
    VisSecR4:=StrToint(Edit5.Text);

    SummSec:=(VisSecR1+VisSecR2+VisSecR3+VisSecR4);

    KoeffR:=(SummSec/416);

    MvisSekR1:=(VisSecR1*KoeffR);
    MvisSekR2:=(VisSecR2*KoeffR);
    MvisSekR3:=(VisSecR3*KoeffR);
    MvisSekR4:=(VisSecR4*KoeffR);
    Image1.Top:= (MvisSekR4+MvisSekR3+MvisSekR2);// Здесь ошибка........
    Image2.Top:= (MvisSekR4+MvisSekR3);// Здесь ошибка........
    Image3.Top:= (MvisSekR4)// И Здесь соответственно.....
     
  7. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Inbox
    ВЫ ПЫТАЕТЕСЬ ПРИСВОИТЬ типу INTEGER (целое значения от 0 до 32 768) - значение типа REAL! канечно у Вас будет ошибка

    я же обьяснил как делать, используйте div

    Код (Text):
    var
    X, Y:Integer;

    begin
    X:=Inttostr(edit1.text);
    Y:=X div 100;
    Image.top:=(Y+50);
     
  8. Inbox

    Inbox Гость

    Получилось! спасибо.
    Я везде присвоил Integer и использовал div
    верно???

    У меня Delphi 2007
    работает прекрасно, а вот Хелп в нём не работает..........
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Inbox
    Верно , но учтите Div дает деление с отчечением остатка
    например: 7 div 3 = 2 а не 2,333333
     
  10. Inbox

    Inbox Гость

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

    var
    X, Y:Integer;

    begin
    X:=Inttostr(edit1.text);
    Y:=200 div х;
    Image.top:=(Y+50);
     
  11. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Inbox
    так а что Вам мешает высчитать коефициент, но ведь в любом случае Image.top примет только целое значение ?! Вам коефициент нужен для того что бы двигать изображение?
    Код (Text):
     var
    X, Y:Integer;
    koef: real;
    begin
    X:=Inttostr(edit1.text);
    Y:=200 div х;
    koef := 200 / x;
    Image.top:=(Y+50);
     
  12. Inbox

    Inbox Гость

    У меня высота Image 400пикселей
    Надо в этот размер вместить 4 объекта (допустим этажи здания)
    пользователь вводит 4размера (Х,Y,S,T) в милиметрах (целое число)
    что бы вписать его размер в высоту моего окна применяю вот что:
    (400/(Х+Y+S+T)) и получаю коэффициент.
    Далее

    Х*коэффициент и получаю свой размер,. .этажа что бы попасть в масштаб моих 400пикселей
     
  13. Inbox

    Inbox Гость

    А как огруллить до целого числа?

    Image.Top:=(округлить X);
     
  14. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Inbox
    Round

    Раз у Вас нет хэлпа, то вот пример от туда
    Код (Text):
    var

    S, T: string;

    begin

    Str(1.4:2:1, T);
    S := T + ' rounds to ' + IntToStr(Round(1.4)) + #13#10;
    Str(1.5:2:1, T);
    S := S + T + ' rounds to ' + IntToStr(Round(1.5)) + #13#10;
    Str(-1.4:2:1, T);
    S := S + T + ' rounds to ' + IntToStr(Round(-1.4)) + #13#10;
    Str(-1.5:2:1, T);
    S := S + T + ' rounds to ' + IntToStr(Round(-1.5));
    MessageDlg(S, mtInformation, [mbOk], 0, mbOk);
    end;
     
  15. semenov-aks

    semenov-aks Гость

    А почему IntToStr() и FloatToStr() может наобоот StrToInt() и StrToFloat() ?
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей