На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
В этом разделе можно создавать темы, которые относятся к поколению 32-битных компиляторов.
Здесь решаются вопросы портирования кода из старого доброго Турбо Паскаля в FPC, TMT, VP, GPC компиляторы, а также особенностей программирования на них для Windows/Linux и других ОС.
Указывайте тип компилятора, его версию, а также платформу (Windows/Linux/..) компиляции, другими словами, Target.
Модераторы: volvo877
Страницы: (3) [1] 2 3  все  ( Перейти к последнему сообщению )  
> Вопросы новичка. Я раньеш писал на VB, сейчас перехожу на паскаль. , Возникает много вопроссов.., не предлагайте мне читать учебники по так
    Вопросы новичка. Я раньеш писал на VB, сейчас перехожу на паскаль.
    Возникает много вопросов.., не предлагайте мне читать учебники по таким вопросам, учебники у меня некоторые есть и сначала я гляну там, прежде чем задавать их.

    Встретился с простейшими проблемами, в VB не приходилось с ними сталкиваться. :wall:

    Начну с первого, дальше буду продолжать.

    Задача такова:
    нужно одно число разделить на другое

    Пытался я это в лазарусе сделать

    ExpandedWrap disabled
      unit deng;
       
      {$mode objfpc}{$H+}
       
      interface
       
      uses
        Classes,  SysUtils,  LResources,  Forms,  Controls,  Graphics,  Dialogs,  StdCtrls,  Buttons,  Menus, ActnList;
      . . . . . . . . .
      var
        MForm: TMForm;
        inf: Text;
        outf: Text;
        u, v, w : string;//ansistring;
        p, m: string;
        code1, code2: integer;
        uu, vv, ww: integer;
        pp, mm : integer;
        vr: integer;
      implementation
       
      { TMForm }
      . . . . . . . . .
      procedure TMForm.Button3Click(Sender: TObject);
      begin
          u := Edit1.text;
          w := Edit3.text;
          Val(u, uu, code1 );
          Val(w, ww, code2 );
          vv := uu / ww;
          Str(vv, v);
          Edit2.text := v;
      end;
      . . . . . . . . .
      initialization
        {$I deng.lrs}
      end.


    Происходит ошибка.
    Мотивипует он это так:

    deng.pas(111,14) Hint: use DIV instead to get an integer result
    deng.pas(111,18) Hint: Type size mismatch, possible loss of data / range check error
    deng.pas(111,14) Error: Incompatible types: got "Extended" expected "LongInt"
    deng.pas(189) Fatal: There were 1 errors compiling module, stopping

    DIV - не подходит, т. к. необходимо расчитать с сотыми (до сотых)

    Добавлено
    Цитата simsergey @
    Мотивипует

    Я имел ввиду мативирует
      В результате деления получается дробное число. Используй переменную приемник вещественного типа: real, double, extended...
      и не забывай про деление на 0.
      Сообщение отредактировано: e-moe -
        Програмка простенькая (пока ее пишу для себя)

        Сказать пользователю программы вот это нельзя

        Баланс: 200 рублей
        Кол-во дней: 30 дней
        В день: 6.666666666666667E+000 рублей

        Надо хотяб округлить до копеек... Например: 6.67 рублей
        :no:
          Говорили же — Паскаль сначала изучите ;)
          Str(X:Width:Decimals; var S:String)
            Цитата ZenIA @
            Str(X:Width:Decimals; var S:String)

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


              Добавлено
              намек ясен?
                Значит, так...
                Цитата e-moe @
                намек ясен?

                Ясен... 8-) Не нашел я этого в учебниках.
                Цитата ZenIA @
                Str(X:Width:Decimals; var S:String)

                Я догадался, о чем речь...
                В моем случаи это наверно выглядит так
                ExpandedWrap disabled
                      u := Edit1.text;
                      w := Edit3.text;
                      Val(u, uu, code1 );
                      Val(w, ww, code2 );
                      vv := uu / ww;
                      Str(vv:1:2, v);
                      Edit2.text := v;

                Переменные vv, uu, ww - double.
                Да, так все работает нормально...
                Сообщение отредактировано: simsergey -
                  Цитата simsergey @
                  Не нашел я этого в учебниках.

                  Значит, читай другие учебники + Руководство по языку
                    Цитата volvo877 @
                    Значит, читай другие учебники + Руководство по языку

                    Спасибо, гляну :)

                    А как выполнить действие при выходе из проги?

                    Добавлено
                    Цитата volvo877 @
                    Чтобы получить ответ, нужно задать правильный вопрос. Но чтобы правильно задать вопрос, нужно знать большую часть ответа...

                    Но если знаешь ответ, зачем задавать вопросс? :)
                      ???
                      Аварийно процедурой Halt, а корректно путем завершения главной процедуры (код между устанвками begin и end. — она в тексте стоит последняя) или выхода из нее командой Exit.

                      Перед этим при необходимости освободить динамическую память, контексты дисплея, уничтожить объекты Виндовс, прервать сеанс связи и т.д.

                      u := Edit1.text;
                      w := Edit3.text;
                      Val(u, uu, code1 );
                      Val(w, ww, code2 );
                      vv := uu / ww;
                      Str(vv:1:2, v);
                      Edit2.text := v;

                      А для рубликов циферок не маловато ли???

                      Ps. А хелпов у Вас что нету?
                      Сообщение отредактировано: ZenIA -
                        Цитата ZenIA @
                        А для рубликов циферок не маловато ли???

                        На самом деле я про гривни...

                        Цитата ZenIA @
                        у Вас

                        Пожалуйста, давайте перейдем на ТЫ, а то мне не по себе как-то...

                        Добавлено
                        Цитата ZenIA @
                        Аварийно процедурой Halt, а корректно путем завершения главной процедуры (код между устанвками begin и end. — она в тексте стоит последняя) или выхода из нее командой Exit.

                        При нажатии на красный крестик (справо вверху) необходим выполнить пару действи, перед закрытием программы
                          Лазарусом не пользуюсь, но по аналогии с Дельфи должно быть нечто вроде OnCloseQuery формы?
                            Или, на пример, если не поддерживаются события, перехватив сообщение wm_close главного окна
                            ExpandedWrap disabled
                              type
                                TForm1 = class(TForm)
                                procedure wmClose(var I);message wm_close;{Обработчик сообщения wm_close}
                                end;
                               
                               
                                procedure TForm1.wmClose(var I);
                                begin
                              {Щас чего-то натворю !!!!!}
                                MessageBox(Handle,'Программа закрывается!','До свидания',0);
                                Close;
                                end;
                                
                              end.


                            Завершение программы зависит от объектной и операционной систем…
                            Ну поскольку, похоже, работаете с объектной системой Дельфи под Винду (говорил же, берите сразу Дельфу) — значит надо разрывать главный цикл программы ОДНИМ ИЗ ПРИВЕДЕННЫХ СПОСОБОВ:
                            1. Закрыть приложение Application.Terminate;
                            2. Разрушить главное окно DestroyWindow(Handle) или Close
                            3. Послать всем окнам сообщение wm_close путем вызова PostQuitMessage(0)

                            или, что менее принято, закрыв процесс функциями ExitProcess или TerminateProcess.

                            Цитата
                            Пожалуйста, давайте перейдем на ТЫ, а то мне не по себе как-то...

                            Обращайтесь ко мне как хотите, а у меня вежливая форма обращения — это профессиональная привычка.
                            Сообщение отредактировано: ZenIA -
                              Ладно, будем подумать...

                              Добавлено
                              Цитата ZenIA @
                              MessageBox(Handle,'Программа закрывается!','До свидания',0);

                              А как MessageBox будет в лазарусе...
                                Наверное, пока вопрос закрыт.
                                Буду искать другой компилятор и учить другой язык.
                                Спасибо за ВАШИ ответы... :(

                                Добавлено
                                Цитата ZenIA @
                                говорил же, берите сразу Дельфу

                                Надо будет поискать! 8-)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) [1] 2 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0454 ]   [ 16 queries used ]   [ Generated: 21.11.25, 09:07 GMT ]