Thread overview
Array Matrix
Oct 02
Erdem
September 29

Evet...:)

İsim yeterince havalı ama örnek değil.
Çünkü sadece opCall() olanağı kullanılacağız...

Sizden bir ricam var:

Lütfen aşağıya doğru hızlıca inmeyin ve adım adım gidin :)

Önce şöyle bir yapı olsun, 3 renge sahip olan;
Her biri tek noktayı temsil ettiğini hayal edin! Şöyle:

struct Color
{
  ubyte r, g, b;

  string toString() {
    import std.conv : text;
    return text(r * g * b);
  }
}

Ama yetmez, bir simge (icon file) oluşturduğumuzu düşünelim.
Karmaşaya da gerek yok hani 5 x 5, 25 px yeter:

>

000 000 000 000 000
000 000 000 000 000
000 000 000 000 000
000 000 000 000 000
000 000 000 000 000

Tamamı siyah noktalar ile dolu (varsayılan kurulum 0) ve
3 renk bilgisi tutan bu veriyi, pekala bir dizi ile temsil edebiliriz...

Hadi, ortasında beyaz 1 nokta da olsun:

void main()
{
  Color[5][5] arr;
  auto beyaz = Color(255, 255, 255);
  arr[2][2] = beyaz;

  import std.stdio;
  arr.writefln!"%-(%-(%s %)\n%)";

} /* ÇIKTISI:

0 0 0 0 0
0 0 0 0 0
0 0 16581375 0 0
0 0 0 0 0
0 0 0 0 0

*/

Basit gibi ama köşeli parantezler ile kafa karıştırıcı (ilki x: satır, diğeri y: sütun) ve hele ki bu yapı 3D nesnelerin verisini tutsaydı Z, hatta çizgi nesleri için W ile 4 parametreye daha ihtiyaç duyacaktık. Düşünsenize 4 boyutlu bir dizi, evet yeterince karışık değil mi?

Tamam, tamam, daha uzatmayacağım!

Sihirli bir dokunuş yapalım ve ekstra 1 adet Point yapısı ile diziyi sarmalayan başka bir yapı daha ekleyelim. Yani 2 adet yapı ile koordinat sistemini renklerle eşleştireceğiz!

İşte lezzet bombası:

struct Point
{
  size_t x, y;
}
struct ArrayMatrix(T)
{
  T[][] elements;
  size_t length;

  this(size_t length)
  {
    this.length = length;
    this.elements = new T[][](length, length);
  }

  ref T opCall(Point i)
  in(i.y < length && i.x < length)
  {
    return elements[i.y][i.x];
  }
}

void main()
{
  auto arr = ArrayMatrix!Color(5);
  auto beyaz = Color(255, 255, 255);
  auto p = Point(2, 2);

  arr(p) = beyaz;

  import std.stdio;
  arr.writeln;
}

Evet, ne düşünüyorusunuz? Lütfen yorumlarınızı eksik etmeyin! Yani bunu okuyan var mı anlayamıyorum. Nokta işareti yazsanız bile kafi, yoksa bu tür makaleler devam etmek pek anlamlı değil.

Sağlıcakla kalın :)

SDB@79

September 29

On Friday, 29 September 2023 at 03:20:53 UTC, Salih Dincer wrote:

>

Evet...:)

İsim yeterince havalı ama örnek değil.
Çünkü sadece opCall() olanağı kullanılacağız...

[...]

Salih selamlar ben çoğu zaman nereye varmak istediğini anlayamıyorum, kusura bakma lütfen. Ama bir yorum yapmam gerekirse ArrayMatrix yapısının length adinda bir üyesinin olmasına gerek yok. elements zaten bir dilim ve uzunluğu ile birlikte var oluyor.

September 29

On Friday, 29 September 2023 at 04:52:43 UTC, Ferhat Kurtulmuş wrote:

>

On Friday, 29 September 2023 at 03:20:53 UTC, Salih Dincer wrote:

>

Evet...:)

İsim yeterince havalı ama örnek değil.
Çünkü sadece opCall() olanağı kullanılacağız...

[...]

Salih selamlar ben çoğu zaman nereye varmak istediğini anlayamıyorum, kusura bakma lütfen. Ama bir yorum yapmam gerekirse ArrayMatrix yapısının length adinda bir üyesinin olmasına gerek yok. elements zaten bir dilim ve uzunluğu ile birlikte var oluyor.

in'de kullanıyorum hocam, sözleşmeli programalama dedikleri olay. Bir de hazırda bir uzınluk bilgiai oluyor işte. Misal main() içinde arr.length > 5 diye sorgu yapabilirsiniz ki bu bakış açınıza göre yanlış da olabilir :)

Belki rowLength daha uygun bir isim?

Teşekkürler...

October 02

On Friday, 29 September 2023 at 03:20:53 UTC, Salih Dincer wrote:

>

Selamün Aleyküm,

Salihcim merhaba.

>

Önce şöyle bir yapı olsun, 3 renge sahip olan;
Her biri tek noktayı temsil ettiğini hayal edin! Şöyle:

struct Color
{
  ubyte r, g, b;

  string toString() {
    import std.conv : text;
    return text(r * g * b);
  }
}

Bu uzun süre önce SDL için yazdığımız ilintiye benziyor.

struct Renk
{
    ubyte k;
    ubyte y;
    ubyte m;
    ubyte a;
    static {
        enum turkuaz = Renk(100, 149, 237, 0);
        enum mavi    = Renk(0, 0, 255, 0);
        enum kırmızı = Renk(255, 0, 0, 0);
        enum yeşil   = Renk(0, 255, 0, 0);
        enum beyaz   = Renk(255, 255, 255, 0);
        enum siyah   = Renk(0, 0, 0, 0);
    }
}

Renk sdl.d kütüğünde tanımlanmış basit bir yapı imiş.

>

İşte lezzet bombası:

struct Point
{
  size_t x, y;
}

Nokta da temelsekiller.d kütüğünde tanımlı buna benzer bir yapı imiş. Her noktanın bir rengi var.

struct Nokta
{
    int x = 0;
    int y = 0;
    Renk renk;

    this (int x, int y, Renk = Renk.beyaz)
    {
        this.x = x;
        this.y = y;
        this.renk = renk;
    }
}

Bu aralar yazılımdan ziyade elektronikle uğraşıyoruz.

Selamlar.

Erdem

October 02

On Monday, 2 October 2023 at 18:34:51 UTC, Erdem wrote:

>

Bu aralar yazılımdan ziyade elektronikle uğraşıyoruz.

Ben de öyle! Elektronik hiçbir zaman hayatımdan uzaklaşmadı. Hadi sana bir soru:

Yüksek akım 5V ile çalışan dijital bir devre düşün ve bu eski bir makine o yüzden power supply'den çıkan kablo soketler ile devreye ulaşırken bir şeyler yolunda gitmiyor. Sen buna temassızlık diyebilirsin ya da başka bir şey ama İstanbul trafiği gibi artık kablo mu eskimiş yoksa soket mi bir ucunda 5V1 ölçülürken yükte diğer tarafa 5V altında o yüzden makine düzgün çalışmıyor. Çözüm bir Türk Zekası, şönt bir kabloyu dışından bağlamak: sanırım 2 metre var ama kalın bir elektrik kablosu :)

Soruya gelince: öyle 10 amperden fazla bir akım aktığı falan yok hani ama neden ince kabloda devre çalışmaz? Misal PC için power kablosunun kalınlığı AC'de bile yetiyorken aynı kablo DC'de yetmiyor ve çok damarlı, topraklı bir elektrik kablosunu (işaret parmağın kadar kalın) bağlayınca 5V seviyesini ancak buluyoruz!

Skin Effect diyecem ama AC değil ki ne alaka :)

Sevgiler, saygılar...