dongu ile dizinin disindan icine dogru hareket etmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen sadettinpolat »

Kod: Tümünü seç

DiziDoldur(Sutun,Satir);
seklinde bir metod yazmam gerekiyor.
bu metodun ise su sekilde calismasi gerekiyor ve onemli bir kisitlamada DiziDoldur metodu icinde
tek bir dongu kullanma hakkimiz var.

Kod: Tümünü seç

diziDoldur(10, 1);
1 2 3 4 5 6 7 8 9 10

Kod: Tümünü seç

diziDoldur(10, 2);
 1  2  3  4  5  6  7  8  9  10
20 19 18 17 16 15 14 13 12 11

Kod: Tümünü seç

diziDoldur(8, 6);
 1  2  3  4  5  6  7  8
24 25 26 27 28 29 30 9
23 40 41 42 43 44 31 10
22 39 48 47 46 45 32 11
21 38 37 36 35 34 33 12
20 19 18 17 16 15 14 13

Kod: Tümünü seç

diziDoldur(3, 5);
 1  2  3
12 13 4
11 14 5
10 15 6
9  8  7
biraz tirmaladim ama duzgun bir metod yazamadim.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen aslangeri »

kardeşim işin gücün yok böyle şeylerlemi uğraşıyorsun

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Procedure dizidoldur(sutunsayisi,satirsayisi:integer);
  end;
Type TDirection=(soldansaga,yukardanasagiya,sagdansola,asagidanyukariya);
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  dizidoldur(strtoint(edit1.text),strtoint(edit2.text));
end;

procedure TForm1.dizidoldur(sutunsayisi, satirsayisi: integer);
var
i:integer;
aktifsutun,aktifsatir:integer;
ilksatir,ilksutun,sonsatir,sonsutun:integer;
yon:TDirection;
begin
  StringGrid1.RowCount:=satirsayisi+1;
  StringGrid1.ColCount:=sutunsayisi+1;
  ilksatir:=1;ilksutun:=1;
  sonsatir:=satirsayisi;
  sonsutun:=sutunsayisi;
  aktifsutun:=1;
  aktifsatir:=1;
  yon:=soldansaga;
  for i:=1 to sutunsayisi*satirsayisi do
  begin
    StringGrid1.Cells[aktifsutun,aktifsatir]:=inttostr(i);
    case yon of
      soldansaga: begin
        inc(aktifsutun);
        if (aktifsutun mod sonsutun)=0 then begin
          yon:=yukardanasagiya;
          dec(sonsutun);
        end;
      end;
      yukardanasagiya:begin
        inc(aktifsatir);
        if (aktifsatir mod sonsatir)=0 then begin
          yon:=sagdansola;
          dec(sonsatir);
        end;
      end;
      sagdansola:Begin
        dec(aktifsutun);
        if (aktifsutun mod sonsutun)=ilksutun then
        Begin
          yon:=asagidanyukariya;
          inc(ilksutun);
        end;
      end;
      asagidanyukariya:Begin
        dec(aktifsatir);
        if (aktifsatir mod sonsatir)=ilksatir+1 then
        begin
          yon:=soldansaga;
          inc(ilksatir);
        end;
      end;
    end;
  end;
end;

end.
buda dfm si

Kod: Tümünü seç

object Form1: TForm1
  Left = 26
  Top = 21
  Width = 696
  Height = 480
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object StringGrid1: TStringGrid
    Left = 64
    Top = 112
    Width = 585
    Height = 329
    DefaultColWidth = 24
    TabOrder = 0
  end
  object Edit1: TEdit
    Left = 96
    Top = 24
    Width = 121
    Height = 21
    TabOrder = 1
    Text = '8'
  end
  object Edit2: TEdit
    Left = 96
    Top = 48
    Width = 121
    Height = 21
    TabOrder = 2
    Text = '6'
  end
  object Button1: TButton
    Left = 240
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 3
    OnClick = Button1Click
  end
end
takma kafana bunları sadettin....
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen sadettinpolat »

bazi buglari mevcut
asagidaki degerler icin sonuclar hatali oluyor :)

2,4
1,4
10,3
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen aslangeri »

Programcı değilmisin kardeşim :mrgreen:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen sadettinpolat »

haberin olsun diye yazayim dedim :)
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen Hakan Can »

Farklı bir çözüm olabilir:

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function DiziDoldur(const aSutun, aSatir: Integer): Variant;
var
  I, aXPos, aYPos, aDirection: Integer;
  aChangeDirection: Boolean;
begin
  Result := VarArrayCreate([0, aSatir - 1, 0, aSutun - 1], varVariant);

  aXPos := 0;
  aYPos := 0;

  aDirection := 1;

  for I := 0 to aSutun * aSatir - 1 do
  begin
    Result[aYPos, aXPos] := I + 1;

    aChangeDirection := FALSE;
    
    case aDirection of
      1: if aXPos = aSutun - 1 then
           aChangeDirection := TRUE
         else
           if VarToStr(Result[aYPos, aXPos + 1]) <> '' then aChangeDirection := TRUE;
      2: if aYPos = aSatir - 1 then
           aChangeDirection := TRUE
         else
           if VarToStr(Result[aYPos + 1, aXPos]) <> '' then aChangeDirection := TRUE;
      3: if aXPos = 0 then
           aChangeDirection := TRUE
         else
           if VarToStr(Result[aYPos, aXPos - 1]) <> '' then aChangeDirection := TRUE;
      4: if aYPos = 0 then
           aChangeDirection := TRUE
         else
           if VarToStr(Result[aYPos - 1, aXPos]) <> '' then aChangeDirection := TRUE;
    end;

    if aChangeDirection then aDirection := (aDirection mod 4) + 1;

    case aDirection of
      1: Inc(aXPos);
      2: Inc(aYPos);
      3: Dec(aXPos);
      4: Dec(aYPos);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  V: Variant;
  I, J: Integer;
  St1, St2, aFormatFloatStr: string;
begin
  V := DiziDoldur(StrToInt(Edit1.Text), StrToInt(Edit2.Text));
  aFormatFloatStr := DupeString('0', Length(IntToStr(StrToInt(Edit1.Text) * StrToInt(Edit2.Text))));
  St2 := '';
  for I := 0 to VarArrayHighBound(V, 1) do
  begin
    St1 := '';
    for J := 0 to VarArrayHighBound(V, 2) do
    begin
      if J > 0 then St1 := St1 + ', ';
      St1 := St1 + FormatFloat(aFormatFloatStr, V[I, J]);
    end;
    St2 := St2 + St1 + sLineBreak;
  end;
  Memo1.Lines.Text := St2;
end;

end.

Kod: Tümünü seç

object Form1: TForm1
  Left = 192
  Top = 122
  Width = 1003
  Height = 511
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 240
    Top = 176
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Edit1: TEdit
    Left = 216
    Top = 80
    Width = 121
    Height = 21
    TabOrder = 1
    Text = '5'
  end
  object Edit2: TEdit
    Left = 216
    Top = 112
    Width = 121
    Height = 21
    TabOrder = 2
    Text = '3'
  end
  object Memo1: TMemo
    Left = 376
    Top = 72
    Width = 425
    Height = 273
    ScrollBars = ssBoth
    TabOrder = 3
  end
end
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Re: dongu ile dizinin disindan icine dogru hareket etmek

Mesaj gönderen sadettinpolat »

@aslangeri ve @hakan can , yardimlariniz icin tesekkur ederim, saolun.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Cevapla