Kategori arşivi: Programlama

Programlama hakkında türkçe bilgiler, ipuçları, kod örnekleri, örnek projeler, sorunlar ve çözümler, fikir alışverişi, düşünceler ve daha fazlası

C ile Hipotenüs Hesaplama

C ile iki Dik kenarı bilinen bir üçgenin hipotenüsü bulmaya yarayan program aşağıdadır.Hipotenüsün bulunması için 2 kenarın girilmesi yeterlidir.Hesaplamaların yapılması için hipotenushesapla isminde bir fonksiyon ile işlemler yaptırılmıştır.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

double hipotenushesapla(double,double);

int main()
{
    float kenar1,kenar2;
    printf("Birinci Kenari Giriniz:");
    scanf("%f",&kenar1);
    printf("Ikinci Kenari Giriniz:");
    scanf("%f",&kenar2);
    hipotenushesapla(kenar1,kenar2);
    getch();
    return 0;
}

double hipotenushesapla(double kenar1,double kenar2)
{
    double hipotenus = sqrt(pow(kenar1,2)+pow(kenar2,2));
    printf("Ucgenin Hipotenusu:%gn",hipotenus);
}

C# Veritabanı Hazır Fonksiyonlar

Veritabanında çoğu işlemleri uzun uzadıya kod yazarak çözmeye çalışıyoruz.Yada tablodan veri çekilecekse,veritabanına bağlanacaksa heryere veritabanı kodları ile dolduruyoruz ki bu kod kalabalığından başka bir işe yaramıyor.Hatta güvenlik açıklarına bile neden olabiliyor.Geçenlerde googlede gezerken eskilerden kalma ve bir kaç hatası olan Veritabanı fonksiyonlarının bulunduğu bir github sayfasına rastladım.Hatalarını düzelttim ve paylaşmak istedim.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Veritabani
{
    public class Fonksiyon
    {
        //Veritabanı bağlantısı
        public SqlConnection baglan()
        {
            SqlConnection baglanti = new SqlConnection();
            baglanti.Open();
            return (baglanti);

        }
        //SQL Sorguların çalıştırılması
        public int cmd(string sqlcmle)
        {
            SqlConnection baglan = this.baglan();
            SqlCommand sorgu = new SqlCommand(sqlcmle, baglan);
            int sonuc = 0;
            try
            {
                sonuc = sorgu.ExecuteNonQuery();
            }
            catch (SqlException ex)
            {

                throw new Exception(ex.Message + "(" + sqlcmle + ")");
            }
            finally
            {
                sorgu.Connection.Close();
            }
            sorgu.Dispose();
            baglan.Close();
            return (sonuc);
        }
        //Veri Sayısı Bulma işlemi
        public string GetDataCell(string sql)
        {
            DataTable table = GetDataTable(sql);
            if (table.Rows.Count==0)
                return null;
            return table.Rows[0][0].ToString();
        }
        //Verileri Çekme
        public DataRow GetDataRow(string sql)
        {
            DataTable table = GetDataTable(sql);
            if (table.Rows.Count == 0)
                return null;
            return table.Rows[0];
        }
        //DataTable Veri Çekme
        public DataTable GetDataTable(string sql)
        {
            SqlConnection baglan = this.baglan();
            SqlDataAdapter adapter = new SqlDataAdapter(sql, baglan);
            DataTable dt = new DataTable();

            try
            {
                adapter.Fill(dt);
            }
            catch (SqlException ex)
            {

                throw new Exception(ex.Message + "(" + sql + ")");
            }
            finally
            {

            }
            adapter.Dispose();
            baglan.Close();
            return dt;
        }
        //DataSet Veri Çekme
        public DataSet GetDataSet(string sql)
        {
            SqlConnection baglan = this.baglan();
            SqlDataAdapter adapter = new SqlDataAdapter(sql, baglan);
            DataSet ds = new DataSet();
            try
            {
                adapter.Fill(ds);
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message + "(" + sql + ")");
            }
            finally
            {

            }
            adapter.Dispose();
            baglan.Close();
            return ds;
        }
    }
}

MySQL Veritabanı Yedekleme Scripti

Sunucunuzda kullanabileceğiniz oldukça kullanışlı bir script’dir. Mysql ve MariaDB(percona dahil) pek çok sistemin yedeğini kolaylıkla alabilirsiniz.

Yedeği alırken sistemde ön tanımlı olarak gelen veritabanlarını dahil etmez. Yedekler alınırken de tarih ve zamana göre tutulurlar isterseniz günlük isterseniz haftalık bir şekilde yedeklerinizi alabilirsiniz tabi bunu gerçekleştirmek için crontab özelliğini kullanmanız gerekiyor.

parolaniz yazan kısmı doldurmayı ihmal etmeyin. Sonrasında dosyamızı oluşturalım ve çalıştıralım.

#! /bin/bash

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="parolaniz"
MYSQLDUMP=/usr/bin/mysqldump

mkdir -p $BACKUP_DIR/mysql

databases=`mysql --no-defaults --user=$MYSQL_USER --password=$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"`

for db in $databases; do
        if [$db != "performance_schema"]&&[$db != "mysql"];then
                echo -e "Backing up: '$db' to $BACKUP_DIR/mysql/$db.sql n"
                ##uncomment to enable gzip
                #$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
                ##comment to enable gzip
                $MYSQLDUMP --no-defaults --force --opt --user=$MYSQL_USER --password=$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
        fi
done

Dosyayı oluşturmak için

cd /usr/local/bin
nano sqlbackup.sh
chmod +x sqlbackup.sh

Sonrasında oluşturulan dosyayı çalıştırmak için aşağıdaki komutu veriniz.

./sqlbackup.sh

C ile Kabarcık Sıralaması

C ile Sıralama algoritması yazmak istersek aşağıdaki gibi bir yol izleyebiliriz böylelikle kolaylıkla sıralama işlemini yapabiliriz.Kabarcık Sıralama en çok kulanılan ve hocalarında ödev olarak vermeyi sevdiği sıralama algoritmalarından bir tanesidir.

Örnek Olarak

#include <stdio.h>
#define Deger 10

void main()
{
	int datalar[Deger];
	int i, j, veri, gec;

	printf("Kac Adet Veri Gireceksiniz n");
	scanf("%d", &veri);

	printf("Verileri Teker teker giriniz n");
	for (i = 0; i < veri; i++)
	{
		scanf("%d", &datalar[i]);
	}

   /* Bubble sorting begins */
	for (i = 0; i < veri; i++)
	{
		for (j = 0; j < (veri - i - 1); j++)
		{
			if (datalar[j] > datalar[j + 1])
			{
				gec = datalar[j];
				datalar[j] = datalar[j + 1];
				datalar[j + 1] = gec;
			}
		}
	}

	printf("Siralanan Degerlern");
	for (i = 0; i < veri; i++)
	{
		printf("%dn", datalar[i]);
	}
	getch();
	return 0;
}

C ile String İfadeleri Karşılaştırma

Bu kodumuz ile C üzerine kullanıcıdan alınan 50 karakter uzunluğundaki bir string ifadeyi karşılaştırıyoruz.Eğer bir birlerine eşit olurlarsa ekrana Cümleler Eşittir yazdırıyoruz.Değilse Cümleler Bir birlerine eşit değildir olarak yazdırıyoruz.

Örnek Kod

#include <stdio.h>
#include <string.h>

int main()
{
	char a[50], b[50];

	printf("Birinci Cumleyi Yazinizn");
	gets(a);

	printf("Ikinci Cumleyi Yazinizn");
	gets(b);

	if( strcmp(a,b) == 0 )
		printf("Cumleler Esittirn");
	else
		printf("Cumleler Esit Degildirn");

	return 0;
}

Programlamaya Giriş Final Ders Ödevleri

Başkent Üniversitesi Programlamaya Giriş dersinde Prof. Dr. Afet GOLAYOĞLU Tarafından verilmiş olan Final Ders Ödevleri Tarafımdan yazılmış olup 11.05.2015 Tarihinde yayınlanmıştır.Kaynak verilmeden kullanılması kesinlikle yasaktır.

1- Elektrik dağıtım şirketinde elektrik kullanım bedeli,

  • Konutlar için 0-100 KWh arası 0.1 TL /Kwh, 100 Kwh dan fazla kısmi için 0.15 TL/Kwh,
  • Kamu kuruluşları için 0-500KWh arası için 0.15TL/KWh, 500Kwh dan fazla kısmi için 0.2 TL/KWh ve
  • Özel sektör için 0-1000 KWh arası 0.3TL/ KWh, 1000 Kwh dan fazla kısmi için ise 0.35TL/KWh olarak hesaplanmaktadır.

Elektrik kullanım bedeli hesaplama programını yazınız.

    #include<stdio.h>
    #include<conio.h>

    int main(void) {
    	int secim=1,kv=0;
    	float konut;
    	jump:
    	while(secim) {
    		printf("1-Konutlarn2-Kamu Kuruluslarin3-Ozel Sektorn4-Cikisnn");
    		scanf("%d",&secim);
    		switch(secim) {
    			case 1:
    				printf("Kullandiginiz Elektrigi KWh Cinsinden giriniz.n");
    				scanf("%d",&kv);
    				if(kv <= 0){
                    	printf("Gecersiz deger girdiniz n");
                    	break;
                	}
    				if(kv >= 0 && kv <= 100) {
    					konut=(float)kv*0.1;
    				} else if(kv>=101) {
    					konut=(float)(100*0.1)+(kv-100)*0.15;
    				}
    				printf("%d KWh icin Kullanim Bedeliniz %.2f TL Olarak Bulunmustur.nn",kv,konut);
    				break;
    			case 2:
    				printf("Kullandiginiz Elektrigi KWh Cinsinden giriniz.n");
    				scanf("%d",&kv);
    				if(kv <= 0){
                    	printf("Gecersiz deger girdiniz n");
                    	break;
                	}
    				if(kv >= 0 && kv <= 500) {
    					konut=(float)kv*0.15;
    				} else if(kv>=501) {
    					konut=(float)(500*0.15)+(kv-500)*0.2;
    				}
    				printf("%d KWh icin Kullanim Bedeliniz %.2f TL Olarak Bulunmustur.nn",kv,konut);
    				break;
    			case 3:
    				printf("Kullandiginiz Elektrigi KWh Cinsinden giriniz.n");
    				scanf("%d",&kv);
    				if(kv <= 0){
                    	printf("Gecersiz deger girdiniz n");
                    	break;
                	}
    				if(kv >= 0 && kv <= 1000) {
    					konut=(float)kv*0.3;
    				} else if(kv>=1001) {
    					konut=(float)(1000*0.3)+(kv-1000)*0.35;
    				}
    				printf("%d KWh icin Kullanim Bedeliniz %.2f TL Olarak Bulunmustur.nn",kv,konut);
    				break;
    			case 4:
    				secim=0;
    				break;
    			default:
    				goto jump;
    				break;
    		}
    	}
    	return 0;
    	getch();
    }

2- Üniversite misafirhanesi öğretim üyeleri için konaklayacakları gün sayısına bağlı olarak tabloda verildiği gibi farklı tarife uygulamaktadır.

Gün sayısı    Ücret (Yabancı) Ücret(TC vatandaşı) Universite personeli
0-4 25 TL(günlük) 15 TL 12 TL
5-10 20 TL 12 TL 10 TL
11-yukarısı 17 TL 10 TL 7 TL

Konaklama bedelini hesaplayan program kodunu yazınız.

    #include <stdio.h>
    #include <conio.h>
    /*Tarife fiyatlarının dizi içerisinde tutulması*/
    int tarife[3][3]={{25, 15, 12},{20, 12, 10},{17, 10, 7}};

    /*Misafir tipi ile birlikte ücreti hesaplayan fonksiyon*/
    int fiyat_hesapla(int tip, int gun){
        int fiyat = 0 ;
        /*Array indis ayarlama işlemi 1 ise 0,2 ise 1 şeklinde */
        tip--;
        if (gun <= 4){
            fiyat+=tarife[0][tip]*gun;/*0-4 Arası için 25 TL ile gün sayısının çarpılması*/
        }
        else if (gun <= 10){
            fiyat+= tarife[0][tip] * 4;/*ilk 4 gün ücretlendirmesi*/
            fiyat+= tarife[1][tip] * (gun-4);/*4 den 10 kadar olan ki ücretlendirme*/
        }
        else{
        	/*11 den yukarısı için konaklama bedel hesabı*/
            fiyat+=tarife[0][tip]*4;
            fiyat+=tarife[1][tip]*6;
            fiyat+=tarife[2][tip]*(gun-10);
        }
        return fiyat;
    }

    int main(void){
        /*Calis programin calisma dongusunu kontrol edecek*/
        int calis = 1,tip, gun;
        while(calis){
        	jump:
            printf("1-Yabancin2-TC Vatandasin3-Personeln4-Cikisn");
            scanf("%d", &tip);
            switch (tip){
            case 1:
            case 2:
            case 3:
                /*Tum misafir tipleri icin tek bir fiyat fonksiyonu yeterli oluyor*/
                printf("Kalinacak gun sayisini giriniz: ");
                scanf("%d", &gun);
                if(gun <= 0){
                    printf("Gecersiz gun sayisi n");
                    break;
                }
                printf("Konaklama ucreti: %d TLn", fiyat_hesapla(tip, gun));
                break;
            case 4:
                calis=0;
                break;
            default: //Girdi olarak 1,2,3 ve ya 4'den farkli bir sey girildiyse uygulama tekrar çalışmaya devam etsin
                goto jump;
            }
        }
        return 0;
        getch();
    }

3- Asgari ücretin 20 yaş altındakiler için 896 TL , 20 yaş üstündekiler için 1010 TL emekliler için 960 TL olarak uygulandığı bir pazarlama şirketinde çalışan her eleman için yaptığı satış miktarının %5 i kadar ek ücret, bayram ve ya tatil günlerinde çalıştığı her yarım gün için ise 50 TL ek ücret verilmektedir. Buna göre, aylık maaş hesaplama programını yazınız

    #include <stdio.h>
    #include <conio.h>

    /*Calisan maasini hesaplayan fonksiyon*/
    double maas_hesapla(int yas, int satis, int mesai){
        double maas=0;
        if(yas == 1)
            maas=896;
        if(yas == 2)
            maas = 1010;
        else
            maas = 960;
        /*Satislardan gelen %5*/
        maas += (satis * 0.05);
        /*Measiden gelen gun*50 TL*/
        maas += (mesai*50);
        return maas;
    }
    int main(){
        /*Calis programin calisma dongusunu kontrol edecek*/
        int calis = 1,yas, satis, mesai;
        while(calis){
            printf("1-20 Yas Altin2-20 Yas Ustun3-Emeklin4-Cikisn");
            scanf("%d", &yas);
            switch (yas){
            case 1:
            case 2:
            case 3:
                /*Tum misafir tipleri icin tek bir fiyat fonksiyonu yeterli oluyor*/
                printf("Elemanini satis miktarini giriniz:");
                scanf("%d", &satis);
                if(satis < 0){
                    printf("Satis negatif olamaz n");
                    break;
                }
                printf("Elemanini bayram ve ya tatilde calistigi gun sayisi:");
                scanf("%d", &mesai);
                if(mesai < 0){
                    printf("Gun sayisi negatif olamaz n");
                    break;
                }
                printf("Elemanin maasi: %.2f TLn", maas_hesapla(yas, satis, mesai));
                break;
            case 4:
                calis=0;
                break;
            default: //Girdi olarak 1,2,3 ve ya -1'den farkli bir sey girildiyse
                printf("Gecersiz bir secenek girdiniz n");
            }
        }
        return 0;
    	getch();
    }

4- Kargo şirketi gönderilecek kargonun ağırlığı ve gideceği yere bağlı olarak aşağıdaki şekilde tarife uygulamaktadır:

  • Amerika : 0-250 gr arası için 2 TL, sonrası her 250 gr için 1.5 TL
  • Avrupa : 0-250 gr arası için 1 TL, sonrası her 250 gr için 0.75 TL
  • Uzakdoğu : 0-250 gr arası için 3 TL, sonrası her 250 gr için 2 TL

Buna göre ücret hesaplayan program kodunu yazınız.

    #include<stdio.h>
    #include<conio.h>

    int main()
    {
    	char yer;
    	float kargonun_agirligi,odenecek_tutar;
    	printf("Kargonun agirligini giriniz: ");
    	scanf("%f",&kargonun_agirligi);
    	printf("Kargonun gidecegi yeri giriniz: ");
    	scanf("%s",&yer);
    	switch(yer)
    	{
    	case 'A':
    			if(kargonun_agirligi>0 && kargonun_agirligi<250)
    		    {printf("Odenecek tutar 2 TL");}
    		    else if(kargonun_agirligi>250)
    		    {
    		    	odenecek_tutar=(kargonun_agirligi/250)*1.5+0.5;
    		    	printf("Odenecek tutar: %.2f TL",odenecek_tutar);
    			}
    		    break;
    	case 'E':
    			if(kargonun_agirligi>0 && kargonun_agirligi<250)
    		    {printf("Odenecek tutar 1 TLn");}
    		    else if(kargonun_agirligi>250)
    		    {
    		    	odenecek_tutar=(kargonun_agirligi/250)*0.75+0.25;
    		    	printf("Odenecek tutar: %.2f TL",odenecek_tutar);
    			}
    		    break;
    	case 'U':
    			if(kargonun_agirligi>0 && kargonun_agirligi<250)
    		    {printf("Odenecek tutar 3 TLn");}
    		    else if(kargonun_agirligi>250)
    		    {
    		    	odenecek_tutar=(kargonun_agirligi/250)*2+1;
    		    	printf("Odenecek tutar: %.2f TL",odenecek_tutar);
    			}
    		    break;
        }
        getch();
        return 0;
    }

MariaDB 10.x ve MySQL 5.x InnoDB Kapatmak

MySQL de performans ayarları yaparken innodb yi kapatmak için MariaDB de ayarlamalar yapmam gerekiyordu çünkü ben Veritabanını MyISAM şeklinde kullanıyordum InnoDB olmadığı içinde boşa çalışmasın kapatalım gitsin performans açısından etkisi haliyle olacak.

MariaDB 10.x

[mysqld]
skip-innodb
default-storage-engine=MyISAM

MySQL 5.x İçin

default-storage-engine=MyISAM
default-tmp-storage-engine=MyISAM
innodb=OFF

Yukarıdaki kodu /etc/mysql/my.cnf içerisine ekliyorsunuz Aşağıdaki komut ilede yeniden başlattığımızda artık innoDB çalışmayacak ve MyISAM kullanımına tamamen geçmiş olacaksınız.

service mysql restart

İşlemimiz böylelikle son buluyor.

MySQL Türkçe Karakter Sorununu Gidermek

MySQL de yedeklerini taşırken yada yeni bir site kurarken illaki böyle bir hata ile karşılaşanlar olmuştur Türkçe karakterlerin aşırı derecede saçmaladığı bu hatayı çok basit bir şekilde çözeceğiz tabi sunucu size ait ise bunu yapabilirsiniz yada herhangi bir VPS olabilir. Yeter ki root izniniz olsun

yapacağımız şey my.cnf içerisine kodlama tipini tanımlamak böylelikle sonraki sorunlarada engel olmuş olacağız kodumuz ise

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci; SET NAMES utf8;'
default-character-set=utf8
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

Burada en can alıcı nokta ise skip-character-set-client-handshake komutumuzdur bunu eklemeyebilirsiniz ancak eklersenizde var olan tüm UTF-8 sorunlarını çözeceksiniz. MySQL Servislerini yeniden başlatmayı unutmayınız ki yaptığımız işlem aktifleşsin…

C ile Sayıya kadar İkinin Katlarını Bulma

C ile Girilen Sayıya kadar ikinin katlarını yazdırma ve girilen sayının en büyük ikinin kuvvetini yazdıran uygulamamız.Yani 1000 Girdiğinizde en son 2 nin en büyük katı olarak karşınıza 1024 çıkacaktır.

    #include<stdio.h>

    int main(void){

    	int carpim=2,kac;
    	printf("Bir Sayi Girinizn");
    	scanf("%d",&kac);
    	while(carpim<kac){
    		carpim=carpim*2;
    		printf("%dn",carpim);
    	}
    	printf("%d Sayisinin En buyuk 2 nin kati %d",kac,carpim);
    	return 0;
    }

Çıktı Örneği

cilegirilensayininicindekiciftibulma