Jump to page: 1 2
Thread overview
to!string kullanımı hakkında
Jun 21, 2020
cos00kun
Jun 21, 2020
cos00kun
Jun 21, 2020
cos00kun
Jun 21, 2020
cos00kun
Jun 21, 2020
cos00kun
Jun 21, 2020
cos00kun
Jun 22, 2020
kerdemdemir
Jun 22, 2020
kerdemdemir
Jun 22, 2020
cos00kun
Jun 22, 2020
kerdemdemir
Jun 22, 2020
cos00kun
Jun 22, 2020
cos00kun
June 21, 2020

Ali hocam Şimdi oyun kağıtlarını bir diziye geçirmek ve D ile antrenman yapmaya devam etmek istiyorum. Ama normalin aksine amacım bu sefer kupa 2, kupa3, kupa4..... şeklinde renk ve değerleri birarada string olarak diziye aktarmak istiyorum. Bu sonraki aşamam. Şimdi probleme gelecek olursak aşağıdaki kodda;

import std.stdio;

void main() {
   foreach(say1;"♠♡♢♣") {
       foreach(say2;"23456789JQKA") {
           writeln(say1~say2);
       }
   }
}

Haklı olarak 'writeln(say1~say2);' kodunun çalışmadığını göreceğiz çünkü foreach anladığım kadarıyla stringleri tek tek karakter olarak say1 ve say2 ye alıyor (Yanlış anlıyor da olabilirim). Eğer doğru anladığımı farzedersek;
'writeln(to!string(say1)~to!string(say2)) ' ifadesinin doğru çalışması gerekmiyor muydu ? bende derlemede sorun çıkarttı.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Ali Hocam siz online iken üstteki mesajı düzenlemeye kalktım. Siz şimdi bana söylenmeden ben yazayım dedim :-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Ali hocam kafamı allak bullak ettin :-p zaten yeni yeni toparlarken .byCodePoint ler dstringler.. Daha oralara gelemedim Hocam :-D

Peki Ali hocam o zaman şöyle sorayım. iskambil kağıdını en hızlı ve pratik olarak nasıl bir yöntemle bir yerlere kaydetmek daha mantıklıdır ? Bu kağıtları diziye kopyalayıp ordan seçtikçe diziden remove etmek gibi bir yöntem mi daha idealdir? Açarsam biraz;

iskambil kağıtl destesini ben bir tuşa bastıkça tek tek ekrana yazsın ama aynı kağıtlar tuşa basıldıkça bir daha yazılmasın ( yani ekrana çıkan desteden remove olsun). Böylece bir deste kağıt bitene kadar ekrana tek tek rastgele yazılacak.. Şimdi öğrenme aşamasında olduğum için assertlar, in,out lar falan olmadan basitçe sadece çalışan bir code yazarsanız konuyu tam kavrayabileceğim.. Yapı ve Sınıf kullanabilirsiniz.
Fazla olmadığımı umud ederek her zaman olduğu gibi teşekkür ediyorum Sevgili Robinson :blush:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Hay çok yaşa sen Ali Hocam. Bilmediğim konular var ama onlara da bakarak hallederim artık. Mantığı kavradım en azından. Aralık konusu iyi anladığım bi konu ve diğerleri de gayet net anlaşılıyor güzel anlatımınızdan dolayı.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Birde ali hocam şu kupa,karo,sinek ve maça karakterleri klavyede hangi tuşlara basınca çıkıyordu :scared:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

to!string import std.conv; ile çalışır ama burada çok önemli bir konuyu atlıyorsun: D'nin string'ler UTF-8 kodlarından oluşur. O yüzden, "♠♡♢♣" dizgisinin uzunluğu 4 değil 12'dir.

foreach string'in her kodunu teker teker gezer; istediğin şey hiç değil. :)

Bu durumda bir çözüm, dizgiyi 'd' karakteriyle dstring olarak tanımlamaktır: '"♠♡♢♣"d'. Bu durumda her eleman dchar'dır (UTF-32 karşılığı) ve dizginin uzunluğu da beklendiği gibi 4 olur.

Buradaki gibi hazır değerle değil de her tür string ile doğru işleyen diğer çözüm std.uni.byCodePoint'tir. to!string yerine de writefln kullanacağım:

import std.stdio;
import std.uni;

void main() {
 foreach(say1; "♠♡♢♣".byCodePoint) {
   foreach(say2;"23456789JQKA") {
     writefln!"%s%s"(say1, say2);
   }
 }
}

dstring'i D programlarında hemen hemen hiç görmüyoruz. string'ler byCodePoint gibi aralık algoritmalarıyla kullanıldığında Unicode karakterleri otomatik olarak çözümlenirler ve ana dizgi string bile olsa aralık algoritmaları bize elemanları çözümlenmiş dchar'lar olarak gösterirler. (say1'in türü dchar'dır.)

Aynı programı foreach kullanmadan yapan bir örnek:

import std.stdio;
import std.algorithm;
import std.uni;

void main() {
 "♠♡♢♣".byCodePoint.each!((renk) {
     "23456789JQKA".byCodePoint.each!(sayı => writeln(renk, sayı));
   });
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Ayrıca codlar Linux ortamında sorunsuzca derlendi ancak Windows ortamında şöyle bir hata alıyorum;

**** 64 bit derleme****
'E:\D Ornekleri>dmd -m64 d3.d
LINK : fatal error LNK1561: Giriş noktası tanımlanmalıdır
Error: linker exited with status 1561
'

hadi dedim birde 32 bit deneyeyim;

**** 32 bit derleme****
'E:\D Ornekleri>dmd d3.d
OPTLINK (R) for Win32 Release 8.00.17
Copyright (C) Digital Mars 1989-2013 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
OPTLINK : Warning 23: No Stack
OPTLINK : Warning 134: No Start Address
'

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Alıntı (cos00kun):

>

.byCodePoint

D'de char türü "karakter" kavramı değildir, UTF-8 kod birimidir. 'a' tek kod biriminden oluşur ve Unicode'un tasarımı gereği ASCII 'a' ile aynı kodlamaya sahiptir. O yüzden char'ı sanki "karakter"miş gibi kullanıyor ve bu ayrımın farkına bile varmıyoruz.

Oysa örneğin 'ç' iki char'dan '♠' üç char'dan oluşur.

byCodePoint, bu char'ları çözümser ve elemanları bize UTF-32 değerinde dchar'lar olarak sunar. (Bu otomatik çözümsemeyi çoğu Phobos aralık algoritması da yapar ama foreach yapmaz.)

Alıntı:

>

dstringler

string nasıl char dizisi ise (yani, UTF-8 dizisi), dstring de dchar dizisidir (yani, UTF-32 dizisi).

Alıntı:

>

Bu kağıtları diziye kopyalayıp ordan seçtikçe diziden remove etmek gibi bir yöntem mi daha idealdir?

D'nin aralık kavramı bu işe çok uygun: Tek dizi oluşturulabilir ve sonra elemanları baş taraftan birer birer veya örneğin dörder dörder ziyaret edilebilir. Bu işlem sırasında ana aralık (yani, deste) baş tarafından kısaltılır ve hic kopyalamadan bütün elemanlar masrafsızca görülebilir.

Olabildiğince temel olanaklar kullanarak:

// Hangi işlevin hangi modülde olduğunu açıkça gösteriyorum:
import std.stdio : writeln;
import std.algorithm : map;
import std.format : format;
import std.range : chunks;
import std.random : randomShuffle;
import std.uni : byCodePoint;

// Bunlar char dizileridir
enum renkler = "♠♡♢♣";
enum sayılar = "23456789JQKA";

struct Kağıt {
 dchar renk;    // Her Unicode karakterini barındırabilen tür
 dchar sayı;    // Bu char olabilirdi ama bunu da dchar yaptım

 string toString() {
   return format!"%s%s"(renk, sayı);
 }
}

auto yeniElliİki() {
 Kağıt[] deste;

 foreach (renk; renkler.byCodePoint) {
   foreach (sayı; sayılar.byCodePoint) {
     deste ~= Kağıt(renk, sayı);
   }
 }

 return deste;

 // Yukarıdakinin yerine şu da olabilirdi:
 /*
 return
   renkler
   .map!(renk => sayılar.map!(sayı => Kağıt(renk, sayı)))
   .joiner
   .array;
 */
}

void main() {
 // Sıralı bir deste
 auto deste = yeniElliİki();

 // Karıştırılıyor
 randomShuffle(deste);

 // Bundan sonra desteyi "aralık" olarak kullanabiliriz

 writeln("Teker teker:");
 foreach (kağıt; deste) {
   writeln(kağıt);
 }

 // chunks(N), bir aralığın elemanlarını N'er N'er ziyater eder
 writeln("Dörder dörder:");
 foreach (el; deste.chunks(4)) {
   writeln(el);
 }

 // Yukarıdaki iki döngü de aynı desteyi kullanır. Birinci deste
 // yalnızca kendi aralığını tüketir. Zaten o yüzden aynı desteyi
 // ikinci kere ziyaret edebildik. Gerektiğinde bir diziyi sıfırlamak için null atayabiliriz:
 deste = null;

 writeln("Deste şimdi boş: ", deste);
}

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 21, 2020

Daha da temel bir döngü, while'ı kullanabilir:

 writeln("Teker teker:");
 while (deste.length != 0) {
   auto kağıt = deste[0];
   deste = deste[1..$];    // Desteyi baştan bir eleman kısaltır
   writeln(kağıt);
 }

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

June 22, 2020

Coskun merhaba,

Boyle kucuk kodlari internette deneyebilirsin

Ornegin ben su baglantiyi kullaniyorum genelde.
https://run.dlang.io/
Ali Abi'nin kodunu kopyaladigimda su cikiyor:
https://run.dlang.io/is/ojLryK
Alıntı:

>

Teker teker:
♠3
♠A
♠Q
♣7
♢5
♡K
♢4
♣3
♡8
♠J
♢6
♡A
♣J
♢A
♠7
♢3
♣9
♡6
♣6
♡4
♠9
♣5
♢9
♠5
♠6
♠4
♡9
♣A
♢8
♣8
♣4
♣2
♡7
♡2
♠2
♢J
♢Q
♢2
♡Q
♡3
♢K
♠K
♠8
♣Q
♡5
♡J
♣K
♢7
Dörder dörder:
[♠3, ♠A, ♠Q, ♣7]
[♢5, ♡K, ♢4, ♣3]
[♡8, ♠J, ♢6, ♡A]
[♣J, ♢A, ♠7, ♢3]
[♣9, ♡6, ♣6, ♡4]
[♠9, ♣5, ♢9, ♠5]
[♠6, ♠4, ♡9, ♣A]
[♢8, ♣8, ♣4, ♣2]
[♡7, ♡2, ♠2, ♢J]
[♢Q, ♢2, ♡Q, ♡3]
[♢K, ♠K, ♠8, ♣Q]
[♡5, ♡J, ♣K, ♢7]
Deste şimdi boş: []

Bence senin windows daki ortaminda bir sorun var "merhaba dunya" yazdirabiliyormusun. Belkide simdi windows'a cok takilmasan da olur ne dersin?

Erdem

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2