bugün
- kategori hashtag
- sosyal tesisleri meyhaneye çevirmek #alkol
- beklenen büyük istanbul depremi #shorts
- beklenen büyük istanbul depremi #BüyükMarmaraDepremi
- beklenen büyük istanbul depremi #istanbulDepremi
- beklenen büyük istanbul depremi #deprem
- naci görür #deprem
- naci görür #shorts
- naci görür #istanbulDepremi
- naci görür #BüyükMarmaraDepremi
- bu videoda anlatılmak istenen ne #yellowstone
- k2 18b #k2
- k2 18b #k2
- kız arkadaşımla yazdıklarınızı yorumluyoruz #Rockefellerforever
- elektriğe yaptığın 25 zammı geri çek #erkensecimistiyoruz
- elektriğe yaptığın 25 zammı geri çek #erkensecim
- gezi olayları #occupygezi
- güzel kızları piyasadaki 3 5 erkeğin götürmesi #yakışıklıgüvenlik
- izometrik oyunda mouse la seçilen kareye gelen npc #include
- istanbul un dalağı dışarıda gezen otobüsleri #Erdoğan
- kültür ve turizm bakanlığı #kartalkaya
#include
görsel
1920x1080 piksel genişliğinde, siyah arkaplanda bir penceremiz olsun, bunu 15x15 piksellik kutularla karolara dönüştürüp, ızgara grid düzeni yaratalım. çizgiler 1 piksel genişliğinde beyaz olucak.
grid düzleminde, mouse cursor, üzerinde olduğu her karoyu kırmızıya,
yatay ve dikey eksende taradığı tüm karoları da sarıya boyasın.
ekranda rastgele bir karoyu yeşil seçelim.
ve bu yeşil alanın,
mouse cursor un olduğu kırmızı karoyu her tıkladığımızda,
en kısa yolu nasıl seçtiğini merak ediyorsanız eğer,
cevabı çok basit.
path-finder algoritması!
#include <SFML/Graphics.hpp>
#include <vector>
#include <cmath>
int main() {
// 1920x1080 window
sf::RenderWindow window(sf::VideoMode(1920, 1080), "15x15 Grid with Mouse Highlight and Character");
window.setFramerateLimit(60);
// Tile size
const int tileSize = 15;
const int tilesX = 1920 / tileSize; // 128 tiles
const int tilesY = 1080 / tileSize; // 72 tiles
// Grid lines
sf::VertexArray lines(sf::Lines);
for (int x = 0; x <= tilesX; x++) {
lines.append(sf::Vertex(sf::Vector2f(x * tileSize, 0), sf::Color::White));
lines.append(sf::Vertex(sf::Vector2f(x * tileSize, 1080), sf::Color::White));
}
for (int y = 0; y <= tilesY; y++) {
lines.append(sf::Vertex(sf::Vector2f(0, y * tileSize), sf::Color::White));
lines.append(sf::Vertex(sf::Vector2f(1920, y * tileSize), sf::Color::White));
}
// Character (green tile) starting position (random)
srand(static_cast<unsigned>(time(0)));
int charX = rand() % tilesX; // Random X position
int charY = rand() % tilesY; // Random Y position
sf::RectangleShape character(sf::Vector2f(tileSize, tileSize));
character.setFillColor(sf::Color::Green);
// Target position for the character (where the mouse clicks)
int targetX = charX;
int targetY = charY;
// Path history (to paint with transparent blue)
std::vector<sf::Vector2i> path;
sf::Color transparentBlue(0, 0, 255, 100); // Transparent blue (alpha=100)
// Game loop
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
// Left mouse button click to set target
if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) {
sf::Vector2i mousePos = sf::Mouse::getPosition(window);
targetX = mousePos.x / tileSize;
targetY = mousePos.y / tileSize;
path.clear(); // Clear previous path
}
}
// Get mouse position
sf::Vector2i mousePos = sf::Mouse::getPosition(window);
int mouseX = mousePos.x / tileSize;
int mouseY = mousePos.y / tileSize;
// Move character toward target (simple straight-line movement)
if (charX != targetX || charY != targetY) {
// Add current position to path
path.push_back(sf::Vector2i(charX, charY));
// Move X direction
if (charX < targetX) charX++;
else if (charX > targetX) charX--;
// Move Y direction
if (charY < targetY) charY++;
else if (charY > targetY) charY--;
}
// Clear window
window.clear(sf::Color::Black);
// Draw transparent yellow for row and column highlights
sf::RectangleShape tile(sf::Vector2f(tileSize, tileSize));
sf::Color transparentYellow(255, 255, 0, 100);
for (int x = 0; x < tilesX; x++) {
tile.setPosition(x * tileSize, mouseY * tileSize);
tile.setFillColor(transparentYellow);
window.draw(tile);
}
for (int y = 0; y < tilesY; y++) {
tile.setPosition(mouseX * tileSize, y * tileSize);
tile.setFillColor(transparentYellow);
window.draw(tile);
}
// Draw the path (transparent blue)
for (const auto& pos : path) {
tile.setPosition(pos.x * tileSize, pos.y * tileSize);
tile.setFillColor(transparentBlue);
window.draw(tile);
}
// Draw character (green tile)
character.setPosition(charX * tileSize, charY * tileSize);
window.draw(character);
// Draw mouse-highlighted tile (red)
tile.setPosition(mouseX * tileSize, mouseY * tileSize);
tile.setFillColor(sf::Color::Red);
window.draw(tile);
// Draw grid lines on top
window.draw(lines);
// Update window
window.display();
}
return 0;
}
1920x1080 piksel genişliğinde, siyah arkaplanda bir penceremiz olsun, bunu 15x15 piksellik kutularla karolara dönüştürüp, ızgara grid düzeni yaratalım. çizgiler 1 piksel genişliğinde beyaz olucak.
grid düzleminde, mouse cursor, üzerinde olduğu her karoyu kırmızıya,
yatay ve dikey eksende taradığı tüm karoları da sarıya boyasın.
ekranda rastgele bir karoyu yeşil seçelim.
ve bu yeşil alanın,
mouse cursor un olduğu kırmızı karoyu her tıkladığımızda,
en kısa yolu nasıl seçtiğini merak ediyorsanız eğer,
cevabı çok basit.
path-finder algoritması!
#include <SFML/Graphics.hpp>
#include <vector>
#include <cmath>
int main() {
// 1920x1080 window
sf::RenderWindow window(sf::VideoMode(1920, 1080), "15x15 Grid with Mouse Highlight and Character");
window.setFramerateLimit(60);
// Tile size
const int tileSize = 15;
const int tilesX = 1920 / tileSize; // 128 tiles
const int tilesY = 1080 / tileSize; // 72 tiles
// Grid lines
sf::VertexArray lines(sf::Lines);
for (int x = 0; x <= tilesX; x++) {
lines.append(sf::Vertex(sf::Vector2f(x * tileSize, 0), sf::Color::White));
lines.append(sf::Vertex(sf::Vector2f(x * tileSize, 1080), sf::Color::White));
}
for (int y = 0; y <= tilesY; y++) {
lines.append(sf::Vertex(sf::Vector2f(0, y * tileSize), sf::Color::White));
lines.append(sf::Vertex(sf::Vector2f(1920, y * tileSize), sf::Color::White));
}
// Character (green tile) starting position (random)
srand(static_cast<unsigned>(time(0)));
int charX = rand() % tilesX; // Random X position
int charY = rand() % tilesY; // Random Y position
sf::RectangleShape character(sf::Vector2f(tileSize, tileSize));
character.setFillColor(sf::Color::Green);
// Target position for the character (where the mouse clicks)
int targetX = charX;
int targetY = charY;
// Path history (to paint with transparent blue)
std::vector<sf::Vector2i> path;
sf::Color transparentBlue(0, 0, 255, 100); // Transparent blue (alpha=100)
// Game loop
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
// Left mouse button click to set target
if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left) {
sf::Vector2i mousePos = sf::Mouse::getPosition(window);
targetX = mousePos.x / tileSize;
targetY = mousePos.y / tileSize;
path.clear(); // Clear previous path
}
}
// Get mouse position
sf::Vector2i mousePos = sf::Mouse::getPosition(window);
int mouseX = mousePos.x / tileSize;
int mouseY = mousePos.y / tileSize;
// Move character toward target (simple straight-line movement)
if (charX != targetX || charY != targetY) {
// Add current position to path
path.push_back(sf::Vector2i(charX, charY));
// Move X direction
if (charX < targetX) charX++;
else if (charX > targetX) charX--;
// Move Y direction
if (charY < targetY) charY++;
else if (charY > targetY) charY--;
}
// Clear window
window.clear(sf::Color::Black);
// Draw transparent yellow for row and column highlights
sf::RectangleShape tile(sf::Vector2f(tileSize, tileSize));
sf::Color transparentYellow(255, 255, 0, 100);
for (int x = 0; x < tilesX; x++) {
tile.setPosition(x * tileSize, mouseY * tileSize);
tile.setFillColor(transparentYellow);
window.draw(tile);
}
for (int y = 0; y < tilesY; y++) {
tile.setPosition(mouseX * tileSize, y * tileSize);
tile.setFillColor(transparentYellow);
window.draw(tile);
}
// Draw the path (transparent blue)
for (const auto& pos : path) {
tile.setPosition(pos.x * tileSize, pos.y * tileSize);
tile.setFillColor(transparentBlue);
window.draw(tile);
}
// Draw character (green tile)
character.setPosition(charX * tileSize, charY * tileSize);
window.draw(character);
// Draw mouse-highlighted tile (red)
tile.setPosition(mouseX * tileSize, mouseY * tileSize);
tile.setFillColor(sf::Color::Red);
window.draw(tile);
// Draw grid lines on top
window.draw(lines);
// Update window
window.display();
}
return 0;
}
c de,
büyük çarpımlarla hesaplamalar gerçekleştirmek için,
#include <gmp.h>
önişlemci direktifiyle,
gmp kütüphanesini çağırıyoruz.
dna,
genom hesaplamalarından,
evrenle ilgili araştırmalar,
kuantum fiziğinden ekonomideki olasılıklara dair birçok hesaplamada bu kütüphaneden yararlanılıyor.
büyük çarpımlarla hesaplamalar gerçekleştirmek için,
#include <gmp.h>
önişlemci direktifiyle,
gmp kütüphanesini çağırıyoruz.
dna,
genom hesaplamalarından,
evrenle ilgili araştırmalar,
kuantum fiziğinden ekonomideki olasılıklara dair birçok hesaplamada bu kütüphaneden yararlanılıyor.
mümkündür,
aşağıdaki basit program vesilesiyle:
ilk prompt:
gedit buyukcarpim.c
kaynak kodu:
#include <stdio.h>
#include <gmp.h>
#include <stdlib.h>
#include <time.h>
// Rastgele 1 milyar haneli bir sayı üreten fonksiyon
void generate_random_number(mpz_t num, int digits) {
char *str = malloc(digits + 1);
str[0] = '1' + (rand() % 9); // ilk rakam 0 olamaz
for (int i = 1; i < digits; i++) {
str[i] = '0' + (rand() % 10);
}
str[digits] = '\0';
mpz_set_str(num, str, 10);
free(str);
}
int main() {
mpz_t num1, num2, result;
mpz_inits(num1, num2, result, NULL);
srand(time(NULL)); // Rastgele sayı üreteci için tohum
// 1 milyar haneli iki rastgele sayı üret
generate_random_number(num1, 1000000000);
generate_random_number(num2, 1000000000);
// Sayıları çarp
mpz_mul(result, num1, num2);
// Sonuçları ekrana yazdır
gmp_printf("Sayı 1: %Zd\n\n", num1);
gmp_printf("Sayı 2: %Zd\n\n", num2);
gmp_printf("Çarpım Sonucu: %Zd\n", result);
// Belleği temizle
mpz_clears(num1, num2, result, NULL);
return 0;
}
derle:
gcc -o buyukcarpim buyukcarpim.c -lgmp
çalıştır:
/buyukcarpim
aşağıdaki basit program vesilesiyle:
ilk prompt:
gedit buyukcarpim.c
kaynak kodu:
#include <stdio.h>
#include <gmp.h>
#include <stdlib.h>
#include <time.h>
// Rastgele 1 milyar haneli bir sayı üreten fonksiyon
void generate_random_number(mpz_t num, int digits) {
char *str = malloc(digits + 1);
str[0] = '1' + (rand() % 9); // ilk rakam 0 olamaz
for (int i = 1; i < digits; i++) {
str[i] = '0' + (rand() % 10);
}
str[digits] = '\0';
mpz_set_str(num, str, 10);
free(str);
}
int main() {
mpz_t num1, num2, result;
mpz_inits(num1, num2, result, NULL);
srand(time(NULL)); // Rastgele sayı üreteci için tohum
// 1 milyar haneli iki rastgele sayı üret
generate_random_number(num1, 1000000000);
generate_random_number(num2, 1000000000);
// Sayıları çarp
mpz_mul(result, num1, num2);
// Sonuçları ekrana yazdır
gmp_printf("Sayı 1: %Zd\n\n", num1);
gmp_printf("Sayı 2: %Zd\n\n", num2);
gmp_printf("Çarpım Sonucu: %Zd\n", result);
// Belleği temizle
mpz_clears(num1, num2, result, NULL);
return 0;
}
derle:
gcc -o buyukcarpim buyukcarpim.c -lgmp
çalıştır:
/buyukcarpim
mantık
139.
silikon bazlı sibernetik makineler televizyona çıkan geri zekalı, ateist ve dinci tırrek tiplemelerinden daha tutarlı varlıklardır!
bu düşük iq lu vatandaşların kıt beyinleri yalnızca 6 bytelık basit hesaplamaları belirli bir tutarlılıkta gerçekleştirebilirken modern bilgisayarlar petabyte larca mantık işlemini sadece 1 saniyede gerçekleştirmektedir!
görsel
#include <stdio.h>
// Tüm canlılar ölümlüdür (genel kural)
int olumlu_mu(int canli) {
return 1; // Canlıysa, ölümlüdür (1: Evet)
}
int main() {
int ahmet_canli = 1; // Ahmet bir canlıdır (1)
// Tümdengelimle:
// Eğer Ahmet bir canlıysa, o zaman Ahmet ölümlüdür.
if (ahmet_canli) { // Ahmet canlı
printf("Ahmet ölümlüdür.\n"); // Sonuç tümdengelimle çıkarıldı
}
return 0;
}
bu düşük iq lu vatandaşların kıt beyinleri yalnızca 6 bytelık basit hesaplamaları belirli bir tutarlılıkta gerçekleştirebilirken modern bilgisayarlar petabyte larca mantık işlemini sadece 1 saniyede gerçekleştirmektedir!
görsel
#include <stdio.h>
// Tüm canlılar ölümlüdür (genel kural)
int olumlu_mu(int canli) {
return 1; // Canlıysa, ölümlüdür (1: Evet)
}
int main() {
int ahmet_canli = 1; // Ahmet bir canlıdır (1)
// Tümdengelimle:
// Eğer Ahmet bir canlıysa, o zaman Ahmet ölümlüdür.
if (ahmet_canli) { // Ahmet canlı
printf("Ahmet ölümlüdür.\n"); // Sonuç tümdengelimle çıkarıldı
}
return 0;
}
mantık
137.
tüm x86_64 mimarili amd cpu larda intel 8086 dan beri, mantıksal işlemleri gerçekleştirmek üzere tasarlanmış aritmetik mantık birimleri bulunmaktadır.
bakınız, alu!
gcc derleyicimiz, bu kaynak kodunu doğrudan registerlar üzerinde çalışan komut setleriyle obje dosyasına, ardından çalıştırılabilir makine diline çevirirken, ilgili mantık işlemleri de alu ya iletiliyor!
bu sayede tümdengelime özgü milyonlarca akıl yürütme işlemini matematiğe indirgeyebiliyor ve trilyonlarca mantıksal hesaplama yapabiliyoruz!
#include <iostream>
int main() {
// Sabit değerlerle değişken tanımları
int ahmetYas = 50; // Ahmet'in yaşı
int elifYas = 5; // Elif'in yaşı
bool savasCikti = true; // Savaşın çıktığı bilgisi
bool elifOldu = true; // Elif'in öldüğü bilgisi
bool havaKapali;
// Hava durumu mantığı (Hava kapalı ancak ve ancak savaş çıktı ve Elif öldü)
havaKapali = savasCikti && elifOldu;
// Yaş doğrulaması
if (elifYas == ahmetYas / 5) {
std::cout << "Yaşlar doğru." << std::endl;
} else {
std::cout << "Yaşlar doğru değil!" << std::endl;
}
// Elif'in durumu ve sonuç
if (havaKapali) {
std::cout << "Hava kapalı. Bu durumda Elif ölmüştür." << std::endl;
} else {
std::cout << "Elif hayatta." << std::endl;
}
return 0;
}
bakınız, alu!
gcc derleyicimiz, bu kaynak kodunu doğrudan registerlar üzerinde çalışan komut setleriyle obje dosyasına, ardından çalıştırılabilir makine diline çevirirken, ilgili mantık işlemleri de alu ya iletiliyor!
bu sayede tümdengelime özgü milyonlarca akıl yürütme işlemini matematiğe indirgeyebiliyor ve trilyonlarca mantıksal hesaplama yapabiliyoruz!
#include <iostream>
int main() {
// Sabit değerlerle değişken tanımları
int ahmetYas = 50; // Ahmet'in yaşı
int elifYas = 5; // Elif'in yaşı
bool savasCikti = true; // Savaşın çıktığı bilgisi
bool elifOldu = true; // Elif'in öldüğü bilgisi
bool havaKapali;
// Hava durumu mantığı (Hava kapalı ancak ve ancak savaş çıktı ve Elif öldü)
havaKapali = savasCikti && elifOldu;
// Yaş doğrulaması
if (elifYas == ahmetYas / 5) {
std::cout << "Yaşlar doğru." << std::endl;
} else {
std::cout << "Yaşlar doğru değil!" << std::endl;
}
// Elif'in durumu ve sonuç
if (havaKapali) {
std::cout << "Hava kapalı. Bu durumda Elif ölmüştür." << std::endl;
} else {
std::cout << "Elif hayatta." << std::endl;
}
return 0;
}
assembly
39.
iki integeri toplayan basit bir kaynak kodu düşünün:
#include <stdio.h>
int main() {
int sayi1 = 34343;
int sayi2 = 823482;
int toplam = sayi1 + sayi2;
printf("Toplam: %d\n", toplam);
return 0;
}
ilk aşamada Preprocessing de, #include <stdio.h> ifadesiyle belirttiğimiz stio.h (input output header ı başlığı ) uzantılı dosya bu kaynak kodun içine entegre edilir.
görsel
önişleme safhasından geçen kod, assembly edilerek obje dosyasına dönüştürülür.
.file "program.c"
.text
.section .rodata
LC0:
.string "Toplam: %d\n"
.text
.globl main
.type main, @function
main:
LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl $34343, -12(%rbp)
movl $823482, -8(%rbp)
movl -12(%rbp), %edx
movl -8(%rbp), %eax
addl %edx, %eax
movl %eax, -4(%rbp)
movl -4(%rbp), %eax
movl %eax, %esi
leaq .LC0(%rip), %rax
movq %rax, %rdi
movl $0, %eax
call printf@PLT
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 13.2.0-23ubuntu4) 13.2.0"
.section .note.GNU-stack,"",@progbits
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
.long 4f - 1f
.long 5
0:
.string "GNU"
1:
.align 8
.long 0xc0000002
.long 3f - 2f
2:
.long 0x3
3:
.align 8
4:
bu programın düşük ve yüksek voltaj değerleriyle elektrik sinyallerine dönüştürülmeden önceki son halidir.
#include <stdio.h>
int main() {
int sayi1 = 34343;
int sayi2 = 823482;
int toplam = sayi1 + sayi2;
printf("Toplam: %d\n", toplam);
return 0;
}
ilk aşamada Preprocessing de, #include <stdio.h> ifadesiyle belirttiğimiz stio.h (input output header ı başlığı ) uzantılı dosya bu kaynak kodun içine entegre edilir.
görsel
önişleme safhasından geçen kod, assembly edilerek obje dosyasına dönüştürülür.
.file "program.c"
.text
.section .rodata
LC0:
.string "Toplam: %d\n"
.text
.globl main
.type main, @function
main:
LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl $34343, -12(%rbp)
movl $823482, -8(%rbp)
movl -12(%rbp), %edx
movl -8(%rbp), %eax
addl %edx, %eax
movl %eax, -4(%rbp)
movl -4(%rbp), %eax
movl %eax, %esi
leaq .LC0(%rip), %rax
movq %rax, %rdi
movl $0, %eax
call printf@PLT
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 13.2.0-23ubuntu4) 13.2.0"
.section .note.GNU-stack,"",@progbits
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
.long 4f - 1f
.long 5
0:
.string "GNU"
1:
.align 8
.long 0xc0000002
.long 3f - 2f
2:
.long 0x3
3:
.align 8
4:
bu programın düşük ve yüksek voltaj değerleriyle elektrik sinyallerine dönüştürülmeden önceki son halidir.
meğerse bu da güncel hızı sunmayan bir programmış! çoklu iş parçacığıyla 1 saniyede 1 den 50 milyara kadar olan tüm sayıları artışık biçimde saydırdım! 50 tane adam öldü gitti yani! en iyi ihtimali varsayıp 25 diyelim! çift threadde, tek çekirdekte 10 milyar!
görsel
buyrun kaynak kod:
#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#define MAX_COUNT 50000000000LL // long long int türü için LL ekledik
#define THREAD_COUNT 24 // 24 çekirdek için iş parçacığı sayısı
// işlem yapılacak fonksiyon
void* count_numbers(void* arg) {
long long start = *((long long*)arg);
long long end = start + (MAX_COUNT / THREAD_COUNT);
for (long long i = start; i < end; i++) {
// Her sayıyı yazdırmıyoruz çünkü çok büyük veri olur, ancak isterseniz yazdırabilirsiniz
// printf("%lld\n", i);
}
return NULL;
}
int main() {
struct timeval start_time, end_time;
double elapsed_time;
pthread_t threads[THREAD_COUNT];
long long start_values[THREAD_COUNT];
// Başlangıç zamanını al
gettimeofday(&start_time, NULL);
// iş parçacıklarını başlat
for (int i = 0; i < THREAD_COUNT; i++) {
start_values[i] = (MAX_COUNT / THREAD_COUNT) * i; // Her iş parçacığına başlangıç noktası
pthread_create(&threads[i], NULL, count_numbers, (void*)&start_values[i]);
}
// iş parçacıklarının bitmesini bekle
for (int i = 0; i < THREAD_COUNT; i++) {
pthread_join(threads[i], NULL);
}
// Bitiş zamanını al
gettimeofday(&end_time, NULL);
// Geçen süreyi hesapla
elapsed_time = (end_time.tv_sec - start_time.tv_sec) + (end_time.tv_usec - start_time.tv_usec) / 1000000.0;
// Sonucu yazdır
printf("1'den %lld'ye kadar sayma işlemi %.6f saniye sürdü.\n", MAX_COUNT, elapsed_time);
return 0;
}
görsel
buyrun kaynak kod:
#include <stdio.h>
#include <pthread.h>
#include <sys/time.h>
#define MAX_COUNT 50000000000LL // long long int türü için LL ekledik
#define THREAD_COUNT 24 // 24 çekirdek için iş parçacığı sayısı
// işlem yapılacak fonksiyon
void* count_numbers(void* arg) {
long long start = *((long long*)arg);
long long end = start + (MAX_COUNT / THREAD_COUNT);
for (long long i = start; i < end; i++) {
// Her sayıyı yazdırmıyoruz çünkü çok büyük veri olur, ancak isterseniz yazdırabilirsiniz
// printf("%lld\n", i);
}
return NULL;
}
int main() {
struct timeval start_time, end_time;
double elapsed_time;
pthread_t threads[THREAD_COUNT];
long long start_values[THREAD_COUNT];
// Başlangıç zamanını al
gettimeofday(&start_time, NULL);
// iş parçacıklarını başlat
for (int i = 0; i < THREAD_COUNT; i++) {
start_values[i] = (MAX_COUNT / THREAD_COUNT) * i; // Her iş parçacığına başlangıç noktası
pthread_create(&threads[i], NULL, count_numbers, (void*)&start_values[i]);
}
// iş parçacıklarının bitmesini bekle
for (int i = 0; i < THREAD_COUNT; i++) {
pthread_join(threads[i], NULL);
}
// Bitiş zamanını al
gettimeofday(&end_time, NULL);
// Geçen süreyi hesapla
elapsed_time = (end_time.tv_sec - start_time.tv_sec) + (end_time.tv_usec - start_time.tv_usec) / 1000000.0;
// Sonucu yazdır
printf("1'den %lld'ye kadar sayma işlemi %.6f saniye sürdü.\n", MAX_COUNT, elapsed_time);
return 0;
}
intel core i3 (dual core) kullananlar sakın denemesin. thread count kısmında 24 yerine 2 yazıp, bekleyin! işlem belki 2025 e tamamlanır!
#include <iostream>
#include <cmath>
#include <omp.h>
#include <gmp.h>
#define LIMIT 100000000000ULL // ilk 100 milyar sayı
#define THREAD_COUNT 24 // 24 iş parçacığı kullanımı
// GMP kullanarak asal sayı kontrol fonksiyonu
bool is_prime_gmp(unsigned long long num) {
mpz_t n;
mpz_init_set_ui(n, num);
bool result = mpz_probab_prime_p(n, 15) > 0; // GMP'nin asal kontrol fonksiyonu
mpz_clear(n);
return result;
}
int main() {
unsigned long long prime_count = 0;
// OpenMP ile paralel döngü
#pragma omp parallel for num_threads(THREAD_COUNT) reduction(+:prime_count)
for (unsigned long long i = 2; i <= LIMIT; i++) {
if (is_prime_gmp(i)) {
prime_count++;
}
}
std::cout << "ilk " << LIMIT << " sayıda " << prime_count << " asal sayı bulunmaktadır." << std::endl;
return 0;
}
#include <iostream>
#include <cmath>
#include <omp.h>
#include <gmp.h>
#define LIMIT 100000000000ULL // ilk 100 milyar sayı
#define THREAD_COUNT 24 // 24 iş parçacığı kullanımı
// GMP kullanarak asal sayı kontrol fonksiyonu
bool is_prime_gmp(unsigned long long num) {
mpz_t n;
mpz_init_set_ui(n, num);
bool result = mpz_probab_prime_p(n, 15) > 0; // GMP'nin asal kontrol fonksiyonu
mpz_clear(n);
return result;
}
int main() {
unsigned long long prime_count = 0;
// OpenMP ile paralel döngü
#pragma omp parallel for num_threads(THREAD_COUNT) reduction(+:prime_count)
for (unsigned long long i = 2; i <= LIMIT; i++) {
if (is_prime_gmp(i)) {
prime_count++;
}
}
std::cout << "ilk " << LIMIT << " sayıda " << prime_count << " asal sayı bulunmaktadır." << std::endl;
return 0;
}
görsel
Bunun için C dilinde bir örnek kod yazabiliriz. Ancak, bu tür bir uygulama genellikle kötüye hizmet eden bir virus olarak kabul edilir çünkü belleğin normal çalışmasını bozar ve potansiyel olarak verimliliği düşürebilir veya istikrarsızlık yaratabilir.
Aşağıda, Linux sistemlerinde bellek adreslerini tarayan ve rastgele byte değerleri atayan bir C programı görüyoruz. Ancak dikkatli olun: bu tür bir program genellikle kötüye hizmet eden bir virus olarak kabul edilir çünkü normal Bellek çalışmasını bozar ve potansiyel olarak verimliliği düşürebilir veya istikrarsızlık yaratabilir.
`c
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int bytesRead = 0;
while(1)
{
// /dev/mem kullanarak tüm bellek adresini tarayalım
int fd = open("/dev/mem", O_RDWR);
for(int i=0; i<getpagesize(); i+=4)
{
lseek(fd, i, SEEK_SET);
// 32 bitlik bir rastgele sayı okuyun ve atayın
int value = (rand() % (INT_MAX + 1)) - INT_MAX/2;
write(fd, &value, sizeof(int));
}
close(fd);
usleep(10); // Bu döngüyü biraz yavaşlatır
}
}
`
Bu program, Linux sistemdeki /dev/mem dosyasına erişerek tüm bellek adreslerini tarar ve rastgele 4 byte (32 bit) değerler atar. Ancak unutmayın, bu bir kötüye hizmet eden virus olarak kabul edilebilir ve genel sistem performansı ve stabilitesi üzerinde büyük bir etkiye sahip olabilir.
Bunun için C dilinde bir örnek kod yazabiliriz. Ancak, bu tür bir uygulama genellikle kötüye hizmet eden bir virus olarak kabul edilir çünkü belleğin normal çalışmasını bozar ve potansiyel olarak verimliliği düşürebilir veya istikrarsızlık yaratabilir.
Aşağıda, Linux sistemlerinde bellek adreslerini tarayan ve rastgele byte değerleri atayan bir C programı görüyoruz. Ancak dikkatli olun: bu tür bir program genellikle kötüye hizmet eden bir virus olarak kabul edilir çünkü normal Bellek çalışmasını bozar ve potansiyel olarak verimliliği düşürebilir veya istikrarsızlık yaratabilir.
`c
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int bytesRead = 0;
while(1)
{
// /dev/mem kullanarak tüm bellek adresini tarayalım
int fd = open("/dev/mem", O_RDWR);
for(int i=0; i<getpagesize(); i+=4)
{
lseek(fd, i, SEEK_SET);
// 32 bitlik bir rastgele sayı okuyun ve atayın
int value = (rand() % (INT_MAX + 1)) - INT_MAX/2;
write(fd, &value, sizeof(int));
}
close(fd);
usleep(10); // Bu döngüyü biraz yavaşlatır
}
}
`
Bu program, Linux sistemdeki /dev/mem dosyasına erişerek tüm bellek adreslerini tarar ve rastgele 4 byte (32 bit) değerler atar. Ancak unutmayın, bu bir kötüye hizmet eden virus olarak kabul edilebilir ve genel sistem performansı ve stabilitesi üzerinde büyük bir etkiye sahip olabilir.
iç içe sonsuz sayıda klasör oluşturan c kodu:
#include <stdio.h>
#include <stdlib.h>
// Döngünün sınırsız kalmasını sağlamak için, alt dizin oluşturma fonksiyonunu rekürsif olarak çağırın.
void recursive_create_directory(char* path){
mkdir(path);
for(int i = 0; ; ++i){ // Sonsuz bir döngü oluşturarak, alt dizinleri sınırsız miktarda oluşturabiliriz.
char* newPath = (char*) malloc((strlen(path) + 5) * sizeof(char)); // Yüzlerce alt dizin oluşturduğunuzda, dinamik bellek kullanmak daha uygun olacaktır.
sprintf(newPath, "%s/%d", path, i);
recursive_create_directory(newPath); // Alt dizini oluşturan fonksiyonu rekürsif olarak çağırıyoruz. Her alt dizin için kendiliğinden kendi alt dizinlerini oluşturur.
}
}
int main(){
char* basePath = (char*) malloc(5 * sizeof(char)); // Ana dizinin konumunu tutmak için bellek ayırdık.
sprintf(basePath, "root");
recursive_create_directory(basePath);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
// Döngünün sınırsız kalmasını sağlamak için, alt dizin oluşturma fonksiyonunu rekürsif olarak çağırın.
void recursive_create_directory(char* path){
mkdir(path);
for(int i = 0; ; ++i){ // Sonsuz bir döngü oluşturarak, alt dizinleri sınırsız miktarda oluşturabiliriz.
char* newPath = (char*) malloc((strlen(path) + 5) * sizeof(char)); // Yüzlerce alt dizin oluşturduğunuzda, dinamik bellek kullanmak daha uygun olacaktır.
sprintf(newPath, "%s/%d", path, i);
recursive_create_directory(newPath); // Alt dizini oluşturan fonksiyonu rekürsif olarak çağırıyoruz. Her alt dizin için kendiliğinden kendi alt dizinlerini oluşturur.
}
}
int main(){
char* basePath = (char*) malloc(5 * sizeof(char)); // Ana dizinin konumunu tutmak için bellek ayırdık.
sprintf(basePath, "root");
recursive_create_directory(basePath);
return 0;
}
böylesine basit bir program nasıl oluyor da 10-100 milyon basamaklı 2 sayıyı üretip, çarpım değerini hesaplayıp ekrana yazdırıyor, insan beyni tarafından kavranması olanaksız bir hesaplama yeteneği!
#include <stdio.h>
#include <gmp.h>
#include <stdlib.h>
#include <time.h>
int main() {
// GMP değişkenlerini tanımla
mpz_t num1, num2, result;
mpz_init(num1);
mpz_init(num2);
mpz_init(result);
// Rastgele sayı üretimi için bir durum oluştur
gmp_randstate_t state;
gmp_randinit_mt(state); // Mersenne Twister yöntemi
gmp_randseed_ui(state, time(NULL)); // Zamanı seed olarak kullan
// 100 basamaklı iki rastgele sayı üret
mpz_urandomb(num1, state, 10000000 * 3.32); // 3.32 yaklaşık olarak log10(2)'dir
mpz_urandomb(num2, state, 10000000 * 3.32);
// iki sayıyı çarp
mpz_mul(result, num1, num2);
// Sonuçları yazdır
gmp_printf("Sayı 1: %Zd\n", num1);
gmp_printf("Sayı 2: %Zd\n", num2);
gmp_printf("Çarpım: %Zd\n", result);
// Belleği temizle
mpz_clear(num1);
mpz_clear(num2);
mpz_clear(result);
gmp_randclear(state);
return 0;
}
#include <stdio.h>
#include <gmp.h>
#include <stdlib.h>
#include <time.h>
int main() {
// GMP değişkenlerini tanımla
mpz_t num1, num2, result;
mpz_init(num1);
mpz_init(num2);
mpz_init(result);
// Rastgele sayı üretimi için bir durum oluştur
gmp_randstate_t state;
gmp_randinit_mt(state); // Mersenne Twister yöntemi
gmp_randseed_ui(state, time(NULL)); // Zamanı seed olarak kullan
// 100 basamaklı iki rastgele sayı üret
mpz_urandomb(num1, state, 10000000 * 3.32); // 3.32 yaklaşık olarak log10(2)'dir
mpz_urandomb(num2, state, 10000000 * 3.32);
// iki sayıyı çarp
mpz_mul(result, num1, num2);
// Sonuçları yazdır
gmp_printf("Sayı 1: %Zd\n", num1);
gmp_printf("Sayı 2: %Zd\n", num2);
gmp_printf("Çarpım: %Zd\n", result);
// Belleği temizle
mpz_clear(num1);
mpz_clear(num2);
mpz_clear(result);
gmp_randclear(state);
return 0;
}
imkansız gibi görünse de c ve gmp kütüphanesiyle 1 saniyeninizi almayacak işlem. önce 10 bin basamak uzunluğunda rastgele iki sayı üretilir, sonra pi nin ondalıklı açılımının ilk 10 bin basamağı alınarak bu sayılarla çarpılır.
kaynak kodu çözümden daha kısa!
#include <stdio.h>
#include <gmp.h>
#include <stdlib.h>
#include <time.h>
int main() {
// GMP değişkenlerini tanımla
mpz_t num1, num2, result;
mpz_init(num1);
mpz_init(num2);
mpz_init(result);
// Rastgele sayı üretimi için bir durum oluştur
gmp_randstate_t state;
gmp_randinit_mt(state); // Mersenne Twister yöntemi
gmp_randseed_ui(state, time(NULL)); // Zamanı seed olarak kullan
// 100 basamaklı iki rastgele sayı üret
mpz_urandomb(num1, state, 10000 * 3.32); // 3.32 yaklaşık olarak log10(2)'dir
mpz_urandomb(num2, state, 10000 * 3.32);
// iki sayıyı çarp
mpz_mul(result, num1, num2);
// Sonuçları yazdır
gmp_printf("Sayı 1: %Zd\n", num1);
gmp_printf("Sayı 2: %Zd\n", num2);
gmp_printf("Çarpım: %Zd\n", result);
// Belleği temizle
mpz_clear(num1);
mpz_clear(num2);
mpz_clear(result);
gmp_randclear(state);
return 0;
}
kratertepesi@msi:~/Masaüstü/Programlar$ ./program
Sayı 1: 3113182150193428271589174701713492102945859884473295876787276034693145944936087662550732647645890420912158780775362812688054333269233438319254462672913484210762738480231430237947418115367061786077142172540997312084880747385682943324278609671350926723656001752970652421883428562224809846482244500619810427584894196127211532878326115031807567643792645656623337713178200909201135755002746724256677147235390620152517799116235505248182799248358310069433763289824603729407157934976511117425794669147488390412401473905913958341317633464906330144313145689133806982285110325459004401586701447874914478867617979314122789625983916456418845439533692271768407947817472315266226094500100340806887713251494981400742024241924365522766299582024560062762138813191085596264794148096057184704233983096606680131025571260954467434198018324443818729398810451586931919813882655038979658479406328721531275829716176329550902148303311571184866122956036170032366496965602474879439912330053698259644890956368622010623113597064260763016239134198163027479363200824997875657960656109650364280019526627541224822057244518516809356502036234696228239405714724775122579451703233072993622498878385269338874727628820392343501653057880654231882771162369367280848798951764020930019294607431431971363986895244860829831657571918501014283648524969750281575641767665926483036797723853375268360807440382710474261367098746121368501464228621701054857181255634536857753098089643990689145082608869269574094230603728740028411468825523138156315000901016564471840057156572369390166666755846018380174960700193923746694274128773963901077225088484916342736621939539758127378736185190789092292689992860785204496798167037459463721918080126945937881045791558580020181893393053464658206196167329697704743457525250825917723296245102523176083182992572318622279910353613352432374407395428393390091020693190502802857689928336252665521621802778195097216015349690651210416881981495262800121941382566662748536394610392558047774923358929479689633789120146650690888207127042280365455790659734787891036246287083626905423102206423999334020970753780141654199271228749720087214085922567818222244334954261171816795392349389256823219545182231328282560318414562550602012737809044434695783125865811441443502881901134381094172881657339572762788334652740853351538407648951935433331968796332637088374849485277878673648790095175620758828217523435965646955033845541593868077987411470277778376135201154004205351527127214786278783949504410213577528557865166447203441746080302587859577513157936285344485106100397437592778162029755107298804638274124071975472304042183963664537580879897195450056666563659632557686413220077714442047880817700513681380831704956380980398213132800323775619635360324283954955160291303462896956535367841036832458133521639428169549057850190394626760542698291718189590236462161483797215582922689383925796112698558568426973992059336979749176405566580602817231594273177485646191682055392319186484651130255744860615812463612198794597526994051805345523476535268303867864321913803305680677026079588109170410943470683358779098351274657506033769438044784932801611304146459715181364446178134332327935099639996892330715365636803897075974941402534034217437812925013923321268327531248578959636762136145352714327153157666750850972876989488153296809392051576350376607776463470971693291297197724247659215808642058641788692329780324601756848370454057059549961397483408342396220605365647042075808439969441327322192145887001651695641762944116467145194061978567558054990823082155545117301268713990284574916040883570684898156187835443691524849473740133743838616454224533552557766703829226142602927885931777291349811012373848272717332499561569837438198799154968787898345277627908355663673262242321800497943292106184013385099376029667812205908111694993532924623962503582479941839836264450155696502959065755228330286788760951092153825037617943464050626538031033283302034517691442172302174712946656016427344423884874755424872665369516206402497925991873427513658944307899104943631955155322693943795020288135586438167855984768111642762334141392474957949520394064504705196455991117301221296333145681337896317274133720130654122201879581385129528757179453052119167132760741926464814144229391596229852016029530182887005614868912643935753862386592562483545719959215006403324585419738023487503744362262062546783058383296374063738521838691151745587934424402120902770884420719561483874746924490148137454213354170821274294831509452615183274986624831289175788536041625669829573925701883876847600998054105356637294796854287134789347820220935463424997946641811224145985659695034797125592657592237087471921265396321673262084025419938599863682063789724378595930385565750432838194117658786041505513101920234721243841952013607223169492813474254320729079490097534089784364525196041303774845498900379707848869269129999784016334585734286663252127453327835867240775065586921564029776011052265899430035380081692268985897078705316139955993529210026921146864507568120975938351052992174986602428832250652159227853719159010424141711092538468492014182526290590824669487394752465722753276240052799427390886727223061191831926003924783702964413849678788554800544235102743683582599333100148622423031601714469734685292324267307392110018221787133952565108925398360150580181372630942679234514040251495141147904855686349651688008545092091800086699381875878786805370550036542898897915624222267815885975594265896812730120074296908939142820292840647106658992216875627424925319868875172289040297306535051305972428160706836394519825311826564868725470585003769131952166682549869646204409242067585170192581902679060379749097515191394300478064874903580139457823998724728248516655687394770576461133494017117558311271680819474750311950039322333781934647974044860211023927909558620916113403260790492062054515936175773573554188901184946056183834469965342016296206135752252828773163296544134960884188166383578398813511689630804430917242687267203131564109145019224372423229955274635598158139680030299140355214311129285564609107376933469686625462846303574101681078326893238936442656468449754644932225155275368709048620954646121076671102062282695906574125160433800344446690281462746761583985908300161164475936230000665378700420128740745959351506731490583774400914088894549366192999509976651512451539324490017141835171995113993389999122984903897824033673564697564092063422554300603321799033625576364021612452755759427012790922750451026281066529939043535564596714055265295476468100868494907477427774572873152341323491842857422646601714941498977692238960621626132351407548944678879454963516094598160496285687029094856381707130645696133766180151492448700534661127204566987224844578569732385016247419626644265888686269175246421579907023996800397067002450490389184423484814251803490245501004221154641079032993787407328238301526986315914527069435169433531196177586004122396524570124896937503229001624370864228749624813321036165382639793698497663363740669352106702962090268722340075048226878885821950457519196157189550058888386892510213565078097407571498018035962976184055168895973871272499305087038761482660013976269919665797820723652623823248461771123613316827048492380342383693890686281151735846834909333869853471645296202668134002422624621860660562845629321562044933303931643538946312480829240931942352634551416548757729877205847342726275483406496975497193836798604132394907359473847411408189599068174112922811554334148919076549637920112984213821125704284297183530938427478735215650977411182229818188228990183042042815009568983164626868065622901352038017258130593057909093784235358730710337012378164921999706498061737295544732827309904657806138455279916902949657486007072884905902244987955436788557685706107259487150184277035448209657321793613942140837621456988426367805057745086918713990010007979921660091202429795361561026067819568610882776196829572233051317581363142015940523095580904464851490167651922325388178083922597012087755026390173701772949028286773853349705932743467926709802585915223958167289975070603528425695305707916060131018872978456232910569026371399292330123608860843099884156509802482688249403206332015161907662552194774458409618806336486262998151665871722214941151264640209597010274235440621298262872882421374392390142356208609200186707244753866395071171026551255387019992376193060431428120935102370287035187690619527999711354963550523601652740471649893092588605688616195592507018819857040979044304774558569868689806858980214991230349832604777277617888048173041116374879038964294376550062997704097520429420461225804769877508349522699452408376800894083647459855067423649793198977736829681054023221330197297628864761093346819446885928113459372452269477129852902853189645395204560271127410707240784565846785207418214003726166549391772761045434566927620412665966681501877117787740036620694500816870836947357227096966695250759345103863945035528256870864394745720362737276596703421989269534517125927828354400474616376582400680165202619251300168719833368553015010021088716420537659761248331148543345608476802934674643820422049298328176420507858553979807579600965121444282416253399388710197104366051621280640049421847863091604048512047356632436792774593421071920230705456408966698692152827104019368314322072929824343528764300042304469333582470205768582693959907017121675441401658306808439692059030795266005939357119774716356701147555611240764775271266364953268332930802400586605433863835339215016256870733283255263875875099258816929383207026613511374130206552107022059882503859074978304993005306887711498164709847423913925883225239104508129854404778164521197222318233460328076745600539902071529880966050798687752720515992434885364366015384596890505575483767618920667129154377472385095576643995664502728769060720042376787847277502635213524761518090384501878984087188840791736361068209546710335023404139724849684643910928936370669754303171887858122175954957129338451051124295774734164537992184657540216370635751205247027733685519669931072528854756441310885595489886964914826343809097050703193643976420437307595779741902201047
Sayı 2: 13282883644929917935735952522800810388229816540953538052846091669941145312543385374850018201332034018237630603444989224046650293712931563979831251505924999652764086244947431852627583629609974308147633150626585104794450547491969049186517491480875154871170226620217567185112977378813555646227629387710376355420495275591232663081362286872058677826472958701172703842371083978134627949950826727704689149176322476881183570917433228211477704536741854514205187663022070831302663131109670965821840708737341868704605719190492456946642886876324220287093146063633092379729650902094428475224035365904431698927253152409047973413255782603425651235731922550795758999886770318857165186450447186234543919215297968979727957862727741093193227741529975621131054503691565373987313386702262817517405203433443417976600877161030459356982452409051054710814724690769876671465463946100117541710246803086206284043969658086193068380616126462467366905307848234356162113958131039320001687013553285691279204775133522941657572234703141838533048695239570308114419790423378814902816005645834141348516972475514823462255278834895258742797214344221846836447261080809988748499708288718198060375535625259220918034193620059596560764172944840444174795114035137565210473633284935601217633025768030368948289483714278066223339211199314665561341172455878955036210719549474563793357894766466214408104402196242895710411321925844480440154352820997647415737457337341413562027848244266993167864246094686224438720167501836300424554221406250307715848470985489989208494849790862903789859902075260929877867766229378455920130514101560095744786792162801379376131536027079376437196793701353355975107596035404421542868004993159303804792666058799835334998148169056124319897512887703727985756586928109028736842801427230697603543213728170931227842595083303575825772250035407795610636170582137055140429741407751373651157797112406059124631241857072796209065599024991753606845319398128880177498755872034444721899767403027338612306594617566463262613189526632954617125861926521562891554839093011597394091726708402307086625582379594415969690200766656748990006849786466180354943788318628328846918764813630038885749972235165875889541948320516635399019855560393862205819137549286298533093922101866593610719125395932029667683887032849016863505535178546738892535961664778697594570655943410102587875334065151816688815685118378906134724694339681861332153133000486084271455833636453299133093910461642875631127140985840882523598369876462275835845890302589455163025541696508135117279275276176319671071364556470491869936265118318303735437854547199092913860478134450232609044239585403979855458602133941485277490084009256342627870425825942983825900488032380567623784913272220035418697583256721550903484676385414761308863418573160064030368469661186442830978362445336197854064979480032356301332155433044651930458837993499499097712132192990142769709614891461869164103535290183248900397264094849571727746547412289432578807371172300293596114235311441998063343952593967508073448886384728136841029289906735000534074195406200728206401174209714152598024974343327654368192194112052130456085770334206520311015103180883168688917043073896894793903402924634448880543071196606104829418066896179484869164531922425697062929733419446967726609829624693122892843111829492793825132530555935813896560854397496240254185038722259752299780457080836616592825534563526013402108510086911989769730037050133905310257107460009041154576332001211345933679340307081425052060608015075908522472374911985052581710368336233405107351539166376597817200369497741712315798069162497723669791342656359416786617861045385086650616007603228743267774402504229955728629350659983545404708578292613366405814237535327187340560883764099287872438231572223465071569264405372277059276457998818193698366911153690808701896702041366520145355453303871339353151093010147270363878222214655155143117228792821035283783080652721243436077256492365701279411348919849027034681820641908388221333623454193863763646185341555358509789095208943623786383076995654250769873381883301479467582664037320101750664334809535402541559414504580244568953676984780676153760889656716352437334863224676203619743542714819329926099913005751031481623416607899383363960080883842690127674767986758335977851879752620630661757292834829031146741997263520821187204805368541758569299327048942264579536857719286204290816118714367432783876070446361331010099361882374777927284208945130220150462851226996952720289941432200088647581343639209483023879404522173491214780906710865433151718774283773293055537499836289465120695161274714403452812773248428685111530652125009150466601155188689052946044663194771099982140948049019716070660755263391589328561895594761473466974065285915185899546042882038299933578768724543236895482319239603553047847617299231797365611910067152152085686162736020232134704127456119546039617910102260955708701365145466302961527924814853159091995455885689426840527623301929385138911733391929031125578304841408434420871304032651290946267983463399682342841572480035160568386193248706902586377083913659227069829100822712232727841767148889614804632425021694667246098461618553584517263677202704432211476089441222884605682834856819870932099131142668645926747308642826086028932097244532410964093259519554007943031608956076444565454658557073667233613536078380577749417560701168296051350831660553964220156317142246549898533236060844653984014827854246883922558263961967973523406199934815322403929206072083336551873331011769972659515453671502638733362792748361354511604481517025086400141441818150048567729602436137283785530009655222920463592371203238329074619210896247572064476343806855983705953731493424455569857726579063248448692193499556328138224218586575211248635253350666328583348811918432089227148317955408845073754311453198338770240177725473724997019720872355841110236087640925344313613105543545327634250229036921545946498052196159367062181380051170829060969588471441690362417310592717555668081027046427901422276838861780898474133331557875428036244148134277635374304704095330256131296929529946743271866164068126301073314526752887202893629016971099751648960465590640862642537281872920867218252511511947230967629953243586983954466916460437133437980496955567629510236177910884699427095797931333821409840614039349509714316728429168559195289501747511895429032449635928261303334281084618063973080774872795304678052791136743349401027143339350212060197720732030721920612935270287105240048982604519545516813610840897027610185113367030050757188268469029595927316928419503818508636063858454469916072649913131423613278037743779192502360510348610354076813822160886957717112786340172960434122007358251832784653668298595602249711525857189176234134994384473956867559871149213190494368294133589861638167236112834855783176117588810748389218345647981472381800666578752649312481951800356266644877048529288447107364384863138733543289231020678484680484009814602745094719793512464873736742832528451625121428276411703518219848715634450987600270863832092428318425998085387456872301621213059279302344736406394665807201537436235223153892310701665287326926131201006211269551396172575219319188020840213717556166480983410846336836680159933917593174704951667916252392092836989044482430181374760642475685287092268855929393249563033645053126785199450351797882999843513692666454915990325631611185382814544132553154779977658495435993189304797499441746709090746557622289701300757869546184141044782719377040827964360084215439359575788007337210758640546259003245079015422072134896785550241870459305490221791158940607639541493545449431966380949790268500688147120684878422644087740665311413514824790694834843604338194795607812853823998998739112429583918956929886411943253620292295948172621348804714403835910755338343560963879983874617752052019068693175095139925755008968184160517347202286096146659735014373787699651941244829269609565490299680163842760538318515223947233589933065139902997769223127720615718742890756259591698561606632583885384844657289331942858833039994197286859787535642370579530512293643458517021735986255562171142500006464959368553497843047742926912059387240809946743387638414048198694408944775444069251170773066138660967478938575678692226267210318097300336890609251281691482937945007536044628780696401485874066964937081918206796014977472518940692770894672378010538576191579628753772751491142438296755504777898562919873878466886571943932058682767751159450055872863527916053211722455926017234341614795477508162993100417926985058462658159275231528686687240156880922013253354310515429320271301395052939034522258214866568731973101381404116452786240690501596861116363625687217576907840844881072173634456273207480058148969492890120404737355584259763460585719059833390135924485696337604815143525955720696272044057172480412095806653997091898239769531744564451812400150724910565454097450203341878993940854184993053860100501536678291753100414071556739683930561925753508520719204221243637525947557752736918123021759906424842555860248331323557456167099315985161501790445629362971901337741454235806845317499797338072673087835855979518873590992730702565969031443914216280707586485693433132763123264073997566028702290799278145599553591406872613442909399868803796508758469616801500502900105120877858852156755843085247711311259293143161537830145595241746951888756957819100261647089658901442226446272586842891048256482344694803787698396134693029959462504186157980838085682198058796500063965111807850225311869955963267886820326401411980566900962441917763804790566485058315287808753412169880537568293968036573590850482360291970462859719175787666102215780516509397360723273599114920948677443312473946763348132517216207875535781868570306703675527144171234478423271605287319848573256078081641455469793831015179857933759673931682246610809830504660977785640009919674276403875800562819651870887523506776548920556733167133035750104234775109609952298605135294029710284933743373010850306077287395270441190810313340111298439279128630474973453764748612463442364796509840602507043585330051775476202391024439088213371189
Çarpım: 41352036266492043743656925459108852465943066406958183062953603993140882337270672690299140536463706528093760445691136391206093586452136358749244422824360929604497466875415788500815441007814236779758239089023418717987856990921658488013836042721414547049393677297310175790903689014963049361207139408754664656689027915514126317756209865132043433191892551374005118131807693304084687861124840256805105665226916954294464692565612902200863636386933316926246739715912295349361699848359185434669853638687198833127987335188039466100577549068798276495837799003509804064466191874535374085756873332713690563157841950147987558232766064678886710327178651319700041019674539545102569709931830045923079330875661779104987827486407102374054505535693214952654705632062863621199507543398587372459425387287923312450079005509323266643488846504353971201534653923021139904705722947371790918973140177568545335929831539751012155799702091855583370463394208635278445917041394915630120478539091218214987930910348333448339724234792227482828887024962983000230193754032183755022054123928477941988899749980357037243084970848282043038176446210054433898880286189904360456372893617579541531541160473718678512222478600236590035273341726126576115868790562192103095841669961514434233650505010953476647926202098277726972176902317791865604155003144625423905021287336538889143187924786162491549856749925278821154527954783515992948990707870936062451697468624351294747183794898949024263087740068240240081520392241243864372536493678630600835465709465539320922192546318826256484402042584388271435209051259753490472290265505049236435871021283077839116308925973929825364979310373882424598822758160357233716155116633773303738572077623439235929218795693462051039763539496452368992258396867915245963781416733923088442801622250556636703562665964569615876384509584709074134907074764038752995806221144616689028887578821600140167277384935605788010388608989009098205709027192572055507814718445223037502198692013088971654150781980754499876137520201519975427836172133888566492100882827238493317989187266257202819533008675943898635548820943174727181555683074242257554844726832878219376425846647732319880006115519434659686776818330594873673469528361729927634667128198902020929911752430308117322187229851833504210533007505328442446654002124607669732327557649518777277824802776556118464380839700899354119828806694771550480077630297739589489620983306830502812011049713996823006054307259320646973508765285268877794441257402696216483799482673587350408337092459254597355459704016686409342397934314348237448348638588390636658031299770170443605499192945820175762500172567555286987339021054268181889184612267269128246503116048271318924535725706967055107820307331220054869456755099895695057292671371908035813479869845464882387381055509752832671265479501231279000381826444510260811519295236677574489246777034771340611577031870179104587975580871479514579607471106574265461395495248979764521065581359857083320285270497469141127975896517139213508276797328284986630596054926795404946528853262101804179496082572154750750312222646088394850733957893771659559538243383818919227862085882876723888351265016906333913990659560793321174404134235775143179037374885722643097073454930049593742311761790812954790261124290512538821904634388545903308714638824432821159324643334867669195325745777624935945839144039542167181181958709157915271263380778524230218769516858223047411183974758330030578812685223359344822690953029527591154294632294251763451196800445034652974393124778501692032414299250208956467701603507325064111396833402380876864159953282415695139157910295379677540350791512217403243048956938259394999244608733263072728883800228999103821961340939916890360930497729436852833999525668941127054776616763696380341898737983402900849981081091173854227453665807505402480748990158014793099475835734281856501231413898229518221478620548508530477496574858793622776782304502558198546594575490339937607054906436393243110688896930261370632800139495017278452385760506506231709513775597410311954544807576848828006441495259543004519894477957986598580384346330218379461732139315450088914526264869621016303126128353328414013770705073067007799507155531743906838872663696134791473845828768581055520658700638213310516512474435506469344043180432169510669187006311726644254187543341910505158533427989278244966990426759655921498466802663518601565122311001553255385663794074933207107206915273846544106876050608938371739975750436001577586104266886191244362378063606632631411117715345191611759049800536441295388960219000357484455011136374407497869125870640888116112456855500692792369024836570465524563374403965640936924738982970049251606892567468898537962118806344966429403707639753697893619380109973956033490263039451665835724690405844506410721142473852001905380117704752677510454337252955694368001424656658829505737216396747672822809932407534251176196220138593302997471600190253512882329747825010867166814466362037041758640705906897372738084367956888481398542960231654787562974592034507323071725199650631229444720704848783435454174264192044413091178994455529669727160496873615437060424808908171285332350056043222427054067774480542829060363649184703090507830432790961709386720413681271815770168888078714677936116998058951652740894596370009870029738986331698863952040146792837659473210915959818454764595177305037414815254860844062010935256017707304076564864285859738884240855294037280325792559560695291634931441362775254195661644711348955456857218214347249432928993229443313593116936923907283826627093753823369073204303987061593364129402188734185036947374069910412318034327195027938758951329958530529045581587579212444342913546444195727630649137391654761554769766283619563693345938403503011677328117555302014191905560194898873599681732994093657721564912067470783406926123930322812937986790467451140740010371013952311484208451796773885886486461347512282257857294041640079246037205605468401689239381871562818214996145428003821809617184124394213669553535349397356871826689966578787522346032472336182290081336143830368839158417552449012548294415309525213350593546829555495350249733846042407488722555197923401480141644260532686459567220946460547277928734147911062222377646825582923302402697671079830779680080907092305867380073992441342977444337737618203511021379065085282476498764328454418167468701405879228416267311973520211067291021910063822480449852256070849579639906228228523227926075406985564056203623392508025533762697982181407185358546548510072325538601585324434436205010478371110128140893262540754675875320752885985112942757867599912761008188485971322118699053047537275514479143952342623009241092840995524945759947399544589928613273543665238019593641615499835179853916234387913795264720399779157138653630704590934197400759102405704488405561340554718817203459325650166693170055029795061311730174306274222192639658630375760614021844269532863422848048951992227591418198218960974272781126170856631439014567146415969055019273431699663559791593637457080187744819342675441606818125614804427118894743232932869574088290467082363065101672820217533767044941798869039373181444597025485551144433780633336968847077757356918875866773660946671400041575433220552294148120617867621281751106397657236968204339706485914551797356202387330807914749692432279258833606325433178643228231660734086848131273919460551179698858847640726298503019153955091717357224162129502359701320473596267176342598225070319018868720300377513831906359135966038050215341277639298532539862734607007489876177991898349384778717181020116918967003925584718858418517733040632500992591373133046999350235956245228699927614771303024604021513334278704006084886817286160902637363307849163067024490062954949056614378478174287588144079212701135948992364654392070656240486684826048195059512412561088519302332526135585522498725005442320566238864648640269610247928470454684268399675022689349400950245408082688392438059816078591424481029591857604601550798251431776169170903577420342254208962202270052738459673475978161192542807747172382484807047431467716641688479527560157283977242634982334795273413968495348610388771051105763990387771386244055731610609751492036841118695365105002084483308899191557728631656949890310646592636537484741012584156014243671254309797093481376161908187779955604466868444104685825434036846177513525576249770160352948498157826650663122618780343334202745189746522421002785934836299931880628955690748110711805688808246805834752901106092779558994658266994117939814508049109961747129687143403999009155048940460665000730578582747426306370682400063769914509566325341843218086084630223151294100952105542334058191791378296261694230005038846358973008533480432696727696153716315539193131673674206858828959310271905583366868913435127198238071435248654028270214710848054788670453962118634483523807991031344188174754596639195537009451441184355181057704318483635575598724565379695938349744041857901540962648836436479483246086221680519698806322071611315750607248906821298327000603304352143291887122779638965026568984353329219822518508014962992662682020230847256845627543174246324972104908182148554710378023817975076484737016716379566878488860117584066312988177383770836824770083044351251669638474399314303799596024631619205299640765586320843760238816130858920296910494859410419753218248415673177989534445918525703300207987745499426378824251498174306460194196023091552534056391396393904238907332845447436948381565619194777702554605158400629050325122749008213898036656702347915239908657056908982812656915900606006156973485178331703511948534120460510151268699026715954909103205158855057484410882050722936803833897158060009358076169141626415489108116404863485518370330124756260277239465964926884944099207441284265824253700876856038453438778522961171220314564731680301957773457386743869847867332238866574825172925851272356492100431657904019197892443906063363584771831333892404129099607752206946348149641910960302385868379183286085077049685666074585521870983902157180914067962222420744552644074364741209110298463790839097245426439628687925460063882378620785440137758695305894949718031973614051289282694873341011427060592422994252826501635126688935808324319315374742566379773246219362838245890411403641956813483348258272539948674395634021881371800669579330883861956605200525656121062833809181228945471199302955561338546950284867073804800264553973146864174239491573457643493873308974621116225595990301649210063569357781357291147461489348532523967743309376381000606248210958259787773839868446005179149581653154520150785306127432115239827803697905044666679434677657864881926515945935006127371331185293121657609978919756326479239343621585250252562947633463170829880875606875260166367770873894885051217640346296446578263782882577751537667234948042462744401165562349535647250444714946160057830793779759317521205980399584819187150604635407973020739934927882108827658382303241935669120898530274861700444210730076486884479684018456043689520709274027099133685189889696907412971583639615239063207828638387000774723502734839842853054684863118911849282335852080033970598329409603422424963942516340690016539405893288491885932195781363179268011237957000455885956190927511457500435023707253915824340959796013524344780117532541547514563935708107176563240590962781021028930078252769654816804339607243469790260493269845733703028938620798848820236132389422957657786266042965058072768141299409645486467969314041070228116126494555094130341870717946354037143245279689722862061807827703934093627585696295565392709448423006109041670403261008711398831663770297580519838954027863361949772151655832540060540418091228594197463994281445603222691025726428780103964312152317866975272525442230334038693043722449457452405873966607058303816159532963090350385561248127311736068651910008008483977648259595134682553175303912292274006354670373717099211148385851641080916219042186596227092749481386845842558512317926404891105749062472108198784491076121662294924707689325106668621731760664834908636153185485934786990781852232666821217376723372680282020010285120301055173692774835003645543521766124117174332800137269391257367970716909829605703278783934829429073841607711938864842802093627109990716677981075668552754373092445724270953298700509736675885966695693119039378150255751795645297943255679489967824446568249486969650099350556248517387976418260590133708724436240401347977769452952557828660831966077276518464203405176832125361810968432583390150478405058101138688987217077843006993793987178202224432043756366894275233763114448164912497343166374126926042311475934699841997307557770135085796948509968359233193286850265637597451758683124881988506989087811677713777734430132149121528301453355580957931721173022930137507967723653590080908308362338425888122691190472055639895866909155964782072739151675203024434850283348984554945885524430001542513647512348916476565331724243736636390631424485314322739906253777559285012314102490643623821047587642332426610481964587237107365516117834107850975939636585984862591786276293991886141485483347823687148398855305671646979265973177098238218797560857881922489284885728507081115251446114124782038251724186205811679130731314603125696661723244364687603608669999156227009965637785096677746754301739649638811984065122282409555692318951939420485729760079091247940823144950087349596759129144724164791301717285184133365752235934217942069202556494347410243662569207767354785071704079457407953760748119374241778902364012302447826392620229706178424969809798915350671758174644313459886957723672102905559652200399067346671635075473003222269293635642123159752332269288395294658084694695159565787470861675428338514464641995589516174146640306152397229667370434178749744792914001665593106709242094082834922606130824532194395157262332258701079968589979467912762399539277732186832752301124823301450547390397424197609981956073199809083960346470866051242620890313606947013257138450099909516876915990511073010795438373274446208579701358264707905674869433873900884037830450035623497988715772936795840970543362973366512031430369440703175357496964385492978840702296657510512020146321048294699933619614467603187742858730131000425554627910285257819256398993052573708904747232340631028207820132211146242095608074534403096176016423668250068428404530924571369173719088560176749932596595437792846814601694774588367862366863574203162931261837384356876339365097270857104120362706638448395446371064640205629458840567941849679792084204381367691472184426281714280665409865623876046912071035875042586986655751807731718242394133498480613896393736557984917751247154228263870264736601138795463932074382359932439804265896303674839827291947379447738878519045153443552849875065033378849330555743780324984032713722229496809266994282388921756820974880209177365690909823825545738459946947965599676336764765901909097329812463596335377716420672891745138692029330448115249193593035378713807816782614920129333965991124802524580745562621093997544105897003601966984929973204300998530316696264978217862538231352579204939421763741568250222698198415292709432463394882203994037098839383651826977724966570778601867139926907435100982184757018225031934441636291272492862538974419425626301836845870915382802823999555358284110919305722806332892262309956746905584821160364096861350553088724323056692039820587992249502827734323584609908900722404805871605778338099572715787679054788771854850320088443177155689434103728332956629533290654891580528321848623228068849272393932950124746710533186270018355765933887523237006375791198817321596250824877907825364932519407457910109465519342815580149137520604318449656054852901811403775113326960463342345797655894131801793094515725605214245345307891626224300027094738158387946008008886770353443518421555454888338463606237597684660618963766712318814167768328647930134786181675898923583422519345707748166811727490565812033653876106499783400670544669046388537567250740151848431215089706706092532956005709060294440927013612544793827135028575109204117357868536672417092494172975574180630034393639486212210202640088701129095385574343387880438922707128639946511378132232308974560138157060477508379990848666254018169138870361275702320143502096176627939347753228161668258319514189993611564198602810022890983715689486722454814281382141166667755321124899294963076733567323579220027284675463197175434540110093867830478611827189491656027943812674066909912107497433321353659373339765538013659085716001328442742810487829593283893588700359325679705391609508523675052654167106199381814905774743684465763387649200960741916705412425308327379644286091117768367473757689378776622379688972299977932432562610462621006520577800058687154864091988003189487602250228973945122457602172973290419192193128359311588413111981011230920484627106475191717352299353794592712815053152543747881051467345571242455682246188391268981268296406886608586037886158892956998743536558513949247032574579226085403176731686380423679681643550869739392480019446317107754442972700607979112213796186024137222011779850924665118345355408113243714248538959117667715380642401145148156085572297212321050892871504969224668130474579821722293634392116483344770920113025049849252377155911315419079939904792683857419838160790802048952494990667486905350720253440558977271330643112338201615863028699874421315270246795338449809101494892838818231892565333433254603783891761471881807541930762721603160692773652951109495189925830129187989468976493562371826373379510915474177344901887214231526505331085869921026789841560216147262087679854743893659689380828727328506106037854835396983707329108182998550279745419677355890733529789239005715020471876776051873054024490886374395397381453220511445208141997198382358772311156590396881483264099822347363581253859135104122818385124671179999644077608551844901254980172746185893218705119869238728037238425527608468053847591709207287779401532144255461174419667682312970374951036493861897417708097350785866338468117815452195837346250587686043616757676869014863139764094341747927747545929038058237741799432380060414759768269388919387385166371594739404397920121384230315174741449941929748724061177055671142708248462769527058693296793002051392494655155491588513477369556895524123496525814586007189041002150080270219144401581098522229563752038332033114723563320693548434039639098083104536082755790439193226069850174462782640107411767408233347309253877608394650126026339779197818508513977643194353823114701894632039715986378281463263417584661702432243504712454249831290712845438936948022453027492012435457200022703075492746238669698959708070355661350114278004983419794832200152454548864043412918418027604486889433492557619230291137310915140287372249103719568546011070499592033083902671054605319951646502975853081397995105079020864055116225994425231930383752506081668291290454112307676193438390202432673808252677490158989962713735121911282455341074894230195618992995462309025085036675174433153221202264239065582921526677391987684044503835397645836215257224923076745862512993380891066161185820122915789879050621777338814296424292866853421523138221376100153017963061655109898769240268542226035281227364471173931387885962724146898591565944273234835485927186049680754918087064378417147703914266245892751430240851460603964306934910020896933285091471402781823273263491863334408617874838897533336927375114470650374507417450052158412196554667097075222595467561060937910266749157846850805703404349512315447709394683966767104672741115876993127627672105892139638833119219734726135211767555737518912317202428347681129108912763327709430645740959094864227387231876706168706865217940162433874178522411117299086775587920109224582652565189566284264723476054349752451522850332489713223646443816949567700834311021225948775347396221039519847852915986091240211001728918892240137280717982317451749346954013887149059185781868537850240667552329471155328547394528986382521446801766852030852866810010925779741028983425751255003447610321797190600802800531971513395739237375157967401551181623419038357469868890388313732437052670051685986214650778407687639518760896422574434017431849719810254680302917099983056842332506422732453506738810693110895115434883
kaynak kodu çözümden daha kısa!
#include <stdio.h>
#include <gmp.h>
#include <stdlib.h>
#include <time.h>
int main() {
// GMP değişkenlerini tanımla
mpz_t num1, num2, result;
mpz_init(num1);
mpz_init(num2);
mpz_init(result);
// Rastgele sayı üretimi için bir durum oluştur
gmp_randstate_t state;
gmp_randinit_mt(state); // Mersenne Twister yöntemi
gmp_randseed_ui(state, time(NULL)); // Zamanı seed olarak kullan
// 100 basamaklı iki rastgele sayı üret
mpz_urandomb(num1, state, 10000 * 3.32); // 3.32 yaklaşık olarak log10(2)'dir
mpz_urandomb(num2, state, 10000 * 3.32);
// iki sayıyı çarp
mpz_mul(result, num1, num2);
// Sonuçları yazdır
gmp_printf("Sayı 1: %Zd\n", num1);
gmp_printf("Sayı 2: %Zd\n", num2);
gmp_printf("Çarpım: %Zd\n", result);
// Belleği temizle
mpz_clear(num1);
mpz_clear(num2);
mpz_clear(result);
gmp_randclear(state);
return 0;
}
kratertepesi@msi:~/Masaüstü/Programlar$ ./program
Sayı 1: 3113182150193428271589174701713492102945859884473295876787276034693145944936087662550732647645890420912158780775362812688054333269233438319254462672913484210762738480231430237947418115367061786077142172540997312084880747385682943324278609671350926723656001752970652421883428562224809846482244500619810427584894196127211532878326115031807567643792645656623337713178200909201135755002746724256677147235390620152517799116235505248182799248358310069433763289824603729407157934976511117425794669147488390412401473905913958341317633464906330144313145689133806982285110325459004401586701447874914478867617979314122789625983916456418845439533692271768407947817472315266226094500100340806887713251494981400742024241924365522766299582024560062762138813191085596264794148096057184704233983096606680131025571260954467434198018324443818729398810451586931919813882655038979658479406328721531275829716176329550902148303311571184866122956036170032366496965602474879439912330053698259644890956368622010623113597064260763016239134198163027479363200824997875657960656109650364280019526627541224822057244518516809356502036234696228239405714724775122579451703233072993622498878385269338874727628820392343501653057880654231882771162369367280848798951764020930019294607431431971363986895244860829831657571918501014283648524969750281575641767665926483036797723853375268360807440382710474261367098746121368501464228621701054857181255634536857753098089643990689145082608869269574094230603728740028411468825523138156315000901016564471840057156572369390166666755846018380174960700193923746694274128773963901077225088484916342736621939539758127378736185190789092292689992860785204496798167037459463721918080126945937881045791558580020181893393053464658206196167329697704743457525250825917723296245102523176083182992572318622279910353613352432374407395428393390091020693190502802857689928336252665521621802778195097216015349690651210416881981495262800121941382566662748536394610392558047774923358929479689633789120146650690888207127042280365455790659734787891036246287083626905423102206423999334020970753780141654199271228749720087214085922567818222244334954261171816795392349389256823219545182231328282560318414562550602012737809044434695783125865811441443502881901134381094172881657339572762788334652740853351538407648951935433331968796332637088374849485277878673648790095175620758828217523435965646955033845541593868077987411470277778376135201154004205351527127214786278783949504410213577528557865166447203441746080302587859577513157936285344485106100397437592778162029755107298804638274124071975472304042183963664537580879897195450056666563659632557686413220077714442047880817700513681380831704956380980398213132800323775619635360324283954955160291303462896956535367841036832458133521639428169549057850190394626760542698291718189590236462161483797215582922689383925796112698558568426973992059336979749176405566580602817231594273177485646191682055392319186484651130255744860615812463612198794597526994051805345523476535268303867864321913803305680677026079588109170410943470683358779098351274657506033769438044784932801611304146459715181364446178134332327935099639996892330715365636803897075974941402534034217437812925013923321268327531248578959636762136145352714327153157666750850972876989488153296809392051576350376607776463470971693291297197724247659215808642058641788692329780324601756848370454057059549961397483408342396220605365647042075808439969441327322192145887001651695641762944116467145194061978567558054990823082155545117301268713990284574916040883570684898156187835443691524849473740133743838616454224533552557766703829226142602927885931777291349811012373848272717332499561569837438198799154968787898345277627908355663673262242321800497943292106184013385099376029667812205908111694993532924623962503582479941839836264450155696502959065755228330286788760951092153825037617943464050626538031033283302034517691442172302174712946656016427344423884874755424872665369516206402497925991873427513658944307899104943631955155322693943795020288135586438167855984768111642762334141392474957949520394064504705196455991117301221296333145681337896317274133720130654122201879581385129528757179453052119167132760741926464814144229391596229852016029530182887005614868912643935753862386592562483545719959215006403324585419738023487503744362262062546783058383296374063738521838691151745587934424402120902770884420719561483874746924490148137454213354170821274294831509452615183274986624831289175788536041625669829573925701883876847600998054105356637294796854287134789347820220935463424997946641811224145985659695034797125592657592237087471921265396321673262084025419938599863682063789724378595930385565750432838194117658786041505513101920234721243841952013607223169492813474254320729079490097534089784364525196041303774845498900379707848869269129999784016334585734286663252127453327835867240775065586921564029776011052265899430035380081692268985897078705316139955993529210026921146864507568120975938351052992174986602428832250652159227853719159010424141711092538468492014182526290590824669487394752465722753276240052799427390886727223061191831926003924783702964413849678788554800544235102743683582599333100148622423031601714469734685292324267307392110018221787133952565108925398360150580181372630942679234514040251495141147904855686349651688008545092091800086699381875878786805370550036542898897915624222267815885975594265896812730120074296908939142820292840647106658992216875627424925319868875172289040297306535051305972428160706836394519825311826564868725470585003769131952166682549869646204409242067585170192581902679060379749097515191394300478064874903580139457823998724728248516655687394770576461133494017117558311271680819474750311950039322333781934647974044860211023927909558620916113403260790492062054515936175773573554188901184946056183834469965342016296206135752252828773163296544134960884188166383578398813511689630804430917242687267203131564109145019224372423229955274635598158139680030299140355214311129285564609107376933469686625462846303574101681078326893238936442656468449754644932225155275368709048620954646121076671102062282695906574125160433800344446690281462746761583985908300161164475936230000665378700420128740745959351506731490583774400914088894549366192999509976651512451539324490017141835171995113993389999122984903897824033673564697564092063422554300603321799033625576364021612452755759427012790922750451026281066529939043535564596714055265295476468100868494907477427774572873152341323491842857422646601714941498977692238960621626132351407548944678879454963516094598160496285687029094856381707130645696133766180151492448700534661127204566987224844578569732385016247419626644265888686269175246421579907023996800397067002450490389184423484814251803490245501004221154641079032993787407328238301526986315914527069435169433531196177586004122396524570124896937503229001624370864228749624813321036165382639793698497663363740669352106702962090268722340075048226878885821950457519196157189550058888386892510213565078097407571498018035962976184055168895973871272499305087038761482660013976269919665797820723652623823248461771123613316827048492380342383693890686281151735846834909333869853471645296202668134002422624621860660562845629321562044933303931643538946312480829240931942352634551416548757729877205847342726275483406496975497193836798604132394907359473847411408189599068174112922811554334148919076549637920112984213821125704284297183530938427478735215650977411182229818188228990183042042815009568983164626868065622901352038017258130593057909093784235358730710337012378164921999706498061737295544732827309904657806138455279916902949657486007072884905902244987955436788557685706107259487150184277035448209657321793613942140837621456988426367805057745086918713990010007979921660091202429795361561026067819568610882776196829572233051317581363142015940523095580904464851490167651922325388178083922597012087755026390173701772949028286773853349705932743467926709802585915223958167289975070603528425695305707916060131018872978456232910569026371399292330123608860843099884156509802482688249403206332015161907662552194774458409618806336486262998151665871722214941151264640209597010274235440621298262872882421374392390142356208609200186707244753866395071171026551255387019992376193060431428120935102370287035187690619527999711354963550523601652740471649893092588605688616195592507018819857040979044304774558569868689806858980214991230349832604777277617888048173041116374879038964294376550062997704097520429420461225804769877508349522699452408376800894083647459855067423649793198977736829681054023221330197297628864761093346819446885928113459372452269477129852902853189645395204560271127410707240784565846785207418214003726166549391772761045434566927620412665966681501877117787740036620694500816870836947357227096966695250759345103863945035528256870864394745720362737276596703421989269534517125927828354400474616376582400680165202619251300168719833368553015010021088716420537659761248331148543345608476802934674643820422049298328176420507858553979807579600965121444282416253399388710197104366051621280640049421847863091604048512047356632436792774593421071920230705456408966698692152827104019368314322072929824343528764300042304469333582470205768582693959907017121675441401658306808439692059030795266005939357119774716356701147555611240764775271266364953268332930802400586605433863835339215016256870733283255263875875099258816929383207026613511374130206552107022059882503859074978304993005306887711498164709847423913925883225239104508129854404778164521197222318233460328076745600539902071529880966050798687752720515992434885364366015384596890505575483767618920667129154377472385095576643995664502728769060720042376787847277502635213524761518090384501878984087188840791736361068209546710335023404139724849684643910928936370669754303171887858122175954957129338451051124295774734164537992184657540216370635751205247027733685519669931072528854756441310885595489886964914826343809097050703193643976420437307595779741902201047
Sayı 2: 13282883644929917935735952522800810388229816540953538052846091669941145312543385374850018201332034018237630603444989224046650293712931563979831251505924999652764086244947431852627583629609974308147633150626585104794450547491969049186517491480875154871170226620217567185112977378813555646227629387710376355420495275591232663081362286872058677826472958701172703842371083978134627949950826727704689149176322476881183570917433228211477704536741854514205187663022070831302663131109670965821840708737341868704605719190492456946642886876324220287093146063633092379729650902094428475224035365904431698927253152409047973413255782603425651235731922550795758999886770318857165186450447186234543919215297968979727957862727741093193227741529975621131054503691565373987313386702262817517405203433443417976600877161030459356982452409051054710814724690769876671465463946100117541710246803086206284043969658086193068380616126462467366905307848234356162113958131039320001687013553285691279204775133522941657572234703141838533048695239570308114419790423378814902816005645834141348516972475514823462255278834895258742797214344221846836447261080809988748499708288718198060375535625259220918034193620059596560764172944840444174795114035137565210473633284935601217633025768030368948289483714278066223339211199314665561341172455878955036210719549474563793357894766466214408104402196242895710411321925844480440154352820997647415737457337341413562027848244266993167864246094686224438720167501836300424554221406250307715848470985489989208494849790862903789859902075260929877867766229378455920130514101560095744786792162801379376131536027079376437196793701353355975107596035404421542868004993159303804792666058799835334998148169056124319897512887703727985756586928109028736842801427230697603543213728170931227842595083303575825772250035407795610636170582137055140429741407751373651157797112406059124631241857072796209065599024991753606845319398128880177498755872034444721899767403027338612306594617566463262613189526632954617125861926521562891554839093011597394091726708402307086625582379594415969690200766656748990006849786466180354943788318628328846918764813630038885749972235165875889541948320516635399019855560393862205819137549286298533093922101866593610719125395932029667683887032849016863505535178546738892535961664778697594570655943410102587875334065151816688815685118378906134724694339681861332153133000486084271455833636453299133093910461642875631127140985840882523598369876462275835845890302589455163025541696508135117279275276176319671071364556470491869936265118318303735437854547199092913860478134450232609044239585403979855458602133941485277490084009256342627870425825942983825900488032380567623784913272220035418697583256721550903484676385414761308863418573160064030368469661186442830978362445336197854064979480032356301332155433044651930458837993499499097712132192990142769709614891461869164103535290183248900397264094849571727746547412289432578807371172300293596114235311441998063343952593967508073448886384728136841029289906735000534074195406200728206401174209714152598024974343327654368192194112052130456085770334206520311015103180883168688917043073896894793903402924634448880543071196606104829418066896179484869164531922425697062929733419446967726609829624693122892843111829492793825132530555935813896560854397496240254185038722259752299780457080836616592825534563526013402108510086911989769730037050133905310257107460009041154576332001211345933679340307081425052060608015075908522472374911985052581710368336233405107351539166376597817200369497741712315798069162497723669791342656359416786617861045385086650616007603228743267774402504229955728629350659983545404708578292613366405814237535327187340560883764099287872438231572223465071569264405372277059276457998818193698366911153690808701896702041366520145355453303871339353151093010147270363878222214655155143117228792821035283783080652721243436077256492365701279411348919849027034681820641908388221333623454193863763646185341555358509789095208943623786383076995654250769873381883301479467582664037320101750664334809535402541559414504580244568953676984780676153760889656716352437334863224676203619743542714819329926099913005751031481623416607899383363960080883842690127674767986758335977851879752620630661757292834829031146741997263520821187204805368541758569299327048942264579536857719286204290816118714367432783876070446361331010099361882374777927284208945130220150462851226996952720289941432200088647581343639209483023879404522173491214780906710865433151718774283773293055537499836289465120695161274714403452812773248428685111530652125009150466601155188689052946044663194771099982140948049019716070660755263391589328561895594761473466974065285915185899546042882038299933578768724543236895482319239603553047847617299231797365611910067152152085686162736020232134704127456119546039617910102260955708701365145466302961527924814853159091995455885689426840527623301929385138911733391929031125578304841408434420871304032651290946267983463399682342841572480035160568386193248706902586377083913659227069829100822712232727841767148889614804632425021694667246098461618553584517263677202704432211476089441222884605682834856819870932099131142668645926747308642826086028932097244532410964093259519554007943031608956076444565454658557073667233613536078380577749417560701168296051350831660553964220156317142246549898533236060844653984014827854246883922558263961967973523406199934815322403929206072083336551873331011769972659515453671502638733362792748361354511604481517025086400141441818150048567729602436137283785530009655222920463592371203238329074619210896247572064476343806855983705953731493424455569857726579063248448692193499556328138224218586575211248635253350666328583348811918432089227148317955408845073754311453198338770240177725473724997019720872355841110236087640925344313613105543545327634250229036921545946498052196159367062181380051170829060969588471441690362417310592717555668081027046427901422276838861780898474133331557875428036244148134277635374304704095330256131296929529946743271866164068126301073314526752887202893629016971099751648960465590640862642537281872920867218252511511947230967629953243586983954466916460437133437980496955567629510236177910884699427095797931333821409840614039349509714316728429168559195289501747511895429032449635928261303334281084618063973080774872795304678052791136743349401027143339350212060197720732030721920612935270287105240048982604519545516813610840897027610185113367030050757188268469029595927316928419503818508636063858454469916072649913131423613278037743779192502360510348610354076813822160886957717112786340172960434122007358251832784653668298595602249711525857189176234134994384473956867559871149213190494368294133589861638167236112834855783176117588810748389218345647981472381800666578752649312481951800356266644877048529288447107364384863138733543289231020678484680484009814602745094719793512464873736742832528451625121428276411703518219848715634450987600270863832092428318425998085387456872301621213059279302344736406394665807201537436235223153892310701665287326926131201006211269551396172575219319188020840213717556166480983410846336836680159933917593174704951667916252392092836989044482430181374760642475685287092268855929393249563033645053126785199450351797882999843513692666454915990325631611185382814544132553154779977658495435993189304797499441746709090746557622289701300757869546184141044782719377040827964360084215439359575788007337210758640546259003245079015422072134896785550241870459305490221791158940607639541493545449431966380949790268500688147120684878422644087740665311413514824790694834843604338194795607812853823998998739112429583918956929886411943253620292295948172621348804714403835910755338343560963879983874617752052019068693175095139925755008968184160517347202286096146659735014373787699651941244829269609565490299680163842760538318515223947233589933065139902997769223127720615718742890756259591698561606632583885384844657289331942858833039994197286859787535642370579530512293643458517021735986255562171142500006464959368553497843047742926912059387240809946743387638414048198694408944775444069251170773066138660967478938575678692226267210318097300336890609251281691482937945007536044628780696401485874066964937081918206796014977472518940692770894672378010538576191579628753772751491142438296755504777898562919873878466886571943932058682767751159450055872863527916053211722455926017234341614795477508162993100417926985058462658159275231528686687240156880922013253354310515429320271301395052939034522258214866568731973101381404116452786240690501596861116363625687217576907840844881072173634456273207480058148969492890120404737355584259763460585719059833390135924485696337604815143525955720696272044057172480412095806653997091898239769531744564451812400150724910565454097450203341878993940854184993053860100501536678291753100414071556739683930561925753508520719204221243637525947557752736918123021759906424842555860248331323557456167099315985161501790445629362971901337741454235806845317499797338072673087835855979518873590992730702565969031443914216280707586485693433132763123264073997566028702290799278145599553591406872613442909399868803796508758469616801500502900105120877858852156755843085247711311259293143161537830145595241746951888756957819100261647089658901442226446272586842891048256482344694803787698396134693029959462504186157980838085682198058796500063965111807850225311869955963267886820326401411980566900962441917763804790566485058315287808753412169880537568293968036573590850482360291970462859719175787666102215780516509397360723273599114920948677443312473946763348132517216207875535781868570306703675527144171234478423271605287319848573256078081641455469793831015179857933759673931682246610809830504660977785640009919674276403875800562819651870887523506776548920556733167133035750104234775109609952298605135294029710284933743373010850306077287395270441190810313340111298439279128630474973453764748612463442364796509840602507043585330051775476202391024439088213371189
Çarpım: 41352036266492043743656925459108852465943066406958183062953603993140882337270672690299140536463706528093760445691136391206093586452136358749244422824360929604497466875415788500815441007814236779758239089023418717987856990921658488013836042721414547049393677297310175790903689014963049361207139408754664656689027915514126317756209865132043433191892551374005118131807693304084687861124840256805105665226916954294464692565612902200863636386933316926246739715912295349361699848359185434669853638687198833127987335188039466100577549068798276495837799003509804064466191874535374085756873332713690563157841950147987558232766064678886710327178651319700041019674539545102569709931830045923079330875661779104987827486407102374054505535693214952654705632062863621199507543398587372459425387287923312450079005509323266643488846504353971201534653923021139904705722947371790918973140177568545335929831539751012155799702091855583370463394208635278445917041394915630120478539091218214987930910348333448339724234792227482828887024962983000230193754032183755022054123928477941988899749980357037243084970848282043038176446210054433898880286189904360456372893617579541531541160473718678512222478600236590035273341726126576115868790562192103095841669961514434233650505010953476647926202098277726972176902317791865604155003144625423905021287336538889143187924786162491549856749925278821154527954783515992948990707870936062451697468624351294747183794898949024263087740068240240081520392241243864372536493678630600835465709465539320922192546318826256484402042584388271435209051259753490472290265505049236435871021283077839116308925973929825364979310373882424598822758160357233716155116633773303738572077623439235929218795693462051039763539496452368992258396867915245963781416733923088442801622250556636703562665964569615876384509584709074134907074764038752995806221144616689028887578821600140167277384935605788010388608989009098205709027192572055507814718445223037502198692013088971654150781980754499876137520201519975427836172133888566492100882827238493317989187266257202819533008675943898635548820943174727181555683074242257554844726832878219376425846647732319880006115519434659686776818330594873673469528361729927634667128198902020929911752430308117322187229851833504210533007505328442446654002124607669732327557649518777277824802776556118464380839700899354119828806694771550480077630297739589489620983306830502812011049713996823006054307259320646973508765285268877794441257402696216483799482673587350408337092459254597355459704016686409342397934314348237448348638588390636658031299770170443605499192945820175762500172567555286987339021054268181889184612267269128246503116048271318924535725706967055107820307331220054869456755099895695057292671371908035813479869845464882387381055509752832671265479501231279000381826444510260811519295236677574489246777034771340611577031870179104587975580871479514579607471106574265461395495248979764521065581359857083320285270497469141127975896517139213508276797328284986630596054926795404946528853262101804179496082572154750750312222646088394850733957893771659559538243383818919227862085882876723888351265016906333913990659560793321174404134235775143179037374885722643097073454930049593742311761790812954790261124290512538821904634388545903308714638824432821159324643334867669195325745777624935945839144039542167181181958709157915271263380778524230218769516858223047411183974758330030578812685223359344822690953029527591154294632294251763451196800445034652974393124778501692032414299250208956467701603507325064111396833402380876864159953282415695139157910295379677540350791512217403243048956938259394999244608733263072728883800228999103821961340939916890360930497729436852833999525668941127054776616763696380341898737983402900849981081091173854227453665807505402480748990158014793099475835734281856501231413898229518221478620548508530477496574858793622776782304502558198546594575490339937607054906436393243110688896930261370632800139495017278452385760506506231709513775597410311954544807576848828006441495259543004519894477957986598580384346330218379461732139315450088914526264869621016303126128353328414013770705073067007799507155531743906838872663696134791473845828768581055520658700638213310516512474435506469344043180432169510669187006311726644254187543341910505158533427989278244966990426759655921498466802663518601565122311001553255385663794074933207107206915273846544106876050608938371739975750436001577586104266886191244362378063606632631411117715345191611759049800536441295388960219000357484455011136374407497869125870640888116112456855500692792369024836570465524563374403965640936924738982970049251606892567468898537962118806344966429403707639753697893619380109973956033490263039451665835724690405844506410721142473852001905380117704752677510454337252955694368001424656658829505737216396747672822809932407534251176196220138593302997471600190253512882329747825010867166814466362037041758640705906897372738084367956888481398542960231654787562974592034507323071725199650631229444720704848783435454174264192044413091178994455529669727160496873615437060424808908171285332350056043222427054067774480542829060363649184703090507830432790961709386720413681271815770168888078714677936116998058951652740894596370009870029738986331698863952040146792837659473210915959818454764595177305037414815254860844062010935256017707304076564864285859738884240855294037280325792559560695291634931441362775254195661644711348955456857218214347249432928993229443313593116936923907283826627093753823369073204303987061593364129402188734185036947374069910412318034327195027938758951329958530529045581587579212444342913546444195727630649137391654761554769766283619563693345938403503011677328117555302014191905560194898873599681732994093657721564912067470783406926123930322812937986790467451140740010371013952311484208451796773885886486461347512282257857294041640079246037205605468401689239381871562818214996145428003821809617184124394213669553535349397356871826689966578787522346032472336182290081336143830368839158417552449012548294415309525213350593546829555495350249733846042407488722555197923401480141644260532686459567220946460547277928734147911062222377646825582923302402697671079830779680080907092305867380073992441342977444337737618203511021379065085282476498764328454418167468701405879228416267311973520211067291021910063822480449852256070849579639906228228523227926075406985564056203623392508025533762697982181407185358546548510072325538601585324434436205010478371110128140893262540754675875320752885985112942757867599912761008188485971322118699053047537275514479143952342623009241092840995524945759947399544589928613273543665238019593641615499835179853916234387913795264720399779157138653630704590934197400759102405704488405561340554718817203459325650166693170055029795061311730174306274222192639658630375760614021844269532863422848048951992227591418198218960974272781126170856631439014567146415969055019273431699663559791593637457080187744819342675441606818125614804427118894743232932869574088290467082363065101672820217533767044941798869039373181444597025485551144433780633336968847077757356918875866773660946671400041575433220552294148120617867621281751106397657236968204339706485914551797356202387330807914749692432279258833606325433178643228231660734086848131273919460551179698858847640726298503019153955091717357224162129502359701320473596267176342598225070319018868720300377513831906359135966038050215341277639298532539862734607007489876177991898349384778717181020116918967003925584718858418517733040632500992591373133046999350235956245228699927614771303024604021513334278704006084886817286160902637363307849163067024490062954949056614378478174287588144079212701135948992364654392070656240486684826048195059512412561088519302332526135585522498725005442320566238864648640269610247928470454684268399675022689349400950245408082688392438059816078591424481029591857604601550798251431776169170903577420342254208962202270052738459673475978161192542807747172382484807047431467716641688479527560157283977242634982334795273413968495348610388771051105763990387771386244055731610609751492036841118695365105002084483308899191557728631656949890310646592636537484741012584156014243671254309797093481376161908187779955604466868444104685825434036846177513525576249770160352948498157826650663122618780343334202745189746522421002785934836299931880628955690748110711805688808246805834752901106092779558994658266994117939814508049109961747129687143403999009155048940460665000730578582747426306370682400063769914509566325341843218086084630223151294100952105542334058191791378296261694230005038846358973008533480432696727696153716315539193131673674206858828959310271905583366868913435127198238071435248654028270214710848054788670453962118634483523807991031344188174754596639195537009451441184355181057704318483635575598724565379695938349744041857901540962648836436479483246086221680519698806322071611315750607248906821298327000603304352143291887122779638965026568984353329219822518508014962992662682020230847256845627543174246324972104908182148554710378023817975076484737016716379566878488860117584066312988177383770836824770083044351251669638474399314303799596024631619205299640765586320843760238816130858920296910494859410419753218248415673177989534445918525703300207987745499426378824251498174306460194196023091552534056391396393904238907332845447436948381565619194777702554605158400629050325122749008213898036656702347915239908657056908982812656915900606006156973485178331703511948534120460510151268699026715954909103205158855057484410882050722936803833897158060009358076169141626415489108116404863485518370330124756260277239465964926884944099207441284265824253700876856038453438778522961171220314564731680301957773457386743869847867332238866574825172925851272356492100431657904019197892443906063363584771831333892404129099607752206946348149641910960302385868379183286085077049685666074585521870983902157180914067962222420744552644074364741209110298463790839097245426439628687925460063882378620785440137758695305894949718031973614051289282694873341011427060592422994252826501635126688935808324319315374742566379773246219362838245890411403641956813483348258272539948674395634021881371800669579330883861956605200525656121062833809181228945471199302955561338546950284867073804800264553973146864174239491573457643493873308974621116225595990301649210063569357781357291147461489348532523967743309376381000606248210958259787773839868446005179149581653154520150785306127432115239827803697905044666679434677657864881926515945935006127371331185293121657609978919756326479239343621585250252562947633463170829880875606875260166367770873894885051217640346296446578263782882577751537667234948042462744401165562349535647250444714946160057830793779759317521205980399584819187150604635407973020739934927882108827658382303241935669120898530274861700444210730076486884479684018456043689520709274027099133685189889696907412971583639615239063207828638387000774723502734839842853054684863118911849282335852080033970598329409603422424963942516340690016539405893288491885932195781363179268011237957000455885956190927511457500435023707253915824340959796013524344780117532541547514563935708107176563240590962781021028930078252769654816804339607243469790260493269845733703028938620798848820236132389422957657786266042965058072768141299409645486467969314041070228116126494555094130341870717946354037143245279689722862061807827703934093627585696295565392709448423006109041670403261008711398831663770297580519838954027863361949772151655832540060540418091228594197463994281445603222691025726428780103964312152317866975272525442230334038693043722449457452405873966607058303816159532963090350385561248127311736068651910008008483977648259595134682553175303912292274006354670373717099211148385851641080916219042186596227092749481386845842558512317926404891105749062472108198784491076121662294924707689325106668621731760664834908636153185485934786990781852232666821217376723372680282020010285120301055173692774835003645543521766124117174332800137269391257367970716909829605703278783934829429073841607711938864842802093627109990716677981075668552754373092445724270953298700509736675885966695693119039378150255751795645297943255679489967824446568249486969650099350556248517387976418260590133708724436240401347977769452952557828660831966077276518464203405176832125361810968432583390150478405058101138688987217077843006993793987178202224432043756366894275233763114448164912497343166374126926042311475934699841997307557770135085796948509968359233193286850265637597451758683124881988506989087811677713777734430132149121528301453355580957931721173022930137507967723653590080908308362338425888122691190472055639895866909155964782072739151675203024434850283348984554945885524430001542513647512348916476565331724243736636390631424485314322739906253777559285012314102490643623821047587642332426610481964587237107365516117834107850975939636585984862591786276293991886141485483347823687148398855305671646979265973177098238218797560857881922489284885728507081115251446114124782038251724186205811679130731314603125696661723244364687603608669999156227009965637785096677746754301739649638811984065122282409555692318951939420485729760079091247940823144950087349596759129144724164791301717285184133365752235934217942069202556494347410243662569207767354785071704079457407953760748119374241778902364012302447826392620229706178424969809798915350671758174644313459886957723672102905559652200399067346671635075473003222269293635642123159752332269288395294658084694695159565787470861675428338514464641995589516174146640306152397229667370434178749744792914001665593106709242094082834922606130824532194395157262332258701079968589979467912762399539277732186832752301124823301450547390397424197609981956073199809083960346470866051242620890313606947013257138450099909516876915990511073010795438373274446208579701358264707905674869433873900884037830450035623497988715772936795840970543362973366512031430369440703175357496964385492978840702296657510512020146321048294699933619614467603187742858730131000425554627910285257819256398993052573708904747232340631028207820132211146242095608074534403096176016423668250068428404530924571369173719088560176749932596595437792846814601694774588367862366863574203162931261837384356876339365097270857104120362706638448395446371064640205629458840567941849679792084204381367691472184426281714280665409865623876046912071035875042586986655751807731718242394133498480613896393736557984917751247154228263870264736601138795463932074382359932439804265896303674839827291947379447738878519045153443552849875065033378849330555743780324984032713722229496809266994282388921756820974880209177365690909823825545738459946947965599676336764765901909097329812463596335377716420672891745138692029330448115249193593035378713807816782614920129333965991124802524580745562621093997544105897003601966984929973204300998530316696264978217862538231352579204939421763741568250222698198415292709432463394882203994037098839383651826977724966570778601867139926907435100982184757018225031934441636291272492862538974419425626301836845870915382802823999555358284110919305722806332892262309956746905584821160364096861350553088724323056692039820587992249502827734323584609908900722404805871605778338099572715787679054788771854850320088443177155689434103728332956629533290654891580528321848623228068849272393932950124746710533186270018355765933887523237006375791198817321596250824877907825364932519407457910109465519342815580149137520604318449656054852901811403775113326960463342345797655894131801793094515725605214245345307891626224300027094738158387946008008886770353443518421555454888338463606237597684660618963766712318814167768328647930134786181675898923583422519345707748166811727490565812033653876106499783400670544669046388537567250740151848431215089706706092532956005709060294440927013612544793827135028575109204117357868536672417092494172975574180630034393639486212210202640088701129095385574343387880438922707128639946511378132232308974560138157060477508379990848666254018169138870361275702320143502096176627939347753228161668258319514189993611564198602810022890983715689486722454814281382141166667755321124899294963076733567323579220027284675463197175434540110093867830478611827189491656027943812674066909912107497433321353659373339765538013659085716001328442742810487829593283893588700359325679705391609508523675052654167106199381814905774743684465763387649200960741916705412425308327379644286091117768367473757689378776622379688972299977932432562610462621006520577800058687154864091988003189487602250228973945122457602172973290419192193128359311588413111981011230920484627106475191717352299353794592712815053152543747881051467345571242455682246188391268981268296406886608586037886158892956998743536558513949247032574579226085403176731686380423679681643550869739392480019446317107754442972700607979112213796186024137222011779850924665118345355408113243714248538959117667715380642401145148156085572297212321050892871504969224668130474579821722293634392116483344770920113025049849252377155911315419079939904792683857419838160790802048952494990667486905350720253440558977271330643112338201615863028699874421315270246795338449809101494892838818231892565333433254603783891761471881807541930762721603160692773652951109495189925830129187989468976493562371826373379510915474177344901887214231526505331085869921026789841560216147262087679854743893659689380828727328506106037854835396983707329108182998550279745419677355890733529789239005715020471876776051873054024490886374395397381453220511445208141997198382358772311156590396881483264099822347363581253859135104122818385124671179999644077608551844901254980172746185893218705119869238728037238425527608468053847591709207287779401532144255461174419667682312970374951036493861897417708097350785866338468117815452195837346250587686043616757676869014863139764094341747927747545929038058237741799432380060414759768269388919387385166371594739404397920121384230315174741449941929748724061177055671142708248462769527058693296793002051392494655155491588513477369556895524123496525814586007189041002150080270219144401581098522229563752038332033114723563320693548434039639098083104536082755790439193226069850174462782640107411767408233347309253877608394650126026339779197818508513977643194353823114701894632039715986378281463263417584661702432243504712454249831290712845438936948022453027492012435457200022703075492746238669698959708070355661350114278004983419794832200152454548864043412918418027604486889433492557619230291137310915140287372249103719568546011070499592033083902671054605319951646502975853081397995105079020864055116225994425231930383752506081668291290454112307676193438390202432673808252677490158989962713735121911282455341074894230195618992995462309025085036675174433153221202264239065582921526677391987684044503835397645836215257224923076745862512993380891066161185820122915789879050621777338814296424292866853421523138221376100153017963061655109898769240268542226035281227364471173931387885962724146898591565944273234835485927186049680754918087064378417147703914266245892751430240851460603964306934910020896933285091471402781823273263491863334408617874838897533336927375114470650374507417450052158412196554667097075222595467561060937910266749157846850805703404349512315447709394683966767104672741115876993127627672105892139638833119219734726135211767555737518912317202428347681129108912763327709430645740959094864227387231876706168706865217940162433874178522411117299086775587920109224582652565189566284264723476054349752451522850332489713223646443816949567700834311021225948775347396221039519847852915986091240211001728918892240137280717982317451749346954013887149059185781868537850240667552329471155328547394528986382521446801766852030852866810010925779741028983425751255003447610321797190600802800531971513395739237375157967401551181623419038357469868890388313732437052670051685986214650778407687639518760896422574434017431849719810254680302917099983056842332506422732453506738810693110895115434883
gedit le program.c yazıp dosya açın, ve aşağıdaki kodu kopyalayın.
gcc program.c -o program komutuyla kaynak kodunu derledikten sonra ./program komutuyla çalıştırılabilir dosyayı yürütebilirsiniz.
kratertepesi@msi:~/Masaüstü/Programlar$ ./program
[sudo] kratertepesi için parola:
RAM Hızı: Speed: 5600 MT/s
RAM Hızı: Configured Memory Speed: 4800 MT/s
RAM Hızı: Speed: 4800 MT/s
RAM Hızı: Configured Memory Speed: 4800 MT/s
RAM Hızı: Speed: 4800 MT/s
RAM Hızı: Configured Memory Speed: 4800 MT/s
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// Komutu çalıştırmak için popen fonksiyonunu kullanıyoruz
FILE *fp;
char buffer[256];
int found = 0;
// dmidecode -t memory komutunu çalıştırıyoruz
fp = popen("sudo dmidecode -t memory", "r");
if (fp == NULL) {
perror("popen failed");
return 1;
}
// Çıktıyı satır satır okuyoruz
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
// RAM hızını bulmaya çalışıyoruz
if (strstr(buffer, "Speed") != NULL) {
printf("RAM Hızı: %s", buffer);
found = 1;
}
}
if (!found) {
printf("RAM hızı bulunamadı.\n");
}
fclose(fp);
return 0;
}
gcc program.c -o program komutuyla kaynak kodunu derledikten sonra ./program komutuyla çalıştırılabilir dosyayı yürütebilirsiniz.
kratertepesi@msi:~/Masaüstü/Programlar$ ./program
[sudo] kratertepesi için parola:
RAM Hızı: Speed: 5600 MT/s
RAM Hızı: Configured Memory Speed: 4800 MT/s
RAM Hızı: Speed: 4800 MT/s
RAM Hızı: Configured Memory Speed: 4800 MT/s
RAM Hızı: Speed: 4800 MT/s
RAM Hızı: Configured Memory Speed: 4800 MT/s
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// Komutu çalıştırmak için popen fonksiyonunu kullanıyoruz
FILE *fp;
char buffer[256];
int found = 0;
// dmidecode -t memory komutunu çalıştırıyoruz
fp = popen("sudo dmidecode -t memory", "r");
if (fp == NULL) {
perror("popen failed");
return 1;
}
// Çıktıyı satır satır okuyoruz
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
// RAM hızını bulmaya çalışıyoruz
if (strstr(buffer, "Speed") != NULL) {
printf("RAM Hızı: %s", buffer);
found = 1;
}
}
if (!found) {
printf("RAM hızı bulunamadı.\n");
}
fclose(fp);
return 0;
}
basit bir c programıyla bile öğrenilebilir!
kratertepesi@msi:~/Masaüstü/Programlar$ ./program
100 milyon sayı içinde 10030385 asal sayı vardır.
işlemci döngüsü: 4772581176
Hesaplama süresi: 1.0846775400 saniye
1 saniyenin 10,000'de kaçı: 10846.7754000000
kod:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <x86intrin.h> // RDTSC için gerekli
#define LIMIT 180000000 // 1 milyar sınırı
#define CPU_FREQUENCY 4.4 // GHz cinsinden işlemci frekansı (örneğin 3.0 GHz)
int main() {
unsigned long long i, j, count = 0;
bool *is_prime = malloc((LIMIT + 1) * sizeof(bool));
if (is_prime == NULL) {
fprintf(stderr, "Bellek tahsis edilemedi.\n");
return 1;
}
// Zaman ölçüm başlangıcı
unsigned long long start = __rdtsc();
// Bütün sayıları asal varsayıyoruz
for (i = 0; i <= LIMIT; i++) {
is_prime[i] = true;
}
// 0 ve 1 asal değildir
is_prime[0] = is_prime[1] = false;
// Eratosthenes Eleği algoritması
for (i = 2; i * i <= LIMIT; i++) {
if (is_prime[i]) {
for (j = i * i; j <= LIMIT; j += i) {
is_prime[j] = false;
}
}
}
// Asal sayıları sayıyoruz
for (i = 2; i <= LIMIT; i++) {
if (is_prime[i]) {
count++;
}
}
// Zaman ölçüm bitişi
unsigned long long end = __rdtsc();
// Döngü farkını hesapla
unsigned long long cycles = end - start;
// Döngü süresi saniye olarak
double time_seconds = cycles / (CPU_FREQUENCY * 1e9); // GHz'den Hz'e dönüşüm
// Sonuçları yazdır
printf("100 milyon sayı içinde %llu asal sayı vardır.\n", count);
printf("işlemci döngüsü: %llu\n", cycles);
printf("Hesaplama süresi: %.10f saniye\n", time_seconds);
printf("1 saniyenin 10,000'de kaçı: %.10f\n", time_seconds * 10000);
// Belleği serbest bırak
free(is_prime);
return 0;
}
kratertepesi@msi:~/Masaüstü/Programlar$ ./program
100 milyon sayı içinde 10030385 asal sayı vardır.
işlemci döngüsü: 4772581176
Hesaplama süresi: 1.0846775400 saniye
1 saniyenin 10,000'de kaçı: 10846.7754000000
kod:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <x86intrin.h> // RDTSC için gerekli
#define LIMIT 180000000 // 1 milyar sınırı
#define CPU_FREQUENCY 4.4 // GHz cinsinden işlemci frekansı (örneğin 3.0 GHz)
int main() {
unsigned long long i, j, count = 0;
bool *is_prime = malloc((LIMIT + 1) * sizeof(bool));
if (is_prime == NULL) {
fprintf(stderr, "Bellek tahsis edilemedi.\n");
return 1;
}
// Zaman ölçüm başlangıcı
unsigned long long start = __rdtsc();
// Bütün sayıları asal varsayıyoruz
for (i = 0; i <= LIMIT; i++) {
is_prime[i] = true;
}
// 0 ve 1 asal değildir
is_prime[0] = is_prime[1] = false;
// Eratosthenes Eleği algoritması
for (i = 2; i * i <= LIMIT; i++) {
if (is_prime[i]) {
for (j = i * i; j <= LIMIT; j += i) {
is_prime[j] = false;
}
}
}
// Asal sayıları sayıyoruz
for (i = 2; i <= LIMIT; i++) {
if (is_prime[i]) {
count++;
}
}
// Zaman ölçüm bitişi
unsigned long long end = __rdtsc();
// Döngü farkını hesapla
unsigned long long cycles = end - start;
// Döngü süresi saniye olarak
double time_seconds = cycles / (CPU_FREQUENCY * 1e9); // GHz'den Hz'e dönüşüm
// Sonuçları yazdır
printf("100 milyon sayı içinde %llu asal sayı vardır.\n", count);
printf("işlemci döngüsü: %llu\n", cycles);
printf("Hesaplama süresi: %.10f saniye\n", time_seconds);
printf("1 saniyenin 10,000'de kaçı: %.10f\n", time_seconds * 10000);
// Belleği serbest bırak
free(is_prime);
return 0;
}
birbiriyle etkileşen hücrelere dair 3 kural, süreç incelenmediği sürece öngörülemez ve tahmin edilemez neticeler doğuruyor:
#include <GLFW/glfw3.h> // GLFW kütüphanesini içe aktarır; pencere oluşturma ve OpenGL ile çizim için kullanılır.
#include <vector> // Dinamik diziler ve iki boyutlu vektör yapısı için vektör kütüphanesi.
#include <ctime> // Rastgele sayı üreteci için zaman kütüphanesi.
#include <cstdlib> // Rastgele sayı üreteci için C standardında kütüphane.
const int GENISLIK = 1920; // Pencere genişliği piksel cinsinden
const int YUKSEKLIK = 1080; // Pencere yüksekliği piksel cinsinden
const int HUCRESAYISI = 4; // Her bir hücrenin genişliği ve yüksekliği piksel cinsinden
const int IZGARA_GENISLIK = GENISLIK / HUCRESAYISI; // Hücre matrisinin yatayda hücre sayısı
const int IZGARA_YUKSEKLIK = YUKSEKLIK / HUCRESAYISI; // Hücre matrisinin dikeyde hücre sayısı
// Hücrelerin durumunu tutan iki boyutlu matris; 2: genişleyen hücre, 1: hücre dolu, 0: hücre boş
std::vector<std::vector<int>> izgara(IZGARA_YUKSEKLIK, std::vector<int>(IZGARA_GENISLIK, 0));
// Bir sonraki durumları tutmak için yedek matris
std::vector<std::vector<int>> sonrakiIzgara(IZGARA_YUKSEKLIK, std::vector<int>(IZGARA_GENISLIK, 0));
// **Yaşam Oyunu Kuralları**:
// 1. Her dolu hücre 2 veya 3 komşuya sahipse yaşamaya devam eder, aksi halde ölür.
// 2. Boş hücreler tam 3 dolu komşuya sahipse canlanır.
void izgaraBaslat() { // Hücre matrisini başlatır
srand(static_cast<unsigned>(time(0))); // Rastgele başlangıç için tohum oluşturur.
for (int y = 0; y < IZGARA_YUKSEKLIK; ++y) { // Her hücre için
for (int x = 0; x < IZGARA_GENISLIK; ++x) {
izgara[y][x] = rand() % 2; // Hücreyi rastgele olarak dolu (1) veya boş (0) yapar.
}
}
}
int komsuSay(int y, int x) { // Hücrenin komşularını say
int sayac = 0; // Komşu hücre sayacını sıfırla.
for (int dy = -1; dy <= 1; ++dy) { // -1, 0, 1: komşu hücreler için dikey kayma
for (int dx = -1; dx <= 1; ++dx) { // -1, 0, 1: komşu hücreler için yatay kayma
if (dy == 0 && dx == 0) continue; // Kendisi değil, sadece komşuları kontrol et.
int ny = (y + dy + IZGARA_YUKSEKLIK) % IZGARA_YUKSEKLIK; // Dikeyde çevrilebilir koordinat
int nx = (x + dx + IZGARA_GENISLIK) % IZGARA_GENISLIK; // Yatayda çevrilebilir koordinat
sayac += izgara[ny][nx]; // Eğer komşu hücre dolu ise sayacı artır.
}
}
return sayac; // Bulunan komşu hücrelerin toplam sayısını döndür.
}
void izgaraGuncelle() { // Hücrelerin durumlarını günceller
for (int y = 0; y < IZGARA_YUKSEKLIK; ++y) { // Her hücreyi güncelle
for (int x = 0; x < IZGARA_GENISLIK; ++x) {
int komsular = komsuSay(y, x); // Mevcut hücrenin komşu sayısını al
if (izgara[y][x] == 1) { // Hücre dolu ise
sonrakiIzgara[y][x] = (komsular == 2 || komsular == 3) ? 1 : 0; // 2 veya 3 komşu ile hayatta kalır.
} else if (izgara[y][x] == 2) { // Genişleyen hücre durumu
sonrakiIzgara[y][x] = (komsular >= 1) ? 2 : 0; // Komşuları varsa genişlemeye devam et.
} else { // Hücre boş ise
sonrakiIzgara[y][x] = (komsular == 3) ? 1 : 0; // Boş hücre, 3 komşu varsa doğar.
}
}
}
izgara.swap(sonrakiIzgara); // Eski durumu yeni durumla değiştir.
}
void izgaraCiz() { // Hücreleri ve ızgarayı çizer
glClear(GL_COLOR_BUFFER_BIT); // Ekranı temizler.
// Hücreleri çizer.
for (int y = 0; y < IZGARA_YUKSEKLIK; ++y) {
for (int x = 0; x < IZGARA_GENISLIK; ++x) {
if (izgara[y][x] == 1) { // Hücre dolu ise
glColor3f(0.0f, 1.0f, 0.0f); // Yeşil rengi ayarla.
} else if (izgara[y][x] == 2) { // Genişleyen hücre ise
glColor3f(0.0f, 1.0f, 0.5f); // Yeşil tonunda bir renk
} else {
glColor3f(0.0f, 0.0f, 0.0f); // Boş hücreler için siyah arka plan
}
glBegin(GL_QUADS); // Her hücreyi kare olarak çiz.
glVertex2f(x * HUCRESAYISI, y * HUCRESAYISI);
glVertex2f((x + 1) * HUCRESAYISI - 1, y * HUCRESAYISI);
glVertex2f((x + 1) * HUCRESAYISI - 1, (y + 1) * HUCRESAYISI - 1);
glVertex2f(x * HUCRESAYISI, (y + 1) * HUCRESAYISI - 1);
glEnd();
}
}
// Izgara çizgilerini çizer.
glColor3f(1.0f, 0.0f, 0.0f); // Izgara için kırmızı çizgi
glLineWidth(1.0f);
glBegin(GL_LINES);
for (int x = 0; x <= GENISLIK; x += HUCRESAYISI) {
glVertex2f(x, 0); glVertex2f(x, YUKSEKLIK); // Dikey çizgiler
}
for (int y = 0; y <= YUKSEKLIK; y += HUCRESAYISI) {
glVertex2f(0, y); glVertex2f(GENISLIK, y); // Yatay çizgiler
}
glEnd();
}
int main() { // Programın ana fonksiyonu
if (!glfwInit()) { // GLFW başlat.
return -1;
}
GLFWwindow* pencere = glfwCreateWindow(GENISLIK, YUKSEKLIK, "Yasam Oyunu", NULL, NULL); // Pencereyi oluştur.
if (!pencere) {
glfwTerminate(); // Oluşturulmazsa çık.
return -1;
}
glfwMakeContextCurrent(pencere); // OpenGL bağlamını bu pencereye uygula.
glOrtho(0, GENISLIK, YUKSEKLIK, 0, -1, 1); // Oranları ayarla.
izgaraBaslat(); // Başlangıç gridini oluştur.
while (!glfwWindowShouldClose(pencere)) { // Pencere açıkken
izgaraCiz(); // Çizimi güncelle.
izgaraGuncelle(); // Oyun kurallarına göre hücre durumlarını güncelle.
glfwSwapBuffers(pencere); // Çizimi pencereye uygula.
glfwPollEvents(); // Olayları kontrol et.
}
glfwDestroyWindow(pencere); // Pencereyi temizle.
glfwTerminate(); // GLFW'yi sonlandır.
return 0;
}
görsel
görsel
görsel
#include <GLFW/glfw3.h> // GLFW kütüphanesini içe aktarır; pencere oluşturma ve OpenGL ile çizim için kullanılır.
#include <vector> // Dinamik diziler ve iki boyutlu vektör yapısı için vektör kütüphanesi.
#include <ctime> // Rastgele sayı üreteci için zaman kütüphanesi.
#include <cstdlib> // Rastgele sayı üreteci için C standardında kütüphane.
const int GENISLIK = 1920; // Pencere genişliği piksel cinsinden
const int YUKSEKLIK = 1080; // Pencere yüksekliği piksel cinsinden
const int HUCRESAYISI = 4; // Her bir hücrenin genişliği ve yüksekliği piksel cinsinden
const int IZGARA_GENISLIK = GENISLIK / HUCRESAYISI; // Hücre matrisinin yatayda hücre sayısı
const int IZGARA_YUKSEKLIK = YUKSEKLIK / HUCRESAYISI; // Hücre matrisinin dikeyde hücre sayısı
// Hücrelerin durumunu tutan iki boyutlu matris; 2: genişleyen hücre, 1: hücre dolu, 0: hücre boş
std::vector<std::vector<int>> izgara(IZGARA_YUKSEKLIK, std::vector<int>(IZGARA_GENISLIK, 0));
// Bir sonraki durumları tutmak için yedek matris
std::vector<std::vector<int>> sonrakiIzgara(IZGARA_YUKSEKLIK, std::vector<int>(IZGARA_GENISLIK, 0));
// **Yaşam Oyunu Kuralları**:
// 1. Her dolu hücre 2 veya 3 komşuya sahipse yaşamaya devam eder, aksi halde ölür.
// 2. Boş hücreler tam 3 dolu komşuya sahipse canlanır.
void izgaraBaslat() { // Hücre matrisini başlatır
srand(static_cast<unsigned>(time(0))); // Rastgele başlangıç için tohum oluşturur.
for (int y = 0; y < IZGARA_YUKSEKLIK; ++y) { // Her hücre için
for (int x = 0; x < IZGARA_GENISLIK; ++x) {
izgara[y][x] = rand() % 2; // Hücreyi rastgele olarak dolu (1) veya boş (0) yapar.
}
}
}
int komsuSay(int y, int x) { // Hücrenin komşularını say
int sayac = 0; // Komşu hücre sayacını sıfırla.
for (int dy = -1; dy <= 1; ++dy) { // -1, 0, 1: komşu hücreler için dikey kayma
for (int dx = -1; dx <= 1; ++dx) { // -1, 0, 1: komşu hücreler için yatay kayma
if (dy == 0 && dx == 0) continue; // Kendisi değil, sadece komşuları kontrol et.
int ny = (y + dy + IZGARA_YUKSEKLIK) % IZGARA_YUKSEKLIK; // Dikeyde çevrilebilir koordinat
int nx = (x + dx + IZGARA_GENISLIK) % IZGARA_GENISLIK; // Yatayda çevrilebilir koordinat
sayac += izgara[ny][nx]; // Eğer komşu hücre dolu ise sayacı artır.
}
}
return sayac; // Bulunan komşu hücrelerin toplam sayısını döndür.
}
void izgaraGuncelle() { // Hücrelerin durumlarını günceller
for (int y = 0; y < IZGARA_YUKSEKLIK; ++y) { // Her hücreyi güncelle
for (int x = 0; x < IZGARA_GENISLIK; ++x) {
int komsular = komsuSay(y, x); // Mevcut hücrenin komşu sayısını al
if (izgara[y][x] == 1) { // Hücre dolu ise
sonrakiIzgara[y][x] = (komsular == 2 || komsular == 3) ? 1 : 0; // 2 veya 3 komşu ile hayatta kalır.
} else if (izgara[y][x] == 2) { // Genişleyen hücre durumu
sonrakiIzgara[y][x] = (komsular >= 1) ? 2 : 0; // Komşuları varsa genişlemeye devam et.
} else { // Hücre boş ise
sonrakiIzgara[y][x] = (komsular == 3) ? 1 : 0; // Boş hücre, 3 komşu varsa doğar.
}
}
}
izgara.swap(sonrakiIzgara); // Eski durumu yeni durumla değiştir.
}
void izgaraCiz() { // Hücreleri ve ızgarayı çizer
glClear(GL_COLOR_BUFFER_BIT); // Ekranı temizler.
// Hücreleri çizer.
for (int y = 0; y < IZGARA_YUKSEKLIK; ++y) {
for (int x = 0; x < IZGARA_GENISLIK; ++x) {
if (izgara[y][x] == 1) { // Hücre dolu ise
glColor3f(0.0f, 1.0f, 0.0f); // Yeşil rengi ayarla.
} else if (izgara[y][x] == 2) { // Genişleyen hücre ise
glColor3f(0.0f, 1.0f, 0.5f); // Yeşil tonunda bir renk
} else {
glColor3f(0.0f, 0.0f, 0.0f); // Boş hücreler için siyah arka plan
}
glBegin(GL_QUADS); // Her hücreyi kare olarak çiz.
glVertex2f(x * HUCRESAYISI, y * HUCRESAYISI);
glVertex2f((x + 1) * HUCRESAYISI - 1, y * HUCRESAYISI);
glVertex2f((x + 1) * HUCRESAYISI - 1, (y + 1) * HUCRESAYISI - 1);
glVertex2f(x * HUCRESAYISI, (y + 1) * HUCRESAYISI - 1);
glEnd();
}
}
// Izgara çizgilerini çizer.
glColor3f(1.0f, 0.0f, 0.0f); // Izgara için kırmızı çizgi
glLineWidth(1.0f);
glBegin(GL_LINES);
for (int x = 0; x <= GENISLIK; x += HUCRESAYISI) {
glVertex2f(x, 0); glVertex2f(x, YUKSEKLIK); // Dikey çizgiler
}
for (int y = 0; y <= YUKSEKLIK; y += HUCRESAYISI) {
glVertex2f(0, y); glVertex2f(GENISLIK, y); // Yatay çizgiler
}
glEnd();
}
int main() { // Programın ana fonksiyonu
if (!glfwInit()) { // GLFW başlat.
return -1;
}
GLFWwindow* pencere = glfwCreateWindow(GENISLIK, YUKSEKLIK, "Yasam Oyunu", NULL, NULL); // Pencereyi oluştur.
if (!pencere) {
glfwTerminate(); // Oluşturulmazsa çık.
return -1;
}
glfwMakeContextCurrent(pencere); // OpenGL bağlamını bu pencereye uygula.
glOrtho(0, GENISLIK, YUKSEKLIK, 0, -1, 1); // Oranları ayarla.
izgaraBaslat(); // Başlangıç gridini oluştur.
while (!glfwWindowShouldClose(pencere)) { // Pencere açıkken
izgaraCiz(); // Çizimi güncelle.
izgaraGuncelle(); // Oyun kurallarına göre hücre durumlarını güncelle.
glfwSwapBuffers(pencere); // Çizimi pencereye uygula.
glfwPollEvents(); // Olayları kontrol et.
}
glfwDestroyWindow(pencere); // Pencereyi temizle.
glfwTerminate(); // GLFW'yi sonlandır.
return 0;
}
görsel
görsel
görsel
korkunç bir cehennem senaryosu gibi görünüyor... her çıkmaz sokağa girdiğinizde içinde olduğunuz harita güncellenir, ve rastgele bir konumda yeniden çıkışı aramaya başlayıp, sonsuz bir döngüye girersiniz.
#include <SFML/Graphics.hpp>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <stack>
#include <iostream>
#include <string>
#include <algorithm>
// Sabitler
const int WINDOW_WIDTH = 1920; // Pencere genişliği
const int WINDOW_HEIGHT = 1080; // Pencere yüksekliği
const int CELL_SIZE = 20; // Hücre boyutu (piksel)
const int GRID_WIDTH = WINDOW_WIDTH / CELL_SIZE; // Izgara genişliği
const int GRID_HEIGHT = WINDOW_HEIGHT / CELL_SIZE; // Izgara yüksekliği
// Labirent hücre durumları
enum Cell {
WALL = 0,
PATH = 1,
VISITED = 2 // Sarı hücre
};
// DFS yığını hücreleri takip etmek için kullanılır
std::stack<std::pair<int, int>> dfsStack;
// Labirent oluşturma algoritması (Derinlik-Öncelikli Arama)
void createMaze(std::vector<std::vector<Cell>>& maze) {
int startX = 1, startY = 1;
maze[startX][startY] = PATH; // Başlangıç hücresini açık olarak işaretle
dfsStack.push({startX, startY});
while (!dfsStack.empty()) {
int x, y;
std::tie(x, y) = dfsStack.top();
std::vector<std::pair<int, int>> neighbors;
// Komşu hücreleri kontrol et
if (x > 1 && maze[x - 2][y] == WALL) neighbors.push_back({x - 2, y});
if (x < GRID_WIDTH - 2 && maze[x + 2][y] == WALL) neighbors.push_back({x + 2, y});
if (y > 1 && maze[x][y - 2] == WALL) neighbors.push_back({x, y - 2});
if (y < GRID_HEIGHT - 2 && maze[x][y + 2] == WALL) neighbors.push_back({x, y + 2});
if (!neighbors.empty()) {
// Rastgele bir komşu seç ve labirenti oluştur
int randIndex = std::rand() % neighbors.size();
int newX = neighbors[randIndex].first;
int newY = neighbors[randIndex].second;
maze[newX][newY] = PATH; // Yeni hücreyi açık olarak işaretle
maze[(x + newX) / 2][(y + newY) / 2] = PATH; // Duvarı kaldır
dfsStack.push({newX, newY}); // Yeni hücreyi yığına ekle
} else {
dfsStack.pop(); // Geriye doğru ilerle
}
}
}
// Şifreleme fonksiyonu (basit dönüşüm)
std::string encryptPath(const std::vector<std::pair<int, int>>& path) {
std::string encryptedMessage;
for (const auto& coord : path) {
// Her koordinatı alfanümerik formata dönüştür
encryptedMessage += std::to_string(coord.first) + "," + std::to_string(coord.second) + ";";
}
return encryptedMessage;
}
// Yürüyüşçünün geçerli bir hareket seçeneği olup olmadığını kontrol et
bool hasValidMoves(const std::vector<std::vector<Cell>>& maze, int x, int y) {
return (x > 1 && maze[x - 1][y] == PATH) ||
(x < GRID_WIDTH - 2 && maze[x + 1][y] == PATH) ||
(y > 1 && maze[x][y - 1] == PATH) ||
(y < GRID_HEIGHT - 2 && maze[x][y + 1] == PATH);
}
int main() {
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "Labirentte Rastgele Yürüyüş");
std::srand(static_cast<unsigned>(std::time(nullptr)));
// Labirent verisi
std::vector<std::vector<Cell>> maze(GRID_WIDTH, std::vector<Cell>(GRID_HEIGHT, WALL));
createMaze(maze); // Labirenti oluştur
// Rastgele başlatılan yürüyüşçü için başlangıç noktası
int x = 1 + (std::rand() % (GRID_WIDTH - 2)); // Rastgele başlangıç noktası X
int y = 1 + (std::rand() % (GRID_HEIGHT - 2)); // Rastgele başlangıç noktası Y
maze[x][y] = VISITED; // ilk hücreyi ziyaret edildi olarak işaretle
std::vector<std::pair<int, int>> visitedCells; // Ziyaret edilen hücrelerin koordinatları
sf::RectangleShape cell(sf::Vector2f(CELL_SIZE, CELL_SIZE));
sf::RectangleShape walker(sf::Vector2f(CELL_SIZE, CELL_SIZE));
walker.setFillColor(sf::Color::Yellow); // Yürüyüşçü rengi sarı
sf::Clock clock;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
float dt = clock.restart().asSeconds();
// Yürüyüşçünün geçerli bir hareket seçeneği olup olmadığını kontrol et
if (!hasValidMoves(maze, x, y)) {
// Eğer yoksa, yürüyüşçüyü yeni bir rastgele konumdan başlat
x = 1 + (std::rand() % (GRID_WIDTH - 2));
y = 1 + (std::rand() % (GRID_HEIGHT - 2));
maze = std::vector<std::vector<Cell>>(GRID_WIDTH, std::vector<Cell>(GRID_HEIGHT, WALL));
createMaze(maze); // Yeni bir labirent oluştur
visitedCells.clear(); // Ziyaret edilen hücreleri temizle
}
// Rastgele yürüyüş algoritması ile sonraki adımı seç
int direction = std::rand() % 4;
switch (direction) {
case 0: if (maze[x - 1][y] == PATH) x--; break; // Sol
case 1: if (maze[x + 1][y] == PATH) x++; break; // Sağ
case 2: if (maze[x][y - 1] == PATH) y--; break; // Yukarı
case 3: if (maze[x][y + 1] == PATH) y++; break; // Aşağı
}
// Yürüyüşçü bir koridora girdiyse, o hücreyi sarıya çevir
if (maze[x][y] == PATH) {
maze[x][y] = VISITED; // Ziyaret edildi olarak işaretle
visitedCells.push_back({x, y}); // Ziyaret edilen hücreyi sakla
}
// Ekranı çiz
window.clear();
for (int i = 0; i < GRID_WIDTH; ++i) {
for (int j = 0; j < GRID_HEIGHT; ++j) {
if (maze[i][j] == WALL) {
cell.setFillColor(sf::Color(0, 100, 0)); // Koyu yeşil duvar
} else if (maze[i][j] == PATH) {
cell.setFillColor(sf::Color(0, 255, 0)); // Yeşil boş hücre
} else if (maze[i][j] == VISITED) {
cell.setFillColor(sf::Color::Yellow); // Sarı hücre (ziyaret edildi)
}
cell.setPosition(i * CELL_SIZE, j * CELL_SIZE);
window.draw(cell);
}
}
// Yürüyüşçüyü çiz
walker.setPosition(x * CELL_SIZE, y * CELL_SIZE);
window.draw(walker);
window.display();
}
// Ziyaret edilen hücrelerin koordinatlarını şifrele
std::string encryptedMessage = encryptPath(visitedCells);
std::cout << "Şifrelenmiş Yol: " << encryptedMessage << std::endl;
return 0;
}
#include <SFML/Graphics.hpp>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <stack>
#include <iostream>
#include <string>
#include <algorithm>
// Sabitler
const int WINDOW_WIDTH = 1920; // Pencere genişliği
const int WINDOW_HEIGHT = 1080; // Pencere yüksekliği
const int CELL_SIZE = 20; // Hücre boyutu (piksel)
const int GRID_WIDTH = WINDOW_WIDTH / CELL_SIZE; // Izgara genişliği
const int GRID_HEIGHT = WINDOW_HEIGHT / CELL_SIZE; // Izgara yüksekliği
// Labirent hücre durumları
enum Cell {
WALL = 0,
PATH = 1,
VISITED = 2 // Sarı hücre
};
// DFS yığını hücreleri takip etmek için kullanılır
std::stack<std::pair<int, int>> dfsStack;
// Labirent oluşturma algoritması (Derinlik-Öncelikli Arama)
void createMaze(std::vector<std::vector<Cell>>& maze) {
int startX = 1, startY = 1;
maze[startX][startY] = PATH; // Başlangıç hücresini açık olarak işaretle
dfsStack.push({startX, startY});
while (!dfsStack.empty()) {
int x, y;
std::tie(x, y) = dfsStack.top();
std::vector<std::pair<int, int>> neighbors;
// Komşu hücreleri kontrol et
if (x > 1 && maze[x - 2][y] == WALL) neighbors.push_back({x - 2, y});
if (x < GRID_WIDTH - 2 && maze[x + 2][y] == WALL) neighbors.push_back({x + 2, y});
if (y > 1 && maze[x][y - 2] == WALL) neighbors.push_back({x, y - 2});
if (y < GRID_HEIGHT - 2 && maze[x][y + 2] == WALL) neighbors.push_back({x, y + 2});
if (!neighbors.empty()) {
// Rastgele bir komşu seç ve labirenti oluştur
int randIndex = std::rand() % neighbors.size();
int newX = neighbors[randIndex].first;
int newY = neighbors[randIndex].second;
maze[newX][newY] = PATH; // Yeni hücreyi açık olarak işaretle
maze[(x + newX) / 2][(y + newY) / 2] = PATH; // Duvarı kaldır
dfsStack.push({newX, newY}); // Yeni hücreyi yığına ekle
} else {
dfsStack.pop(); // Geriye doğru ilerle
}
}
}
// Şifreleme fonksiyonu (basit dönüşüm)
std::string encryptPath(const std::vector<std::pair<int, int>>& path) {
std::string encryptedMessage;
for (const auto& coord : path) {
// Her koordinatı alfanümerik formata dönüştür
encryptedMessage += std::to_string(coord.first) + "," + std::to_string(coord.second) + ";";
}
return encryptedMessage;
}
// Yürüyüşçünün geçerli bir hareket seçeneği olup olmadığını kontrol et
bool hasValidMoves(const std::vector<std::vector<Cell>>& maze, int x, int y) {
return (x > 1 && maze[x - 1][y] == PATH) ||
(x < GRID_WIDTH - 2 && maze[x + 1][y] == PATH) ||
(y > 1 && maze[x][y - 1] == PATH) ||
(y < GRID_HEIGHT - 2 && maze[x][y + 1] == PATH);
}
int main() {
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "Labirentte Rastgele Yürüyüş");
std::srand(static_cast<unsigned>(std::time(nullptr)));
// Labirent verisi
std::vector<std::vector<Cell>> maze(GRID_WIDTH, std::vector<Cell>(GRID_HEIGHT, WALL));
createMaze(maze); // Labirenti oluştur
// Rastgele başlatılan yürüyüşçü için başlangıç noktası
int x = 1 + (std::rand() % (GRID_WIDTH - 2)); // Rastgele başlangıç noktası X
int y = 1 + (std::rand() % (GRID_HEIGHT - 2)); // Rastgele başlangıç noktası Y
maze[x][y] = VISITED; // ilk hücreyi ziyaret edildi olarak işaretle
std::vector<std::pair<int, int>> visitedCells; // Ziyaret edilen hücrelerin koordinatları
sf::RectangleShape cell(sf::Vector2f(CELL_SIZE, CELL_SIZE));
sf::RectangleShape walker(sf::Vector2f(CELL_SIZE, CELL_SIZE));
walker.setFillColor(sf::Color::Yellow); // Yürüyüşçü rengi sarı
sf::Clock clock;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
float dt = clock.restart().asSeconds();
// Yürüyüşçünün geçerli bir hareket seçeneği olup olmadığını kontrol et
if (!hasValidMoves(maze, x, y)) {
// Eğer yoksa, yürüyüşçüyü yeni bir rastgele konumdan başlat
x = 1 + (std::rand() % (GRID_WIDTH - 2));
y = 1 + (std::rand() % (GRID_HEIGHT - 2));
maze = std::vector<std::vector<Cell>>(GRID_WIDTH, std::vector<Cell>(GRID_HEIGHT, WALL));
createMaze(maze); // Yeni bir labirent oluştur
visitedCells.clear(); // Ziyaret edilen hücreleri temizle
}
// Rastgele yürüyüş algoritması ile sonraki adımı seç
int direction = std::rand() % 4;
switch (direction) {
case 0: if (maze[x - 1][y] == PATH) x--; break; // Sol
case 1: if (maze[x + 1][y] == PATH) x++; break; // Sağ
case 2: if (maze[x][y - 1] == PATH) y--; break; // Yukarı
case 3: if (maze[x][y + 1] == PATH) y++; break; // Aşağı
}
// Yürüyüşçü bir koridora girdiyse, o hücreyi sarıya çevir
if (maze[x][y] == PATH) {
maze[x][y] = VISITED; // Ziyaret edildi olarak işaretle
visitedCells.push_back({x, y}); // Ziyaret edilen hücreyi sakla
}
// Ekranı çiz
window.clear();
for (int i = 0; i < GRID_WIDTH; ++i) {
for (int j = 0; j < GRID_HEIGHT; ++j) {
if (maze[i][j] == WALL) {
cell.setFillColor(sf::Color(0, 100, 0)); // Koyu yeşil duvar
} else if (maze[i][j] == PATH) {
cell.setFillColor(sf::Color(0, 255, 0)); // Yeşil boş hücre
} else if (maze[i][j] == VISITED) {
cell.setFillColor(sf::Color::Yellow); // Sarı hücre (ziyaret edildi)
}
cell.setPosition(i * CELL_SIZE, j * CELL_SIZE);
window.draw(cell);
}
}
// Yürüyüşçüyü çiz
walker.setPosition(x * CELL_SIZE, y * CELL_SIZE);
window.draw(walker);
window.display();
}
// Ziyaret edilen hücrelerin koordinatlarını şifrele
std::string encryptedMessage = encryptPath(visitedCells);
std::cout << "Şifrelenmiş Yol: " << encryptedMessage << std::endl;
return 0;
}
basit zannedilen fizik mekaniği, kinematik 101 konusu 2 boyutlu eğik atış hareketinden (projectile motion ) ilham alınarak tasarlanmış:
#include <SFML/Graphics.hpp>
#include <cmath>
#include <vector>
#include <sstream>
const float GRAVITY = 981.0f;
const float JUMP_SPEED = 400.0f;
const float MOVE_SPEED = 300.0f;
const float BOOST_MULTIPLIER = 1.5f;
const float DOUBLE_JUMP_MULTIPLIER = 1.5f; // ikinci zıplama için hız çarpanı
const float FLOOR_Y = 540.0f;
const float WINDOW_WIDTH = 1920.0f;
const float WINDOW_HEIGHT = 1080.0f;
int main()
{
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "2D-EGIK ATIS HAREKETI");
// Font yükleme
sf::Font font;
if (!font.loadFromFile("/home/kratertepesi/Masaüstü/Programlar/arial.ttf"))
{
return -1; // Font yüklenemezse programı sonlandır
}
// Başlık metni oluşturma
sf::Text titleText("2D-EGIK ATIS HAREKETI", font, 50); // Font boyutu 50
titleText.setFillColor(sf::Color::White);
titleText.setPosition(WINDOW_WIDTH / 2 - titleText.getGlobalBounds().width / 2, 10); // Ortalanmış başlık
sf::RectangleShape blueSquare(sf::Vector2f(50.0f, 50.0f));
blueSquare.setFillColor(sf::Color::Blue);
blueSquare.setPosition(960, FLOOR_Y);
sf::RectangleShape ground(sf::Vector2f(WINDOW_WIDTH, WINDOW_HEIGHT - (FLOOR_Y + blueSquare.getSize().y)));
ground.setFillColor(sf::Color::Green);
ground.setPosition(0, FLOOR_Y + blueSquare.getSize().y);
sf::RectangleShape sky(sf::Vector2f(WINDOW_WIDTH, FLOOR_Y));
sky.setFillColor(sf::Color(135, 206, 235));
sf::RectangleShape background(sf::Vector2f(WINDOW_WIDTH, blueSquare.getSize().y));
background.setFillColor(sf::Color(135, 206, 235));
background.setPosition(0, FLOOR_Y);
bool jumping = false;
bool onGround = true;
bool doubleJumpReady = false; // ikinci zıplama hazır mı
float xVelocity = 0.0f;
float yVelocity = 0.0f;
float jumpStartY = FLOOR_Y; // Zıplama başlangıç noktası
sf::Clock clock;
std::vector<sf::Vertex> path; // Paraboli çizmek için yol noktaları
sf::Text angleText, forceText;
angleText.setFont(font);
angleText.setCharacterSize(24);
angleText.setFillColor(sf::Color::White);
forceText.setFont(font);
forceText.setCharacterSize(24);
forceText.setFillColor(sf::Color::White);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
float dt = clock.restart().asSeconds();
// Hareket hızını ve zıplama hızını belirler
float currentMoveSpeed = MOVE_SPEED;
float currentJumpSpeed = JUMP_SPEED;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
currentMoveSpeed *= BOOST_MULTIPLIER;
currentJumpSpeed *= BOOST_MULTIPLIER;
}
// Hareket kontrolleri
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
xVelocity = -currentMoveSpeed;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
xVelocity = currentMoveSpeed;
}
else
{
xVelocity = 0.0f;
}
// Zıplama işlemi
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && onGround)
{
jumping = true;
onGround = false;
yVelocity = -currentJumpSpeed;
jumpStartY = blueSquare.getPosition().y; // Zıplama başlangıç yüksekliği ayarlanır
doubleJumpReady = true; // ikinci zıplama yapılabilir
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && doubleJumpReady)
{
yVelocity = -currentJumpSpeed * DOUBLE_JUMP_MULTIPLIER;
doubleJumpReady = false; // ikinci zıplama bir kez yapılır
}
// Yer çekimi etkisi
if (!onGround)
{
yVelocity += GRAVITY * dt;
}
blueSquare.move(xVelocity * dt, yVelocity * dt);
// Parabol çizimi için pozisyon ekle
path.push_back(sf::Vertex(blueSquare.getPosition(), sf::Color::Red));
// Açıyı ve kuvveti hesapla
float angle = atan2(-yVelocity, xVelocity) * 180 / 3.14159; // Derece cinsinden açı
float force = sqrt(xVelocity * xVelocity + yVelocity * yVelocity); // Kuvvet büyüklüğü
std::stringstream angleStream, forceStream;
angleStream << "Angle: " << angle << " degrees";
forceStream << "Force: " << force << " N";
angleText.setString(angleStream.str());
forceText.setString(forceStream.str());
angleText.setPosition(10, 10);
forceText.setPosition(10, 40);
if (blueSquare.getPosition().y >= FLOOR_Y)
{
blueSquare.setPosition(blueSquare.getPosition().x, FLOOR_Y);
yVelocity = 0.0f;
onGround = true;
doubleJumpReady = false; // Yere indiğinde ikinci zıplama sıfırlanır
path.clear(); // Parabol çizgisini sıfırla
}
if (blueSquare.getPosition().x < 0)
{
blueSquare.setPosition(0, blueSquare.getPosition().y);
}
else if (blueSquare.getPosition().x + blueSquare.getSize().x > window.getSize().x)
{
blueSquare.setPosition(window.getSize().x - blueSquare.getSize().x, blueSquare.getPosition().y);
}
window.clear();
window.draw(sky);
window.draw(background);
window.draw(ground);
// Parabol çizimi
if (!path.empty())
{
window.draw(&path[0], path.size(), sf::LinesStrip);
}
window.draw(blueSquare);
window.draw(titleText); // Başlık metnini çiz
window.draw(angleText);
window.draw(forceText);
window.display();
}
return 0;
}
#include <SFML/Graphics.hpp>
#include <cmath>
#include <vector>
#include <sstream>
const float GRAVITY = 981.0f;
const float JUMP_SPEED = 400.0f;
const float MOVE_SPEED = 300.0f;
const float BOOST_MULTIPLIER = 1.5f;
const float DOUBLE_JUMP_MULTIPLIER = 1.5f; // ikinci zıplama için hız çarpanı
const float FLOOR_Y = 540.0f;
const float WINDOW_WIDTH = 1920.0f;
const float WINDOW_HEIGHT = 1080.0f;
int main()
{
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "2D-EGIK ATIS HAREKETI");
// Font yükleme
sf::Font font;
if (!font.loadFromFile("/home/kratertepesi/Masaüstü/Programlar/arial.ttf"))
{
return -1; // Font yüklenemezse programı sonlandır
}
// Başlık metni oluşturma
sf::Text titleText("2D-EGIK ATIS HAREKETI", font, 50); // Font boyutu 50
titleText.setFillColor(sf::Color::White);
titleText.setPosition(WINDOW_WIDTH / 2 - titleText.getGlobalBounds().width / 2, 10); // Ortalanmış başlık
sf::RectangleShape blueSquare(sf::Vector2f(50.0f, 50.0f));
blueSquare.setFillColor(sf::Color::Blue);
blueSquare.setPosition(960, FLOOR_Y);
sf::RectangleShape ground(sf::Vector2f(WINDOW_WIDTH, WINDOW_HEIGHT - (FLOOR_Y + blueSquare.getSize().y)));
ground.setFillColor(sf::Color::Green);
ground.setPosition(0, FLOOR_Y + blueSquare.getSize().y);
sf::RectangleShape sky(sf::Vector2f(WINDOW_WIDTH, FLOOR_Y));
sky.setFillColor(sf::Color(135, 206, 235));
sf::RectangleShape background(sf::Vector2f(WINDOW_WIDTH, blueSquare.getSize().y));
background.setFillColor(sf::Color(135, 206, 235));
background.setPosition(0, FLOOR_Y);
bool jumping = false;
bool onGround = true;
bool doubleJumpReady = false; // ikinci zıplama hazır mı
float xVelocity = 0.0f;
float yVelocity = 0.0f;
float jumpStartY = FLOOR_Y; // Zıplama başlangıç noktası
sf::Clock clock;
std::vector<sf::Vertex> path; // Paraboli çizmek için yol noktaları
sf::Text angleText, forceText;
angleText.setFont(font);
angleText.setCharacterSize(24);
angleText.setFillColor(sf::Color::White);
forceText.setFont(font);
forceText.setCharacterSize(24);
forceText.setFillColor(sf::Color::White);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
float dt = clock.restart().asSeconds();
// Hareket hızını ve zıplama hızını belirler
float currentMoveSpeed = MOVE_SPEED;
float currentJumpSpeed = JUMP_SPEED;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
currentMoveSpeed *= BOOST_MULTIPLIER;
currentJumpSpeed *= BOOST_MULTIPLIER;
}
// Hareket kontrolleri
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
xVelocity = -currentMoveSpeed;
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
xVelocity = currentMoveSpeed;
}
else
{
xVelocity = 0.0f;
}
// Zıplama işlemi
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && onGround)
{
jumping = true;
onGround = false;
yVelocity = -currentJumpSpeed;
jumpStartY = blueSquare.getPosition().y; // Zıplama başlangıç yüksekliği ayarlanır
doubleJumpReady = true; // ikinci zıplama yapılabilir
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && doubleJumpReady)
{
yVelocity = -currentJumpSpeed * DOUBLE_JUMP_MULTIPLIER;
doubleJumpReady = false; // ikinci zıplama bir kez yapılır
}
// Yer çekimi etkisi
if (!onGround)
{
yVelocity += GRAVITY * dt;
}
blueSquare.move(xVelocity * dt, yVelocity * dt);
// Parabol çizimi için pozisyon ekle
path.push_back(sf::Vertex(blueSquare.getPosition(), sf::Color::Red));
// Açıyı ve kuvveti hesapla
float angle = atan2(-yVelocity, xVelocity) * 180 / 3.14159; // Derece cinsinden açı
float force = sqrt(xVelocity * xVelocity + yVelocity * yVelocity); // Kuvvet büyüklüğü
std::stringstream angleStream, forceStream;
angleStream << "Angle: " << angle << " degrees";
forceStream << "Force: " << force << " N";
angleText.setString(angleStream.str());
forceText.setString(forceStream.str());
angleText.setPosition(10, 10);
forceText.setPosition(10, 40);
if (blueSquare.getPosition().y >= FLOOR_Y)
{
blueSquare.setPosition(blueSquare.getPosition().x, FLOOR_Y);
yVelocity = 0.0f;
onGround = true;
doubleJumpReady = false; // Yere indiğinde ikinci zıplama sıfırlanır
path.clear(); // Parabol çizgisini sıfırla
}
if (blueSquare.getPosition().x < 0)
{
blueSquare.setPosition(0, blueSquare.getPosition().y);
}
else if (blueSquare.getPosition().x + blueSquare.getSize().x > window.getSize().x)
{
blueSquare.setPosition(window.getSize().x - blueSquare.getSize().x, blueSquare.getPosition().y);
}
window.clear();
window.draw(sky);
window.draw(background);
window.draw(ground);
// Parabol çizimi
if (!path.empty())
{
window.draw(&path[0], path.size(), sf::LinesStrip);
}
window.draw(blueSquare);
window.draw(titleText); // Başlık metnini çiz
window.draw(angleText);
window.draw(forceText);
window.display();
}
return 0;
}
bu eğrinin çalışma mantığını özetleyen güzel bir program:
#include <SFML/Graphics.hpp> // SFML grafik kütüphanesini ekle
#include <SFML/Window.hpp> // SFML pencere yönetimi için gerekli kütüphane
#include <iostream> // Girdi/çıktı işlemleri için gerekli kütüphane
#include <cmath> // Matematiksel işlemler için gerekli kütüphane
#include <vector> // Dinamik diziler için gerekli kütüphane
const float radius = 5.0f; // Daire çapı, A ve B noktalarını temsil eden dairelerin yarıçapı
const float pixelToCmConversionFactor = 100.0f / 3640.0f; // Pikseli cm'ye çeviren faktör
const float g = 980.0f; // Yerçekimi ivmesi (cm/s^2), düşme hareketinin hesaplanmasında kullanılır
bool drawing = false; // Çizim durumu, kullanıcı çizim yapıyor mu kontrol eder
std::vector<sf::Vector2f> curvePoints; // Eğri noktalarını tutmak için dinamik bir dizi
// Mesafe hesaplama fonksiyonu
float calculateDistance(const sf::Vector2f& A, const sf::Vector2f& B) {
return std::sqrt(std::pow(B.x - A.x, 2) + std::pow(B.y - A.y, 2)); // A ve B arasındaki mesafeyi hesaplar
}
// Brachistochrone eğrisi için süre hesaplama
float calculateBrachistochroneTime(float length) {
return sqrt(2 * length / g); // Düşme süresini hesaplamak için kullanılan formül
}
int main() {
// Pencere oluştur
sf::RenderWindow window(sf::VideoMode(1920, 1080), "Distance Drawing"); // 1920x1080 boyutunda bir pencere oluştur
window.setFramerateLimit(60); // FPS sınırını 60'a ayarla
// A ve B noktaları
sf::Vector2f A(960, 540); // A noktası, pencerenin ortasında
sf::Vector2f B(960, 460); // B noktası, A noktasının biraz yukarısında
while (window.isOpen()) { // Pencere açık olduğu sürece döngü
sf::Event event; // Olay tanımlaması
while (window.pollEvent(event)) { // Olayları kontrol et
if (event.type == sf::Event::Closed) // Pencere kapandığında
window.close(); // Pencereyi kapat
// Mouse tuşuna basma olayı
if (event.type == sf::Event::MouseButtonPressed) {
if (event.mouseButton.button == sf::Mouse::Left) { // Sol fare tuşuna basıldığında
drawing = true; // Çizim modunu aç
curvePoints.clear(); // Çizimi sıfırla
}
}
// Mouse tuşunu bırakma olayı
if (event.type == sf::Event::MouseButtonReleased) {
if (event.mouseButton.button == sf::Mouse::Left) { // Sol fare tuşu bırakıldığında
drawing = false; // Çizim modunu kapat
// Eğrinin toplam uzunluğunu hesapla
float totalLength = 0.0f; // Toplam uzunluğu başlat
for (size_t i = 1; i < curvePoints.size(); ++i) { // Eğri noktaları arasında döngü
totalLength += calculateDistance(curvePoints[i - 1], curvePoints[i]); // Her iki nokta arasındaki mesafeyi topla
}
// Piksel cinsinden uzunluğu cm cinsine çevir
float totalLengthCm = totalLength * pixelToCmConversionFactor; // Pikseli cm'ye çevir
// Brachistochrone süresini hesapla
float timeToReachB = calculateBrachistochroneTime(totalLengthCm); // Süre hesapla
// Sonuçları terminale yazdır
std::cout << "Total Length of Curve: " << totalLengthCm << " cm" << std::endl; // Eğrinin toplam uzunluğunu yazdır
std::cout << "Time to reach B: " << timeToReachB << " seconds" << std::endl; // B noktasına ulaşma süresini yazdır
}
}
// Mouse hareketi
if (event.type == sf::Event::MouseMoved && drawing) { // Fare hareket ettiyse ve çizim modunda ise
sf::Vector2f currentPoint(static_cast<float>(event.mouseMove.x), // Mevcut fare konumunu al
static_cast<float>(event.mouseMove.y));
curvePoints.push_back(currentPoint); // Mevcut konumu eğri noktalarına ekle
}
}
// Ekranı temizle
window.clear(sf::Color::White); // Ekranı beyaz renkle temizle
// A ve B noktalarını çiz
sf::CircleShape circleA(radius); // A noktası için daire oluştur
circleA.setFillColor(sf::Color::Black); // Dairenin rengini siyah yap
circleA.setPosition(A.x - radius, A.y - radius); // Dairenin konumunu ayarla
window.draw(circleA); // Daireyi çiz
sf::CircleShape circleB(radius); // B noktası için daire oluştur
circleB.setFillColor(sf::Color::Black); // Dairenin rengini siyah yap
circleB.setPosition(B.x - radius, B.y - radius); // Dairenin konumunu ayarla
window.draw(circleB); // Daireyi çiz
// Eğriyi çiz
if (curvePoints.size() > 1) { // Eğri noktaları 2'den fazlaysa
sf::VertexArray line(sf::PrimitiveType::LineStrip, curvePoints.size()); // Eğriyi çizmek için vertex dizisi oluştur
for (size_t i = 0; i < curvePoints.size(); ++i) { // Eğri noktaları arasında döngü
line[i].position = curvePoints[i]; // Her noktanın konumunu ayarla
line[i].color = sf::Color::Black; // Rengi siyah yap
}
window.draw(line); // Eğriyi çiz
}
window.display(); // Çizimi güncelle
}
return 0; // Programı sona erdir
}
#include <SFML/Graphics.hpp> // SFML grafik kütüphanesini ekle
#include <SFML/Window.hpp> // SFML pencere yönetimi için gerekli kütüphane
#include <iostream> // Girdi/çıktı işlemleri için gerekli kütüphane
#include <cmath> // Matematiksel işlemler için gerekli kütüphane
#include <vector> // Dinamik diziler için gerekli kütüphane
const float radius = 5.0f; // Daire çapı, A ve B noktalarını temsil eden dairelerin yarıçapı
const float pixelToCmConversionFactor = 100.0f / 3640.0f; // Pikseli cm'ye çeviren faktör
const float g = 980.0f; // Yerçekimi ivmesi (cm/s^2), düşme hareketinin hesaplanmasında kullanılır
bool drawing = false; // Çizim durumu, kullanıcı çizim yapıyor mu kontrol eder
std::vector<sf::Vector2f> curvePoints; // Eğri noktalarını tutmak için dinamik bir dizi
// Mesafe hesaplama fonksiyonu
float calculateDistance(const sf::Vector2f& A, const sf::Vector2f& B) {
return std::sqrt(std::pow(B.x - A.x, 2) + std::pow(B.y - A.y, 2)); // A ve B arasındaki mesafeyi hesaplar
}
// Brachistochrone eğrisi için süre hesaplama
float calculateBrachistochroneTime(float length) {
return sqrt(2 * length / g); // Düşme süresini hesaplamak için kullanılan formül
}
int main() {
// Pencere oluştur
sf::RenderWindow window(sf::VideoMode(1920, 1080), "Distance Drawing"); // 1920x1080 boyutunda bir pencere oluştur
window.setFramerateLimit(60); // FPS sınırını 60'a ayarla
// A ve B noktaları
sf::Vector2f A(960, 540); // A noktası, pencerenin ortasında
sf::Vector2f B(960, 460); // B noktası, A noktasının biraz yukarısında
while (window.isOpen()) { // Pencere açık olduğu sürece döngü
sf::Event event; // Olay tanımlaması
while (window.pollEvent(event)) { // Olayları kontrol et
if (event.type == sf::Event::Closed) // Pencere kapandığında
window.close(); // Pencereyi kapat
// Mouse tuşuna basma olayı
if (event.type == sf::Event::MouseButtonPressed) {
if (event.mouseButton.button == sf::Mouse::Left) { // Sol fare tuşuna basıldığında
drawing = true; // Çizim modunu aç
curvePoints.clear(); // Çizimi sıfırla
}
}
// Mouse tuşunu bırakma olayı
if (event.type == sf::Event::MouseButtonReleased) {
if (event.mouseButton.button == sf::Mouse::Left) { // Sol fare tuşu bırakıldığında
drawing = false; // Çizim modunu kapat
// Eğrinin toplam uzunluğunu hesapla
float totalLength = 0.0f; // Toplam uzunluğu başlat
for (size_t i = 1; i < curvePoints.size(); ++i) { // Eğri noktaları arasında döngü
totalLength += calculateDistance(curvePoints[i - 1], curvePoints[i]); // Her iki nokta arasındaki mesafeyi topla
}
// Piksel cinsinden uzunluğu cm cinsine çevir
float totalLengthCm = totalLength * pixelToCmConversionFactor; // Pikseli cm'ye çevir
// Brachistochrone süresini hesapla
float timeToReachB = calculateBrachistochroneTime(totalLengthCm); // Süre hesapla
// Sonuçları terminale yazdır
std::cout << "Total Length of Curve: " << totalLengthCm << " cm" << std::endl; // Eğrinin toplam uzunluğunu yazdır
std::cout << "Time to reach B: " << timeToReachB << " seconds" << std::endl; // B noktasına ulaşma süresini yazdır
}
}
// Mouse hareketi
if (event.type == sf::Event::MouseMoved && drawing) { // Fare hareket ettiyse ve çizim modunda ise
sf::Vector2f currentPoint(static_cast<float>(event.mouseMove.x), // Mevcut fare konumunu al
static_cast<float>(event.mouseMove.y));
curvePoints.push_back(currentPoint); // Mevcut konumu eğri noktalarına ekle
}
}
// Ekranı temizle
window.clear(sf::Color::White); // Ekranı beyaz renkle temizle
// A ve B noktalarını çiz
sf::CircleShape circleA(radius); // A noktası için daire oluştur
circleA.setFillColor(sf::Color::Black); // Dairenin rengini siyah yap
circleA.setPosition(A.x - radius, A.y - radius); // Dairenin konumunu ayarla
window.draw(circleA); // Daireyi çiz
sf::CircleShape circleB(radius); // B noktası için daire oluştur
circleB.setFillColor(sf::Color::Black); // Dairenin rengini siyah yap
circleB.setPosition(B.x - radius, B.y - radius); // Dairenin konumunu ayarla
window.draw(circleB); // Daireyi çiz
// Eğriyi çiz
if (curvePoints.size() > 1) { // Eğri noktaları 2'den fazlaysa
sf::VertexArray line(sf::PrimitiveType::LineStrip, curvePoints.size()); // Eğriyi çizmek için vertex dizisi oluştur
for (size_t i = 0; i < curvePoints.size(); ++i) { // Eğri noktaları arasında döngü
line[i].position = curvePoints[i]; // Her noktanın konumunu ayarla
line[i].color = sf::Color::Black; // Rengi siyah yap
}
window.draw(line); // Eğriyi çiz
}
window.display(); // Çizimi güncelle
}
return 0; // Programı sona erdir
}
yaşadığımız dünyanın simülasyon olup olmadığını sorgulatan karelere evsahipliği yapar.
#include <GL/glut.h>
#include <glm/glm.hpp>
#include <cmath>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace glm;
// Fizik sabitleri
const float G = 6.67430e-11f; // Kütleçekim sabiti
const float dt = 20.51f; // Zaman adımı
const int NUM_SPHERES = 402; // 100 rastgele küre ve 2 başlangıç küresi
// Ekran boyutları
int windowWidth = 1920;
int windowHeight = 1080;
// Küre yapısı
struct Sphere {
vec3 position;
vec3 velocity;
vec3 acceleration;
float mass;
float radius;
float angularVelocity; // Açısal hız
float spin; // Dönme açısı
vec3 color; // Renk
};
// Küre tanımları
std::vector<Sphere> spheres;
// Işık kaynağı
vec3 lightPosition = vec3(0.8f, -0.8f, 0.8f);
// Kütleçekim kuvvetini hesaplayan fonksiyon
vec3 computeGravitationalForce(Sphere& a, Sphere& b) {
vec3 direction = b.position - a.position;
float distance = length(direction);
// Kütleçekim kuvveti, mesafe sıfıra inmemeli
if (distance == 0) return vec3(0.0f);
vec3 force = G * a.mass * b.mass / (distance * distance) * normalize(direction);
return force;
}
// Güncelleme fonksiyonu
void updatePhysics() {
for (size_t i = 0; i < spheres.size(); ++i) {
spheres[i].acceleration = vec3(0.0f); // Her küre için ivmeyi sıfırla
}
// Kütleçekim kuvvetlerini hesapla
for (size_t i = 0; i < spheres.size(); ++i) {
for (size_t j = i + 1; j < spheres.size(); ++j) {
vec3 force = computeGravitationalForce(spheres[i], spheres[j]);
spheres[i].acceleration += force / spheres[i].mass;
spheres[j].acceleration -= force / spheres[j].mass; // Üzerine etki eden kuvvetin zıttı
}
}
// Hız ve konum güncellemeleri
for (Sphere& sphere : spheres) {
sphere.velocity += sphere.acceleration * dt;
sphere.position += sphere.velocity * dt;
// Ekranın dışına çıkma kontrolü
if (sphere.position.x < -1.0f - sphere.radius) {
sphere.position.x = 1.0f + sphere.radius; // Sol dışına çıktıysa sağdan gir
} else if (sphere.position.x > 1.0f + sphere.radius) {
sphere.position.x = -1.0f - sphere.radius; // Sağ dışına çıktıysa soldan gir
}
if (sphere.position.y < -1.0f - sphere.radius) {
sphere.position.y = 1.0f + sphere.radius; // Alt dışına çıktıysa üstten gir
} else if (sphere.position.y > 1.0f + sphere.radius) {
sphere.position.y = -1.0f - sphere.radius; // Üst dışına çıktıysa alttan gir
}
// Açısal dönüşü güncelle
sphere.spin += sphere.angularVelocity * dt;
}
}
// Aydınlatmayı ayarla
void setupLighting() {
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat lightPos[] = {lightPosition.x, lightPosition.y, lightPosition.z, 1.0f};
GLfloat lightColor[] = {1.0f, 1.0f, 0.8f, 1.0f}; // Sarımsı ışık
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
}
// Küreleri çizen fonksiyon
void drawSphere(const Sphere& sphere) {
glPushMatrix();
glTranslatef(sphere.position.x, sphere.position.y, sphere.position.z);
glRotatef(sphere.spin * (180.0f / M_PI), 0.0f, 0.0f, 1.0f); // Z ekseni etrafında döndür
// Renk ataması
GLfloat color[] = {sphere.color.r, sphere.color.g, sphere.color.b, 1.0f};
glMaterialfv(GL_FRONT, GL_DIFFUSE, color);
glutSolidSphere(sphere.radius, 50, 50);
glPopMatrix();
}
// Çizim fonksiyonu
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
setupLighting();
// Küreleri çiz
for (const Sphere& sphere : spheres) {
drawSphere(sphere);
}
glutSwapBuffers();
}
// Ana döngü
void idle() {
updatePhysics();
glutPostRedisplay();
}
// Rastgele bir renk oluşturma fonksiyonu
vec3 randomColor() {
return vec3(static_cast<float>(rand()) / RAND_MAX, // Renk bileşeni 0.0 ile 1.0 arasında
static_cast<float>(rand()) / RAND_MAX,
static_cast<float>(rand()) / RAND_MAX);
}
// Başlangıç ayarları
void init() {
glEnable(GL_DEPTH_TEST);
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
// Rastgele küreleri oluştur
std::srand(static_cast<unsigned int>(std::time(0))); // Rastgele sayı üreteci için başlangıç
for (int i = 0; i < NUM_SPHERES; ++i) {
float radius = static_cast<float>(rand() % 5 + 1) * 0.01f; // Küre yarıçapı 0.001 ile 0.08 arasında
float mass = radius * 10.0f; // Kütle, yarıçap ile orantılı
vec3 position = vec3(static_cast<float>(rand()) / RAND_MAX * 2.0f - 1.0f, // -1 ile 1 arasında rastgele pozisyon
static_cast<float>(rand()) / RAND_MAX * 2.0f - 1.0f,
0.0f);
vec3 velocity = vec3(static_cast<float>(rand()) / RAND_MAX * 0.02f - 0.01f, // -0.01 ile 0.01 arasında rastgele hız
static_cast<float>(rand()) / RAND_MAX * 0.02f - 0.01f,
0.0f);
float angularVelocity = static_cast<float>(rand()) / RAND_MAX * 2.0f - 1.0f; // Rastgele açısal hız
// Rastgele renk atama
vec3 color = randomColor();
spheres.push_back({position, velocity, vec3(0.0f), mass, radius, angularVelocity, 0.0f, color});
}
// ilk iki küreyi başlangıçta ekleyin
spheres.insert(spheres.begin(), {
{vec3(-0.5f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f), 5.0f, 0.1f, 1.0f, 0.0f, vec3(1.0f, 0.0f, 0.0f)}, // Kırmızı
{vec3(0.5f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f), 5.0f, 0.1f, -1.0f, 0.0f, vec3(0.0f, 0.0f, 1.0f)} // Mavi
});
}
// Program başlangıcı
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("Kütleçekim Simülasyonu");
init();
glutDisplayFunc(display);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}
#include <GL/glut.h>
#include <glm/glm.hpp>
#include <cmath>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace glm;
// Fizik sabitleri
const float G = 6.67430e-11f; // Kütleçekim sabiti
const float dt = 20.51f; // Zaman adımı
const int NUM_SPHERES = 402; // 100 rastgele küre ve 2 başlangıç küresi
// Ekran boyutları
int windowWidth = 1920;
int windowHeight = 1080;
// Küre yapısı
struct Sphere {
vec3 position;
vec3 velocity;
vec3 acceleration;
float mass;
float radius;
float angularVelocity; // Açısal hız
float spin; // Dönme açısı
vec3 color; // Renk
};
// Küre tanımları
std::vector<Sphere> spheres;
// Işık kaynağı
vec3 lightPosition = vec3(0.8f, -0.8f, 0.8f);
// Kütleçekim kuvvetini hesaplayan fonksiyon
vec3 computeGravitationalForce(Sphere& a, Sphere& b) {
vec3 direction = b.position - a.position;
float distance = length(direction);
// Kütleçekim kuvveti, mesafe sıfıra inmemeli
if (distance == 0) return vec3(0.0f);
vec3 force = G * a.mass * b.mass / (distance * distance) * normalize(direction);
return force;
}
// Güncelleme fonksiyonu
void updatePhysics() {
for (size_t i = 0; i < spheres.size(); ++i) {
spheres[i].acceleration = vec3(0.0f); // Her küre için ivmeyi sıfırla
}
// Kütleçekim kuvvetlerini hesapla
for (size_t i = 0; i < spheres.size(); ++i) {
for (size_t j = i + 1; j < spheres.size(); ++j) {
vec3 force = computeGravitationalForce(spheres[i], spheres[j]);
spheres[i].acceleration += force / spheres[i].mass;
spheres[j].acceleration -= force / spheres[j].mass; // Üzerine etki eden kuvvetin zıttı
}
}
// Hız ve konum güncellemeleri
for (Sphere& sphere : spheres) {
sphere.velocity += sphere.acceleration * dt;
sphere.position += sphere.velocity * dt;
// Ekranın dışına çıkma kontrolü
if (sphere.position.x < -1.0f - sphere.radius) {
sphere.position.x = 1.0f + sphere.radius; // Sol dışına çıktıysa sağdan gir
} else if (sphere.position.x > 1.0f + sphere.radius) {
sphere.position.x = -1.0f - sphere.radius; // Sağ dışına çıktıysa soldan gir
}
if (sphere.position.y < -1.0f - sphere.radius) {
sphere.position.y = 1.0f + sphere.radius; // Alt dışına çıktıysa üstten gir
} else if (sphere.position.y > 1.0f + sphere.radius) {
sphere.position.y = -1.0f - sphere.radius; // Üst dışına çıktıysa alttan gir
}
// Açısal dönüşü güncelle
sphere.spin += sphere.angularVelocity * dt;
}
}
// Aydınlatmayı ayarla
void setupLighting() {
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
GLfloat lightPos[] = {lightPosition.x, lightPosition.y, lightPosition.z, 1.0f};
GLfloat lightColor[] = {1.0f, 1.0f, 0.8f, 1.0f}; // Sarımsı ışık
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
}
// Küreleri çizen fonksiyon
void drawSphere(const Sphere& sphere) {
glPushMatrix();
glTranslatef(sphere.position.x, sphere.position.y, sphere.position.z);
glRotatef(sphere.spin * (180.0f / M_PI), 0.0f, 0.0f, 1.0f); // Z ekseni etrafında döndür
// Renk ataması
GLfloat color[] = {sphere.color.r, sphere.color.g, sphere.color.b, 1.0f};
glMaterialfv(GL_FRONT, GL_DIFFUSE, color);
glutSolidSphere(sphere.radius, 50, 50);
glPopMatrix();
}
// Çizim fonksiyonu
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
setupLighting();
// Küreleri çiz
for (const Sphere& sphere : spheres) {
drawSphere(sphere);
}
glutSwapBuffers();
}
// Ana döngü
void idle() {
updatePhysics();
glutPostRedisplay();
}
// Rastgele bir renk oluşturma fonksiyonu
vec3 randomColor() {
return vec3(static_cast<float>(rand()) / RAND_MAX, // Renk bileşeni 0.0 ile 1.0 arasında
static_cast<float>(rand()) / RAND_MAX,
static_cast<float>(rand()) / RAND_MAX);
}
// Başlangıç ayarları
void init() {
glEnable(GL_DEPTH_TEST);
glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
// Rastgele küreleri oluştur
std::srand(static_cast<unsigned int>(std::time(0))); // Rastgele sayı üreteci için başlangıç
for (int i = 0; i < NUM_SPHERES; ++i) {
float radius = static_cast<float>(rand() % 5 + 1) * 0.01f; // Küre yarıçapı 0.001 ile 0.08 arasında
float mass = radius * 10.0f; // Kütle, yarıçap ile orantılı
vec3 position = vec3(static_cast<float>(rand()) / RAND_MAX * 2.0f - 1.0f, // -1 ile 1 arasında rastgele pozisyon
static_cast<float>(rand()) / RAND_MAX * 2.0f - 1.0f,
0.0f);
vec3 velocity = vec3(static_cast<float>(rand()) / RAND_MAX * 0.02f - 0.01f, // -0.01 ile 0.01 arasında rastgele hız
static_cast<float>(rand()) / RAND_MAX * 0.02f - 0.01f,
0.0f);
float angularVelocity = static_cast<float>(rand()) / RAND_MAX * 2.0f - 1.0f; // Rastgele açısal hız
// Rastgele renk atama
vec3 color = randomColor();
spheres.push_back({position, velocity, vec3(0.0f), mass, radius, angularVelocity, 0.0f, color});
}
// ilk iki küreyi başlangıçta ekleyin
spheres.insert(spheres.begin(), {
{vec3(-0.5f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f), 5.0f, 0.1f, 1.0f, 0.0f, vec3(1.0f, 0.0f, 0.0f)}, // Kırmızı
{vec3(0.5f, 0.0f, 0.0f), vec3(0.0f, 0.0f, 0.0f), vec3(0.0f), 5.0f, 0.1f, -1.0f, 0.0f, vec3(0.0f, 0.0f, 1.0f)} // Mavi
});
}
// Program başlangıcı
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("Kütleçekim Simülasyonu");
init();
glutDisplayFunc(display);
glutIdleFunc(idle);
glutMainLoop();
return 0;
}
#include <GLFW/glfw3.h> // GLFW kütüphanesini içe aktarır; pencere oluşturma ve OpenGL ile çizim için kullanılır.
#include <vector> // Dinamik diziler ve iki boyutlu vektör yapısı için vektör kütüphanesi.
#include <ctime> // Rastgele sayı üreteci için zaman kütüphanesi.
#include <cstdlib> // Rastgele sayı üreteci için C standardında kütüphane.
const int WIDTH = 1920; // Pencere genişliği piksel cinsinden
const int HEIGHT = 1080; // Pencere yüksekliği piksel cinsinden
const int CELL_SIZE = 4; // Her bir hücrenin genişliği ve yüksekliği piksel cinsinden
const int GRID_WIDTH = WIDTH / CELL_SIZE; // Hücre matrisinin yatayda hücre sayısı
const int GRID_HEIGHT = HEIGHT / CELL_SIZE; // Hücre matrisinin dikeyde hücre sayısı
// Hücrelerin durumunu tutan iki boyutlu matris; 2: genişleyen hücre, 1: hücre dolu, 0: hücre boş
std::vector<std::vector<int>> grid(GRID_HEIGHT, std::vector<int>(GRID_WIDTH, 0));
// Bir sonraki durumları tutmak için yedek matris
std::vector<std::vector<int>> nextGrid(GRID_HEIGHT, std::vector<int>(GRID_WIDTH, 0));
void initializeGrid() {
srand(static_cast<unsigned>(time(0))); // Rastgele başlangıç için tohum oluşturur.
for (int y = 0; y < GRID_HEIGHT; ++y) { // Her hücre için
for (int x = 0; x < GRID_WIDTH; ++x) {
grid[y][x] = rand() % 2; // Hücreyi rastgele olarak dolu (1) veya boş (0) yapar.
}
}
}
int countNeighbors(int y, int x) {
int count = 0; // Komşu hücre sayacını sıfırla.
for (int dy = -1; dy <= 1; ++dy) { // -1, 0, 1: komşu hücreler için dikey kayma
for (int dx = -1; dx <= 1; ++dx) { // -1, 0, 1: komşu hücreler için yatay kayma
if (dy == 0 && dx == 0) continue; // Kendisi değil, sadece komşuları kontrol et.
int ny = (y + dy + GRID_HEIGHT) % GRID_HEIGHT; // Dikeyde çevrilebilir koordinat
int nx = (x + dx + GRID_WIDTH) % GRID_WIDTH; // Yatayda çevrilebilir koordinat
count += grid[ny][nx]; // Eğer komşu hücre dolu ise sayacı artır.
}
}
return count; // Bulunan komşu hücrelerin toplam sayısını döndür.
}
void updateGrid() {
for (int y = 0; y < GRID_HEIGHT; ++y) { // Her hücreyi güncelle
for (int x = 0; x < GRID_WIDTH; ++x) {
int neighbors = countNeighbors(y, x); // Mevcut hücrenin komşu sayısını al
if (grid[y][x] == 1) { // Hücre dolu ise
nextGrid[y][x] = (neighbors == 2 || neighbors == 3) ? 1 : 0; // 2 veya 3 komşu ile hayatta kalır.
} else if (grid[y][x] == 2) { // Genişleyen hücre durumu
nextGrid[y][x] = (neighbors >= 1) ? 2 : 0; // Komşuları varsa genişlemeye devam et.
} else { // Hücre boş ise
nextGrid[y][x] = (neighbors == 3) ? 1 : 0; // Boş hücre, 3 komşu varsa doğar.
}
}
}
grid.swap(nextGrid); // Eski durumu yeni durumla değiştir.
}
void drawGrid() {
glClear(GL_COLOR_BUFFER_BIT); // Ekranı temizler.
// Hücreleri çizer.
for (int y = 0; y < GRID_HEIGHT; ++y) {
for (int x = 0; x < GRID_WIDTH; ++x) {
if (grid[y][x] == 1) { // Hücre dolu ise
glColor3f(0.0f, 1.0f, 0.0f); // Yeşil rengi ayarla.
} else if (grid[y][x] == 2) { // Genişleyen hücre ise
glColor3f(0.0f, 1.0f, 0.5f); // Yeşil tonunda bir renk
} else {
glColor3f(0.0f, 0.0f, 0.0f); // Boş hücreler için siyah arka plan
}
glBegin(GL_QUADS); // Her hücreyi kare olarak çiz.
glVertex2f(x * CELL_SIZE, y * CELL_SIZE);
glVertex2f((x + 1) * CELL_SIZE - 1, y * CELL_SIZE);
glVertex2f((x + 1) * CELL_SIZE - 1, (y + 1) * CELL_SIZE - 1);
glVertex2f(x * CELL_SIZE, (y + 1) * CELL_SIZE - 1);
glEnd();
}
}
// Izgara çizgilerini çizer.
glColor3f(1.0f, 0.0f, 0.0f); // Izgara için kırmızı çizgi
glLineWidth(1.0f);
glBegin(GL_LINES);
for (int x = 0; x <= WIDTH; x += CELL_SIZE) {
glVertex2f(x, 0); glVertex2f(x, HEIGHT); // Dikey çizgiler
}
for (int y = 0; y <= HEIGHT; y += CELL_SIZE) {
glVertex2f(0, y); glVertex2f(WIDTH, y); // Yatay çizgiler
}
glEnd();
}
int main() {
if (!glfwInit()) { // GLFW başlat.
return -1;
}
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Game of Life", NULL, NULL); // Pencereyi oluştur.
if (!window) {
glfwTerminate(); // Oluşturulmazsa çık.
return -1;
}
glfwMakeContextCurrent(window); // OpenGL bağlamını bu pencereye uygula.
glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); // Oranları ayarla.
initializeGrid(); // Başlangıç gridini oluştur.
while (!glfwWindowShouldClose(window)) { // Pencere açıkken
drawGrid(); // Çizimi güncelle.
updateGrid(); // Oyun kurallarına göre hücre durumlarını güncelle.
glfwSwapBuffers(window); // Çizimi pencereye uygula.
glfwPollEvents(); // Olayları kontrol et.
}
glfwDestroyWindow(window); // Pencereyi temizle.
glfwTerminate(); // GLFW'yi sonlandır.
return 0;
}
#include <vector> // Dinamik diziler ve iki boyutlu vektör yapısı için vektör kütüphanesi.
#include <ctime> // Rastgele sayı üreteci için zaman kütüphanesi.
#include <cstdlib> // Rastgele sayı üreteci için C standardında kütüphane.
const int WIDTH = 1920; // Pencere genişliği piksel cinsinden
const int HEIGHT = 1080; // Pencere yüksekliği piksel cinsinden
const int CELL_SIZE = 4; // Her bir hücrenin genişliği ve yüksekliği piksel cinsinden
const int GRID_WIDTH = WIDTH / CELL_SIZE; // Hücre matrisinin yatayda hücre sayısı
const int GRID_HEIGHT = HEIGHT / CELL_SIZE; // Hücre matrisinin dikeyde hücre sayısı
// Hücrelerin durumunu tutan iki boyutlu matris; 2: genişleyen hücre, 1: hücre dolu, 0: hücre boş
std::vector<std::vector<int>> grid(GRID_HEIGHT, std::vector<int>(GRID_WIDTH, 0));
// Bir sonraki durumları tutmak için yedek matris
std::vector<std::vector<int>> nextGrid(GRID_HEIGHT, std::vector<int>(GRID_WIDTH, 0));
void initializeGrid() {
srand(static_cast<unsigned>(time(0))); // Rastgele başlangıç için tohum oluşturur.
for (int y = 0; y < GRID_HEIGHT; ++y) { // Her hücre için
for (int x = 0; x < GRID_WIDTH; ++x) {
grid[y][x] = rand() % 2; // Hücreyi rastgele olarak dolu (1) veya boş (0) yapar.
}
}
}
int countNeighbors(int y, int x) {
int count = 0; // Komşu hücre sayacını sıfırla.
for (int dy = -1; dy <= 1; ++dy) { // -1, 0, 1: komşu hücreler için dikey kayma
for (int dx = -1; dx <= 1; ++dx) { // -1, 0, 1: komşu hücreler için yatay kayma
if (dy == 0 && dx == 0) continue; // Kendisi değil, sadece komşuları kontrol et.
int ny = (y + dy + GRID_HEIGHT) % GRID_HEIGHT; // Dikeyde çevrilebilir koordinat
int nx = (x + dx + GRID_WIDTH) % GRID_WIDTH; // Yatayda çevrilebilir koordinat
count += grid[ny][nx]; // Eğer komşu hücre dolu ise sayacı artır.
}
}
return count; // Bulunan komşu hücrelerin toplam sayısını döndür.
}
void updateGrid() {
for (int y = 0; y < GRID_HEIGHT; ++y) { // Her hücreyi güncelle
for (int x = 0; x < GRID_WIDTH; ++x) {
int neighbors = countNeighbors(y, x); // Mevcut hücrenin komşu sayısını al
if (grid[y][x] == 1) { // Hücre dolu ise
nextGrid[y][x] = (neighbors == 2 || neighbors == 3) ? 1 : 0; // 2 veya 3 komşu ile hayatta kalır.
} else if (grid[y][x] == 2) { // Genişleyen hücre durumu
nextGrid[y][x] = (neighbors >= 1) ? 2 : 0; // Komşuları varsa genişlemeye devam et.
} else { // Hücre boş ise
nextGrid[y][x] = (neighbors == 3) ? 1 : 0; // Boş hücre, 3 komşu varsa doğar.
}
}
}
grid.swap(nextGrid); // Eski durumu yeni durumla değiştir.
}
void drawGrid() {
glClear(GL_COLOR_BUFFER_BIT); // Ekranı temizler.
// Hücreleri çizer.
for (int y = 0; y < GRID_HEIGHT; ++y) {
for (int x = 0; x < GRID_WIDTH; ++x) {
if (grid[y][x] == 1) { // Hücre dolu ise
glColor3f(0.0f, 1.0f, 0.0f); // Yeşil rengi ayarla.
} else if (grid[y][x] == 2) { // Genişleyen hücre ise
glColor3f(0.0f, 1.0f, 0.5f); // Yeşil tonunda bir renk
} else {
glColor3f(0.0f, 0.0f, 0.0f); // Boş hücreler için siyah arka plan
}
glBegin(GL_QUADS); // Her hücreyi kare olarak çiz.
glVertex2f(x * CELL_SIZE, y * CELL_SIZE);
glVertex2f((x + 1) * CELL_SIZE - 1, y * CELL_SIZE);
glVertex2f((x + 1) * CELL_SIZE - 1, (y + 1) * CELL_SIZE - 1);
glVertex2f(x * CELL_SIZE, (y + 1) * CELL_SIZE - 1);
glEnd();
}
}
// Izgara çizgilerini çizer.
glColor3f(1.0f, 0.0f, 0.0f); // Izgara için kırmızı çizgi
glLineWidth(1.0f);
glBegin(GL_LINES);
for (int x = 0; x <= WIDTH; x += CELL_SIZE) {
glVertex2f(x, 0); glVertex2f(x, HEIGHT); // Dikey çizgiler
}
for (int y = 0; y <= HEIGHT; y += CELL_SIZE) {
glVertex2f(0, y); glVertex2f(WIDTH, y); // Yatay çizgiler
}
glEnd();
}
int main() {
if (!glfwInit()) { // GLFW başlat.
return -1;
}
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "Game of Life", NULL, NULL); // Pencereyi oluştur.
if (!window) {
glfwTerminate(); // Oluşturulmazsa çık.
return -1;
}
glfwMakeContextCurrent(window); // OpenGL bağlamını bu pencereye uygula.
glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); // Oranları ayarla.
initializeGrid(); // Başlangıç gridini oluştur.
while (!glfwWindowShouldClose(window)) { // Pencere açıkken
drawGrid(); // Çizimi güncelle.
updateGrid(); // Oyun kurallarına göre hücre durumlarını güncelle.
glfwSwapBuffers(window); // Çizimi pencereye uygula.
glfwPollEvents(); // Olayları kontrol et.
}
glfwDestroyWindow(window); // Pencereyi temizle.
glfwTerminate(); // GLFW'yi sonlandır.
return 0;
}
Gündemdeki Haberler
güncel Önemli Başlıklar