Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Bir Record'un içini doldurma (+20 puan)
#1
  TTest = record
  public
   Alan1 : Byte;
   Alan2 : Byte;
   Alan3 : Byte;
   Alan4 : Byte;

   procedure Show;
 end;

{ TTest }

procedure TTest.Show;
begin
  ShowMessage(
              'Alan 1:' + Alan1.ToString() + sLineBreak +
              'Alan 2:' + Alan2.ToString() + sLineBreak +
              'Alan 3:' + Alan3.ToString() + sLineBreak +
              'Alan 4:' + Alan4.ToString()
             );
end;

Yukarıdaki gibi bir yapıyı sadece tek bir hamlede döngü kullanmadan belirli bir sayı ile nasıl doldurursunuz ? Tek bir atama ile Alan1..Alan4 'ün içeriklerinin 150 olmasını sağlayınız.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
(02-10-2017, Saat: 14:19)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
  TTest = record
  public
   Alan1 : Byte;
   Alan2 : Byte;
   Alan3 : Byte;
   Alan4 : Byte;

   procedure Show;
 end;

{ TTest }

procedure TTest.Show;
begin
  ShowMessage(
              'Alan 1:' + Alan1.ToString() + sLineBreak +
              'Alan 2:' + Alan2.ToString() + sLineBreak +
              'Alan 3:' + Alan3.ToString() + sLineBreak +
              'Alan 4:' + Alan4.ToString()
             );
end;

Yukarıdaki gibi bir yapıyı sadece tek bir hamlede döngü kullanmadan belirli bir sayı ile nasıl doldurursunuz ? Tek bir atama ile Alan1..Alan4 'ün içeriklerinin 150 olmasını sağlayınız.

Merhaba Tuğrul abi, 
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol  ile yapabiliriz.

procedure TForm1.Button1Click(Sender: TObject);
var
a: TTest ;
begin
  FillChar(a , SizeOf(a) , 150);
  a.Show;
end;


Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Cevapla
#3
(02-10-2017, Saat: 14:42)vkamadan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba Tuğrul abi, 
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol  ile yapabiliriz.

procedure TForm1.Button1Click(Sender: TObject);
var
a: TTest ;
begin
  FillChar(a , SizeOf(a) , 150);
  a.Show;
end;


Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol

Teşekkür ederim. Lakin FillChar kendi içinde döngü kullanıyor. Başka bir yöntemi daha var, daha şık daha kolay, daha esnek ;-)
Biraz daha düşünün bakalım Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#4
var   a:Ttest;
b:dword absolute a;
begin
              b := $96969696; // 150 = $96

  ShowMessage(
             'Alan 1:' + a.Alan1.ToString() + sLineBreak +
             'Alan 2:' + a.Alan2.ToString() + sLineBreak +
             'Alan 3:' + a.Alan3.ToString() + sLineBreak +
             'Alan 4:' + a.Alan4.ToString()
            );

end;

absolute ile atama yapılabiliyor ama delphi arka planda döngü ile mi yoksa aynı hafıza alanını ortak kullanarak mı yapıyor emin değilim.

Şansımı deneyeyim smile.png
Cevapla
#5
(02-10-2017, Saat: 15:32)frmman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
var   a:Ttest;
b:dword absolute a;
begin
              b := $96969696; // 150 = $96

  ShowMessage(
             'Alan 1:' + a.Alan1.ToString() + sLineBreak +
             'Alan 2:' + a.Alan2.ToString() + sLineBreak +
             'Alan 3:' + a.Alan3.ToString() + sLineBreak +
             'Alan 4:' + a.Alan4.ToString()
            );

end;

absolute ile atama yapılabiliyor ama delphi arka planda döngü ile mi yoksa aynı hafıza alanını ortak kullanarak mı yapıyor emin değilim.

Şansımı deneyeyim smile.png

Çok güzel, ellerinize sağlık. Ama sık kullanılan bir yöntem daha var Wink
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
Şöyle olur mu?

procedure TForm1.Button1Click(Sender: TObject);
var
 T : TTest;
 X : DWORD;
begin
 X := 2526451350;
 asm
   mov eax, DWORD ptr ds:X
   mov T, eax
 end;
 T.Show;
end;
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#7
(02-10-2017, Saat: 16:17)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlŞöyle olur mu?

procedure TForm1.Button1Click(Sender: TObject);
var
 T : TTest;
 X : DWORD;
begin
 X := 2526451350;
 asm
   mov eax, DWORD ptr ds:X
   mov T, eax
 end;
 T.Show;
end;

32 bit sistemlerde gayet güzel olur tabii. Lakin çok daha göz önünde, çok daha kolay bir yöntem daha var Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#8
(02-10-2017, Saat: 16:26)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(02-10-2017, Saat: 16:17)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlŞöyle olur mu?

procedure TForm1.Button1Click(Sender: TObject);
var
 T : TTest;
 X : DWORD;
begin
 X := 2526451350;
 asm
   mov eax, DWORD ptr ds:X
   mov T, eax
 end;
 T.Show;
end;

32 bit sistemlerde gayet güzel olur tabii. Lakin çok daha göz önünde, çok daha kolay bir yöntem daha var Smile

Tüm cevaplar bir birinden farklı ve kaliteli. Sınav sonucu bekler gibi aklınızdaki yöntemi merakla bekliyorum hocam.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#9
(02-10-2017, Saat: 16:28)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(02-10-2017, Saat: 16:26)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol32 bit sistemlerde gayet güzel olur tabii. Lakin çok daha göz önünde, çok daha kolay bir yöntem daha var Smile

Tüm cevaplar bir birinden farklı ve kaliteli. Sınav sonucu bekler gibi aklınızdaki yöntemi merakla bekliyorum hocam.

Değil mi üstad Smile  Maaşallah, arkadaşlarımız güzel çözüm önerileri paylaşıyorlar. Bu da programlama dünyasında çözüme giden yolun asla bir tane olmadığının bir başka ispatı olsa gerek.

Benim çözümüm son derece basit ama +20 puan verme isteğim hâla devam ediyor Big Grin
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#10
Bir seçenek de benden gelsin.

PInteger(@T)^ := $96969696;

İyi çalışmalar
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tek dizi içinde öncelik sırası belirleme (+10 puan) Abdullah ILGAZ 4 790 29-11-2017, Saat: 12:07
Son Yorum: SimaWB
  AV (Access Violation) nedir, neden bu hatayı alırız ? (+50 Puan) Tuğrul HELVACI 18 1.986 30-09-2017, Saat: 12:14
Son Yorum: ismailkocacan
  Windows Mesajlaşma Sistemi Hk. Soru (+10 Puan) Tuğrul HELVACI 21 1.943 08-09-2017, Saat: 13:55
Son Yorum: ismailkocacan



Konuyu Okuyanlar: 1 Ziyaretçi