Excel Forum
ALTIN ÜYELİK Hakkında Bilgi


Geri Git   Excel Forum > EXCEL-Soruları > Beyin Fırtınası
Atatürk
Şifremi Unuttum

DUYURU SİSTEMİ / REKLAM PANOSU

Beyin Fırtınası Bu başlıkta, ilginç olduğunu düşündüğünüz sorularınızı, bir problem şeklinde sorabilir, alternatif olduğunu düşündüğünüz çözümlerinizi paylaşabilirsiniz. (Bu başlıkta yeni konu açılması onaya bağlıdır.)
Dosya ekleyebilirsiniz

Özel Arama


Kapalı Konu
 
Paylaş Konu Araçları Görünüm Modları
Eski 28-11-2008, 13:44   #21
Necdet Yeşertener
Moderatör
 
Giriş: 04/06/2005
Şehir: Ankara
Mesaj: 11,905
Excel Vers. ve Dili:
Ofis 2003 İngilizce Ofis 2007 Türkçe Ofis 2010 Türkçe
Varsayılan

Merhabalar,

Rastgele sayı üretme konusunda xl nin bir sıkıntısı var.
O da hep aynı sayıları üretir olması.

Örneğin Sayın leumruk'un eklediği dosyada Hücrelerin yerlerini değiştir bölümünde 2 kere çalıştırdığımda aynı sonuca ulaştım (önce çalıştırdım, sonra kapatıp açıp tekrar çalıştırdım).

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
 
ALİ MEHMET FİKRET NESİL MAHMUT
NESİL FİKRET MEHMET ALİ MAHMUT
NESİL ALİ FİKRET MAHMUT MEHMET
MAHMUT ALİ MEHMET FİKRET NESİL
ALİ FİKRET MEHMET NESİL MAHMUT
MAHMUT FİKRET MEHMET NESİL ALİ
MAHMUT NESİL ALİ FİKRET MEHMET
ALİ MEHMET MAHMUT FİKRET NESİL
FİKRET NESİL MEHMET ALİ MAHMUT
MEHMET NESİL MAHMUT FİKRET ALİ
__________________
Sayfada Boş Satırları Silmek:
Sütunu Seçiniz, F5, Özel, Boşluklar, Tamam,
Sağ Klik, Sil, Tüm Satır, Tamam

Türkçe'nin Bir Eksiği Yok, Ya Sizin?



Necdet Yeşertener Çevrimdışı  
Eski 28-11-2008, 13:57   #22
Ferhat Pazarçevirdi
 
Ferhat Pazarçevirdi kullanıcısının avatarı
 
Giriş: 15/06/2006
Şehir: İzmir
Mesaj: 3,723
Excel Vers. ve Dili:
Excel 2003, 2007, 2010 (TR)
Varsayılan

Alıntı:
Rastgele sayı üretme konusunda xl nin bir sıkıntısı var.
O da hep aynı sayıları üretir olması.
Necdet bey,

Rnd() fonksiyonunun, hep aynı sayıları üretmesi doğaldır. Kodun her çalışmasında farklı sayılar ve/veya seçimlerle karşılaşmak istiyorsanız, bahis konusu kodların herbirinin ilk satırına Randomize komutunu veriniz (ilk satıra sadece Randomize yazınız) ve kodları tekrar çalıştırınız. Sonra da; sonucu gözlemleyiniz.
__________________
Bugün pazar. | Bugün beni ilk defa güneşe çıkardılar. | Ve ömrümde ilk defa gökyüzünün | bu kadar benden uzak | bu kadar mavi | bu kadar geniş olduğuna şaşarak | kımıldamadan durdum. | Sonra saygıyla toprağa oturdum, | dayadım sırtımı duvara. | Bu anda ne düşmek dalgalara, | bu anda ne kavga,ne hürriyet, ne karım. | Toprak, güneş ve ben | Bahtiyarım| NAZIM/1938
www.xlchart.blogspot.com
Ferhat Pazarçevirdi Çevrimdışı  
Eski 28-11-2008, 14:04   #23
Necdet Yeşertener
Moderatör
 
Giriş: 04/06/2005
Şehir: Ankara
Mesaj: 11,905
Excel Vers. ve Dili:
Ofis 2003 İngilizce Ofis 2007 Türkçe Ofis 2010 Türkçe
Varsayılan

Randomize yi yeni öğrendim. Çaktırmadan birşey öğrenmiş oldum, sağolun Ferhat Bey
__________________
Sayfada Boş Satırları Silmek:
Sütunu Seçiniz, F5, Özel, Boşluklar, Tamam,
Sağ Klik, Sil, Tüm Satır, Tamam

Türkçe'nin Bir Eksiği Yok, Ya Sizin?



Necdet Yeşertener Çevrimdışı  
Eski 28-11-2008, 16:08   #24
hsayar
 
hsayar kullanıcısının avatarı
 
Giriş: 02/03/2005
Şehir: İpsala/Edirne
Mesaj: 2,968
Excel Vers. ve Dili:
ev: Ofis 2007- Win Xp iş: Ofis 2010- Win Vista
Varsayılan

Alıntı:
leumruk tarafından gönderildi Mesajı Görüntüle
Syn. hsayar,
Teşekkürler. Kodlar muhteşem...Ellerinize sağlık. Devamını bekliyoruz.

Riaca ederim sn leumruk.
aslında benim yaptığım bir şey yok teşekkürler recep ipek hocama, onun bizlere kazandırdığı UniqueRandomNumbers üzerinden küçük değişkliklerle ürettiğim çözümler.

15 ve 17 mesajdaki kodları içeren dosya ektedir.
Eklenmiş Dosyalar
Dosya Türü: rar beyinfırtınasıRastgeleSayılar.rar (32.0 KB, 259 Görüntülenme)
__________________
Felâket başa gelmeden evvel, onu önleyecek ve ona karşı savunulacak gerekleri düşünmek lâzımdır. Geldikten sonra dövünmenin faydası yoktur.[B]ATATÜRK[/B]

Türkler’den bahsediyorum. Düşmanına saldırırken amansız bir kasırgaya, korkunç bir denize ve insafsız bir yıldırıma benzeyen Türk; dost yanında ve silahsız düşman karşısında bir seher yelidir, berrak bir göldür. Gönül açan bu yeli yıldırmak, göz kamaştıran bu gölü coşkun bir denize çevirmek tabiatı da inciten bir gaflet olur.
[B]Tasso (İtalyan Şair)[/B]

Bu mesaj en son " 28-11-2008 " tarihinde saat 19:59 itibariyle hsayar tarafından düzenlenmiştir....
hsayar Çevrimdışı  
Eski 01-12-2008, 16:48   #25
xxcell
 
Giriş: 25/04/2007
Mesaj: 460
Excel Vers. ve Dili:
2007
Varsayılan

Alıntı:
Ferhat Pazarçevirdi tarafından gönderildi Mesajı Görüntüle
Sn.Taruz

Bu fırtına değil, resmen kasırga olmuş

Hem 50 tane olacak, hem pozitif veya negatif olacak, üstüne üstlük toplamları +30 olacak ... Vallahi, Mars bile bundan daha ağır koşullarda oluşmamıştır ... Sonucu veren sayıları bulma ihtimali de -bizim PC'lerde- sanırım, evrim süresini aşar

Sevgiler ...

Bence "Algoritmayı Anlamak" adına güzel bir soru olmuş.
Bazen Fırtınaya karşı durmaktansa çevresini dolaşmak daha kolaydır.
Yada kılıcı kınından çıkartmak yerine kını kılıçtan çıkartmak!

Bir algoritmayı modelleyebilmek için, onu yeterince anlamak ve kullanacağımız Matematik ve kod() yapılarını seçmemiz gerekir.

Soruyu tekrar ve daha anlaşılır biçimde sorarsak cevap bize daha basit gelebilir.

Kodlar, Programlamanın alfabesi gibidir, onları öğrenmek konuşmaya yetmez. Ki amacımız güzel bi edebi eser ise, konuşmaktan da fazlası gerekir.

Bu genel ve sıkıcı anlatıma soruya dönerek ara vermek istiyorum

Ama tüm arkadaşlara tavsiyem, programlamayı kitaplardan öğrenmeleridir. Bu benim nacizane tavsiyemdir. Bir şey bildiğimden değildir. Yanlış anlaşılmasın.

Bu sorunun algoritmasını şu şekilde kurdum;

1. Döngüye başlamadan önce değeri -4 olan bir değişkeni; rastgele aralıklarla 50 kere arttır.
2. Bu sayıları dizi() adlı diziye aktar
3. Eğer dizi() dizisinin 50.ci değeri +4 değerinden büyükse 1 nci adıma geri dön.
4. Eğer dizi() dizisinin toplamı 0'dan küçük veya 30'dan büyükse 1 nci adıma geri dön.

---------

*** 1.nci adımda kullandığım yöntem Birbirinden farklı 50 tane sayı üretir. Sayı ufak aralıklarla arttığı için en küçüğü en fazla -4 'dür. Ve hiçbiri kesinlikle birbirine eşit değildir.

5. Bu aşamaya geçebildiysek sayımız -4 ile +4 arasında ve toplamı 30'dan küçük bir dizimiz var.

**** Toplamı 30'a nasıl getireceğiz?

6. Toplam 30'dan küçükse dizinin tüm elemanlarını 0,01 arttır. Tabi bu arttırma işlemi için 1'den 50'ye kadar bir döngü kurup tüm değerleri 0,01 arttırıyoruz. Bu arada da toplam 30 olursa Döngüden çıkıyoruz.
7. Son değer LİMİT değere ulaştıysa (50.nci eleman için +4 değeri), bundan sonra onu arttırma ve arttırma döngülerini bir önceki elemana kadar yap.
8. Toplam 30 olana ve son değer LİMİT değere ulaşıncaya kadar döngüye devam et ve toplam 30 olunca döngüden çık.

**** Bu aşamada doğru döngü kurmayı bilmeliyiz, Arttırma işleminde her elemanın bir kez 0,01 değerinde arttırdığımızda 50 eleman için toplam değeri 0,5 arttırmış oluruz.
Diyelimki 5. Aşamada dizimizin toplam değeri 12,05 olsun demekki 30 değerine ulaşmak için; 17,95 arttırma yapmamız gerekiyor, buda her elemanı 0,01 değerinde
tekrar tekrar arttırarak 35 kez arttırmak demek. Buda her elemana 0,35 değeri eklemek demek. Tabi ki bu işlemi yaparken son elemanları +4 değerinin üstünde çıkartabiliriz.
Bunu önlemek için kuracağımız iç içe döngüde eğer son eleman, kendisine ait limit değere ulaşırsa (50.eleman için +4, 49.eleman için eğer elli +4 ise, kırkdöküz maksimum 3,99 olur. Bu şekilde iç içe döngü ve LİMİT değeri hesaplayan matematik formülü ile ARTTIRMA işlemini sonuçlandırdım.

Bu aşamada kodu incelerseniz daha iyi anlayacağınızı umuyorum. Örnek deneme olarak yazıldığı için dağınıktır.

Kod: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
Sub rastgele()
Columns(1).Clear
[b1].Formula = "=sum(a1:a50)"
Randomize
Dim dizi(51) As Double
toplam = 0

Do While Not (toplam > 0 And toplam <= 30 And dizi(50) <= 4)
sayi = -4
toplam = 0
For n = 1 To 50

aralik = Round(Rnd() * Rnd() * 0.5 + 0.01, 2)
sayi = Round(sayi + aralik, 2)
If sayi = 0 Then sayi = Round(sayi + 0.01, 2)
dizi(n) = sayi
toplam = Round(toplam + sayi, 2)
Next

Loop


' arttirma

fark = Round(30 - toplam, 2)

For nn = 50 To 1 Step -1
Do While dizi(nn) < 4 - (0.01 * (50 - nn + 2))
For n = 1 To nn
dizi(n) = Round(dizi(n) + 0.01, 2)
toplam = Round(toplam + 0.01, 2)

If toplam >= 30 Then
GoTo cikis:
End If

Next
fark = 30 - toplam
Loop
Next nn


Exit Sub
cikis:

n = 1
Do While n < 51

sayi = Int((50 * Rnd) + 1)
Do While dizi(sayi) = 0
sayi = Int((50 * Rnd) + 1)
Loop

Cells(n, 1) = Round(dizi(sayi), 2)
Cells(n, 1).NumberFormat = "0.00"
dizi(sayi) = 0
n = n + 1

Loop

End Sub
xxcell Çevrimdışı  
Eski 01-12-2008, 20:12   #26
Ferhat Pazarçevirdi
 
Ferhat Pazarçevirdi kullanıcısının avatarı
 
Giriş: 15/06/2006
Şehir: İzmir
Mesaj: 3,723
Excel Vers. ve Dili:
Excel 2003, 2007, 2010 (TR)
Varsayılan

Merak ettim ... Program yazabilmek için; hangi kitapları okumamızı tavsiye edersiniz ... ?


.
__________________
Bugün pazar. | Bugün beni ilk defa güneşe çıkardılar. | Ve ömrümde ilk defa gökyüzünün | bu kadar benden uzak | bu kadar mavi | bu kadar geniş olduğuna şaşarak | kımıldamadan durdum. | Sonra saygıyla toprağa oturdum, | dayadım sırtımı duvara. | Bu anda ne düşmek dalgalara, | bu anda ne kavga,ne hürriyet, ne karım. | Toprak, güneş ve ben | Bahtiyarım| NAZIM/1938
www.xlchart.blogspot.com
Ferhat Pazarçevirdi Çevrimdışı  
Eski 02-12-2008, 00:16   #27
leumruk
Uzman
 
leumruk kullanıcısının avatarı
 
Giriş: 15/04/2007
Şehir: Mustafa ALTUN ANKARA
Mesaj: 3,163
Excel Vers. ve Dili:
Office 2010 & 2013 tr
Varsayılan

Syn. xxcell,
Güzel bir mantık kurmuşsunuz, tebrik ederim; ancak 1-2 denemeden sonra exceli kilitliyor. İlgilenirseniz sevinirim.
__________________
"Seni her türlü noksandan tenzih ederiz. Senin bize öğrettiğinden başka bizim hiçbir bilgimiz yoktur. Sen herşeyi hakkıyla bilir, her işi hikmetle yaparsın." (Bakara Sûresi: 2:32.)

"Onların duaları şu sözlerle sona erer: Ezelden ebede her türlü hamd ve övgü, şükür ve minnet, Âlemlerin Rabbi olan Allah'a mahsustur." (Yunus Suresi, 10:10.)
leumruk Çevrimdışı  
Eski 02-12-2008, 01:23   #28
xxcell
 
Giriş: 25/04/2007
Mesaj: 460
Excel Vers. ve Dili:
2007
Varsayılan

Alıntı:
Ferhat Pazarçevirdi tarafından gönderildi Mesajı Görüntüle
Merak ettim ... Program yazabilmek için; hangi kitapları okumamızı tavsiye edersiniz ... ?
Yukarıda da belirtmeye çalıştığım gibi bu işte üstat değilim, sadece benim gibi hobi olarak uğraşan ve aynı yoldan yürümek isteyenler için fikirlerimi paylaştım.

Böyle arkadaşlara kitap isminden çok seviyesini tavsiye edebilirim, Teknik kitapların üç düzey seviyesi vardır. Başlangıç, Orta Düzey ve Profosyoneller İçin. Tavsiyem en az iki - üç adet Başlangıç Seviyesinde programcılık kitabı okumak. Ve kitapda verilen her örneği birebir tekrar etmektir. Aynı kitabı iki üç kez okuduktan sonra referans olarak saklamaktır. Ben 1990'larda toy yıllarımda başladığım için programcılık hobime (!) o yıllarda QBasic, Dbase, Clipper kitapları okudum. Hatta kelimesinden anlamadığım Assembler, C kitaplarım da mevcutdu. Adamlar Assembler ile hesap makinesi programlıyor, bayrak al, bayrak tut gibi komutları var Temel C'de sadece 8 - 10 komut mevcut diye bilirim. İhtiyacın olan kodları kendin yazıyosun. 90'ların geyiği, C'de ekran temizleme komutu bile yok kendin yazman lazım. Sonra Algoritma Yapıları ile ilgili kitaplarım da vardı. Ayrıca abartısız onlarca excel kitabım oldu. M.T.Korkmazın Programlamaya giriş kitabı güzel bir referans kaynak. Favori kitabım, gerçek üstatların yazdığı Profosyonel Excel Çözümleri. Hüseyin Bey'in sitesi de satıyor. Çok zor anlayabiliyorum. Ama süper bir referans. Bir de bu site var tabi. Sağolsun Levent üstat'dan çok şey öğrendim. Haluk Bey'in yabancı kaynaklı örnekleri de lazım olduğunda bire bir kullanıyorum. CostControl arkadaşı ve siz değerli üstatları da takdir ediyorum. Bu Yazıyı yazdığımda tam adını hatırlayadığım (N ile başlıyor ) bir üstat da fonksiyonlarda gerçek bir üstat, onun VBA geçiş süreci de yansıyor topiclere.


Alıntı:
leumruk tarafından gönderildi Mesajı Görüntüle
Syn. xxcell,
Güzel bir mantık kurmuşsunuz, tebrik ederim; ancak 1-2 denemeden sonra exceli kilitliyor. İlgilenirseniz sevinirim.
Kilitlemesine sebep olarak, cikis: kisminda dizi() dizisinin hücrelere aktarılmadan önce sırasının karıştırma işleminin hesaplamasından kaynaklanıyordur. Zira daha önce aktardığı dizi elamanı yerine başka bir değer ararken 1 ile 50 arasında sonsuz deneme yapıyor. 40 numaralı elemanı almıştım tekrar dene gibi.

cikis: kısmını değiştirirseniz sorunun düzeleceğini tahmin ediyorum.

cikis:

for n=1 to 50
cells(n,1)=dizi(n)
next

end sub

ayrıca fark isimli değişkenin hiç bir fonksiyonu yok fark = ile başlayan satırları da çıkartabilirsiniz
xxcell Çevrimdışı  
Eski 02-12-2008, 01:33   #29
leumruk
Uzman
 
leumruk kullanıcısının avatarı
 
Giriş: 15/04/2007
Şehir: Mustafa ALTUN ANKARA
Mesaj: 3,163
Excel Vers. ve Dili:
Office 2010 & 2013 tr
Varsayılan

Sayın xxcell,
Paylaşımınız için teşekkür ederim. Güzel bir çalışma.
__________________
"Seni her türlü noksandan tenzih ederiz. Senin bize öğrettiğinden başka bizim hiçbir bilgimiz yoktur. Sen herşeyi hakkıyla bilir, her işi hikmetle yaparsın." (Bakara Sûresi: 2:32.)

"Onların duaları şu sözlerle sona erer: Ezelden ebede her türlü hamd ve övgü, şükür ve minnet, Âlemlerin Rabbi olan Allah'a mahsustur." (Yunus Suresi, 10:10.)
leumruk Çevrimdışı  
Eski 02-12-2008, 09:35   #30
xxcell
 
Giriş: 25/04/2007
Mesaj: 460
Excel Vers. ve Dili:
2007
Varsayılan

Alıntı:
Ferhat Pazarçevirdi tarafından gönderildi Mesajı Görüntüle
Necdet bey,

Rnd() fonksiyonunun, hep aynı sayıları üretmesi doğaldır. Kodun her çalışmasında farklı sayılar ve/veya seçimlerle karşılaşmak istiyorsanız, bahis konusu kodların herbirinin ilk satırına Randomize komutunu veriniz (ilk satıra sadece Randomize yazınız) ve kodları tekrar çalıştırınız. Sonra da; sonucu gözlemleyiniz.

Hiçbirşey gerçekde rastlantı değildir, biz örnek sayımızın, deney araçlarımızın ve zamanımızın kısıtladığı kadar rastlantı sayarız. Bu sözde rastlantısallık durumuna pseudarandom denir.

Vbasic’te (ve birçok programda) Pseudarandom sayı üretmek için sistem saati referans alınır. Kod bloğumuzun başına RANDOMIZE kodunu yazarak , program her başlatıldığında sistem zamanı değişik olacağından rnd() ile üretilecek sayıları da değiştirmiş oluruz. Bu bize yeterince rastgele bir sayı verir.

Randomize komutu referans olarak, sistem saatini alır. Kod bir kere çalıştığında ve sözde rastlantısallık başlatıldıktan sonra aynı zaman aralığında işlem yapar. Bu arada rastgele sayılarımızı bir diziye aktarıp sabitlediğimizi düşünelim. Teorik olarak, yeterince iyi bir matematik formülü ile ilk elemanı tahmin edemesek bile ona göre üretilmiş diğer sayıları tahmin edebiliriz. Bu teoriye dayanarak, 90’larda bir hackerın bir kumar sitesinde pokerde kendine gelecek kağıtları hesaplayan bir program geliştirip siteyi yüzbinlerce dolar dolandırdığı ortaya çıktı.

Biz böyle yüksek güvenlik seviyeli kod geliştirmeyeceğimize göre bizim için bir sorun yok, yinede istersek randomize değerine başka değişkenler ekleyebiliriz. Örneğin, aktif sayfa isminin son harfinin ascii kodu, aktif hücrenin satır numarası, mousenin X konumu gibi,

Randomize ActiveCell.Row + asc(right(activesheet.name,1))

Dikkat ederseniz bulduğum sayılar yeterince rastlantısal değil ama bu konuya takılmamak gerek. Ben beyin fırtınamıza yararlı olduğunu düşündüğüm temel bir bilgi vermek istedim. Randomize yapmak fazlasıyla yeterli.

Bilginize.
xxcell Çevrimdışı  
Kapalı Konu


Konu Araçları
Görünüm Modları

Gönderme Kuralları
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı


Saat 19:53


Bu forum Elit NET - www.elitnet.com.tr tarafından sunulmaktadır.

Excel Eğitimi - Mobil Uygulama - Çorlu - Çorlu Web Tasarım - Tarot Falı - invest in turkey - Lingerie - Dyeing Machine - Karton Bardak- Çorlu Özel Eğitim- Site Yönetimi- Led Aydınlatma- Pronet Tekirdağ- Çorlu Kamera- Pronet Edirne- Pronet Kırklareli- Pronet Çerkezköy- Pronet Çorlu- Pronet Lüleburgaz- Pronet Keşan- Çorlu Araç Takip- Çorlu Su Arıtma- Boru Profil- Gebze Emlak- Beylikdüzü Temizlik- İstanbul Burun Estetiği- Bakır Sülfat- Rampa- Rotary- Çorlu İnternet Sitesi- youngblood- Çorlu Palet- Çerkezköy Palet- Çorlu Prefabrik- Çorlu Sürücü Kursu- Çorlu Sandviç Panel- Şişli Avukat- Korona Test Kalemi- Çorlu Vinç- Çorlu Pimapen Tamiri-
Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden