[Çözüldü] Python ile Alakalı Soru

Başlatan miyojen, 03 Ekim 2015 - 18:45:30

« önceki - sonraki »

0 Üyeler ve 6 Ziyaretçi konuyu incelemekte.

miyojen

Eski Çağda yaşayan bir padişahın bin askeri vardır. Askerler halka şeklinde sıralanıyor. Her asker sağındaki askeri kılıçla yaralıyor ve yaralanan asker oyundan çıkıyor, oyun sıradaki askere geçiyor. Yani halkanın ilk hali (1-2-3-4-5-6-7-8-9.....) iken sonraki hali (1-3-5-7 9....) oluyor. Yarışmayı hangi asker kazanır?  Oyunu nesne tabanlı mantığı ile yazınız.
NOT: kaç asker oyuna dahil olacak ve oyunun kaçıncı askerden başlayacağını kullanıcı belirleyecek.

Python dilini yeni öğrenmeye başladım. Yukarıya bir blogdan gördüğüm üniversitede sorulduğu söylenen bir soruyu yapıştırdım. Belki çok basit bir şekilde yazılabilir ama acemi olduğum için bilmiyorum. Nasıl olacağı hakkında bilgilendirir misiniz?

Çözüldü:
1. Bu problemin çözümü aslında çoğu dilde yapılmış: http://rosettacode.org/wiki/Josephus_problem
(Çözümü atan kullanıcı)

2. Visual Basic ile çözümü
miyojen - havlama, başka ihsan istemem.

Promethium

En sona bir asker kalana kadar devam mı ediyor ?
  • Üretmeden tüketen millet, ezilmeye mahkum millettir.

oasln

#2
--

tlg

İnternet üzerinde bir çok çözüm mevcut, soruda ayrımcı nokta nesne tabanlı olarak yazmak. Yani bir sınıf ilişkisi ile yazmak. Nesne Tabanlı Programlama ile aran nasıl ilk önce onu soralım, sonra çözüm üretmeye çalışalım.

Amenofis

Olur olmaz her problem nyp teknikleri ile çözülmez. Bu sorunun bir recursive fonksiyonluk canı var.

oasln

--

miyojen

Alıntı yapılan: orion578 - 03 Ekim 2015 - 20:04:17
En sona bir asker kalana kadar devam mı ediyor ?
Aynen öyle. Bu arada 1000 asker var yazılmış ama alt tarafa da asker sayısını kullanıcı girecektir şeklinde not bırakılmış.

Alıntı yapılan: oasln - 03 Ekim 2015 - 21:05:08
hayir https://en.wikipedia.org/wiki/Josephus_problem degilmis bu soru :-)
Hocam, ne dediğinizi anlamadım.

Alıntı yapılan: tlg - 03 Ekim 2015 - 21:39:50
İnternet üzerinde bir çok çözüm mevcut, soruda ayrımcı nokta nesne tabanlı olarak yazmak. Yani bir sınıf ilişkisi ile yazmak. Nesne Tabanlı Programlama ile aran nasıl ilk önce onu soralım, sonra çözüm üretmeye çalışalım.
Dediğim gibi Python'u yeni öğrenmeye başladım, yani iyi değil ama ben bir çözüm gelir ona bakarak bir şeyler anlarım diye düşünmüştüm.

Alıntı yapılan: Amenofis - 03 Ekim 2015 - 21:45:50
Olur olmaz her problem nyp teknikleri ile çözülmez. Bu sorunun bir recursive fonksiyonluk canı var.
Vallahi soruyu ben yazmadım. Üniversitede kim sorduysa artık, onun problemi bu.

Alıntı yapılan: oasln - 03 Ekim 2015 - 22:37:08
Alıntı yapılan: oasln - 03 Ekim 2015 - 21:05:08
problem bu https://en.wikipedia.org/wiki/Josephus_problem
vazgectim sonucu atmaktan :)
Hocam, sizi yine anlamadım. :)
miyojen - havlama, başka ihsan istemem.

parduscix

önce soruyu matematiksel olarak çöz.
Halka olduğu için kullanıcının girdiği değeri hesapladığın değerle topla
bu kadar basit

tlg

Alıntı yapılan: Amenofis - 03 Ekim 2015 - 21:45:50
Olur olmaz her problem nyp teknikleri ile çözülmez. Bu sorunun bir recursive fonksiyonluk canı var.

Her problem de öyle çözülsün demiyoruz. Ama kimi problemler vardır NYP ile çözülmesi bu konunun öğrenilmesi açısından daha iyidir. Burada da büyük ihtimal o amaçla sorulmuş bir soru.
http://rosettacode.org/wiki/Josephus_problem, çoğu dilde çözümü yapılmış. Adresi daha da incelersen başka problem çözümleri de var.

miyojen

Alıntı yapılan: parduscix - 03 Ekim 2015 - 23:41:08
önce soruyu matematiksel olarak çöz.
Halka olduğu için kullanıcının girdiği değeri hesapladığın değerle topla
bu kadar basit
Tabii ki matematiksel olarak çözümünü düşündüm. Kağıt kalem alıp kafa yormadım belki ama düşündüm, bulamadım. Zaten onu bulsaydım, çat pat bir şeyler yazabilirdim belki.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 04 Ekim 2015 - 00:36:25

Alıntı yapılan: tlg - 04 Ekim 2015 - 00:06:51
Alıntı yapılan: Amenofis - 03 Ekim 2015 - 21:45:50
Olur olmaz her problem nyp teknikleri ile çözülmez. Bu sorunun bir recursive fonksiyonluk canı var.

Her problem de öyle çözülsün demiyoruz. Ama kimi problemler vardır NYP ile çözülmesi bu konunun öğrenilmesi açısından daha iyidir. Burada da büyük ihtimal o amaçla sorulmuş bir soru.
http://rosettacode.org/wiki/Josephus_problem, çoğu dilde çözümü yapılmış. Adresi daha da incelersen başka problem çözümleri de var.
Teşekkür ederim, hocam. Ben yarın onu bir inceleyeyim.
miyojen - havlama, başka ihsan istemem.

parduscix

#10
visual basic ile çözümü ama çalıştırınca işlemciyi zorlar


Public Sub Main()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
i = 1
While (i < 1000)
While (i < 1000)
  J = 2 * i - 1
  i = i + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
  While (j < 1000)
  k = 2 * j - 1
 
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
  While (k < 1000)
      m = 2 * k - 1
      k = k + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (m < 1000)
    l = 2 * m - 1
    m = m + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (l < 1000)
    a = 2 * l - 1
    l = l + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (a < 1000)
   b = 2 * a - 1
   a = a + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (b < 1000)
   c = 2 * b - 1
   b = b + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (c < 1000)
    d = 2 * c - 1
    c = c + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (d < 1000)
    e = 2 * d - 1
    d = d + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (e < 1000)
  f = 2 * e - 1
  e = e + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
 
Wend
  Wend
Wend
Wend
  Wend
  Wend
  Wend
Wend
Wend
Wend
Wend
End


işlem bitince en altta --- ifaretinin ayırdığı bölümün en üstündeki cevap

Promethium

Alıntı yapılan: parduscix - 04 Ekim 2015 - 00:53:55
visual basic ile çözümü ama çalıştırınca işlemciyi zorlar


Public Sub Main()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
i = 1
While (i < 1000)
While (i < 1000)
  J = 2 * i - 1
  i = i + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
  While (j < 1000)
  k = 2 * j - 1
 
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
  While (k < 1000)
      m = 2 * k - 1
      k = k + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (m < 1000)
    l = 2 * m - 1
    m = m + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (l < 1000)
    a = 2 * l - 1
    l = l + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (a < 1000)
   b = 2 * a - 1
   a = a + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (b < 1000)
   c = 2 * b - 1
   b = b + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (c < 1000)
    d = 2 * c - 1
    c = c + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (d < 1000)
    e = 2 * d - 1
    d = d + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (e < 1000)
  f = 2 * e - 1
  e = e + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
 
Wend
  Wend
Wend
Wend
  Wend
  Wend
  Wend
Wend
Wend
Wend
Wend
End


işlem bitince en altta --- ifaretinin ayırdığı bölümün en üstündeki cevap

Bu olmaz asker sayısı sabit olmamalı kullanıcı değer atamalı ona göre algoritma çizilmeli.
  • Üretmeden tüketen millet, ezilmeye mahkum millettir.

miyojen

Alıntı yapılan: parduscix - 04 Ekim 2015 - 00:53:55
visual basic ile çözümü ama çalıştırınca işlemciyi zorlar


Public Sub Main()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
i = 1
While (i < 1000)
While (i < 1000)
  J = 2 * i - 1
  i = i + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
  While (j < 1000)
  k = 2 * j - 1
 
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
  While (k < 1000)
      m = 2 * k - 1
      k = k + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (m < 1000)
    l = 2 * m - 1
    m = m + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (l < 1000)
    a = 2 * l - 1
    l = l + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (a < 1000)
   b = 2 * a - 1
   a = a + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (b < 1000)
   c = 2 * b - 1
   b = b + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (c < 1000)
    d = 2 * c - 1
    c = c + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (d < 1000)
    e = 2 * d - 1
    d = d + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
While (e < 1000)
  f = 2 * e - 1
  e = e + 1
  Print (f)
  Print (e)
  Print (d)
  Print (c)
  Print (b)
  Print (a)
  Print (l)
  Print (m)
  Print (k)
  Print (j)
  Print ("---")
 
Wend
  Wend
Wend
Wend
  Wend
  Wend
  Wend
Wend
Wend
Wend
Wend
End


işlem bitince en altta --- ifaretinin ayırdığı bölümün en üstündeki cevap

Hocam teşekkür ederim. Diğerleri faydalanabilir belki ama ben çok bir şey anlayamıyorum ondan. Sadece Python dilini yeni yeni öğrenmeye başladım.
miyojen - havlama, başka ihsan istemem.

tlg

Sorun kalmadıysa, etiketleyebilirsin o zaman. cozuldukonusu

miyojen

Alıntı yapılan: tlg - 04 Ekim 2015 - 19:47:50
Sorun kalmadıysa, etiketleyebilirsin o zaman. http://kb.ubuntu-tr.net/cozulen-basliklarin-etiketlenmesi

İlk attığım mesaja da çözümleri yazıp, etiketi eklerim.
miyojen - havlama, başka ihsan istemem.