[ 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. rem

    rem New Member

    Joined:
    9 Nov 2006
    Messages:
    24
    Likes Received:
    4
    Reputations:
    1
    у тя при декомпиле получилось так что переменная(например) оказалась раньше основного старта. - ето по ошибке
    а еще интересно прога на каком языке написана если ты ее декомпилил а открыл в дельфи? декомпилятся в исходники c# java из дельфийской сюборки ты максимум ресы выдернешь...
     
  2. GSM™

    GSM™ Elder - Старейшина

    Joined:
    2 Nov 2007
    Messages:
    221
    Likes Received:
    31
    Reputations:
    6
    как я понимаю ей этого нехватает?
    procedure Unit1.Initialization(Sender : TObject);
    procedure Unit1.Finalization(Sender : TObject);
     
  3. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    GSM™, для модулей необходимы секции interface, implementation, initialization, finalization (последние два необязательны), типа
    Code:
    unit Unit1; 
    
    [b]interface[/b]
    
    uses
    ...
    type
      { TForm1 }
      TForm1 = class(TForm)
        procedure Button1Click(Sender : TObject);
        procedure PageControl1Change(Sender : TObject);
        procedure Edit1Change(Sender : TObject);
        procedure Edit2Change(Sender : TObject);
        procedure FormActivate(Sender : TObject);  
      private
        { private declarations }
      public
        { public declarations }
      end; 
    
    var
      Form1: TForm1; 
    
    [b]implementation[/b]
    
    { TForm1 }
    
    procedure Button1Click(Sender : TObject);
    begin
    ...
    end;
    
    end.
    
    Быть может, у тебя потерялсо interface или implementation?
     
  4. GSM™

    GSM™ Elder - Старейшина

    Joined:
    2 Nov 2007
    Messages:
    221
    Likes Received:
    31
    Reputations:
    6
    нет. оба на месте.
     
  5. MegaDeth

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

    Joined:
    8 Nov 2006
    Messages:
    192
    Likes Received:
    72
    Reputations:
    13
    как в делфе сделать чтобы форму поделить на поле с прямоугольниками 15*15 и чтобы каждому мона было задавать цвет %)
    зачем надо неспрашивайте :d
     
  6. Killerkod

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

    Joined:
    1 Aug 2007
    Messages:
    178
    Likes Received:
    113
    Reputations:
    0
    Нарисуй с помощью canvas
     
  7. shefff

    shefff New Member

    Joined:
    18 Dec 2007
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    нужна прога чтоб считала количество слов в предложении. срочно, плиззз:)
     
    1 person likes this.
  8. LEE_ROY

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

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    PHP:
    unit Unit1;

    interface

    uses
      Windows
    MessagesSysUtilsVariantsClassesGraphicsControlsForms,
      
    DialogsStdCtrlsXPMan;

    type
      TForm1 
    = class(TForm)
        
    Edit1TEdit;
        
    Button1TButton;
        
    Label1TLabel;
        
    XPMan1TXPMan;
        
    procedure Button1Click(SenderTObject);
      private
        { Private 
    declarations }
      public
        { Public 
    declarations }
      
    end;

    var
      
    Form1TForm1;

    implementation

    {$R *.dfm}

    function 
    CountWords(InputStringstring): integer;
    var
      
    aCharchar;
      
    WordCountinteger;
      
    IsWordboolean;
      
    iinteger;
    begin
      WordCount 
    := 0;
      
    IsWord := False;
      for 
    := 0 to Length(InputString) do
      
    begin
        aChar 
    := InputString[i];
        if (
    aChar in [
          
    'a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''s',
            
    't''u''v''w''x''y''z',
            
    'A''B''C''D''E''F''G''H''I''J''K''L''M''N''O''P''Q''R''S',
            
    'T''U''V''W''X''Y''Z',
            
    '0''1''2''3''4''5''6''7''8''9''0''''''-'
            
    ]) then
        begin
          
    if not IsWord then Inc(WordCount);
          
    IsWord := True;
        
    end
        
    else if aChar '\' then IsWord := True
        else IsWord := False

      end;

      IsWord := False;
      Result := WordCount;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Label1.Caption := IntToStr(CountWords(edit1.Text));
    end;

    end.
    EXE - http://dump.ru/files/o/o532484947/
     
    1 person likes this.
  9. A2GIL

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

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    LEE_ROY, исправь здесь:
    Code:
       else if aChar =  then IsWord := True
        else IsWord := False
    Получается код неправильно считает количество слов...

    Вот, привожу пример на консоли, помнится именно такие задание просят сделать на консоли. Ну если че перевести куда нужно легко:)
    Code:
    program CountWord;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils;
    
    var
     i,n,count:integer;
     t:string;
     p:boolean=false;
    
    function Rus(mes:string):string;
      var
         i:integer;
     begin
       for i:=1 to length(mes) do
         case mes[i] of
           'А'..'п': mes[i]:=Chr(Ord(mes[i])-64);
           'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
         end;
       rus:=mes;
     end;
    
    begin
     writeln(rus('Введите текст '));readln(t);
     n:=length(t);
    
     if (n>0) then begin
     count:=1;
     for i:=1 to n-1 do begin
      if ((t[i]=' ') or (t[i]='.') or (t[i]=',')) and (not p) then
       begin
        inc(count);
        p:=true;
       end
        else
       if (t[i]<>' ') and (t[i]<>'.') and (t[i]<>',') then
         p:=false;
     end;
     end
     else count:=0;
     if (t[n]=' ') or (t[n]=',') then
      count:=1;
     write(count);
     readln;
    end.
    Теперь подправил!
    P.S. Конечно не красиво, но для учебы сойдет:)
     
    #1029 A2GIL, 4 Feb 2008
    Last edited: 4 Feb 2008
    1 person likes this.
  10. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4


    A2GIL А видишь она просто считает количество пробелов или точек, или запятых - поэтому неправильно выдает! А фича с p:boolean не помогает. логически не правильно построено. :)
     
    2 people like this.
  11. A2GIL

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

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    GLOFF, нашел где ошибка. Спасибо уже исправил:) Shefff, забирай.
     
    #1031 A2GIL, 4 Feb 2008
    Last edited: 4 Feb 2008
  12. A2GIL

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

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    Довольно легко, вот сделал так, чтобы сразу задавался рендомный цвет:)


    Code:
    var
      Form1: TForm1;
      h,w,dh,dw:integer;
      i,j:byte;
      r,g,b:byte;
      flox,floy:integer;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormPaint(Sender: TObject);
    begin
    with form1 do
      begin
        h:=ClientHeight;
        w:=ClientWidth;
        dh:=round(h/15);
        dw:=round(w/15);
        flox:=dw-3;
        floy:=dh-3;
       for i:=1 to 15 do
        for j:=1 to 15 do
         begin
          Canvas.Rectangle((j-1)*dw,(i-1)*dh,j*dw,i*dh);
          randomize();
          r:=random(255);
          g:=random(255);
          b:=random(255);
          Canvas.Brush.Color:=rgb(r,g,b);
          Canvas.FloodFill((j)*flox,(i)*floy,canvas.Pixels[(j)*flox,(i)*floy],fsSurface);
       end;
     end;
    end;
    //Работа с Canvas' ом идет не с первой космической скоростью:)
     
    2 people like this.
  13. +voron+

    +voron+ Elder - Старейшина

    Joined:
    6 Nov 2007
    Messages:
    30
    Likes Received:
    2
    Reputations:
    -2
    ээ снова я ))

    m: array[1..4] of char = ('T','E','S','T');

    а как также только матрицу записать?
    дапустим n : array [1..4,1..4] of char
    построчно
    :confused:
     
  14. Bаters

    Bаters New Member

    Joined:
    15 Jan 2008
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    насколько помню это можно сделать так
    Code:
    m: array[1..4, 1..4] of char = (('T','E','S','T'),
                                    ('q','w','e','e'),
                                    ('a','s','d','f'),
                                    ('z','x','c','v'));
     
    1 person likes this.
  15. +voron+

    +voron+ Elder - Старейшина

    Joined:
    6 Nov 2007
    Messages:
    30
    Likes Received:
    2
    Reputations:
    -2
    Так в паскале
    Code:
    Uses  Crt, Graph;
    Var  i,Driver,Mode,Regim: Integer;
    Begin
    Driver:=VGA; 
    Regim:=VGAmed;
    InitGraph(Driver, Regim,'C:\Program Files\tp7\BGI');
    Setbkcolor (red);
    ClearDevice;
    а как теперь это в дельфу в 7ую подогнать? :eek: :confused:
     
  16. rem

    rem New Member

    Joined:
    9 Nov 2006
    Messages:
    24
    Likes Received:
    4
    Reputations:
    1
    если тебе нужна работа с графикой то юзай directx ir OpenGL
    кусок кода твоего работает в консоли в дельфи он бесполезен
    если хочешь на форме рисовать юзай TCanvas
     
  17. Fata1ex

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

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Кто бы мог подумать, но вот понадобился Паскаль снова =(
    Стандартная задача про счастливый билет:
    Задается билет (шесть цифарок), нужно вывести на экран следующий после этого счастливый билет. Например: юзер ввел '123320' вывелось '123321'.
    До конца отладить прогу так и не получается=(

    P.S. На кривоту кода не обращайте внимания, Паскаль не юзал хз скоко времени =(

    Огромное спасибо тому кто сделает, ну и конечно +++ =)

    Code:
    program lucky;       
    
    uses Crt;            
    
    Var
    a,b,c,d,e,f : byte;
    aw,bw,cw,dw,ew,fw,nw : string;
    er1,er2,er3,er4,er5,er6 : integer;
    
    begin
    
     ClrScr;            
    
     writeln('Enter your lucky-number');
     readln(nw);
    
     if Length(nw)<>6 then
      writeln('Enter valid number')
     else
      begin
    
                                        
                                        
                                        
      aw:=Copy(nw,1,1);                
      bw:=Copy(nw,2,1);                 
      cw:=Copy(nw,3,1);                   
      dw:=Copy(nw,4,1);                  
      ew:=Copy(nw,5,1);
      fw:=Copy(nw,6,1);
    
      Val(aw,a,er1);
      Val(bw,b,er2);
      Val(cw,c,er3);
      Val(dw,d,er4);
      Val(ew,e,er5);
      Val(fw,f,er6);
    
                                         
     if a+b+c+d+e+f = 54 then
      begin
       writeln('Congratulation! It is lucky-number!');
       writeln('Next lucky-number is 000000')
      end
     else
    
      if a+b+c=d+e+f then
       writeln('Congratulation! It is lucky-number!');
    
    
       for a:=a to 9 do
        for b:=b to 9 do
         for c:=c to 9 do
          for d:=d to 9 do
           for e:=e to 9 do
            for f:=f+1 to 9 do         // !!!!!!!!!!!!!!!!!!!!!!       
    
       if a+b+c=d+e+f then
        begin
         writeln('Next lucky-number is ',a,b,c,d,e,f);
         break;
        end
    
    
    
    
         end
    end.
    
    
    
    
    //123320 прекрасно
    //111111 ничего кроме это лаки
    //000001 ничего
     
  18. Pir4tt

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

    Joined:
    3 Jan 2008
    Messages:
    73
    Likes Received:
    36
    Reputations:
    5
    У вас ошибко в алгоритме Сэр)):
    Code:
    //Выше просто обрезано ;)
     if a+b+c+d+e+f = 54 then
      begin
       writeln('Congratulation! It is lucky-number!');
       writeln('Next lucky-number is 000000')
      end
    
     else begin
    
      if a+b+c=d+e+f then begin
       writeln('Congratulation! It is lucky-number!');
       f:=f+1; //Увеличиваем последнюю цифру здесь а не в цикле
      end;
    
       for a:=a to 9 do begin
        for b:=b to 9 do begin
         for c:=c to 9 do begin
          for d:=d to 9 do begin
           for e:=e to 9 do begin
            for f:=f to 9 do begin        // !!!!!!!!!!!!!!!!!!!!!!
    
       if a+b+c=d+e+f then
        begin
         writeln('Next lucky-number is ',a,b,c,d,e,f);
         exit;
        end;
    
         end; {сбрасываем счётчики на 0 после 9)
         f:=0;
         end;
         e:=0;
         end;
         d:=0;
         end;
         c:=0;
         end;
         b:=0;
         end;
    
         end;
         end;
    end.
     
    2 people like this.
  19. A2GIL

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

    Joined:
    31 Aug 2007
    Messages:
    84
    Likes Received:
    59
    Reputations:
    -3
    О. ребят! интересненькая задачка! Pir4tt, замечание верное. но тогда получается, что выводятся все следующие счастливые числа. Надо ведь только одно следующее!:) Тут есть маленькая загвоздка. Лучше воспользоваться дополнительными процедурами.
    Короче убил, аж целый час. Было интересно!:) Проверяй
    Code:
    Var
    a,b,c,d,e,f : byte;
    aw,bw,cw,dw,ew,fw,nw : string;
    er1,er2,er3,er4,er5,er6 : integer;
    left,right:integer;
    
    
    procedure patch(v1,v2,v3:byte;var ot:integer);
    var
     buf:string;
     code:integer;
    begin
     if (v1=0) and (v2=0) then buf:=inttostr(v3)
     else
     if v1=0 then buf:=inttostr(v2)+inttostr(v3)
     else
      buf:=inttostr(v1)+inttostr(v2)+inttostr(v3);
      Val(buf,ot,code);
    end;
    
    procedure dispatch(digit:integer; var s1,s2,s3:byte);
    var
     buf:string;
     code:integer;
    begin
     buf:=inttostr(digit);
     if digit<10 then begin
      s1:=0;s2:=0;s3:=digit;
      end
     else
      if digit<100 then begin
       s1:=0;
       Val(copy(buf,2,1),s2,code);
       Val(copy(buf,3,1),s3,code);
      end
     else begin
      Val(copy(buf,1,1),s1,code);
      Val(copy(buf,2,1),s2,code);
      Val(copy(buf,3,1),s3,code);
     end;
    end;
    
    begin
     ClrScr;    
     writeln('Enter your lucky-number');
     readln(nw);
    
     if Length(nw)<>6 then
      writeln('Enter valid number')
     else
      begin
      aw:=Copy(nw,1,1);                
      bw:=Copy(nw,2,1);                 
      cw:=Copy(nw,3,1);                   
      dw:=Copy(nw,4,1);
      ew:=Copy(nw,5,1);
      fw:=Copy(nw,6,1);
    
      Val(aw,a,er1);
      Val(bw,b,er2);
      Val(cw,c,er3);
      Val(dw,d,er4);
      Val(ew,e,er5);
      Val(fw,f,er6);
    
     if a+b+c+d+e+f = 54 then
      begin
       writeln('Congratulation! It is lucky-number!');
       writeln('Next lucky-number is 000000');
      end
     else
    
      if a+b+c=d+e+f then
       writeln('Congratulation! It is lucky-number!')
      else  begin
    
     patch(d,e,f,right);
     patch(a,b,c,left);
     if left=0 then begin
      left:=1;
      dispatch(left,a,b,c);
      right:=0;
      end;
      while a+b+c<>d+e+f do
        begin
          inc(right);
          dispatch(right,d,e,f);
          if (d=10) and (e=10) and (f=10) then begin
           patch(a,b,c,left);
           inc(left);
           dispatch(left,a,b,c);
          end;
        end;
         writeln('Next lucky-number is ',a,b,c,d,e,f);
        end;
         readln;
        end;
    end.
    
     
    #1039 A2GIL, 7 Feb 2008
    Last edited: 7 Feb 2008
    2 people like this.
  20. Pir4tt

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

    Joined:
    3 Jan 2008
    Messages:
    73
    Likes Received:
    36
    Reputations:
    5
    Нет)) специально проверял, выводится одно следуещее число, обеспечивается заменой брейка на экст
    Code:
       if a+b+c=d+e+f then
        begin
         writeln('Next lucky-number is ',a,b,c,d,e,f);
         [b]exit;[/b]
        end;
    A2GIL, вариант интересный, но усложнённый имхо))
    //пошёл рассматривать
     
    #1040 Pir4tt, 7 Feb 2008
    Last edited: 7 Feb 2008
Thread Status:
Not open for further replies.