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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
  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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.  ile yapabiliriz.

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


Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#3
(02-10-2017, Saat: 14:42)vkamadan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Merhaba Tuğrul abi, 
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.  ile yapabiliriz.

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


Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Şö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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(02-10-2017, Saat: 16:17)uparlayan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Şö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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(02-10-2017, Saat: 16:26)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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 2.448 20-04-2019, Saat: 00:48
Son Yorum: onurcan1977
  Tek dizi içinde öncelik sırası belirleme (+10 puan) Abdullah ILGAZ 4 1.417 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 3.849 30-09-2017, Saat: 12:14
Son Yorum: ismailkocacan
  Windows Mesajlaşma Sistemi Hk. Soru (+10 Puan) Tuğrul HELVACI 21 3.940 08-09-2017, Saat: 13:55
Son Yorum: ismailkocacan



Konuyu Okuyanlar: 1 Ziyaretçi