[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. qssD

    qssD New Member

    Joined:
    16 Dec 2010
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    А вот с запятой получилось
     
  2. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    Делфя какая? Винда какая счас откомпилирую для интереса у себя
     
  3. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    Ну значит у тебя уже разделитель запятая в системе.

    пользуйся :)
     
  4. qssD

    qssD New Member

    Joined:
    16 Dec 2010
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    Блин) Сори ещё раз подскажи,
    Смотри если в Label значение > 1,5 то как сделать чтобы в Label2 было "2" ? Заранее спасиб)
     
  5. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    если тебя инетерсует округление то так:

    label2.caption:=FloatToStr(strToFloat(label1.caption)+0.5);
     
  6. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Если нужно округлить, то используй функцию Round, если же отбросить дробную часть - Trunc
     
  7. qssD

    qssD New Member

    Joined:
    16 Dec 2010
    Messages:
    31
    Likes Received:
    0
    Reputations:
    0
    Не не не,не округлить надо а допустим в Edit2 значение 1.5, и надо чтобы он проверял больше 1.5 или меньше и в Label записывал допустим: Больше 1.5, Меньше 1.5
     
  8. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    ну так это совсем другое дело

    if Strtofloat(edit2.text)<1.5 then label1.caption:='Меньше' else label1.caption:='Больше';
     
  9. AGIMgal

    AGIMgal New Member

    Joined:
    9 Jun 2010
    Messages:
    66
    Likes Received:
    0
    Reputations:
    0
    спасибо за трей, но вот новый вопрос:
    как сделать горячие клавиши?например если программа(а она в трее) слышит ctrl+L он делает то что мне нужно(а именно записывает в файл содиржимое бф,но это не суть).
     
  10. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    ставь глобальный хук на клавиатуру.

    Правда если будет пересекаться где то хоткей с другим приложением будешь иметь много лишнего мусора :)
     
  11. Jed7777

    Jed7777 Elder - Старейшина

    Joined:
    16 Jun 2008
    Messages:
    0
    Likes Received:
    11
    Reputations:
    0
    Написал парсер на Delphi в тесте приложение работает нормально при любом объеме парсинга, а вот после компиляции при большом объеме приложение не отвечает (зависает), но парсинг все равно идет, по завершению парсинга, приложение отвисает.
    В чем проблема? Как можно решить данный вопрос?
     
  12. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    Если используешь инди то положи антифриз на форму
    а также вставь процесмесаджес в нужных местах
     
  13. trunker

    trunker Member

    Joined:
    5 Feb 2009
    Messages:
    44
    Likes Received:
    66
    Reputations:
    1
    Code:
    procedure TForm7.Button1Click(Sender: TObject);
    const
    mininhor=60;
    polnoeTime=480;
    var
    dpm,result,HP,hor,min,alltime,yourDPM,allHP,raznHP,razntime,winTime:real;
    begin
    {Кирпич}
    
    begin
    if bosslist.ItemIndex=0 then
    begin
       dpm:=2.08;allHP:=1000;
       HP:=StrToFloat(editHP.Text);
        hor:=StrToFloat(editHore.Text);
        min:=strtofloat(editMin.Text);
         alltime:=hor*mininhor+min;
      result:=HP/alltime;
      if  result<dpm then
      resultat.Caption:=('Победа');
        if  result>dpm then
      resultat.Caption:=('Поражение');
        LabelMustDPM.Caption:=floattostr(dpm);
        raznHP:=(allhp-hp) ;
        razntime:=(polnoetime-alltime);
        yourDPM:= raznHP/razntime;
        labelDpm.Caption:=FloatTostr(yourDPM);
        winTime:=(hp/yourDPM)/mininhor;
        label4.Caption:=floattostr(winTime)
    end;
    end;
    Нужно что бы winTime:=(hp/yourDPM)/mininhor; полученный результат раскладывался на часы и минуты. т.е. если остаток менее 60 он идет в минуты а если целое то в часы.
    еще надо убрать ошибку при делении на "mininhor"
    подскажите пожалуйста как все это сделать?
     
  14. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    деление нужно проверять чтобы делитель не был 0

    что касаеться разделения на часы минуты секунды то дели
    на 60
    на 60
    на 24
     
  15. trunker

    trunker Member

    Joined:
    5 Feb 2009
    Messages:
    44
    Likes Received:
    66
    Reputations:
    1
    а как избежать ошибки, он не компилируется когда winTime:=(hp/yourDPM)/mininhor;
    а так компилирует winTime:=(hp/yourDPM);
     
  16. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    он и не будет компилировать

    как деление в делфи?

    используй DIV
     
  17. Isaev

    Isaev Elder - Старейшина

    Joined:
    25 Jul 2007
    Messages:
    120
    Likes Received:
    19
    Reputations:
    6
    Гон! Div это целочисленное деление, а у него реал типы, погрешность будет бешеная! Деление в дельфи есть, это нормально.
    Сделай типизированные константы и всё будет работать как надо
     
  18. MaTpOc

    MaTpOc Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    Вообще никак не получается сделать определение дня недели! Помогите плиз!(Pascal)

    PHP:
    type TMonth = (JanFebMarAprMayJunJulAugSepOctNovDecem);
         
    TYear =  1901..2012;

         
    TDate record
                  day
    1..31;
                  
    monthTMonth;
                  
    yearTYear;
                 
    end;

    var 
    DateTDate;

    ///////////////////////////////////////////////////////////////////////////////

    function IntToMonth(ninteger): TMonth;
    begin
     
    case N of
      1
    IntToMonth := Jan;
      
    2IntToMonth := Feb;
      
    3IntToMonth := Mar;
      
    4IntToMonth := Apr;
      
    5IntToMonth := May;
      
    6IntToMonth := Jun;
      
    7IntToMonth := Jul;
      
    8IntToMonth := Aug;
      
    9IntToMonth := Sep;
      
    10IntToMonth := Oct;
      
    11IntToMonth := Nov;
      
    12IntToMonth := Decem;

    end;
    end;

    ///////////////////////////////////////////////////////////////////////////////

    procedure InputDate(var DateTDate);
     var 
    nbyte;
     
    begin
       writeln
    ('Введите сегодняшнюю дату.');
       
    writeln;
       
    write('Введите день: ');
        
    repeat
          readln
    (date.day);
        
    until date.day in [1..31] ;
       
    write('Введите месяц числом (1 - январь, 2 - февраль и т. д.): ');
        
    repeat
          readln
    (n);
        
    until n in [1..12] ;
       
    date.month := IntToMonth(n);
       
    write('Введите год (от 1900 до 2012): ');
        
    repeat
          readln
    (date.year)
        
    until (date.year >= 1901) and (date.year <= 2012) ;
     
    end;

    ///////////////////////////////////////////////////////////////////////////////

    procedure PrintMonth(DateTDate);

     
    begin
      
    case Date.month of
       Jan
    write(' января ');
       
    Febwrite(' февраля ');
       
    Marwrite(' марта ');
       
    Aprwrite(' апреля ');
       
    Maywrite(' мая ');
       
    Junwrite(' июня ');
       
    Julwrite(' июля ');
       
    Augwrite(' августа ');
       
    Sepwrite(' сентября ');
       
    Octwrite(' октября ');
       
    Novwrite(' ноября ');
       
    Decemwrite(' декабря ');
      
    end;
     
    end;

    ///////////////////////////////////////////////////////////////////////////////

    procedure PrintDate(DateTDate);
     
    begin
         write
    (Date.day);
         
    PrintMonth(Date);
         
    write(Date.year' года.')
     
    end;

    ///////////////////////////////////////////////////////////////////////////////

    function IsLeap(yearinteger): boolean;
    var 
    resboolean;
     
    begin
      res 
    := (year mod 4 0) and (year mod 400 <> 0); //проверка на високосный год
      
    IsLeap := res;
     
    end;

    ///////////////////////////////////////////////////////////////////////////////

    function DaysInMonth(DateTDate): integer;
     
    begin
      
    case Date.month of
       Feb
    :
        
    begin
          
    if IsLeap(Date.yearthen DaysInMonth := 29
                          
    else DaysInMonth := 28;
        
    end;
       
    AprJunSep:
        
    DaysInMonth := 30;
      else 
    DaysInMonth := 31;
      
    end; {case}
    end; {DaysInMonth}

    ///////////////////////////////////////////////////////////////////////////////

    procedure IncDate(var dateTDate);
    begin

       inc
    (Date.day);
       if (
    Date.day DaysInMonth(Date)) then  //если после инкремента день завышен
                                             
    begin
                                              Date
    .day:= 1;
                                              
    inc(Date.month);
                                                if ((
    ord(Date.month)+1) > 12then //если после инкремента месяц завышен
                                                  
    begin
                                                   Date
    .month:= Jan;
                                                   
    inc(Date.year);
                                                  
    end;
                                              
    end;

    end;

    ///////////////////////////////////////////////////////////////////////////////

    begin {main}
     
    InputDate(Date);
     
    writeln;
     
    write('Сегодня ');
     
    PrintDate(Date);
     
    write(' Завтра ');
     
    IncDate(Date);
     
    PrintDate(Date);
     
    readln;

    end.

     
  19. arnis

    arnis Member

    Joined:
    30 Jan 2011
    Messages:
    280
    Likes Received:
    23
    Reputations:
    0
    что сразу бросилось в глаза, у тебя ноябрь имеет 31 день
     
  20. MaTpOc

    MaTpOc Elder - Старейшина

    Joined:
    5 May 2008
    Messages:
    633
    Likes Received:
    475
    Reputations:
    25
    да не, прога то работает правильно! там если больше 30 то все ошибка
     
Thread Status:
Not open for further replies.