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ı:
  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, 
FillChar()  ile yapabiliriz.

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


1GrRBG.png
Cevapla
#3
(02-10-2017, Saat: 14:42)vkamadan Adlı Kullanıcıdan Alıntı: Merhaba Tuğrul abi, 
FillChar()  ile yapabiliriz.

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


1GrRBG.png

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ı:
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;
P.Safa:Yaşlanarak değil, yaşayarak tecrübe kazanılır.Zaman insanları değil,armutları olgunlaştırır
C.Yücel:Toprak gibi olmalısın! Ezildikçe sertleşmelisin!Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı
S.Canan:Bildiğini zannettiğin an hiç bir şey öğrenemezsin
Bilgi uçar
WWW
Cevapla
#7
(02-10-2017, Saat: 16:17)uparlayan Adlı Kullanıcıdan Alıntı: Şö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ı:
(02-10-2017, Saat: 16:17)uparlayan Adlı Kullanıcıdan Alıntı: Şö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ı:
(02-10-2017, Saat: 16:26)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: 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.

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


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [+10 Puan] String Manipülasyon İşlemleri Abdullah ILGAZ 16 4.590 20-04-2019, Saat: 00:48
Son Yorum: onurcan1977
  Tek dizi içinde öncelik sırası belirleme (+10 puan) Abdullah ILGAZ 4 2.047 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 6.233 30-09-2017, Saat: 12:14
Son Yorum: ismailkocacan
  Windows Mesajlaşma Sistemi Hk. Soru (+10 Puan) Tuğrul HELVACI 21 6.480 08-09-2017, Saat: 13:55
Son Yorum: ismailkocacan



Konuyu Okuyanlar: 1 Ziyaretçi