KİŞİSEL BLOG
Luhn Algoritması
Luhn Algoritması 16 haneli kredi kartı numaralarının kontrolü için Hans Luhn tarafından geliştirilmiş bir algoritmadır.Algoritmanın adımları şu şekildedir:1. Sağdan sola çift pozisyondaki haneleri 2 ile çarp.2. Çarpım sonucu değeri 10'u aşmayan sayıların kendisini 10'u aşan sayıların ise birler ve onlar basamağının toplamını yaz.3. Yazdığın sayıları kendi aralarında topla.4. Bu toplama tek pozisyondaki hanelerin toplamını ekle.5. Sonuç 10'a tam bölünüyorsa kart geçerli bölünmmüyorsa geçersizdir.Şimdi bu algoritmayı c dilinde uygulayalım.Öncelikle kullanıcıdan kart numarasını alalım.long long credit_number;printf("Enter the credit card number: ");scanf("%lld", &credit_number);Şimdi numarayı sağdan sola bir diziye aktaralım.int nums[16] = {0}, count = 0;while (credit_number > 0){nums[count] = credit_number % 10;credit_number /= 10;count++;}Şimdi sadece çift pozisyondaki değerleri okuyup 2 ile çarpalım.for (int i = 0; i < count; i++){if(i % 2 == 1){nums[i] *= 2;if (nums[i] > 9){nums[i] = nums[i] % 10 + nums[i] / 10;}}}En son genel toplamı kontrol edelim.int sum = 0;for (int i = 0; i < count; i++){sum += nums[i];}if (sum % 10 == 0){printf("VALID\n");}else{printf("INVALID\n");}Kodumuzun tamamı:
21/9/2025
CliCam
Yazılımcıların kullandığı araçların hemen hemen hepsinin hem komut satırı hem de grafik arayüzü bulunur. Peki neden kameralarımızın bir komut satırı arayüzü olmasın?Bu fikir aklıma ilk geldiğinde her ne kadar verimsiz bir uygulama olacaksa da merakımı cezbetmeyi başardı. Ve bu iş için biçilmiş kaftan olduğunu düşündüğüm opencv ile çalışmaya başladım.Öncelikle yapmamız gereken kütüphaneleri ve namespace'leri projemize dahil etmek:#include <opencv2/opencv.hpp>#include <iostream>#include <windows.h>Daha sonrasında main fonksiyonumuza geçiyoruz. İlk yapmamız gereken şey konsol içinde imleç kontrolü için Windows API ile haberleşmek:CONSOLE_CURSOR_INFO cursorInfo;GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo);cursorInfo.bVisible = false;SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo);Daha sonrasında opencv içinden kameramıza erişiyoruz:VideoCapture cap(0);if (!cap.isOpened()){cerr << "Kamera acilamadi!" << endl;getchar();}Kamera görüntüsünün işlenmesini kolaylaştırmak adına gri tonlara çekiyoruz ve alanı konsol ekranına sığacak şekilde boyutlandırıyoruz:cvtColor(frame, gray, COLOR_BGR2GRAY);resize(gray, gray, Size(80, 40), 0, 0, INTER_LINEAR);Artık görüntü işlemesine ve parlaklığa göre konsol ekranına ascii art basmaya geçebiliriz:for (int y = 0; y < frame.rows; y++){for (int x = 0; x < frame.cols; x++){int pixel = frame.at<uchar>(y, x);char asciiChar = ASCII_CHARS[pixel * ASCII_CHARS.length() / 256];cout << asciiChar;}cout << endl;}Son olarak kodumuzun genel yapısı şu şekilde: