Jump to page: 1 2 3
Thread overview
Girişten herhangi bir tip değer almak
Aug 01, 2013
agora
Aug 02, 2013
agora
Aug 03, 2013
agora
Aug 04, 2013
agora
Aug 04, 2013
agora
Aug 06, 2013
agora
Diziden rastgele eleman cekmek
Aug 07, 2013
agora
Aug 07, 2013
Salih Dinçer
Aug 07, 2013
agora
Aug 07, 2013
Salih Dinçer
Aug 07, 2013
agora
Aug 07, 2013
Salih Dinçer
Aug 07, 2013
Salih Dinçer
Aug 07, 2013
agora
Aug 07, 2013
Salih Dinçer
August 02, 2013

Selam

Girişten herhangi bir tip değer nasıl alabilirim?

Yani örneğin

a değişkeni int, string, double alabilir. Bu kullanıcının o andaki girişine bağlıdır. Bunu nasıl sağlayabilirim? Şu ana kadar gördüğüm durumlarda genelde sabit olarak alınan değerin ne olacağını belirtiyoruz çünkü.

Ayrıca

import std.stdio;

import utd.errors;

import utd.crypt;

import std.c.stdio;



void main()

{

	writeln("Test surusu\n");

	string a;


       /* Hatalı, hata vermiyor ancak ekrana da değer vurmuyor. */
       /* readf %s, yerine %d, yaparsam eğer baya büyük bi hata mesajı alıyorum */
       readf(" %s", &a);


      /*  scanf kullanımında ise istediğim sonucu hemen altta alıyorum */
      scanf("%d",&a);

	Ncs(a); /*s output: 1471065822D41D8CD98F00B204E9800998ECF8427E263775 */

}

readf neden değer almıyor? %d alınca da hata veriyor acaba?

Teşekkürler

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

August 02, 2013

Alıntı (agora):

>

a değişkeni int, string, double alabilir. Bu kullanıcının o andaki girişine bağlıdır.

Bu her ne kadar Python gibi dinamik türlü dillerde temel olsa da D gibi derlemeli dillerde az gereken bir durumdur.

'a' değişkenini daha sonra nasıl kullanmak istiyorsun?

Buna rağmen, bunu sağlayan Variant ve Algebraic var:

http://dlang.org/phobos/std_variant.html

O türlerin yavaş çalıştıklarını duyabilirsin. Bu, dinamik türü desteklemek zorunda oldukları içindir. Yani, derleyici türü derleme zamanında bilemezse tam türüne göre kod üretemediği için her kullanımda türün ne olduğuna tekrar tekrar bakmak gerekiyor. Yavaşlık Variant'ın ve Algebraic'in doğalarında vardır.

Alıntı:

>

readf neden değer almıyor? %d alınca da hata veriyor acaba?

Bir tasarım kararı: readf scanf gibi bulduğu ilk boşlukta durmaz. Girişin geri kalanı aynı string'in parçasıdır. Eğer senin için amaç bütün satırı almaksa en kolayı şu:

   string isim = chomp(readln());

UFCS yazımıyla da olabilir (derlemedim):

   string isim = readln.chomp;

Bu konuyu şurada anlatıyorum:

http://ddili.org/ders/d/dizgiler.html

Ali

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

August 03, 2013

Hocam kullanıcıya bir değer soracağız diyelim

Program çalışır->Mesaj-> "BİR DEĞER GİRİNİZ"

Program çalışır->klavye->40 ya da "merhaba" ya da 3.15

readf için gereken tür tüm tipleri karşılamalı yani. baktım variant var ama o da yavaş. mantığını şimdi kuramadım ama girişten alınan değerin türünü bulup ona göre işlemi devam ettirebilirim ama her şekilde aynı işlem yapılacağından tek seferde çözmek daha mantıklı geliyor

readf için chomp kullanımı daha mantıklı geldi bana yani şu verdiğiniz

string isim = readln.chomp;

kod çalışıyor ilki de zaten çalışıyor :) tesekkur ederim ama variant tiplerde biraz kafam karisti onlari anlamaya calisacagim

bu calisma hali :) tesekkurler

http://imgim.com/t1.png

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

August 03, 2013

Alıntı (acehreli):

>

Alıntı (agora):

>

readf için gereken tür tüm tipleri karşılamalı yani.

string o tanıma uyuyor. Eğer kendimiz hiçbir özellik aramıyorsak string olabilir.

Yoksa 42'nin int mi double mı veya başka bir tür mü olduğuna karar vermek sana kalıyor. Eğer bir dilin kurallarına göre belirlenecekse, örneğin D'de olduğu gibi int olacaksa bunu senin sağlaman gerekiyor. 42 hâlâ int'tir ama nokta geldiği an artık double'dır, vs.

Alıntı:

>

baktım variant var ama o da yavaş.

Daha hızlısını yazana kadar katlanmak zorundayız. ;)

Alıntı:

>

her şekilde aynı işlem yapılacağından

Nasıl bir işlem? string üzerinde olabilir mi?

Ali

Hocam yani bu işlemden kastım girişteki türü algılatma konusunda. Size gösterdiğim görselde alınacak türün string olduğunu belirtiyor ama sanırım istediğim türü de karşılıyor. Bundan emin değilim. Tek taraflı bir değer üretiyor geri dönüşünü de deneyip ona göre yapmam gerekecek ama orada biraz tıkandım. Onu cozerim umarim. Bu verdigim deger toplama vs. islemleri icin kullanilmayacak. Sadece bi ornek dosya olusturacak dosya adini bu sekilde yapacagim. Ayrica veri ekleme ya da veri sifresi olacak MD5 degil biraz farkli bi sistem oldu bu yaptigim.

Bir deneme yaptım

3.15teşt@denemeæ yazdım ve çıktı olarak

9290065822F5CE133D1288CFC45E98B2A31F67F5F7523125

gibi bir çıktı verdi sanırım her şey yolunda aynı çıktıyı 7-8 denemede sürekli alıyorum eğer önbellek gibi bir olay yoksa derleyicinin yani eski değerleri vermiyorsa bana sistem çalışıyor olabilir :)

Derleyici eski değerleri kolaylık olsun diye saklar mı? Çerezler vs. gibi?

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

August 03, 2013

Alıntı (agora):

>

readf için gereken tür tüm tipleri karşılamalı yani.

string o tanıma uyuyor. Eğer kendimiz hiçbir özellik aramıyorsak string olabilir.

Yoksa 42'nin int mi double mı veya başka bir tür mü olduğuna karar vermek sana kalıyor. Eğer bir dilin kurallarına göre belirlenecekse, örneğin D'de olduğu gibi int olacaksa bunu senin sağlaman gerekiyor. 42 hâlâ int'tir ama nokta geldiği an artık double'dır, vs.

Alıntı:

>

baktım variant var ama o da yavaş.

Daha hızlısını yazana kadar katlanmak zorundayız. ;)

Alıntı:

>

her şekilde aynı işlem yapılacağından

Nasıl bir işlem? string üzerinde olabilir mi?

Ali

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

August 04, 2013

Anladim hocam tesekkur ederim bunu perl ve python ile yapiyorduk gelen bir veriyi belirli klasorde sakliyorduk konsoldan deger ile birlikte cagirinca 4-5 islemi tekrarlamiyodu ve o islemi cagiriyodu. Sonuc olarak simdi program calisiyor cok tesekkur ederim :)

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

August 04, 2013

Alıntı (acehreli):

>

Alıntı (agora):

>

perl ve python ile yapiyorduk gelen bir veriyi belirli klasorde sakliyorduk konsoldan deger ile birlikte cagirinca 4-5 islemi tekrarlamiyodu ve o islemi cagiriyodu

Benzer hız için D'de std.functional.memoize var:

> import std.stdio;
> import std.functional;
> import core.thread;
>
> double işlem(int i, string s, double d)
> {
>     Thread.sleep(1.seconds);
>     return i + s.length + d;
> }
>
> alias çabukİşlem = memoize!işlem;
>
> void main()
> {
>     // Toplam 5 saniye
>     foreach (i; 0 .. 5) {
>         writefln("%s: %s", i, işlem(42, "merhaba", 1.5));
>     }
>
>     // Toplam 1 saniye
>     foreach (i; 0 .. 5) {
>         writefln("%s: %s", i, çabukİşlem(42, "merhaba", 1.5));
>     }
> }
> ```

> 'memoize!işlem' parametre değerlerinin farklı kombinasyonlarına karşılık daha önceden hesapladığı sonucu saklıyor ve sonrasında onu kullanıyor.
>
> Bundan yararlanabilmek için işlevin *saf* (pure) olduğundan emin olmak şart. Yani, işlev gerçekten de belirli parametre değerlerine karşılık hep aynı sonucu üretmelidir.
>
> Ali
>

Bunda da hızda problemler olur mu hocam? Bu ozellik scripting diller'e mi ait? Yani tavsiye bir islem midir? Pointer'lar gibi kullanimina dikkat edilmeli midir?

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

Alıntı (agora):

>

aynı çıktıyı 7-8 denemede sürekli alıyorum

Aynı girişe karşılık aynı sonucu alman normal.

Alıntı:

>

Derleyici eski değerleri kolaylık olsun diye saklar mı

Teorik olarak 'pure' işlevler için doğru. Öyle işlevler aynı giriş değerlerine karşılık aynı sonucu üreteceklerinden işlemleri gereksizce tekrarlamak yerine sonuçlar daha sonradan kullanılmak üzere saklanabilir. dmd'nin henüz bunu yaptığını sanmıyorum.

Ali

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

August 04, 2013

Alıntı (agora):

>

perl ve python ile yapiyorduk gelen bir veriyi belirli klasorde sakliyorduk konsoldan deger ile birlikte cagirinca 4-5 islemi tekrarlamiyodu ve o islemi cagiriyodu

Benzer hız için D'de std.functional.memoize var:

import std.stdio;
import std.functional;
import core.thread;

double işlem(int i, string s, double d)
{
   Thread.sleep(1.seconds);
   return i + s.length + d;
}

alias çabukİşlem = memoize!işlem;

void main()
{
   // Toplam 5 saniye
   foreach (i; 0 .. 5) {
       writefln("%s: %s", i, işlem(42, "merhaba", 1.5));
   }

   // Toplam 1 saniye
   foreach (i; 0 .. 5) {
       writefln("%s: %s", i, çabukİşlem(42, "merhaba", 1.5));
   }
}

'memoize!işlem' parametre değerlerinin farklı kombinasyonlarına karşılık daha önceden hesapladığı sonucu saklıyor ve sonrasında onu kullanıyor.

Bundan yararlanabilmek için işlevin saf (pure) olduğundan emin olmak şart. Yani, işlev gerçekten de belirli parametre değerlerine karşılık hep aynı sonucu üretmelidir.

Ali

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

August 04, 2013

Alıntı (agora):

>

Bunda da hızda problemler olur mu hocam?

Anlamadım. :( Hız problemi değil, hız çözümü görüyorum.

Alıntı:

>

Bu ozellik scripting diller'e mi ait? Yani tavsiye bir islem midir? Pointer'lar gibi kullanimina dikkat edilmeli midir?

Hiç anlamadım. :(

Ali

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

« First   ‹ Prev
1 2 3