Prog.Odevi: Her Vezir bir sonrakini yokediyor,sağ kalan tek?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

@mrmarman hocam
bende ona benzer vir döngü kurdum ama benüm süreler seninki kadar hızlı değil.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Sendeki component bazlı (TListBox vb.) bir VirtualArena olmalı. Dizilerle yaparsan aynen bu kadar hızlı olacaktır. ( Bilgisayar hızını ihmal edersek bendeki ortalama bir bilgisayar Notebook Dothah 1.6)
Resim
Resim ....Resim
Kullanıcı avatarı
raikkonen21
Üye
Mesajlar: 49
Kayıt: 02 Nis 2007 10:02
Konum: Konya

Mesaj gönderen raikkonen21 »

afferin...
gazı verdin ödevi arkadaşlara yaptırdın. :)

estafurullah :)



mrmarman hocam inanın caba gosterıyorum arastırıyorum..sormadan tam iki saat ugrastım o ılk verdıgınız kod uzerınde..ıkı de bır sormk ta yıldırır ınsanı.ben delphıde daha yolun cok basındayım..ama gordukce yaptıkca canım daha cok ıstıyor..sizin yazdıgınız kodlar dusunce tarzınız cok guzel.bize okulda anlatılmıyor o kadar.hersey ogrencılerden beklenıyor..proje dersım var mesela delphıde excel yapacaz vızelere kadar..arastırdım stgrıtte yapılıyormus..ararken baktım f1book excel ıne nerdeyse aynı..sıtenın arama mooturu varmıs 20mb onu ındırdım baktım..f1book kullanımı ıle ılgı yeterlı dokuman bulamadım.ben bıraz fazla agladım galıba..

inan hocam calısıyorum cabalıyorum..odev ver yapıyım:) ogrencın oluyum senın :)gercekten programcılıgınıza hayran kaldım ılk defa bır forumdan bu kadar ılgı bu kadar alaka alıyorum.

Ben henüz kod yazmadım, çünkü @raikkonen21'in çabasını kod olarak daha göremedim. demıssınız ben daha forumda yenıyım ne demek ıstedıgınızı de tam anlamadım.
yardımlarınız ıcın cok tesekkur ederım vermıs oldugunuz dokumana calısacagım..su an gonderdım zaten orneklerı..calısmak kaldı sadece.dunden berı basımı kaldıramıyorum zaten :) ustume gelmeyın abıler ya :)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

raikkonen21 yazdı:... bize okulda anlatılmıyor o kadar.hersey ogrencılerden beklenıyor..
Anladığım kadarıyla öğretmenden beklentin fazla. Aklında bulunsun, öğretme yoktur öğrenme vardır. Bilim bu gün öğretmenin yerini klavuzluğa bırakmıştır. Öğretme yoksa ne vardır. Tabiki öğrenme. Öğrenme bireyde başlar ve biter. Öğretmen denilen şahıs ne işe yarar peki. Ortamı hazırlar, klavuzluk yapar, birey istediği zaman veya bireyde eksik gördüğü noktalarda yol gösterir. Öğrenebilmek için öğretmenini bu konuda zorlaman gerekiyor. Bir öğretmen bir ortamda bir konuyu her öğrenciye farklı farklı anlatmaz, anlatamaz. Ama öğrenciler farklı farklı öğrenirler. O yüzden öğretmenden beklentilerini yüksek tutma, tam tersine sıfır noktasında tutmaya çalış (tabi gerçek hayatta pek mümkün değil ama araştırdaktan sonra pek çok kaynak karşına çıkacaktır). Böyle olduğu zaman en kaliteli öğrenmeyi gerçekleştirirsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
raikkonen21
Üye
Mesajlar: 49
Kayıt: 02 Nis 2007 10:02
Konum: Konya

Mesaj gönderen raikkonen21 »

haklısınız gercekten.ben bu konuda oz elestırı de yapıyorum kendımı de haklı gormuyorum..fakat hoca sıze strıng toplama vıze fınal ortalama gosterıp sınavda heceleme algorutması sorarsa bu da yanlıstır bence..daha emeklemeye yenı baslayan bır bebekten kosmasını ısteyemezsınız.ogrenme bıtmez ayrıca..ben bu konuda ısteklıyım..ogrenmek ıstıyorum..bu delphıyı ogrenecegımde..
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Maalesef bu da klavuzun hatasıdır. Eğer hem öğrenci hemde öğretmen olarak herkes işinin hakkını vererek çalışabilselerdi manzara bu kadar vahim olmazdı (ben hala şu ilk 500 üniversite sıralamasına giremedikya oraya takıldım kaldım). Neyse size kolay gelsin, bu taraflardan yardım isterseniz kimse yardımını esirgemiyor (maşallah) . :)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
raikkonen21
Üye
Mesajlar: 49
Kayıt: 02 Nis 2007 10:02
Konum: Konya

Mesaj gönderen raikkonen21 »

allah razı olsun herkesten ...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Tamam yılan hikayesine dönmeden kodu yazalım..

Kod: Tümünü seç

Function SagKalan( VezirSayisi, IlkVezir: Integer ):Integer;
Var
  Dizi  : Array of Integer;
  Konum, Sayac : Integer;
  Olsun : Boolean;
begin
  Result := -1;
  Setlength(Dizi, VezirSayisi);
  For Sayac := 0 to VezirSayisi-1 do Dizi[Sayac] := 1;
  Konum := IlkVezir-2; // Vezir no 1'den sayac 0 'dan başlar...
                       // Ayrıca döngü içerisinde bir ilk +1 var
                       // Bu ikisini peşinen düşüyoruz...
  Olsun := False;
  Sayac := VezirSayisi;
  Repeat
    Inc(Konum);
    If Konum > VezirSayisi-1 then Konum := 0;
    If Dizi[Konum] > 0 then begin
      If Olsun then begin
        Dizi[Konum] := 0;
        Dec(Sayac);
        Olsun := False;
      end else Olsun := True;
    end;
  Until Sayac = 1;
  For Sayac := 0 to VezirSayisi-1 do
    If Dizi[Sayac] <> 0 then Result := Sayac+1;
end;
- Kullanımı ise şöyle

Kod: Tümünü seç

Var
  SansliVezir : Integer;
begin
  SansliVezir := SagKalan( 100, 5 ); // 100 vezirden 5.inciye kılıç verilmişse
  ShowMessage('Şanslı Vezir = '+ IntToStr(SansliVezir));
end;
- Derslerinde başarılar...
Resim
Resim ....Resim
Kullanıcı avatarı
raikkonen21
Üye
Mesajlar: 49
Kayıt: 02 Nis 2007 10:02
Konum: Konya

Mesaj gönderen raikkonen21 »

teşekkur ederım yardımlarınız için.ben bunu işin gercegi yazamazdım.fonksıyonlar dızıler donguler karsılastırmalar hepsı bırlıkte..aman allahım :) cok calısmam lasım
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

mrmarman yazdı:- Sendeki component bazlı (TListBox vb.) bir VirtualArena olmalı. Dizilerle yaparsan aynen bu kadar hızlı olacaktır. ( Bilgisayar hızını ihmal edersek bendeki ortalama bir bilgisayar Notebook Dothah 1.6)
yok hocam ben linked listlerle yapmaya çalıştım.
bendeki makinede bi notebook ama özelliklerini tam bilmiyorum.
Forma birtane spinedit birtanede button koydum

Kod: Tümünü seç

Type
  TVezir=Record
    vezirno:integer;
    sonraki:Pointer;
  End;
var
  vezirler:Array of Tvezir;
  kiliclivezir:tvezir;
procedure TForm1.Button1Click(Sender: TObject);

var
i:integer;
vezirsayisi:integer;
begin
  vezirsayisi:=SpinEdit1.Value;
  setlength(vezirler,vezirsayisi);
  for i:=0 to vezirsayisi-1 do
  begin
    vezirler[i].vezirno:=i+1;
    if i=vezirsayisi-1 then vezirler[i].sonraki:=@vezirler[0]
                       else vezirler[i].sonraki:=@vezirler[i+1];
  end;
  kiliclivezir:=vezirler[0];
  while not (kiliclivezir.sonraki=NullStr) do
  begin
    kiliclivezir.sonraki:=tvezir(kiliclivezir.sonraki^).sonraki;
    vezirler[kiliclivezir.vezirno-1].sonraki:=kiliclivezir.sonraki;
    kiliclivezir:=tvezir(kiliclivezir.sonraki^);
    if kiliclivezir.vezirno=tvezir(kiliclivezir.sonraki^).vezirno then
       kiliclivezir.sonraki:=nullstr;
  end;
  showmessage(inttostr(kiliclivezir.vezirno));
bi çeşit simülasyon yani tek tek vezirleri öldürdüm :lol:
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam

@aslangeri linked list ile ilgili küçük bir hatırlatma yapmama izin verin, çünkü sizin kullandığınız sistem linked list değil, array oluyor.

Linked list, recordu içinde sonraki (ve opsiyonel olarak önceki) elemanın adresini tutarak oluşturulan liste. Sizin recordunuzun tanımlaması bu yönden doğru, ama şu satırlar recordun içindeki pointeri anlamsız kılıyor.

Kod: Tümünü seç

  vezirsayisi:=SpinEdit1.Value; 
  setlength(vezirler,vezirsayisi); 
Oysa şu şekilde yapmanız daha mantıklı (en azından linked list için) olurdu (Not: Test ederek yazamıyorum, çünkü bilgisayarda herhangi bir programlama IDE'si yok)

Kod: Tümünü seç

type 
  PVezir = ^TVezir;
  TVezir = record
  vezirno:integer;
  sonraki:PVezir;
end;

const int MaxVezir = 15;
var
  FirstItem:PVezir;
  tmp:PVezir;
  Counter:integer;
begin
  New(FirstItem);
  tmp := FirstItem;
  while (Counter < MaxVezir) do
  begin
    New(tmp.sonraki);
    tmp := tmp.sonraki;
    inc(Counter, 1);
  end;
end;

no ve sonraki değişkenlerini initalize etmek gerekiyor, aceleden eklemedim :) Private veya global tanımlayacağın tek değişken de aslında FirstItem olacak, diğerlerine gerek yok. Çünkü FirstItem'dan her istediğine erişebiliyorsun.

Ama bu problemde linked list yerine array veya list kullanmak daha mantıklı bence.

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

@opt2000 evet haklısın.
Gerçektende Dinamik diziler ve linked listleri iç içe sokmuşum.
Hatırlatman için teşekkür ederim.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Sizlerin verdiği bu kodlardan ve mrmarman hocam sizin verdiğiniz listelerden çıkan sonuca göre bir formül ortaya çıkıyor. Her 2'nin kuvvetinde hep ilk eleman şanslı olarak kalıyor ve sıralı devam ediyor. Buna göre şu fonksiyonu yazmak ne derece doğru olur? (aslında kabul ediyorum matematiksel ispat ister ama ben pek beceremem :))

Kod: Tümünü seç

function KimKaldi(const ElemanSayisi:Integer;const ilkKimBasladi:Integer=1):Integer;
begin
  Result:=1;
  while Result<=ElemanSayisi do Result:=Result shl 1;
  Result:=ElemanSayisi-(Result shr 1);
  Result:=2*Result+ilkKimBasladi;
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla