fonksiyon etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
fonksiyon etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

6 Haziran 2025 Cuma

Excelde sayıyı yazıyla yazdırma

Yeni sürüm

06/06/2025: Kodlar güncellendi

Option Explicit
Function YAZIYLA(sayi As Variant) As String
' Sayıyı yazıyla yazar
'
' Mesut Akcan
' https://www.mesutakcan.blogspot.com
' makcan@gmail.com
'
' 23 Nisan 2004
' Güncelleme: 5 Haziran 2025

Dim birler(9) As String, onlar(9) As String, buyukSayi(4) As String
Dim basamak(1 To 15) As Byte, grup(1 To 3) As Byte
Dim sayiMetni As String, grupMetni As String
Dim sonuc As String
Dim negatif As Boolean
Dim i As Byte, j As Byte 'index


If (Not IsNumeric(sayi)) Or (Len(sayi) > 15) Then ' Sayı değilse veya 15 basamaktan büyükse hata
	YAZIYLA = "#HATA!"
Exit Function
End If

If sayi < 0 Then
	negatif = True 'Sayı negatif
sayi = Abs(sayi)
End If

' Birler basamağı
birler(0) = ""
birler(1) = "Bir"
birler(2) = "İki"
birler(3) = "Üç"
birler(4) = "Dört"
birler(5) = "Beş"
birler(6) = "Altı"
birler(7) = "Yedi"
birler(8) = "Sekiz"
birler(9) = "Dokuz"

' Onlar basamağı
onlar(0) = ""
onlar(1) = "On"
onlar(2) = "Yirmi"
onlar(3) = "Otuz"
onlar(4) = "Kırk"
onlar(5) = "Elli"
onlar(6) = "Altmış"
onlar(7) = "Yetmiş"
onlar(8) = "Seksen"
onlar(9) = "Doksan"

' Büyük sayılar
buyukSayi(0) = "Trilyon "
buyukSayi(1) = "Milyar "
buyukSayi(2) = "Milyon "
buyukSayi(3) = "Bin "
buyukSayi(4) = ""

sayiMetni = Right(String(15, "0") & CStr(Fix(sayi)), 15) ' Sayıyı metne çevir ve boşlukları kaldır

' 1'den 15'e kadar döngü
' karakterleri tek tek al ve sayıya çevir ve diziye aktar
For i = 1 To 15
	basamak(i) = CByte(Mid(sayiMetni, i, 1))
Next

sonuc = "" ' Sonuç metni

' sayı metnini 3'erli 5 gruba ayır ve her grubu yazıya çevir
For i = 0 To 4
	For j = 1 To 3 'gruptaki yüzler, onlar, birler basamakları
	grup(j) = basamak((i * 3) + j)
	Next
	
	Select Case grup(1) ' Yüzler basamağı
		Case 0 ' sıfır ise
			grupMetni = "" ' Yüzler basamağı metni boş
		Case 1 ' 1 ise
			grupMetni = "Yüz" ' Yüzler basamağı metni "Yüz"
		Case Else ' 2-9 arası ise
			grupMetni = birler(grup(1)) & "Yüz" ' Yüzler basamağı metni "İkiYüz", "ÜçYüz" vb.
		End Select
		
		grupMetni = grupMetni & onlar(grup(2)) & birler(grup(3)) ' Onlar ve birler basamağını ekle
		
		If grupMetni <> "" Then
			grupMetni = grupMetni & buyukSayi(i) ' Büyük sayıları ekle
			If (i = 3) And (grupMetni = "BirBin ") Then
				grupMetni = "Bin" ' "BirBin" durumunu düzelt
			End If
		End If
	sonuc = sonuc & grupMetni ' Sonucu birleştir
Next
sonuc = Trim(sonuc)
If sonuc = "" Then
	sonuc = "Sıfır"
ElseIf negatif Then
	sonuc = "Eksi " & sonuc
End If
YAZIYLA = sonuc
End Function 

YAZIYLA fonksiyonunu kullanma

  • Kodları kopyalayın.
  • Excelde dosya açıkken ALT+F11 tuşlarına basın (yada Şerit menüden Geliştirici / Visual Basic tıklayın)
  • VBA Editöründe menüden Insert / Module tıklayın.
  • Menüden Edit / Paste ile ya da Ctrl+V ile kopyalanan kodları yapıştırın.
  • Artık YAZIYLA fonksiyonunu diğer Excel fonksiyonları gibi hücrelerde kullanabilirsiniz.

Eski sürüm

Excelde sayıyı yazıyla yazdırmak için gerekli fonksiyonu oluşturan VBA kodları
Kodlar aşağıdaki excel dosya içinde de mevcuttur.
VBA kodlarını görmek için dosyayı açtıktan sonra ALT+F11'e basın.
İndir YAZIYLA.XLS 130 Kb

YAZIYLA fonksiyonunu tüm excel dosyalarında kullanma

Bu işlemler bir defa yapılacaktır.
yaziyla.xls dosyasını açın.
Oku1, Oku2 ve Test sayfalarını silin (Sayfaya geçin Düzen/Sayfayı sil)
Dosya / Farklı kaydet'i tıklayın
Kayıt Türü listesinden "Microsoft Office Excel Eklentisi (*.xla)" seçin
Kayıt Yeri 'nde "Addins" belirir.
Kaydet'i tıklayın
Dosyayı kapatın

Yeni bir excel dosyası ya da varolan bir excel dosyanızı açın
Araçlar / Eklentiler' i tıklayın
Burada "Kullanılabilir eklentiler"de "Yazıyla" göreceksiniz. Yanındaki kareyi tıklayıp seçin.
Tamam'ı tıklayın.
Artık her excel dosyasında YAZIYLA fonksiyonunu başka bir işlem yapmadan rahatlıkla kullanabilirsiniz.
Option Explicit
Function YAZIYLA(sayi As Variant) As String
' Sayıyı yazıyla yazar

' Mesut Akcan
' https://www.mesutakcan.blogspot.com
' makcan@gmail.com

' 23 Nisan 2004
' Güncelleme: 31 Mart 2011

Dim b(9) As String, y(9) As String, m(4) As String, a As String
Dim v(15), c(3)
Dim pozitif As Byte, x As Byte
Dim s As String, e As String

b(0) = ""
b(1) = "Bir"
b(2) = "İki"
b(3) = "Üç"
b(4) = "Dört"
b(5) = "Beş"
b(6) = "Altı"
b(7) = "Yedi"
b(8) = "Sekiz"
b(9) = "Dokuz"

y(0) = ""
y(1) = "On"
y(2) = "Yirmi"
y(3) = "Otuz"
y(4) = "Kırk"
y(5) = "Elli"
y(6) = "Altmış"
y(7) = "Yetmiş"
y(8) = "Seksen"
y(9) = "Doksan"

m(0) = "Trilyon "
m(1) = "Milyar "
m(2) = "Milyon "
m(3) = "Bin "
m(4) = ""

a = Str(Int(sayi))
If Left$(a, 1) = " " Then pozitif = 1 Else pozitif = 0
a = Right$(a, Len(a) - 1)
For x = 1 To Len(a)
	If (Asc(Mid$(a, x, 1)) > Asc("9")) Or (Asc(Mid$(a, x, 1)) < Asc("0")) Then GoTo hata
Next x
If Len(a) > 15 Then GoTo hata
a = String(15 - Len(a), "0") + a
For x = 1 To 15
	v(x) = Val(Mid$(a, x, 1))
Next x
s = ""
For x = 0 To 4
	c(1) = v((x * 3) + 1)
	c(2) = v((x * 3) + 2)
	c(3) = v((x * 3) + 3)
	If c(1) = 0 Then
		e = ""
	ElseIf c(1) = 1 Then
		e = "Yüz"
	Else
		e = b(c(1)) + "Yüz"
	End If
e = e + y(c(2)) + b(c(3))
If e <> "" Then e = e + m(x)
If (x = 3) And (e = "BirBin ") Then e = "Bin"
s = s + e
Next x
If s = "" Then s = "Sıfır"
If pozitif = 0 Then s = "Eksi " + s
YAZIYLA = s
GoTo tamam
hata:
YAZIYLA = "Hata"
tamam:
End Function

28 Nisan 2025 Pazartesi

AutoLISP: Dönüştürme fonksiyonları - 1

AutoLISP ve Visual LISP, teknik çizimlerde otomasyonu kolaylaştıran güçlü araçlar sunarken, farklı veri tipleri arasında dönüşüm yapmayı sağlayan fonksiyonları da içinde barındırır.

Bu dönüşüm işlemleri sayesinde sayılar, metinler, açılar, koordinatlar ve listeler arasında esnek geçişler sağlanabilir. Özellikle kullanıcıdan alınan verilerin işlenmesi, metin tabanlı bilgilerle sayısal verilerin entegre edilmesi veya geometriyle ilgili hesaplamalarda bu fonksiyonlar büyük kolaylık sağlar.

Dönüştürme fonksiyonlarını etkili kullanmak, yazılan kodun daha okunabilir, daha esnek ve daha güçlü olmasını sağlar.

Sayı, Metin ve Karakter Dönüşüm Fonksiyonları

Bu sayfada açıklanan fonksiyonlar:
  • itoa : Tamsayı -> Metin
  • atoi : Metin -> Tamsayı
  • rtos : Reel sayı -> Metin
  • float : Tamsayı -> Reelsayı
  • fix : Reelsayı -> Tamsayı
  • atof : Metin -> Reel sayı
  • distof : Metin -> Reel sayı
  • angtof : Açı -> Reel sayı
  • angtos : Açı -> Metin
  • ascii : Metin -> ASCII kodu
  • chr : ASCII kodu --> Karakter
  • cvunit : Birim dönüştür
  • trans : Koordinat sistemi dönüştür

itoa : Tamsayı -> Metin

itoa, Integer to ASCII kısaltmasıdır. Tamsayıyı (integer) metin (string) formatına dönüştürmek için kullanılır. Genellikle sayısal değerleri ekranda göstermek, dosya işlemlerinde kullanmak veya metin tabanlı işlemler yapmak için gereklidir.

Kullanımı:
(itoa tamsayı)
tamsayı : Dönüştürülecek tamsayı değer. Parametre olarak integer veri türü haricinde bir değer girildiğinde hata oluşur. Reel sayılar için rtos fonksiyonu kullanılmalı ya da reel sayı önce fix fonksiyonu ile tamsayıya dönüştürülmeli.
Dönüş Değeri: Sayının metin karşılığı (string).

Bu fonksiyonun yaptığı işlemin tersi için atoi kullanılır.

Örnekler:
(itoa 123) ; "123" (123 sayısını metne çevirir)
(itoa -45) ; "-45"
(itoa 0) ; "0"
(itoa (/ 10 5)) ; "2"
(itoa (/ 10 3)) ; "3"
(itoa (fix (/ 10 4))) ; "2"
; argüman veri türü hatalı örnekler:
(itoa 3.1415) ; error: bad argument type: fixnump: 3.1415
(itoa "24") ; error: bad argument type: fixnump: "24"
(itoa (/ 10 3.0)) ; error: bad argument type: fixnump: 3.33333

atoi : Metin -> Tamsayı

atoi, ASCII to integer kısaltmasıdır. Sayı içeren metni(string) tamsayıya(integer) dönüştürür.

Kullanımı:
(atoi metin)
metin : String olarak girilen argümandaki sayıyı tamsayıya(integer) dönüştürür. Metin sayı ile başlıyorsa sayı kısmını alır. Sayı ile başlamayan metinler 0 sonucunu verir.

21 Mart 2025 Cuma

AutoLISP: Kullanıcı girişi sağlayan fonksiyonlar - 3

Bu yazının önceki bölümü: AutoLISP: Kullanıcı girişi sağlayan fonksiyonlar - 2

15) ssget Fonksiyonu : Seçim seti oluşturma


ssget fonksiyonu, AutoCAD'de belirli kriterlere uyan nesneleri seçmek için kullanılır. Bu fonksiyon, seçim seti (selection set) oluşturmanıza olanak tanır. Seçim seti, AutoCAD çizimindeki nesnelerin bir koleksiyonudur.
ssget, çizimdeki nesneleri bir seçim seti olarak toplar. Bu seçim seti, daha sonra diğer işlemlerde (örneğin, ssname, sslength, vb.) kullanılabilir.

Kullanımı:
(ssget [seçim-modu] [n1 [n2]] [nokta-listesi] [filtre-listesi])
seçim-modu: Bu parametre isteğe bağlıdır ve seçim yöntemini belirler. Örneğin, "W" (Window), "C" (Crossing), "L" (Last), "P" (Previous), "I" (Implied), "X" (All) gibi modlar kullanılabilir.

n1 ve n2: Seçim yapılacak alanın köşe noktalarını belirtir. Bu parametreler de isteğe bağlıdır ve genellikle "W" veya "C" modlarıyla birlikte kullanılır.

nokta-listesi: "F" seçim modunda birden fazla nokta girişi için kullanılır.

19 Mart 2025 Çarşamba

AutoLISP: Kullanıcı girişi sağlayan fonksiyonlar - 2

Bu yazının önceki bölümü: AutoLISP: Kullanıcı girişi sağlayan fonksiyonlar - 1

9) initget Fonksiyonu: Kullanıcı Girdi Kontrolü

initget fonksiyonu, kullanıcıdan alınacak girdilerin kontrolünü sağlar. Bu fonksiyon, getint, getreal, getstring, getpoint, getdist, getangle, getkword gibi kullanıcı girdisi alan fonksiyonlarla birlikte kullanılır. Kullanıcı girdisini belirli kurallara göre sınırlandırmak ve geçerli girdileri tanımlamak için kullanılır.

Kullanımı:
(initget [bit-değeri] [anahtar-kelimeler])
bit-değeri (isteğe bağlı): Girdi kontrolü için kullanılan bit değeridir. Bu değer, kullanıcının girdisini nasıl sınırlandıracağınızı belirler.

Belirli kullanıcı girdisi türlerine izin veren veya vermeyen bir bit kodu. Bitler, 0 ile 255 arasında bir değer oluşturmak için herhangi bir kombinasyonda toplanabilir. bit-değeri belirtilmezse 0(sıfır) varsayılır.

initget Fonksiyonunun Bit Değerleri:
Bit Değer Açıklama
0 1 Kullanıcının yalnızca Enter tuşuna basarak yanıt vermesini engeller.
1 2 Kullanıcının 0(sıfır) girerek yanıt vermesini engeller.
2 4 Kullanıcının negatif bir değer girerek yanıt vermesini engeller.
3 8 Kullanıcının geçerli çizim sınırlarının dışında bir nokta girmesine izin verir
4 16 (Şu anda kullanılmıyor)
5 32 Geçici çizgi veya geçici dikdörtgen çizerken kesik çizgiler kullanır.
6 64 getdist fonksiyonuna Z koordinatı girilmesini engeller; bir uygulamanın bu fonksiyonun 2B mesafe döndürdüğünden emin olmasını sağlar
7 128 Diğer kontrol bitlerini ve listelenen anahtar sözcükleri dikkate alarak keyfi girdiye anahtar sözcükmüş gibi izin verir. Bu bit, bit 0'a göre önceliklidir; bit 7 ve 0 ayarlıysa ve kullanıcı Enter tuşuna basarsa, boş bir dize döndürülür.
8 256 Doğrudan mesafe girişine rastgele girişe göre öncelik verir. Harici uygulamalar için, rastgele girdiye varsayılan olarak doğrudan mesafe girdisine göre öncelik verilir. AutoCAD'i kullanıcı girdisini doğrudan mesafe girdisi olarak değerlendirmeye zorlamak istiyorsanız bu biti ayarlayın. Klavyeden yasal nokta girişinin her zaman doğrudan mesafe veya rastgele girişten öncelikli olduğunu unutmayın.
9 512 Bir getpoint veya getcorner çağrısından önce ayarlanırsa, imleç bir katının düzlemsel bir yüzeyinin kenarından geçtiğinde geçici bir UCS oluşturulur. İmleç bir yüzeyin dışına çıktığında geçici UCS sıfırlanır. İmleç farklı bir yüzeyin üzerinden geçtiğinde dinamik olarak yeniden oluşturulur. Nokta alındıktan sonra, dinamik UCS geçerli UCS'ye sıfırlanır. Bu işlevsellik, silindir kenarı gibi düzlemsel olmayan yüzeyler için etkin değildir.
10 1024 getdist, getangle, getorient, getpoint veya getcorner fonksiyonlarını çağırırken, mesafe, açı, yön, nokta veya köşenin Z yönünde orto, polar veya otracking tarafından etkilenmesini istemeyebilirsiniz. Bu fonksiyonlardan herhangi biri çağrılmadan önce bu bitin ayarlanması, Z yönünde orto, polar ve otracking'i geçici olarak devre dışı bırakacaktır. Bu, çoklu çizgi, yay veya daire gibi 2B varlıklar oluşturduğunuzda veya yalnızca 2B dizi oluşturan AutoCAD ARRAY komutunu kullandığınızda kullanışlıdır. Yalnızca 2B komutlarda, 3B noktaların orto Z, polar Z veya otrack Z kullanılarak girilmesine izin vermek kafa karıştırıcı ve hataya açık olabilir.

anahtar-kelimeler (isteğe bağlı): Kullanıcının seçebileceği anahtar kelimeleri içeren bir metin dizisidir. Anahtar kelimeler boşlukla ayrılır.

Anahtar kelimeleri kabul eden işlevler getint, getreal, getdist, getangle, getorient, getpoint, getcorner, getkword, entsel, nentsel ve nentselp'dir.

getstring işlevi, anahtar kelimeleri dikkate almayan tek kullanıcı girişi fonksiyonudur.

Kullanıcı beklenen girdi türünü girmediğinde (örneğin, getpoint için bir nokta) anahtar kelimeler bir sonraki kullanıcı-girdi işlevi çağrısı tarafından kontrol edilir. Kullanıcı girişi listedeki bir anahtar kelimeyle eşleşirse, işlev bu anahtar sözcüğü dize sonucu olarak döndürür. Uygulama anahtar kelimeleri test edebilir ve her biriyle ilişkili eylemi gerçekleştirebilir.

Kullanıcı girişi beklenen bir tür değilse ve bir anahtar kelimeyle eşleşmiyorsa, AutoCAD kullanıcıdan tekrar denemesini ister. initget bit değerleri ve anahtar kelimeler yalnızca bir sonraki kullanıcı girişi işlev çağrısı için geçerlidir.

initget bir kontrol biti ayarlarsa ve uygulama, bitin hiçbir anlamı olmayan bir get... işlevini çağırırsa, bit yok sayılır.

Kullanıcı girdisi belirtilen koşullardan bir veya daha fazlasında başarısız olursa (sıfır değerlerine izin verilmediğinde sıfır değerinde olduğu gibi), AutoCAD bir mesaj görüntüler ve kullanıcıdan tekrar denemesini ister.

15 Mart 2025 Cumartesi

AutoLISP: Kullanıcı girişi sağlayan fonksiyonlar - 1

AutoLISP, AutoCAD ortamında özelleştirilmiş komutlar ve araçlar geliştirmek için kullanılan güçlü bir programlama dilidir. Uygulamalarınızı daha etkileşimli hale getirmek için, çalışma sırasında kullanıcıdan gerekli bilgileri almanız gerekebilir. İster bir nokta seçimi, ister bir metin girişi veya bir sayısal değer olsun, kullanıcıdan bu verileri almak için AutoLISP'te dahili fonksiyonlar bulunur.

Bu fonksiyonlar sayesinde, kullanıcılar klavye aracılığıyla metin veya sayısal değerler girebilir ya da fare ile ekranda nokta seçimi, uzunluk girdisi, açı girdisi, nesne seçimi ve komut alt menü elemanı seçimi yapabilir.

Örneğin, bir çizgi çizmek için başlangıç ve bitiş noktalarını kullanıcıdan almak veya bir metin etiketi oluşturmak için kullanıcıya metin girişi yaptırmak mümkündür. Bu tür etkileşimler, uygulamanızın daha esnek ve kullanıcı dostu olmasını sağlar.

Girdi Fonksiyonları

1) getint Fonksiyonu: Kullanıcıdan Tamsayı Değeri Alma

getint fonksiyonu, kullanıcıdan bir tamsayı (integer) değeri almak için kullanılır. Kullanıcı bir değer girdikten sonra Enter veya Boşluk tuşuna basarak girişini onaylar. Giriş sağlanana kadar uygulama duraksar.

Bu fonksiyon, özellikle sayısal bir değer girilmesi gereken durumlarda tercih edilir. Örneğin, bir nesnenin kaç kopyasının oluşturulacağı veya belirli bir mesafenin kaç birim olacağı gibi işlemlerde kullanılır.

Bu fonksiyona aktarılabilecek değerler -32,768 ile +32,767 arasında bir tam sayıdır. (16 bit. Bir bit, sayı işareti için kullanıldığı için 15 bitlik sayı. 2^15 = 32768)
Kullanıcı tamsayı dışında bir değer(örneğin ondalıklı sayı veya metin) girerse, fonksiyon “Requires an integer value" (Bir tamsayı değeri gerektiriyor) mesajını görüntüler ve kullanıcının tekrar giriş yapmasına izin verir.

Veri girmeden Entere basılırsa fonksiyon nil sonucunu verir.

Kullanımı:

(getint [mesaj])
mesaj : Kullanıcıya gösterilecek mesajdır. Kullanılması zorunlu değildir. Eğer belirtilmezse, fonksiyon herhangi bir mesaj göstermeden sayı girişi bekler.

Örnekler:
(setq sayi1 (getint))
Mesaj vermeden kullanıcıdan tam sayı girdisi bekler. Girilen tam sayı sayi1 değişkenine aktarılır.
(setq kopyasayisi (getint "\nKopya sayısı:"))
(princ (strcat "\nGirilen sayı: " (itoa kopyasayisi)))
\n satır başı kodudur. mesaj yeni satırda yazılır.
itoa tam sayıyı metne dönüştürür.
strcat metinleri birleştirir.
princ metni komut satırında yazdırır.
(setq sayi (getint "\nLütfen bir tamsayı girin: "))
(if sayi ; sına: sayi nil değilse?
	;doğru ise
	(princ (strcat "\nGirdiğiniz sayı: " (itoa sayi)))
	;yanlış ise ise
	(princ "\nGeçersiz giriş! Lütfen bir tamsayı girin.")
)

2) getreal Fonksiyonu: Kullanıcıdan Ondalıklı Sayı Alma

Bu fonksiyon kullanıcıdan bir reel sayı (floating-point number) değeri almak için kullanılır. Özellikle kullanıcının ondalıklı bir değer girmesi gereken durumlarda (örneğin, bir uzunluk, yarıçap veya ölçek faktörü belirtirken) oldukça kullanışlıdır. getint fonksiyonundan farklı olarak küsuratlı (ondalıklı, reel) sayılar da girilebilir. Tam sayı girilirse sayı reel sayıya dönüştürülür. 5 sayısı 5.0 reel sayısına dönüşür.

9 Mart 2025 Pazar

AutoLISP: Aritmetik ve Matematik Fonksiyonlar

AutoLISP, AutoCAD kullanıcıları için tasarlan güçlü bir programlama dilidir ve AutoCAD'in özelleştirme ve otomasyon yeteneklerini önemli ölçüde genişletir.

LISP dilinin AutoCAD'e uyarlanmış bir türevi olan AutoLISP, özellikle CAD (Bilgisayar Destekli Tasarım) ortamında çizim süreçlerini otomatikleştirmek, özelleştirilmiş işlemler gerçekleştirmek ve iş akışını hızlandırmak için tercih edilir.

AutoLISP, temel aritmetik işlemlerden karmaşık matematiksel hesaplamalara kadar geniş bir yelpazede işlev sunan dahili fonksiyonlara sahiptir. Bu fonksiyonlar, kullanıcıların çizim otomasyonu sırasında matematiksel hesaplamaları kolayca gerçekleştirmesine olanak tanır.

Ayrıca, AutoLISP'in esnek yapısı sayesinde, dilin dahili fonksiyonlarının yetersiz kaldığı durumlarda özel matematiksel işlemler için harici fonksiyonlar da geliştirilebilir.

Fonksiyonlara geçmeden önce AutoLISP dilinde kullanılan sayı türlerini görelim.

  • Tamsayı (Integer)
Tam sayılar, ondalık değer içermeyen tam sayılardır.
AutoLISP'teki tam sayılar, -2,147,483,648 ile +2,147,483,647 arasında değer alan 32-bit işaretli sayılardır. Bazı fonksiyonlar ise yalnızca -32678 ile +32767 arasındaki 16-bit sayıları kabul eder.

Eğer izin verilen maksimum tam sayı sınırını aşan bir değer girerseniz, AutoLISP bu değeri bilimsel gösterimde bir reel sayı (float) olarak saklar. Bilimsel gösterimdeki sınırı aşan bir sayı olursa inf.0 (sonsuzluk) sonucu oluşur.

Örnek:
(setq sayi 2147483648)
	; Sonuç 2.14748e+009
	; Sayı integer sınırını aştığı için reel sayı. Bilimsel gösterim
(setq sayi (expt 2147483648 -100))
	; Sonuç: 0.0 reel sayı
	; Sıfıra yakın en küçük negatif sayı sınırını aştığı için 0.0
(setq sayi (fix 1.0e+308))
	; Sonuç: 1.0e+308
	; Sayı integer sayı sınırını aştığı için reel sayı olarak saklanır
  • Reel (Ondalıklı) Sayı (Float)
Ondalıklı sayılar, tam sayılardan farklı olarak ondalık nokta içeren sayılardır. AutoLISP'te bu sayılar reel sayı (float) olarak adlandırılır. Örneğin, 3.14 -0.5 2.0 geçerli reel sayılardır.

AutoLISP'te reel sayılar, 64-bit kayan noktalı (floating-point) sayılar olarak saklanır.
Bu nedenle, belirli bir hassasiyetle işlem yapabilir ancak çok büyük veya çok küçük değerlerde hata payı oluşabilir.

fix fonksiyonu, bir reel sayının küsuratını atarak tam sayıya dönüştürür (yuvarlama yapmaz).

AutoLISP'te çok büyük bir sayı hesaplanmaya çalışıldığında, sayı sınırları aşılırsa inf.0 (sonsuzluk) değeri döndürülür:

AutoLISP'te sayılar dinamik olarak yönetilir, yani bir değişken hem tamsayı hem de reel sayı olabilir. Örneğin:

(setq sayi 5) ; Tamsayı(Integer)
(setq sayi 3.14); Reel sayı(Float)
(setq sayi 12.0); Reel sayı
(setq sayi 15.); Reel sayı. Küsurat 0 ise noktadan sonra 0 yazılmayabilir.
(setq sayi 1.0e-323) ; Sonuç: 9.88131e-324
(setq sayi 1.0e-324) ; Sonuç: 0.0 Sınırı aştığı için 0
(setq sayi 1.0e+308) ; Sonuç: 1.0e+308
(setq sayi 1.0e+309) ; Sonuç: inf.0 Sayı sınırı aştığı için sonsuz

Bu dinamik yapı, programcıya esneklik sağlarken, büyük veri setlerinde performans sorunlarına neden olabilir.

1) Temel Aritmetik Fonksiyonlar

a) Toplama. + fonksiyonu

Toplama işlemi için + fonksiyonu kullanılır. Bu fonksiyon, birden fazla sayıyı toplamak için kullanılabilir.
(+ 1 2 3) ; Sonuç:6
(+ 20 -7) ; Sonuç:13
(+ 5 10.52 20.3 0.12) ;Sonuç: 35.94
(+ 1 2.0 3 4) ; Sonuç:10.0
(setq toplam (+ 12 34)) ;toplam = 46

11 Eylül 2020 Cuma

QuickBasic - 7: Alt program ve Fonksiyon

Yayınlama: 2000
Güncelleme: 11 Eylül 2020
Programlarımızdaki kodlar arttıkça veya programın işlevleri arttıkça bazı tekrar eden kod grupları olabilir.

Ya da içinde birkaç değer değiştirerek aynı işlemleri yapmak gerekir. Bunun için alt programlar(alt rutin, subroutine) kullanılır.

Ayrıca fonksiyonlar ve alt programlar kullanmak, program kodlarınızın düzenlenebilirliğini ve okunurluğunu kolaylaştıracaktır.

GOTO

GOTO komutunu daha önce döngü oluştururken de görmüştük. GOTO ile alt program oluşturmak hiç kullanışlı değildir.

Aslında GOTO ve GOSUB komutlarına çok az ihtiyaç duyacaksınız.
Sadece önceki basic dillerine uyumlu olsun diye konulmuş.
GOTO ile program akışı belirtilen satıra atlar ve çalışmaya oradan devam eder.

Örnek:
PRINT "MERHABA DÜNYA"
GOTO 10
PRINT "BU SATIRI GÖREBİLECEK MİSİNİZ?"
10 PRINT "PROGRAM SONA ERDİ"
END

GOSUB ... RETURN

Kullanımı:
GOSUB satır_no | satır_etiketi
GOSUB ve ardından bir satır etiketi ya da satır numarası yazılmalı.

6 Ekim 2012 Cumartesi

Excel: İki tarih arasındaki fark

Excelde iki tarih arasındaki gün sayısını bulmak oldukça basittir. Excelde tarihler seri numaralı olarak saklanır. Her tarihin bir seri numarası vardır. Bu seri 1/1/1900 tarihi için 1'dir. Sonraki her gün için bir artar.
Örneğin 6/10/2012 için seri numarası 41188'dir. Bu rakam 1/1/1900'den sonraki o tarihe kadar olan gün sayısını verir. Durum böyle olunca tarih olan iki hücre farkını alan bir formül girdiğimizde Excel iki tarih arasındaki gün farkını sonuç olarak verecektir.

Üstteki resimde görüldüğü gibi sonuç çıkmıyorsa hücre biçiminden kaynaklanabilir.

Hücre seçiliyken CTRL+1 / Hücre biçimlendir / Sayı / Genel tıklayın ya da araç çubuğunda Sayı tabında Genel seçin.


İki tarih arasındaki farkı ay ya da yıl olarak bulmak istersek bir hesaplama gerekebilir ama daha basit olarak sonuca ulaşmak için ETARİHLİ işlevini kullanabiliriz. Bu işlev, işlev ekle listesinde görünmeyecektir. O yüzden bir bakıma gizli bir işlev(formül)dir.

Kullanımı =ETARİHLİ(başlangıç_tarihi, bitiş_tarihi, birim)
BİRİM DÖNDÜRDÜĞÜ BİLGİ
Y Dönemdeki tamamlanmış yılların sayısı.
M Dönemdeki tamamlanmış ayların sayısı.
D Dönemdeki günlerin sayısı.
MD Başlangıç_tarihi ile bitiş_tarihi arasındaki gün farkı. Tarihlerdeki ay ve yıllar yok sayılır
YM Başlangıç_tarihi ile bitiş_tarihi arasındaki ay farkı. Tarihlerdeki gün ve yıllar yok sayılır.
YD Başlangıç_tarihi ile bitiş_tarihi günleri arasındaki fark. Tarihlerdeki yıllar yok sayılır

ETARİHLİ işlevi örnekleri:

İki tarih arasındaki çalışma günlerini(Pazartesi ... Cuma) bulmak için TAMİŞGÜNÜ işlevi kullanılır.
=TAMİŞGÜNÜ(C1;C2)

10 Nisan 2011 Pazar

Excelde YAZIYLATL fonksiyonu

Verilen sayıyı yazıyla yazdırır. 123 için Yüzyirmiüç gibi.
Sonuna TL ve Kr ekler. Parasal değerler için uygundur.
Açıklamalar ve örnekler ve fonksiyon VBA kodları dosya içinde mevcuttur.

İndir: YAZIYLATL.XLS (126 Kb)

6 Haziran 2009 Cumartesi

Excelde 100'lük notu(puanı) 5'lik not sistemine dönüştürme

Excelde öğrenci notlarını ORTALAMA işlevini kullanarak ortalamasını alabiliyoruz. 100'lük notu(puanı) 5'lik nota çevirme işlemi ise biraz uğraştırıcı. Nasıl yapılacağını aşağıdaki adımları takip ederek öğrenebilirsiniz.
  • Önce Excel'i açın
  • 100'lük notları(puanları) bir sütuna alt alta yazın
  • 5'lik not sistemine çeviri için iki yol var
  • Birincisi: İç içe eğer işlevi kullanmak. Önce onu öğrenelim
  • Üstteki resimde görüldüğü gibi iç içe eğer işlevlerini kullandık. Notlar C9 hücresinde ise kullanılacak formül aşağıda
=EĞER(C9<25;0;
  EĞER(C9<45;1;(
   EĞER(C9<55;2;
    EĞER(C9<70;3;
     EĞER(C9<85;4;
      EĞER(C9<=100;5;-1)))))))
  • Burada 0'dan küçük sayılar da 0 olarak gösteriliyor. 100den büyükler ise hatalı sayı girdiğini göstermek için -1
  • 0'dan küçükleri de -1 göstermek için bir iki işlev daha eklemek gerekir. Ama asıl amacımız iç içe eğer kullanmak yerine daha kullanışlı olan 2 yolu kullanmak
  • 2. yol: VBA makrolarını kullanmak
  • VBA da bir fonksiyon tasarlayacağız. VBA editörüne geçiş yapmak için klavyeden ALT+F11 tuşlayın