Şimdi Ara

c programlama dilinde grafik dersi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
4
Cevap
0
Favori
6.947
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Veri Yapıları ve Programlama Ders Notu
    VERİ YAPILARI VE PROGRAMLAMA
    1. İndisli Değişkenler
    2. Pointerlar
    3. Fonksiyonlar
     Dahili fonksiyonlar
     Ana programa değer aktaran
     Ana programa değer aktarmayan
     Harici fonksiyonlar
    4. Ekran Kontrol Komutları
     Gotoxy
     Clreol
     Delinle
     İnsline
     Textbackground( )
     Textcolor
     window
    5. Dosyalama
     Text dosyalama
     Binary dosyalama
    6. Paralel Port Uygulamaları
    7. Grafik
    Veri Yapıları ve Programlama Ders Notu
    İNDİSLİ DEĞİŞKENLER
    C programlama dilinde diğer programlama dillerinde olduğu gibi indisli değişken tanımlamak
    mümkündür.C programlama dilinde ilk indis numarası 0 ile başlar.
    İndisli değişkenler,daha önce anlatılan bütün değişken tiplerinde tanımlanabilir.İndisli
    değişken tanımlanırken önce değişkenin hangi tip olduğu,daha sonrada değişken adı
    yazılır.Değişken adının yanında köşeli parantez içerisinde indis sayısı yazılır.
    int a [10]; int a [3] [4];
    char ad [10]; sütun
    satır
    a [0]
    a [1]
    .
    . .
    . .
    . .
    .
    a [9]
    ÖRNEK :#include<stdio.h>
    #include<conio.h>
    main ( )
    {
    int a[10] ,i;
    clrscr ( );
    for ( i=0; i<5; i++)
    {
    printf (“%d. sayıyı giriniz : ” i+1);
    scanf (“%d”,&a);
    }
    printf (“İlk girilen sayı =%d/n”,a[0]);
    printf (“Üçüncü girilen sayı =%d/n”,a[2]);
    printf (“Son girilen sayı =%d/n”,a[4]);
    getch( );
    }
    a [0] [0] a [0] [2]
    a [2] [1] a [2] [3]
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : Klavyeden kullanıcı tarafından girilen 1726 sayıdan en büyüğünü bulan programı
    yazınız.
    #include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a[1726],i,max ;
    clrscr( );
    for( i=0; i<1726; i++)
    {
    printf(“%d.sayıyı giriniz :”,i+1);
    scanf(“%d”,&a);
    }
    max=a[0];
    for( i=1; i<1726; i++)
    if (max<a);
    max=a;
    printf(“En büyük sayı = %d \n”, max);
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : Klavyeden kullanıcı tarafından girilen 5 sayıyı büyükten küçüğe doğru sıralayıp,
    ekrana yazan programı yazınız.
    # include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a [5] ,i,j,gec;
    clrscr( );
    for (i=0; i<5; i++)
    {
    printf( “ %d .sayıyı giriniz :”,i+1); scanf( “ %d ”,&a );
    for (i=0; i<4; i++)
    for ( j=i+1; j<5; j++)
    if ( a < a[j] )
    {
    gec = a;
    a = a[j];
    a [j] = gec;
    }
    for (i=0; i<5; i++)
    printf ( “ %d\n”,a);
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include <stdio.h>
    #include<conio.h>
    main( )
    {
    char ad [5][15];
    int i;
    clrscr( );
    for ( i=0; i<5; i++)
    {
    printf (“%d . kişinin adını giriniz :”,i+1) ;
    scanf ( “%s”,& ad ) ;
    }
    for ( i=0; i<5; i++)
    printf (“%d. kişinin adı = % s \ n”, i+1, ad ) ;
    getch ( ) ;
    }
    ÖDEV :
    1. 3*3 ’lük A ve B matrisleri klavyeden girilmektedir.Buna göre A ve B matrislerini
    toplayıp,oluşan C matrisine ekrana yazan programı yazınız.
    2. 5*5’lik D matrisinin elemanları klavyeden girilecektir.Bu matrisin her satırındaki en
    küçük eleman ile her sütundaki en büyük elemanı bulan programı yazınız.
    3. Klavyeden sırası ile öğrenci no,adı soyadı,vize ve final notları girilecektir.Sınıfta
    toplam 20 öğrenci vardır .Her öğrencinin ortalaması hesaplandıktan sonra,ortalamalara
    bakılarak en yüksek nottan en düşük nota doğru sıralama yapılacak ve ekrandan
    öğrencinin no,adı,soyadı,vize,final ve ortalama notları gösterilecektir.Bu programı
    yazınız.
    Veri Yapıları ve Programlama Ders Notu

    P O I N T E R L E R
    Pointer tipi değişkenler,normal değişkenlerin adresini tutan değişkenlerdir.Pointer kullanarak
    C programlama dilinde adres bazında işlemler yapmak mümkün olmaktadır.
    p değişkeni pointer olarak tanımladıktan sonra p=&a
    a 123 117F:A071 denildiği zaman p pointerinin içinde, a değişkeninin
    adresi bulunur.*p denildiği zaman p pointerinin içindeki
    adresdeki değer belirtilir.
    p 117F:AO71 120A:139B
    ÖRNEK: #include<stdio.h>
    #include<conio.h>
    main ( )
    {
    int a,*k ; /* *k integer , pointer tipte değişken */
    clrscr ( );
    a =123 ;
    k =&a ;
    printf (“ a değişkenin adresi : % p \n”,&a ) ;
    printf (“ a değişkeninin değeri : % d \n ”,a ) ;
    printf (“ k pointerının gösterdiği adres : % p \n”,k) ;
    printf (“k pointerının gösterdiği adresteki değer : % d \n ”,*k),
    getch ( ) ;
    }
    Veri Yapıları ve Programlama Ders Notu

    NOT : Char tipindeki bir değişkenin adresi , int tipte bir pointer değişkende
    tutulamaz.Değişkenin tipi ile pointer değişkeninin tipi aynı olmalıdır.
    1) int a,b,c , *ptr ,*d,e ;
    2) a = 23
    3) ptr = &a
    4) b = a ;
    5) d = ptr ;
    6) c = *d ;
    7) e = c + *ptr ;
    Burada ; 1. adımda a,b,c,e değişkenleri ile ptr ve d pointer değişkenleri integer olarak
    tanımlanıyor.
    2. adımda a değişkenine 23 değeri aktarılıyor.
    3. adımda a değişkenini adresi ptr pointer değişkenine aktarılıyor.
    4. adımda b değişkenine a değişkeninin içeriği yani 23 değeri aktarılıyor.
    5. adımda, d pointerına , ptr pointerının değeri yani a değişkeninin adresi
    aktarılıyor.
    6. adımda c değişkenine d pointerının gösterdiği adresteki değer yani 23 aktarılır.
    7. adımda e değişkenine c değişkeninin içindeki değer ( 23 ) ile ptr pointerının
    gösterdiği adresteki değer ( 23 ) toplanır ve aktarılır ( e = 46 )
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a ,*k ,*l ;
    clrscr( );
    a = 47;
    k = &a;
    l =k;
    printf (“a değişkeninin adresi : %p \n”, l );
    printf (“a değişkeninin değeri : %d \n “, *l );
    getch ( );
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a ,*k ,*l ;
    clrscr( );
    a = 47;
    k = &a;
    l =k;
    printf (“Bir sayı giriniz : “); scanf (“ %d “, k );
    printf (“Girilen sayı = %d \n” , *l );
    getch ( );
    }
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a [7] , i , *z;
    clrscr ( );
    z = a; /* z = &a[0] */
    for ( i =0; i<6; i++)
    {
    printf (“ %d. sayıyı giriniz :”, i+1); scanf (“%d”, &a );
    }
    printf ( “ \n \n”);
    for ( i =1; i<7; i++)
    printf (“%d.sayı = %d \n”, i, *z++);
    getch ( );
    }
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : Klavyeden kullanıcı tarafından büyük harfle girilen cümleyi , pointer kullanarak
    küçük harfe çeviren programı yazınız.
    #include<stdio.h>
    #include<conio.h>
    #include<ctype.h>
    main( )
    {
    char klm [80], *p;
    clrscr( );
    p = klm;
    printf (“BÜYÜK HARFLERLE bir cumle giriniz :”);
    gets (klm);
    printf (“ \n”);
    while ( *p )
    printf ( “ %c”, tolower (*p++));
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖDEV
    1. 5x5 ‘lik iki matrisi birbirine çarpan ve sonuç matrisi ekrana yazan programı pointer
    kullanarak yazınız.
    2. 10x10’luk bir matrisin değerleri kullanıcı tarafından girildikten sonra , pointer
    kullanarak bu matristeki en büyük elamanı bulan programı yazınız.
    3. Klavyeden kullanıcı tarafından girilen cümleyi tersten yazdıran programı pointer
    kullanarak yazınız.
    Veri Yapıları ve Programlama Ders Notu

    F O N K S İ Y O N L A R
    Problem çözmenin ilkelerinden biri problemi mümkün olduğu kadar çok parçaya bölmek
    idi.Daha sonra bu parçalar bağımsız olarak düşünülüp çözümleri elde edilir.C de bu bölme
    işlemi fonksiyon olarak adlandırılır.
    Profesyonel programlar incelenirse , programın mantıksal bütünlük gösteren parçalar halinde
    yapıldığı görülecektir.Böylece , programın yazılması ve anlaşılması kolaylaşır.
    C dilinde yazılan ana programın kendisi de esasında main( ) adında bir fonksiyondur.Main( )
    fonksiyon yazılmaksızın herhangi bir başka fonksiyonun kullanılması mümkün
    olamaz.Geleneksel olarak , programcılar tarafından komut olarak adlandırılmalarına rağmen ,
    scanf ,printf ,sin ,log ve bunlar gibi ,diğer C deki bütün komutlar , gerçekte bir
    fonksiyondur.C programlama dilinde fonksiyonlar bir veya birden fazla komuttan oluşan alt
    programlardır.Her fonksiyonun bir ismi olur,fonksiyonun ismi tıpkı komut gibi ana program
    içinde yazıldığı gibi o fonksiyon çalışır ve belirlenen görevi yerine getirir.Fonksiyon isminin
    yanında parantezler yer alır.
    C programlama dilinde fonksiyonlar 2’ye ayrılır.
    * Dahili fonksiyonlar Ana programa değer aktaran
    Ana programa değer aktarmayan
    * Harici fonksiyonlar
    Fonksiyonların genel yazılımı şöyledir ;
    tip fonksiyonun_adi ( parametre listesi )
    {
    komut 1 ;
    komut 2 ;
    .
    .
    komut n ;
    }
    Veri Yapıları ve Programlama Ders Notu

    Ana Programa Değer Aktarmayan Fonksiyonlar
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    void yaz (void)
    {
    printf (“Uluborlu S.Karasoy MYO \n ”);
    }
    main ( ) Ana programdan önce fonksiyon yazılabilir.
    { ayrıca ana programdan sonrada yazılabilir.Ama
    clrscr( ); burada dikkat edilecek olan kural,eğer fonksiyon
    yaz( ); ana programdan sonra tanımlanırsa ,fonksiyonun
    getch( ); tam ismi , ana programdan önce mutlaka
    } yazılmalıdır.
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    void yaz (void);
    main( )
    {
    clrscr( );
    yaz( );
    getch( );
    }
    void yaz (void);
    {
    printf( “Uluborlu S.Karasoy MYO”);
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : Çarpma ve toplama işlemini yapan fonksiyonu yazınız.
    #include<stdio.h>
    #include<conio.h>
    int topla (int a, int b);
    carp (int x , int y)
    {
    printf ( “%d * %d = %d \n ”, x, y, x*y );
    }
    main( )
    {
    clrscr( );
    topla(10,7);
    carp(8,3);
    topla(6,9);
    getch( );
    }
    topla( int a, int b)
    {
    printf( “Toplam = %d \n ”, a+b );
    }
    Veri Yapıları ve Programlama Ders Notu
    RNEK : #include<stdio.h>
    #include<conio.h>
    int kare ( int sayi );
    main( )
    {
    int a;
    clrscr( );
    printf ( “Bir sayi giriniz :”);
    scanf ( “%d “,&a);
    kare (a);
    getch( );
    }
    int kare (int sayi)
    {
    clrscr( );
    printf( “Sayının karesi = %d \n ”, sayi *sayi);
    }
    Veri Yapıları ve Programlama Ders Notu

    Ana Programa Değer Aktaran Fonksiyonlar
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    int topla ( int a , int b);
    main( )
    {
    int x,y,cevap;
    clrscr( );
    printf ( “1.sayıyı giriniz : ”); scanf ( “%d”,&x);
    printf ( “2.sayıyı giriniz : ”); scanf ( “%d”,&y);
    cevap = topla (x,y);
    printf ( “Toplamın Sonucu = %d \n”,cevap);
    getch( );
    }
    int topla ( int a, int b)
    {
    int c;
    c = a+b; return a+b;
    return(c);
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    int f1 (void);
    main( )
    {
    int i;
    for( i = 0; i<10; i++)
    printf( “%d”,f1( ) );
    getch( );
    }
    int f1(void)
    {
    static int a;
    a = a+25;
    return(a);
    }
    Harici Fonksiyonlar
    int topla (int d , int e)
    {
    int sonuc;
    sonuc = d+e;
    return(sonuc);
    }
    Program yazıldıktan sonra c:\ TC \ toplamaişlemi.C olarak kaydedilir.Yeni program sayfası
    açılır.
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    #include<c:\ TC \ toplamaişlemi.C>
    main( )
    {
    int a,b;
    clrscr( );
    printf( “2 sayı giriniz :”);
    printf( “%d %d” &a,&b);
    printf( “Toplam = %d \n, topla (a,b)”);
    getch( );
    }
    ÖDEV
    1. Klavyeden a ve b sayıları girildikten sonra usal( ) fonksiyonu ile ab’yi bulan programı
    fonksiyon ile yazınız.
    2. Klavyeden girilen açı değerinin sin,cos’u bulan programı harici fonksiyonlar
    kullanarak yazınız.
    3. Klavyeden girilen a sayısının faktöriyelini recursive function ile yazınız.
    Veri Yapıları ve Programlama Ders Notu

    EKRAN KONTROL KOMUTLARI
    C programlama dilinde hem text modunda , hem de grafik modunda ekran kontrol komutları
    bulunmaktadır.
    Ekran kontrol komutları , ekranın silinmesi , kursörün herhangi bir yere konumlandırılması ,
    çeşitli renkte fonlar üzerine yine çeşitli renklerde yazılar yazılması amaçlarıyla
    kullanılmaktadır.
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    char mesaj [40] = “ Turbo C Ekran Fonksiyonları”;
    main( )
    {
    register int x , y;
    char *p;
    clrscr( );
    p = mesaj;
    for( y =1; y<=strlen(mesaj); x++)
    {
    for ( y =1; y<=12; y++)
    {
    gotoxy (x,y);
    printf( “%c”, *p); delay(1000);
    gotoxy(x , 25-y);
    printf( “%c”, *p); delay(1000);
    }
    p++;
    }
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu

    Burada kullanılan ;
    gotoxy komutu : x ve y olmak üzere iki parametre alır.x sütun y ise satır
    numarasıdır.gotoxy(x,y) komutu,kursörü ekranın x sütun y.satırına konumlandırır.Text
    modunda ekran 80 sütun ve 25 satırdan oluşmaktadır.
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    void mesaj (char *s , int x , int y);
    main( )
    {
    clrscr( );
    mesaj( “Bu bir mesajdır……..”,1.10);
    getch( );
    mesaj( “Bu da bir mesajdır….”, 10,10);
    getch( );
    }
    void mesaj( char *s , int x, int y) Bu bir meBu da bir mesajdır.
    {
    gotoxy(x ,y);
    clreol( );
    printf(s);
    }
    Burada kullanılan clreol( ) komutu, kursorün bulunduğu noktadan itibaren , satır sonuna kadar
    olan kısmı siler.
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK :#include<stdio.h>
    #include<conio.h>
    main( )
    {
    int x,y ;
    clrscr( );
    for( y =1; y<25; y++)
    for( x =1; x<80; x++)
    {
    gotoxy( x,y );
    printf( “ %c“, (y-1) + ‘A’);
    }
    for( y =2; y<26; y+=2)
    {
    gotoxy(1,y);
    delline( ); insline( );
    }
    getch( );
    }
    Bu programda kullanılan delline( ) komutu, kursorün bulunduğu satırı siler.
    İnsline ( ) komutu ise kursorün bulunduğu yere yeni bir boş satır açar,böylece kursorün
    bulunduğu ve diğer alt satırlar bir satır aşağıya kayar.
    Veri Yapıları ve Programlama Ders Notu

    Textbackground ve Textcolor Komutları
    Bu komutlar , text modunda ekranın zemin rengini ve yazı karakterlerinin rengini belirler.
    textbackground( ) : ekranın zemin rengini belirler
    textcolor( ) : yazı karakterlerinin rengini belirler.
    textbackground( ) ve textcolor( ) komutları bir renk parametresi alırlar.Bu parametreler rengin
    sembolik sabit ismi (ingilizce) veya buna karşılık gelen sayısal değer olabilir.
    Sembolik Sabit Sayısal Değer Renk
    BLACK 0 Siyah
    BLUE 1 Mavi
    GREEN 2 Yeşil
    CYAN 3 Turkuaz
    RED 4 Kırmızı
    MAGENTA 5 Mor
    BROWN 6 Kahverengi
    LIGHTGRAY 7 Açık Gri
    DARKGRAY 8 Koyu Gri
    LIGHTBLUE 9 Açık Mavi
    LIGHTGREEN 10 Açık Yeşil
    LIGHTCYAN 11 Açık Turkuaz
    LIGHTRED 12 Açık Kırmızı
    LIGHTMAGENTA 13 Açık Mor
    YELLOW 14 Sarı
    WHITE 15 Beyaz
    BLINK 128 Yanıp Sönme
    textcolor (BLUE); ile textcolor(1); aynı işi yapar.
    Ekrana renkli karakterlerin yazılmasında cprintf( ) komutu kullanılır.
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    main( )
    {
    clrscr( );
    textbackground(15);
    textcolor(RED);
    cprintf( “Uluborlu”);
    textbackground(GREEN);
    textcolor(7);
    cprintf( “Selahattin Karasoy”);
    textbackground(1);
    textcolor(YELLOW+BLINK); /* textcolor(14+128); */
    cprintf( “Meslek Yüksek Okulu”);
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu

    T E X T P E N C E R E S İ
    Text modunda window tanımlaması yapılarak ekranın sadece bir bölgesi aktif hale
    getirilebilir.Window tanımlandıktan sonra , yazılan bütün ekran kontrol komutları ( clrscr( ),
    delline( ), gotoxy(x,y)) hep bu tanımlı bölgede çalışır.
    Şimdiye kadar yapılan programlarda varsayılan pencere kullanılmıştır.(80 sütun ve 25
    satırdan meydana gelen)
    Window (x1 ,y1 x2, y2) : komutu ise ekranın bir bölgesini aktif pencere olarak tanımlar.Burada
    kullanılan x1 , y1 aktif pencerenin sol üst köşesini , x2, y2 ise sağ alt köşesini gösterir.
    ÖRNEK : #include<stdio.h>
    #include<conio.h>
    main( )
    {
    clrscr( );
    window(5,3,50,10);
    gotoxy(3,2);
    printf( “SDÜ-Isparta”);
    getch( );
    }
    (x1,y1) 
     (x2,y2)

    Veri Yapıları ve Programlama Ders Notu
    ÖDEV
    1. 2.
    3. Window komutları kullanılarak ekrana satranç tahtası şeklini çizen ve satranç oyunu
    için , başlangıç şeklindeki taşların yerini gösteren programı yazınız.
    kıyas
    kıyas
    kıyas
    kıyas
    k a
    kıyas
    ı s
    A B C D E F G H
    1
    2
    3
    4
    5
    6
    7
    8
    Kale At Fil Vezir Şah Fil At Kale
    Piyon Piyon …. ….. ….. …. ….. …..
    Piyon Piyon Piyon ….. ….. ….. …… ……
    Kale At Fil Vezir Şah Fil At Kale
    Veri Yapıları ve Programlama Ders Notu

    D O S Y A L A R
    Birçok program uygulamasında ,programa girilen ve program tarafından üretilen
    bilgilerin yardımcı bellekte (disket veya harddisk) depo edilip daha sonra tekrar kullanılması
    gerekmektedir. Program tarafından üretilen bilgilerin depo edildiği dosyalara VERİ
    DOSYALARI adı verilir.Dosyalar,bilgisayar programcılığında en önemli kavramların başında
    gelir.
    Veri Programdan veri dosyasına bilgi yazılması
    Veri Veri dosyasından programa bilgi okunması
    C programlama dilinde 2 tip veri dosyası tanımlıdır.
    -TEXT
    -BINARY dosyalar
    Program Veri
    Dosyası
    Program Veri
    Dosyası
    Veri Yapıları ve Programlama Ders Notu

    Veri Dosyalarının Açılma Modları
    Dosyalar , bilgi yazma , bilgi okuma ve bilgi ekleme modunda açılabilir.
    Mod Anlamı
    w Text dosyasını yazma modunda oluşturur.
    r Text dosyasını okuma modunda açar
    a Text dosyasını bilgi ekleme modunda açar.
    wb Binary dosyasını yazma modunda açar.
    rb Binary dosyasını okuma modunda açar.
    ab Binary dosyasını bilgi ekleme modunda açar.
    w + Text dosyasını okuma / yazma modunda açar
    r + Text dosyasını okuma / yazma modunda açar
    a + Text dosyasını okuma / bilgi ekleme modunda açar
    w + b Binary dosyasını okuma / yazma modunda açar
    a + b Binary dosyasını okuma / bilgi ekleme modunda açar
    Veri Yapıları ve Programlama Ders Notu

    TEXT DOSYALAR
    Text dosyalara bilgiler sırasal olarak kaydedilir ve kaydedilen bilgilerin en sonuna
    dosya sonu (EOF) işareti konur. Dosya sonu işareti (EOF) ekranda görüntülenemeyen özel bir
    işarettir.
    Veri dosyası
    Sırasal kayıtlar
    Dosya sonu
    işareti
    1) Yazma (w-write) modu
    Bir text dosyasını diskette veya harddiskte oluştururken “w” modunu kullanarak
    açmak gerekir. Daha önce oluşturulmuş ve içine bilgi yazılmış bir dosya tekrar “w” modunda
    açılırsa , yazıcı kafa dosyanın en başına konumlanacağı için , yeni girilen bilgiler önceki
    bilgilerin üzerine yazılır , böylece önceki bilgiler silinmiş olur.
    Text dosyalarla işlem yapacak olan programlarda ilk önce , değişkenlerin tanımlandığı
    bölümde bir dosya değişkeni tanımlanır. Bu tanımda bir değişken (pointer tipi bir değişken)
    FILE tipi tanımlanır. Bu değişken program içinde dosyayı temsil eder.
    ÖRNEK : # include <stdio.h>
    # include <conio.h>
    main( )
    {
    FILE *abc;
    int i,no;
    abc = fopen (“rakam”,”w”);
    for ( i=1 ; i<=5 ; i+t)
    {
    printf ( “%d. Sayıyı giriniz :”,i );
    scanf ( “%d”,&no);
    fprintf (abc , “%d \n”, no);
    }
    fclose (abc); }
    ---- ---- ---
    ---- ---- ---
    ---- ---- ---
    ---- ---- ---
    Veri Yapıları ve Programlama Ders Notu

    fopen komutu ile dosya açılır. Fopen komutunun iki parametresi bulunur. Bu
    parametreler fopen komutundan sonra parantez içinde verilir. Her iki parametrede çift tırnak
    içerisindedir ve birbirinden (,) ile ayrılır. Bu parametrelerden ilk açılacak olan dosyanın
    adıdır. Bu dosya adı en fazla 8 karakter olmalıdır. İstenirse dosya adından sonra dosya
    uzantısı da verilir. Bu uzantı genellikle Dat’dır. (İngilizce DATA (veri)’nin kısaltılmışıdır) .
    fopen komutundaki ikinci parametre ise dosyanın açılma modudur.
    fprintf komutu ile de dosyaya bilgi yazılır. Komuttaki ilk parametre bilginin hangi
    dosyaya yazılacağını gösterir. Buradaki abc değişkeni rakam isimli dosyayı temsil eder. Daha
    sonra çift tırnak içindeki değişken veya değişkenler dosyaya yazılacak bilgilerdir. Bu bilgiler
    den sonra \n kullanılır ve çift tırnak kapatılır. Çünkü text dosyalarda bilgiler sıralı mantık ile
    yazıldığı için \n kullanılır. Üçüncü parametre ise bilgileri temsil eden değişken isimleridir.
    2) Okuma (r-read) modu
    ÖRNEK : #include <stdio.h>
    #include <conio.h>
    main ( )
    {
    FILE *dd;
    int no;
    dd = fopen (“rakam”, “r”);
    while ( fscanf (dd ,”%d”,&no)!=EOF )
    printf ( “%d\n”,no);
    fclose (dd);
    getch ();
    }
    Burada dosya fopen komutu ile (“r”) okuma modunda açılmıştır. fscanf komutu
    dosyadan bilgi alır , alınan bilgi no değişkenine aktarılıyor, bu işlem dosyanın sonuna kadar
    devam eder. while döngüsü EOF (dosya sonuna) gelindiğinde sona erer.
    Veri Yapıları ve Programlama Ders Notu

    3) Bilgi ekleme (a- append) modu
    ÖRNEK : #include <stdio.h>
    #include <conio.h>
    main ( )
    {
    FILE *dd;
    int i,no;
    dd = fopen (“rakam” , “a”);
    for ( i=1; i<=3 ; i+t )
    {
    printf (“%d. Sayıyı giriniz : ” , i );
    scanf(“%d.” , & no);
    fprintf (dd, “%d \ n ”,no);
    }
    fclose (dd);
    }
    Diskette (veya HDD) mevcut olan bir dosya eğer tekrar “w” moduyla açılmış olsaydı ,
    yazıcı kafa dosyanın başına konumlanacağından yeni bilgiler önceki bilgilerin üzerine
    yazılacağından önceki bilgiler kaybolur.
    Dosya “a” modunda açıldığında ise, yazıcı kafa dosya sonu (EOF) işaretinin
    bulunduğu yere konumlanır ve böylece yeni bilgiler önceki bilgilerin sonundan itibaren
    yazılmaya başlar.
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include <stdio.h>
    #include <conio.h>
    main( )
    {
    FILE *xyz;
    char ad [20], de;
    int no;
    xyz = fopen ( “isimler” , “w” );
    while (1)
    {
    printf (“Adı : ”); scanf ( “%s”,& ad);
    printf (“Numarası : ” )scanf ( “%d” , & no);
    fprintf ( xyz , “%s %5d \ n ” ,ad , no);
    printf (“Devam etmek istiyor musunuz (e/h) ? ” );
    de = getche ( ) ;
    if ( de = = ‘h’)
    break;
    }
    fclose(xyz);
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include <stdio.h>
    #include <conio.h>
    main ( )
    {
    FILE *klm ;
    char ad [20];
    int no;
    klm = fopen(“isimler”,“r”);
    clrscr( );
    printf ( “ Adı Numarası \n );
    printf ( “………………….. \n );
    while (fscanf (klm , “%s %5d ” , ad, &no )!= EOF )
    printf (“ %s %5d \n ” , ad ,no);
    fclose (klm);
    getch( );
    }
    ÖDEV
    1) Bir sınıftaki öğrencilerin “adı,soyadı,numarası,vize notu ve final notu” dosyada tutulmak
    isteniyor. Buna göre program çalıştığında
    1-Kayıt ekleme
    2-Kayıt bulma (isim ve numaraya göre)
    3- Kayıt silme (numaraya göre )
    4- Bilgi değiştirme
    5- Listeleme
    seçenekleri bulunacaktır. Programı text dosyalama kullanarak yazınız.
    Veri Yapıları ve Programlama Ders Notu

    BINARY DOSYALAR
    Binary dosyalara BYTE düzeyinde kayıt yapılır ve okunur. Yani kullanılan
    değişkenlerin boyutuna göre , dosyada kayıtlar tutulur.
    Bu dosyalarda kayıt yapma işleminde “fwrite, “ kayıt okuma işleminde ise “fread”
    komutları kullanılır.
    fwrite komutunun genel yazılımı
    fwrite ( değişken , byte sayısı, bilgi sayısı, dosya değişkeni )
    Değişken : Kaydedilecek bilgiyi tutan değişkenin adresi
    Byte sayısı : Kaydedilecek bilginin byte olarak uzunluğu (bunun için sizeof komutu
    kullanılır)
    Bilgi sayısı : Her seferde kaydedilecek olan bilgi sayısı , genellikle bu sayı 1 olur.
    Dosya değişkeni : Diskteki dosyayı programda temsil eden değişken.
    fread komutunun genel yazılımı
    fread (değişken byte sayısı, bilgi sayısı,dosya değişkeni)
    Değişken : Okunacak olan bilgiyi tutacak olan değişkenin adresi.
    Byte sayısı : Okunacak bilginin byte olarak uzunluğu (sizeof komutu)
    Bilgi sayısı : Her seferde okunacak bilgi sayısı (1)
    Dosya değişkeni : Diskdeki dosyayı programda temsil eden değişken.
    ---- ---- ---
    ---- /--- ---
    ---- ---- --/
    Veri Yapıları ve Programlama Ders Notu

    Structure tipi değişkenler
    Bu tip değişkenler daha çok BINARY dosyalarda kullanılmakta ve bu yolla kayıt
    yapma ve okuma işlemleri çok hızlı olarak gerçekleştirilebilmektedir.( Ayrıca TEXT
    dosyalarda da kullanılabilir)
    Birbiriyle bağlantılı ve bir küme teşkil eden değişkenler bir tek değişkenin elemanları
    olarak tanımlanabilir. Bu durumda bir grup değişkene bir tek isimle ulaşmak mümkündür.
    Structure tip değişkenler.
    Örneğin, öğrencinin bilgileri birbirine bağlantılı olarak düşünülebilir.
    Adı
    Soyadı
    Numarası
    Sınıfı
    Bölümü
    Yukarıdaki elemanlar bir araya getirildiğinde ogr_bil adlı bir değişkenin alt elemanları olarak
    tanımlanabilir.
    Struct b
    {
    int no;
    char ad [10] , soyad[10];
    char sınıf [5];
    char bölüm [15];
    } ogr_bil;
    Bu tanımlamadan sonra ogr_bil değişkeninin elemanlarına,
    ogr_bil. no
    ogr_bil. ad
    ogr_bil. soyad
    ogr_bil. sınıf
    ogr_bil. bolum
    şeklinde ulaşılabilir.
    Binary dosyalamada kullanılan “fseek” komutu ise , yazıcı kafayı belirli bir kayıt
    alanına konumlandırır.böylece her kaydın bir kayıt numarası olmakta , bu numara kullanılarak
    kayda doğrudan doğruya ulaşmak imkanı bulunmaktadır.
    Veri Yapıları ve Programlama Ders Notu

    fseek komutunun genel yazılımı
    fseek (dosya değişkeni , kayıt pozisyonu , referans noktası )
    Dosya değişkeni : Diskdeki dosyayı programda temsil eden değişkenin adı.
    Kayıt pozisyonu : Kayıtların başlangıcından , okuyucu veya yazıcı kafanın bulunduğu
    noktadan yada kayıtların sonundan itibaren, byte olarak , kayıt yapılacak
    veya kayıt okunacak alan.
    Referans noktası : Kayıt pozisyonunun nereden itibaren hesaplanacağı gösterilir.
    0 : Kayıt pozisyonu , kaydın başından itibaren byte cinsinden hesaplanır. 0
    yerine SEEK_SET yazılabilir.
    1 : Kayıt pozisyonunun , yazıcı veya okuyucu kafanın bulunduğu noktadan
    itibaren hesaplanacağını gösterir. 1 yerine SEEK_CUR yazılabilir.
    2 : Kayıt pozisyonu kaydın sonundan itibaren byte cinsinden hesaplanır. 2
    yerine SEEK_END yazılabilir.
    Binary ve text dosyalarda kayıtlara numarada verilebilir. Fiziki ( yani disketteki) kayıt
    alanı numarası 0’dan başlar ancak her kayıt alanına kayıt yapılması zorunluluğu yoktur.
    Kayıtlar rastgele alanlara yazılıp okunabilir. Bu durumda içinde kayıt bulunan alanlarla, kayıt
    bulunmayan alanların birbirinden ayırt edilmesi gerekir. Bunun için kayıt bulunan alanlara ilk
    kayıt elemanı olarak özel bir işaret (mesela *) konulmakta ve böylece bir alanda kayıt
    bulunup bulunmadığı kontrol edilebilmektedir.
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK: #include <stdio.h>
    #include <conio.h>
    struct b
    {
    char ad [5];
    char soyad [15];
    char adres [20];
    char tel.[12];
    char şehir [15];
    }bilgi;
    main( )
    {
    FILE *dosya ;
    char ce ;
    dosya = fopen (“tel_rehber” , “wb” );
    do
    {
    clrscr ( );
    printf (“Adınız :”); scanf (“%s” , & bilgi.ad );
    printf (“soyadınız :”); scanf (“%s” , & bilgi.soyad);
    printf (“adresiniz :”); scanf (“%s” , & bilgi.adres );
    printf (“telefonunuz :”); scanf (“%s” , & bilgi.tel );
    printf (“şehrin adı :”); scanf (“%s” , & bilgi.şehir );
    fwrite (&bilgi , sizeof (bilgi) ,1, dosya);
    printf (“tekrar kayıt yapılacak mı (e/h) :”);
    ce = getce();
    }white (ce = = ‘e’);
    fclose (dosya):
    printf (“kayıt yapıldı …”);
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : #include < stdio.h>
    #include <conio.h>
    struct b
    { char ad [15];
    char soyadı [15];
    char adres [20];
    char tel[12];
    char şehir [15];
    } bilgi ;
    main( )
    {
    FILE *dosya;
    int sayı ,k, k-sayı;
    dosya = fopen (“tel. – rehberi” , “rb”);fseek (dosya, 0.2);
    k – sayısı = ftell(dosya)/ 77; // ftell komutu kayıt sayısını bulur.
    fseek (dosya, 0,0); değişkenlerin byte olarak uzunluğu
    clrscr ( );
    say = 0
    for ( k=0; k<k-sayısı ; k++)
    {
    if (say=0)
    {
    printf (‘’ ADI SOYODI TEL. ADRES ŞEHİR \n’’);
    printf (‘’ ……………………………………....\n’’);
    }
    fread (& bilgi, sizeof (bilgi),1, dosya);
    printf(‘’ %s %s %s %s %s \n’’,bilgi.ad, bilgi.soyad, bilgi.tel,bilgi.adres,
    bilgi.sehir);
    say ++;
    }
    fclose (dosya);
    printf (“liste sonu …..” );
    getch( ); }
    Veri Yapıları ve Programlama Ders Notu

    PARALEL PORT UYGULAMALARI
    Paralel port , bilgisayarın en kolay programlanabilen portudur. Bu pinler üzerinde DATA ,
    STATUS , CONTROL adı verilen 3 tane port vardır. Bu pinlerden herhangi birinin “1”
    olması durumu , o pinden okunacak voltajın +5V olması anlamına gelir. “0” olması durumu
    ise o pinin 0 volt olduğunu ifade eder.
    25 nolu pin topraktır.
    Bir paralel porttan veri alışverişi yapılabilmesi için bu verinin önce geçici bir yere (register)
    kaydedilmesi gerekir. Her register on altı ( hexadecimal ) sayı sisteminde bir adresi vardır.
    Bunlar 378 , 379 , 37A , şeklindedir. Data (378) , status (379) , control (37A)
    “Gönder” komutu ile porta veri gönderildiğinde , o veri , paralel portun 2 – 9 numaralı
    pinleri arasında görülür. Bir pine veri göndermek , o uçtaki gerilimin +5V veya 0V olması
    demektir. Programda 10 tabanında gönderilen sayısal değer , portta 8 bit halinde , 2 tabanında
    gözükür.
    Veri Yapıları ve Programlama Ders Notu
    Alttaki şekilde 8 tane Led , dirençlerle (220Ω veya 390Ω) birlikte paralel porta
    bağlanmaktadır. Çünkü LED’ler 1,5V ‘la çalışır. Ama paralel porttan 5V çıkar. Ledlerin
    patlamaması için gerilim düşürücü olarak direnç kullanılır.
    ÖRNEK : Paralel porta bağlanan 8 tane LED’in sağdan sola doğru sırası ile yanması için
    gereken programı yazınız.
    İlk önce porta gönderilecek olan sayıların belirlenmesi gerekir.
    Pin 9 8 7 6 5 4 3 2
    Verinin
    2’lik
    değeri
    27 26 25 24 23 22 21 20
    Led No 8 7 6 5 4 3 2 1
    Gönderilecek
    değer
    X 20 = 1
    X 21 = 2
    X 22 = 4
    X 23 = 8
    X 24 = 16
    X 25 = 32
    X 26 = 64
    Yakılacak
    LED
    X 27 = 128
    25
    2
    3
    9
    25
    2
    3
    9
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include <math.h>
    #include <stdio.h>
    #include <conio.h>
    #include <dos.h>
    main ( )
    {
    int d, i ;
    clrscr ;
    outport (0x378 , 1 ) ; delay (1000) ; for (i = 0 ; i<= 7 ; i++)
    outport (0x378 , 2 ) ; delay (1000) ; {
    outport (0x378 , 4 ) ; delay (1000) ; d = pow (2,i) ;
    outport (0x378 , 8 ) ; delay (1000) ; outport (0x378 , d)
    outport (0x378 , 16 ) ; delay (1000) ; delay ( 1000 ) ;
    outport (0x378 , 32 ) ; delay (1000) ; }
    outport (0x378 , 64 ) ; delay (1000) ;
    outport (0x378 , 1128 ) ; delay (1000) ;
    getch ( ) ;
    }
    ÖRNEK : Bilgisayarın parelel portuna bağlı 8 LED’i , 1 sn aralıklarla kenarlardan ortaya
    doğru , sonra ortadan iki yana doğru sürekli bu şekilde ledleri yakan programı yazınız.
    8 7 6 5 4 3 2 1
    x x
    x x
    x x
    x x
    x x
    x x
    x x
    x x
    1+128=129
    2+64=66
    4+32=36
    8+16=24
    24
    36
    66
    129
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include <stdio.h>
    #include <conio.h>
    #include <dos.h>
    main ( )
    {
    int i , a [4] = (129 , 66 , 36 , 24) ;
    for (i = 0 ; i<4 ; i + t)
    {
    output (0x378 , a ) ;
    delay (1000);
    }
    for (i = 3 ; i ≥ 0 ; i + t)
    {
    output ( 0x378 , a )
    delay (1000),
    }
    getch ( ) ;
    }
    Veri Yapıları ve Programlama Ders Notu

    SEVEN SEGMENT DİSPLAY (GÖSTERGE) UYGULAMALARI
    7 segment display
    Burada 0 rakamının oluşması için g hariç diğerlerinin aktif (lojik 1) olması gerekir.
    Pin 9 8 7 6 5 4 3 2
    Display
    segmenti
    g f e d c b a
    Yanacak
    Rakam 27 26 25 24 23 22 21 20
    Gönder
    ilecek
    değer
    0 0 0 1 1 1 1 1 1 63
    1 0 0 0 0 0 1 1 0 6
    2 0 1 0 1 1 0 1 1 91
    3 0 1 0 0 1 1 1 1 79
    4 0 1 1 0 0 1 1 0 102
    5 0 1 1 0 1 1 0 1 109
    6 0 1 1 1 1 1 0 1 125
    7 0 0 0 0 0 1 1 1 7
    8 0 1 1 1 1 1 1 1 127
    9 0 1 1 0 1 1 1 1 111
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include <stdio.h>
    #include <conio.h>
    #include <dos.h>
    main ( )
    {
    int i , a [10] = {63,6,91,79,102,109,125,7,127,111} ;
    for (i = 0 ; i<9 ; i + +)
    {
    output (0x378 , a ) ;
    delay (1000);
    }
    getch ( ) ;
    }
    Veri Yapıları ve Programlama Ders Notu

    C GRAFİK
    1) a. Grafik Ekrana Geçiş(harici function yazılması)
    piksel çizim komutları
    b. Getpiksel komutu
    2) a. line komutu
    b. circle komutu
    3) a. arc komutu
    b. ellipse komutu
    4) a. grafik imlecinin yerinin degiştirilmesi.(moveto,moverel) lineto
    b. rectangle komutu
    5) a. drawppoly komutu
    b. çizim tipinin değiştirilmesi(çizginin ince,kalın,noktalı v.s)
    6) a. bar komutu,bar3d komutu
    b. pieslice komutu,sector komutu
    7) a. fillellipse komutu,fillpolly komutu
    b. yazı komutları
    8) a. outtext komutu,outtextxy komutu
    b. settextjustify komutu
    9) a. metin boyutlarının belirlenmesi(textheight,textwidth)
    b. çizim renklerinin seçimi(setbkcolor,setcolor)
    10) a. restorecrtmode,getgraphmode,setgraphmode,graphdefaults
    b. cleardevice,setviewport komutu,clearviewport komutu
    Veri Yapıları ve Programlama Ders Notu

    Grafik Sisteminin Başlatılması
    Bilgisayarın grafik adaptörü ve modunun belirlenmesinden sonra yapılacak ilk iş çizim için
    grafik sisteminin başlatılmasıdır.Grafik sisteminin başlatılması, grafik adaptörünün çizim için
    hazır duruma getirilmesi demektir.
    Grafik sistemini başlatmak için initgraph komutu kullanılır.
    void far initgraph (int far *GrAdapter,int far *GrMod,char far *dir);
    initgraph komutu,verilen grafik adaptörü ve moduna ait bilgileri içeren uygun grafik arabirim
    dosyasını disketten okuyup hafızaya yükleyerek Borland grafik Kernel’i ile grafik arabirimi
    arasındaki iletişimi hazırlar ve grafik sistemini başlatır.
    Sistemin Program Komutları Tarafından Belirlenerek Açılması
    Tek bir grafik adaptörünü destekleyen program yazmak yerine, Borland Grafik Paketi
    tarafından desteklenen tüm grafik adaptör ve modlarında çalışabilecek bir program yazmak
    için grafik adaptör ve modunun program tarafından otomatik olarak belirlenmesi gerekir.
    detectgraph (&GrAdapter,&GrMod);
    initgraph (&GrAdapter,&GrMod,” “);
    yazılırsa grafik sisteminin tipi otomatik olarak belirlenir ve çizim için hazır duruma getirilir.
    Grafik Sisteminin Kontrolü
    Grafik sisteminin belirlenmesinde ,hazır duruma getirilmesinde ve grafik komutlarının
    uygulanması sırasında çeşitli hatalar meydana gelebilir.Bu hata kontrollerinin programcı
    tarafından yapılması gerekir.Bu kontroller “graphresult” komutunun kullanımıyla yapılır.
    int far graphresult(void);
    Graphresult komutu işlenen son grafik komutunda bir hata meydana gelip gelmediği hakkında
    bir tamsayı değeri üretir.Bu değerin 0 olması durumunda hata yok,negatif olması halinde ise
    bir hata meydana geldi demektir.
    initgraph ile grafik sisteminin başlatılmasında hata kontrolünün muhakkak yapılması
    gerekir.Çünkü sistemin başlatılmaması durumunda sonraki grafik komutlarının
    çalıştırılmasının bir anlamı kalmayacaktır.
    Veri Yapıları ve Programlama Ders Notu
    GrAdapter=DETECT;
    initgraph (&GrAdapter,&GrMod,” “);
    hata-kodu=graphresult( );
    if(hata-kodu!=grOk) { !=anlam eşit değil}
    {
    printf(“Grafik hatası : # %d kodlu hata\n”,hata-kodu);
    getch( );
    exit(1);
    }
    Genellikle ,hata oluştuğunda kullanıcıya sadece hatanın kodunu vermek hatanın ne olduğunun
    anlaşılması bakımından yarar sağlamaz.Kullanıcı için önemli olan hata kodu değil hatanın
    sebebidir.”Grapherrormsg”komutu ise hata kodunun ingilizce olarak açıklanmasını verir.
    for (i=0; i<= -15; i--)
    printf(“# %3d : %s\n”,i,grapherrormsg(i));
    printf(“# %3d : %s\n”,-18,grapherrormsg(-18));
    Ekran Çıktısı :
    0 : No Error
    -1 : (BGI) graphics not installed
    .
    .
    .
    -15 : Graphics Error
    -18 : Invalid File Version Number
    Veri Yapıları ve Programlama Ders Notu
    46 Kıyas KAYAALP
    Grafik Sisteminin Kapatılması
    initgraph basit anlamda text ekranından grafik ekrana geçişi sağlayan bir komuttur.Grafik
    çizimine geçmeden ,grafik ekrana geçilmesi gerektiği gibi grafik çiziminden sonra da grafik
    ekrandan tekrar metin ekranına dönülmesi gereklidir.Bunun için “closegraph” komutu
    kullanılır.
    Bu komut grafik ekrandan metin ekranına geçilmesini veya kısaca grafik sisteminin
    kapatılmasını gerçekleştirir.
    Grafik Ekrana Geçiş
    ÖRNEK : # include<stdio.h>
    # include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if (graphresult( )!=grOk)
    {
    printf(“Grafik hatası : (%d kodlu hata\n)”,graphresult);
    getch( );
    exit(1);
    }
    circle(100,100,150);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    47 Kıyas KAYAALP
    ÖRNEK : # include<stdio.h>
    # include<conio.h>
    # include<graphics.h>
    void main( )
    {
    int GrAdapter,Gr Mod;
    int hata-kodu;
    /* Grafik Ekrana Geçiş : Grafik adaptör ve modunun otomatik olarak */
    /* saptanıp grafik ekranın hazır duruma getirilmesi */
    GrAdapter=DETECT;
    initgraph(&GrAdapter,GrMod,” “);
    hata-kodu=graphresult( );
    /* Grafik Ekrana Geçişte hata kontrolü
    if (hata-kodu!=grOk)
    {
    printf (“Grafik hatası : (# %d kodlu hata) %s\n”,hata-kodu,grapherrormsg(hata-kodu));
    getch( );
    exit(1);
    }
    .
    .
    . /* Grafik komutları yazılır */
    .
    getch( );
    /* grafik ekrandan ,metin ekrana geri dönüş */
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    PİKSEL ÇİZİM KOMUTLARI
    En basit haliyle bir grafik çizimi,(ekran,ekran kartının türüne göre değişiklik gösterebilen
    piksel adı verilen noktalardan oluşur.Mesela 640*480’lik bir ekranda yatay doğrultuda (  )
    640 adet nokta bulunur, düşey doğrultuda (Y) 480 adet nokta bulunur.Toplam ise
    640*480=307200 tane nokta bulunur.)grafik ekrandaki piksellerin istenilen renge
    boyanmasıyla yapılır.Bir Pikselin istenilen renge boyanması için üç bilgiye ihtiyaç vardır ;
     Pikselin kaçıncı sütuna karşı geldiği -x
     Pikselin kaçıncı satıra karşı geldiği -y
     Pikselin hangi renge boyanacağı -renk
    Borland grafik paketinde bu işlemi yapmak için “putpixel” komutu kullanılır.
    void far putpixel (int x, int y, int renk);
    Bu komut yardımıyla x,y koordinatındaki pixel,verilen renk ile boyanır.Renk
    değeri,GRAPHİCS.H başlık dosyasında tanımlanmış olan sabit isimleri veya bunlara karşılık
    gelen tamsayı renk kodları kullanılabilir.C’de renk isimleri BÜYÜK HARF ŞEKLİNDE
    kullanılması gerekir.
    BLACK 0 DARK GRAY 8
    BLUE 1 LİGHT BLUE 9
    GREEN 2 LIGHT GREEN 10
    CYAN 3 LIGHT CYAN 11
    RED 4 LIGHT RED 12
    MAGENTA 5 LIGHT MAGENTA 13
    BROWN 6 YELLOW 14
    LIGHTGRAY 7 WHİTE 15
    Bu renk bilgileri kullanılarak 100.sütun ve 20.satıra karşılık gelen pikselin mavi renge
    boyanması istenirse ;
    putpixel (100,20,BLUE); veya putpixel(100,20,1); kullanılır.
    Veri Yapıları ve Programlama Ders Notu
    49 Kıyas KAYAALP
    ÖRNEK:Ekrana alt alta 15 tane renk koyan programı yazınız.
    #include<stdio.h>
    #include<graphics.h>
    main( ) .
    { .
    int a=DETECT,b; .
    int i; .
    clrscr( );
    initgraph(&a,&b, “ “);
    if(graphresult( )!=grOk)
    {
    printf(“grafik hatası:(%d kodlu hata\n)”,graphresult);
    getch( );
    exit(1);
    }
    for(i=1; i<=15; i++)
    putpixel(100,100+i,i);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    50 Kıyas KAYAALP
    ÖRNEK: Ekrana 1000 tane rastgele koordinatlarda renkli nokta koyan programı yazınız.
    #include<stdio.h>
    #include<stdlib.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int i;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“grafik hatası(%d kodlu hata\n)”,graphresult);
    getch( );
    exit( );
    }
    for(i=0; i<1000; i++)
    {
    putpixel(random(639),random(479),i);
    delay(1200);
    }
    getch( );
    closegraph( );
    }
    100
    (0,0) 
    20  mavi
    Veri Yapıları ve Programlama Ders Notu
    51 Kıyas KAYAALP
    Putpixel komutunu kullanarak diğer karmaşık çizimleri de gerçekleştirmek
    mümkündür.Örneğin ekranda(x1,y1 ) noktasında başlayan ve (x2,y2) noktasında son bulan bir
    doğru parçasının çizimi için
    y(x)=y1+(x-x1) .
    1 2
    1 2
    y y
    x x


    denklemi kullanılabilir.Bu denkleme göre bir x
    değerine karşılık bir y değeri bulunarak putpixel ile çizim gerçekleştirilebilir.
    Getpixel
    Putpixelin tersine verilen koordinattaki pikselin hangi renge sahip olduğunu anlamak için
    “getpixel”komutu kullanılır.
    Unsigned far getpixel(int x,int y);
    Bu komut verilen x,y koordinatındaki rengi saptayarak bu renge ait sayısal kodu geri
    gönderir.
    Unsigned renk;
    İşaretsiz tam sayısal bir değişken tanımlanması yapıldıktan sonra
    Renk=getpixel(100,20);
    Komutu verildiğinde eğer buradaki piksel mavi renge sahipse renk değişkenlerine 1(BLUE)
    değeri atanır.
    Veri Yapıları ve Programlama Ders Notu
    52 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    unsigned int k;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“grafik hatası:%d nolu hata “\n”,graphresult);
    getch( );
    exit(1);
    }
    putpixel(100,200,5);
    getch( ) ;
    k=getpixel(100,100);
    closegraph( );
    printf(“%d”,k);
    getch( );
    }
    Veri Yapıları ve Programlama Ders Notu
    53 Kıyas KAYAALP
    TEMEL ÇİZİM KOMUTLARI
    Doğru parçası,dikdörtgen,daire,elips v.b. şekiller grafik çizimlerinde oldukça sık kullanılırlar
    ve karmaşık grafik çizimlerinin temel elemanlarını teşkil ederler.Bu temel şekillerin çizimi
    için gerekli tüm komutlar,Borland grafik paketi içinde programcılara hazır olarak
    sunulmuştur.
    LİNE KOMUTU
    Bir doğru parçası çizimi gerçekleştirmek için “line” komutu kullanılır.Doğru parçasının
    çiziminde Borland Grafik Koordinat sistemine göre tayin edilmiş olan bir başlangıç koordinat
    ve bir de bitiş koordinatı kullanılır.
    void far line (int x1,int y1,int x2,int y2);
    Burada x1,y1 doğrunun başlangıç koordinatı ; x2,y2 ise bitiş koordinatıdır.Line komutunda
    çizim için renk parametresi yoktur.Çizim rengi için grafik sistemde önceden programcı
    tarafından “setcolor” ile verilmiş olan renk değeri kullanılır.Eğer bu renk verilmedi ise
    çizimde beyaz renk kullanılır.
    (0,0) 
     (x2,y2)

    (x1,y1)
    Veri Yapıları ve Programlama Ders Notu
    54 Kıyas KAYAALP
    ÖRNEK :#include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a=DELECT ,b;
    initgraph(&a,&b,””);
    if (graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    line (250,240,430,240);
    line (320,150,320,330);
    getch( );
    closegraph( );
    }
    ÖRNEK:#include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a=DELECT,i,b;
    initgraph(&a,&b,””);
    if(graphresult()!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    for(i=0;i<=479;i=i+5)
    line(0,240,639,i);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    55 Kıyas KAYAALP
    ÖRNEK :#include(stdio.h)
    #include(conio.h)
    main( )
    {
    int a=DELECT.b;
    int i;
    initgraph(&a,&b,””);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch();
    exit(1);
    }
    for(i=0;i<=150;i=+5)
    {
    line(320,240,320+i,390+i);
    line(320,240,320-i,390-i);
    }
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    56 Kıyas KAYAALP
    CIRCLE KOMUTU
    Daire çizimi için kullanılan komut circle ‘dır.
    Yazılımı : void for circle(int x,int y,int r);
    Circle ile parametreler sırasıyla x,y dairenin merkez koordinatı ve r dairenin yarıçapını
    belirten tamsayı değerleridir.
    ÖRNEK :#include(stdio.h)
    #include(conio.h)
    main( )
    {
    int a=DELECT,b;
    clrscr( );
    initgraph(&a,&b,””);
    i f(graphresult!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    circle(100,100,50);
    getch( );
    closegraph( );
    }
    r
    (x,y)
    Veri Yapıları ve Programlama Ders Notu
    57 Kıyas KAYAALP
    ÖRNEK : Ekranda rastgele renkte,yarıçapta ve noktada 50 tane çember çizen programı
    yazınız.
    #include<stdio.h>
    #include<graphics.h>
    #include<conio.h>
    main( )
    {
    int a=DELECT,b;
    int i;
    clrscr( );
    randomize( );
    initgraph(&a,&b,””);
    if(graphresult!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit( );
    }
    for(i=0;i<=50;i++)
    {
    setcolor(random(15));
    circle(random(680),random(400),random(50));
    delay(9200);
    }
    getch( );
    closegraph( );
    }
    ÖDEV : Ekrana yine rastgele renkte,yarıçapta ve merkezde 50 tane çember çizdirilecek fakat
    çemberler ekranın dışına taşmayacak yani yarım çember olmayacak bu programı yazınız.
    Veri Yapıları ve Programlama Ders Notu
    58 Kıyas KAYAALP
    ARC KOMUTU
    Bir daire parçası (yay) çizimi için “ARC” komutu kullanılır.
    Yazılımı: void for arc(int x ,int y, int aci1, int aci2, int r);
    Bu komutta verilen parametrelerin anlamlarına sırasıyla x.y yayın merkez koordinatı ,açı1 ve
    açı2 yayın başlangıç ve bitiş açılarını (derece cinsinden)ve son olarak r daire yayının
    yarıçapıdır.Yayın çiziminde kullanılan açılar merkez koordinattan doğuya doğru olan yönü 0
    olmak üzere saat ibrelerinin ters yönünde arttırılarak tespit edilir ve yayın çizimi için açıların
    alabileceği değerler normalde şu şekilde olmalıdır.
    Bu bilgiye göre bir daire yayının çizimi aşağıdaki gibi yapılır,
    0o  açı1  360o
    0o  açı2  360o
    açı1  açı2
    90o
    0o
    180o 360o
    270o
    ry
    açı2
    açı1
    (x,y) rx
    Veri Yapıları ve Programlama Ders Notu
    59 Kıyas KAYAALP
    Eğer yukarıda verilen yay çizimi için ilgili açı kurallarına uyulmadı ise açılar aşağıdaki
    kurallara göre belirlenir.
    a)Verilen açının 360’den büyük olması durumunda bu değerlerden 360 çıkartılır.
    Arc(x,y, 40, 450, r);
    komutu
    Arc (x,y, 40, 360+90, r);
    komutunun veya
    Arc (x,y, 40, 90, r);
    komutunun aynısıdır.
    b)Açı1, açı2’den büyükse (açı1>açı2) bu durumda açı2’ye 360 eklenir.
    arc(x,y,90,40,r);
    komutu
    arc(x,y,90+340,r);
    ile aynıdır.
    Burada açı1=0 ve açı2=360 olarak verilirse tam bir daire elde edilir.Bu durumda
    Arc (x,y, 0, 360, r);
    Komutu
    Circle (x, y, r);
    Veri Yapıları ve Programlama Ders Notu
    60 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hataları”,graphresult);
    getch( );
    exit(1);
    }
    arc(100,100,0,90,50);
    arc(100,200,90,180,50);
    arc(100,300,180,270,50);
    arc(100,400,270,360,50);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    61 Kıyas KAYAALP
    ÖRNEK : Bir çember üzerinde yürüyen ışık efekti veren program.10’ar derecelik yaylar
    çizilerek farklı renklerde bir çember oluşturuluyor.
    #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a= DETECT,b;
    int i,k,l;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk);
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    k=0;
    for (l=0; l<14; l++)
    for (i=0; i<36; i++)
    {
    setcolor (l+1);
    arc(320,240,k,k+10,100);
    delay(9000);
    setcolor(0);
    arc(320,240,k,k+10,100);
    k=k+10;
    }
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    62 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    arc(0,200,270,0,100);
    arc(200,200,50,180,100);
    arc(200,200,0,90,100);
    arc(400,200,180,270,100);
    arc(600,200,90,180,100);
    arc(600,200,90,180,100);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    63 Kıyas KAYAALP
    ELLİPSE KOMUTU
    Bir elips veya eliptik yay çizimi için kullanılan komut “ellipse”tir.
    void far ellipse(int x,int y,int aci1,int aci2,int rx,int ry);
    ellips’te verilen parametrelerin anlamları arc’takine benzerdir.Sırasıyla
    x,y : elips merkezinin koordinatını
    açı1,açı2 : elips yayının başlangıç ve bitiş açıları (derece olarak)
    rx : elipsin x yönündeki
    ry : elipsin y yönündeki yarıçaplarıdır.
    Açılar,merkez koordinatının doğuya doğru olan yönü 0o olmak üzere saat ibrelerinin ters
    yönünde arttırılarak belirlenir.
    Açılar için kullanılan değerler normalde aşağıdaki gibi olmalıdır.
    0o  açı1  360o
    0o  açı2  360o
    açı1  açı2
    verilen bilgilere göre elips yayının çizimi,
    90o
    0o
    180o
    360o
    270o
    Eğer açı1 = 0o ve açı2 = 360o verilirse tam bir ellipse elde edilir.
    Ellipse (x,y,0,360,rx,ry);
    ry
    açı2
    açı1
    (x,y) rx
    Veri Yapıları ve Programlama Ders Notu
    64 Kıyas KAYAALP
    0o
    360o
    Ayrıca rx ve ry değerleri aynı olursa (rx = ry) ve açı1 = 0o ve açı2 = 360o olarak verilirse,
    ellipse (x,y,0,360,rx,ry);
    Komutu teorik olarak
    circle(x,y,r);
    Komutunun aynısı olur.
    rx ile ry birbirine eşit ve değeri r, açı1  0,açı2 = 360 ve açı1<açı2
    Olması durumunda
    ellipse (x,y,açı1,açı2,r,r);
    Komutu teorik olarak
    arc (x,y,açı1,açı2,r);
    Komutunun aynısıdır.
    ry
    rx
    Veri Yapıları ve Programlama Ders Notu
    65 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası\n”,graphresult);
    getch( );
    exit(1);
    }
    ellipse(320,240,0,360,150,75);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    66 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h> 4 3 2
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası\n”,graphresult);
    getch( );
    exit(1);
    } çember
    ellipse(320,240,0,360,35,35); /x1x/
    ellipse(320,240,0,90,70,50); /x2x/
    ellipse(320,240,0,180,50,90,65); /x3x/
    ellipse(320,240,0,270,110,80); /x4x/
    ellipse(320,240,0,360,130,95); /x5x/
    getch( );
    closegraph( );
    }
    4
    5
    1
    Veri Yapıları ve Programlama Ders Notu
    67 Kıyas KAYAALP
    GRAFİK İMLEÇ
    Metin ekranında genelde bir yazının ekrana basımı , imlecin olduğu yer referans alınarak
    yapılır.Grafik ekranda da metin ekranında olduğu gibi bir grafik imleç vardır.Borland Grafik
    Paketindeki grafik komutlarından bazıları bu grafik imleç yerini çizim için referans noktası
    olarak alır. Grafik imlecin yeri bir pikseli gösteren koordinattır.Bu imleç hayali bir imleçtir ve
    ekranda görünmez.Sadece gerekli komutlarla grafik imlecin nerede olduğu veya neresi
    olacağı belirlenir.
    Grafik İmleç Yerinin Belirlenmesi
    Grafik sistemi initgraph ile başlatıldığında grafik imlecin yeri ekranın sol üst köşesi olan (0,0)
    koordinattır.Bazı çizim komutlarının uygulanmasından sonra yeri değişen grafik imlecin
    nerede olduğu “getx” ve “gety” komutlarıyla belirlenebilir.
    int far getx (void)
    int far gety (void)
    Burada getx komutu grafik imlecin bulunduğu yerin x-koordinatını,gety ise y-koordinatını
    verir.
    Veri Yapıları ve Programlama Ders Notu
    68 Kıyas KAYAALP
    Grafik İmleç Yerinin Değiştirilmesi
    Grafik imlecin yerini değiştirmek için “moveto” veya “moverel” komutları kullanılır.
    void far moveto (int x,int y);
    Burada verilen x ve y değerleri ,grafik imlecin ekrandaki yeni yeridir.
    Moveto komutunun uygulanmasından sonra grafik imlecin yeri doğrudan x,y olarak
    değiştirilir.
    void far moverel (int dx,int dy);
    “moverel” komutu ise grafiksel imlecin bulunduğu yerden başlayarak x yönünde dx kadar ,y
    yönünde dy kadar uzaklıktaki koordinatı grafik imlecin yeni yeri olarak değiştirilir.
    (0,0)
    Çizimlerde Grafik İmlecin Kullanımı
    Bazı grafik çizimlerinde doğru çiziminin grafik imlecin bulunduğu noktadan başlıyarak yapılması
    istenebilir.Bu durumda ,kullanılabilen komutlardan biri “lineto” komutudur.
    void far lineto (int x,int y);
    Bu komutta x ve y parametreleri ile sadece doğru parçasının bitiş koordinatı verilir.Grafik imlecin
    yeri doğrudan başlangıç noktası kabul edilerek verilen x , y noktasına bir doğru çizilir.Doğru
    parçası çizildikten sonra grafik imlecin yeri x,y olarak değiştirilir.
    Mesela aşağıdaki komutlarla ;
    eski konum
     dx
    dy
     yeni konum
    Veri Yapıları ve Programlama Ders Notu
    69 Kıyas KAYAALP
    (0,0) 100 400 500
    moveto (100,300); 100
    lineto (400,100); 150 Grafik imlecin son
    lineto (500,100); yeri
    lineto (500,150); 300 Grafik imlecin
    başlangıç yeri
    ilk önce moveto ile grafik imlecin yeri belirlenir ve peşi sıra lineto ile doğru parçası çizimleri
    gerçekleştirilir.Bu komutların tümünün icrası sonucunda grafik imlecin son konumu 500,150
    koordinatı olacaktır.
    lineto (x,y) komutu, line komutu kullanılarak aşağıdaki gibi ifade edilebilir.Burada line
    komutunun grafik imlecin yerini değiştirmediğine dikkat ediniz.
    line (getx( ), gety( ), x,y);
    moveto (x,y);

    Veri Yapıları ve Programlama Ders Notu
    70 Kıyas KAYAALP
    doğru parçası çiziminde başlangıç koordinatı olarak grafiksel imlecin bulunduğu yeri kullanan
    ikinci komut “linerel”dir.
    void far linerel (int dx, int dy);
    linerel komutu grafik imlecin bulunduğu pozisyondan başlayarak x-yönünde dx kadar ,
    y-yönünde dy kadar uzaklıktaki koordinata bir doğru çizer.Bu komutun grafik imlece etkisi aynı
    “lineto”da olduğu gibidir.Grafik imlecin yeri işlemden önce (Cx.Cy) olmak üzere verilen dx ve dy
    artım değerleriyle grafik imlecin yeni koordinatı (Cx+dx,Cy+dy) olarak belirlenir.
    (0,0) Eski konumu
    Yeni konumu
    linerel (dx,dy) komutu ,line komutu kullanılarak aşağıdaki gibi ifade edilebilir.Line komutunun
    grafik imlecin yerini değiştirmediği görülür.
    line(getx( ),gety( ),getx( )+dx,gety( )+dy);
    moveto(getx( )+dx,gety( )+dy);
    (cx,cy) dx
    dy
    (cx+dx,cy+dy)
    Veri Yapıları ve Programlama Ders Notu
    71 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk )
    {
    printf(“%d nolu grafik hatası\n”,graphresult);
    getch( );
    exit(1);
    }
    moveto (100,100);
    lineto (150,100);
    lineto (150,150);
    lineto (200,150);
    lineto (200,100);
    lineto (250,100);
    lineto (250,150);
    lineto (300,150);
    lineto (300,100);
    moverel (0,-50);
    lineto (100,50);
    getch( );
    closegraph( );
    }
    11
    10
    2
    1
    3 5 6 7 9
    4 8
    Veri Yapıları ve Programlama Ders Notu
    72 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int i;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk )
    {
    printf(“%d nolu grafik hatası\n”,graphresult);
    getch( );
    exit(1);
    }
    moveto(320,240);
    for (i=0; i<20; i++)
    {
    lineto (320+i*10,230-i*10);
    lineto (310-i*10,230-i*10);
    lineto (310-i*10,250+i*10);
    lineto (330+i*10,250+i*10);
    }
    getch( );
    closegraph( );
    }
    SORU : Bu şeklin merkezine bir çember konsun ve bu çember labirentin dışına, her borudan
    geçerek çıksın.
    Veri Yapıları ve Programlama Ders Notu
    73 Kıyas KAYAALP
    Grafik İmlecin Yerini Değiştiren Komutlar
    Borland Grafik Paketindeki komutlardan bazıları grafik imlecin yerini doğrudan başlangıç noktası
    kabul ederek çizimi gerçekleştirir.Bir kısmı ise grafik imlecin yerini dolaylı olarak kullanır ve
    çizim bittikten sonra onu eski komutuna tekrar getirir.Sadece çizim komutları değil grafik
    sisteminin hazırlanması ve kontrolü için kullanılan grafik komutlardan bazıları da grafik imlecin
    yerini etki eder.
    Grafik imlecin yerini değiştiren komutların isimleri ve imlecin son konumu aşağıdaki tabloda
    verilmiştir.
    Komut İsmi Grafik İmlecin Son Konumu
    initgraph (0,0)
    setgraphmode (0,0)
    graphdefaults (0,0)
    cleardevice (0,0)
    setviewport (0,0)
    clearviewport (0,0)
    moveto (x,y)
    moverel (cx+dx,cy+dy)
    lineto (x,y)
    linerel (cx+dx,cy+dy)
    Veri Yapıları ve Programlama Ders Notu
    74 Kıyas KAYAALP
    Grafik Çizim Alanı Boyutlarının (Resolution) Belirlenmesi
    Ekranın yatayda ve düşeyde bulunan piksellerin sayısı grafik sisteminin sahip olduğu grafik
    adaptör ve moduna göre değişiklik gösterir.Grafik ekranının piksel olarak boyutunun belirlenmesi
    programcının tüm grafik adaptör ve ekran modlarını destekleyen genel bir program yazması
    bakımından oldukça önemlidir.Örneğin ,en basit haliyle ekranın etrafına bir çerçeve çizdirmek
    istenirse ve bu işlemin yatayda ve düşeyde farklı piksel sayısına sahip farklı adaptör ve modlar
    için de geçerli olması istenirse,program içinde çizime başlamadan evvel grafik ekran boyutlarının
    her defasında tanımlanması gereklidir.Bu da program içinde bir çok kontrolün yapılması
    demektir.
    Borland grafik sistemi initgraph ile başlatılırken ekranın piksel olarak boyutları grafik sistemi
    içinde bellekte bir yere yerleştirilir.Programcının ekran boyutlarını kendi tanımlaması yerine
    ,sistemden bu değerleri alması en uygunudur.Borland Grafik Paketi sistemden bu değerlerin
    alınmasını sağlayan iki komut içerir. getmaxx ve getmaxy
    int far getmaxx(void);
    int far getmaxy(void);
    getmaxx ve getmaxy komutları , sırasıyla ekranda bulunan piksellerin yatayda ve düşeydeki son
    piksel numarasını verir.
    ÖRNEK :Ekranın etrafına bir çerçeve çizdirdikten sonra ekranı iki doğru ile dört eşit parçaya
    bölme işleminin adaptör ve moddan bağımsız olarak yazınız.
    moveto (0,0);
    lineto (getmaxx( ),0); 0 getmaxx()/2 getmaxy()
    lineto (getmaxx( ),getmaxy( )); 0
    lineto (0,getmaxy( ));
    lineto (0,0);
    moveto (getmaxx( )/2,0); getmaxy()/2
    lineto (getmaxx( )/2,getmaxy);
    moveto (0,getmaxy( )/2);
    lineto (getmaxx( ),getmaxy( )/2); getmaxy
    moveto (0,0);
    getch( );
    Veri Yapıları ve Programlama Ders Notu
    75 Kıyas KAYAALP
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    moveto (0,0);
    lineto (getmaxx( ),0);
    lineto (getmaxx( ),getmaxy( ));
    lineto (0,getmaxy( ));
    lineto (0,0);
    moveto (getmaxx( )/2,0);
    lineto (getmaxx( )/2,getmaxy( ));
    moveto (0,getmaxy( )/2);
    lineto (getmaxx( ),getmaxy( )/2);
    moveto (0,0);
    circle (getmaxx( )/2,getmaxy( )/2,getmaxy( )/2);
    circle (getmaxx( )/4,getmaxy( )/4,getmaxy( )/4);
    circle (getmaxx( )-getmaxx( )/4,getmaxy( )-getmaxy( )/4,getmaxy( )/4);
    circle (getmaxx( )/4,getmaxy( )-getmaxy( )/4,getmaxy( )/4);
    circle (getmaxx( )-getmaxx( )/4,getmaxy( )/4,getmaxy( )/4);
    circle (getmaxx( )/2,getmaxy( )/2,getmaxy( )/6);
    getch( );
    closegraph ( );
    }
    Veri Yapıları ve Programlama Ders Notu
    76 Kıyas KAYAALP
    BİRLEŞİK DOĞRU ÇİZİMLERİ
    Rectangle Komutu
    Dikdörtgen çizimi için Borland Grafik Paketinde mevcut olan “Rectangle” komutu kullanılır.
    void far rectangle (int x1,int y1,intx2,int y2);
    rectangle komutundaki parametrelerden x1,y1 çifti dikdörtgenin sol-üst köşesinin koordinatını
    x2,y2 çifti dikdörtgenin sağ-alt köşesinin koordinatını belirtir.Bu parametrelere göre dikdörtgen
    çizimi aşağıdaki şekilde yapılır.
    x1 x2
    y1
    y2
    rectangle komutu gerçekte line veya lineto komutlarıyla yapılmış birleşik bir çizim
    komutudur.Yani ,
    rectangle (x1,y1,x2,y2);
    komutu line komutu kullanılarak aşağıdaki gibi ifade edilebilir.
    line (x1,y1,x2,y1);
    line (x2,y1,x2,y2);
    line (x2,y2,x1,y2);
    line (x1,y2,x1,y1);
    bu komut kullanılarak ekranın sınırlarında bir çerçeve çizdirilmesi
    rectangle (0,0,getmaxx( ),getmaxy( ));
    (x1,y1)
    (x2,y2)
    Veri Yapıları ve Programlama Ders Notu
    77 Kıyas KAYAALP
    ÖRNEK : İç içe dikdörtgenlerin getmaxx( ) ve getmaxy( ) komutları kullanılarak çizilmesi.
    #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int i,d,e,g;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit( );
    }
    g=0; d=0; e=0;
    for (i=1; i<11; i++)
    {
    setcolor(i);
    rectangle(d+g , e+g , getmaxx( )-g , getmaxy( )-g);
    g=g+20;
    }
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    78 Kıyas KAYAALP
    ÖRNEK :#include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası\n”,graphresult);
    getch( );
    exit(1);
    }
    rectangle (0,0,155,120);
    rectangle (155,120,310,240);
    rectangle (310,240,465,360);
    rectangle (465,360,620,479);
    rectangle (310,120,465,240);
    rectangle (155,240,310,360);
    rectangle (0,360,155,479);
    rectangle (465,120,620,0);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu
    79 Kıyas KAYAALP
    Drawpoly Komutu
    Drawpoly komutu,bazı grafik uygulamalarında ihtiyaç duyulan üçgen,yamuk,beşgen gibi
    çokgenlerin ve genel olarak da poligon çizimlerinin yapımında kullanılan bir komuttur.Bu komut
    genelde poligonların çizimi için hazırlanmıştır.
    void far drawpoly (int nokta-sayısı,int far *nokta-koord);
    Burada nokta-sayısı parametresi poligonu meydana getiren köşe noktalarının sayısını,
    nokta-koord ise bu noktaların koordinatlarını içeren diziyi gösteren bir pointerdır.
    ÖRNEK : Bu komutun kullanımı için poligonun köşe noktalarını içerecek olan bir dizi
    tanımlayalım.Bu poligonun köşe sayısı 4 tane olsun.Bu durumda 8 elemanlı (bir elemanı x
    koordinatı için ve bir elemanı y koordinatı için olmak üzere , 2*4=8) bir dizi tanımlamak gerekir.
    int polo[8];
    sekiz elemanlı bir dizi tanımlamasından sonra ,bu elemanlara aşağıdaki şekilde uygun koordinat
    değerleri atanır.
    /* x koordinatı y koordinatı Anlamı */
    poly[0]=200; poly[1]=300; /* (200,300) koordinatı */
    poly[2]=100; poly[3]=150; /* (100,150) koordinatı */
    poly[4]=150; poly[5]=50; /* (150,50) koordinatı */
    poly[6]=400; poly[7]=75; /* (400,75) koordinatı */
    poly dizisine poligonun tüm koordinatları yerleştirildikten sonra ,
    drawpoly (4,poly);
    komutu ile poligonun çizimi gerçekleştirilir.Çizilen poligonun şekli ,
    (150,50)
    (400,75)
    (100,150)
    (200,300)
    Veri Yapıları ve Programlama Ders Notu

    drawpoly komutu çizilen poligonu otomatik olarak kapatmaz.Poligonun uçlarının kapatılması
    gerekiyorsa son poligon koordinatı olarak poligonun başlangıç koordinatının verilmesi
    gerekir.Örneğin yukarıdaki tanımlanan poligonun kapatılması istenirse ;
    int poly[8+2];
    sekiz elemana ilaveten bir de bitiş koordinatı içeren 10 elemanlı bir dizi tanımlanmasından sonra
    ,bu elemanlara aşağıdaki şekilde uygun koordinat değerleri atanır.
    poly[0]=200; poly[1]=300;
    poly[2]=100; poly[3]=150;
    poly[4]=150; poly[5]=50;
    poly[6]=400; poly[7]=75;
    poly[8]=poly[0]; poly[9]=poly[1];
    poly dizisine poligonun tüm koordinatları yerleştirildikten sonra ;
    drawpoly (5,poly);
    komutu ile kapalı bir poligonun çizimi gerçekleştirilir.Çizilen poligonun şekli şöyledir.
    (150,150)
    (400,75)
    (100,150)
    (200,300)
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int poly[10];
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası/n”,graphresult);
    getch( );
    exit(1);
    }
    poly[0]=200; poly[1]=300;
    poly[2]=100; poly[3]=150;
    poly[4]=150; poly[5]=50;
    poly[6]=400; poly[7]=75;
    poly[8]=200; poly[9]=300;
    drawpoly(5,poly);
    getch( );
    exit(1);
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int poly[20];
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası\n”,graphresult);
    getch( );
    exit(1);
    }
    poly [0]=50; poly [1]=50;
    poly [2]=100; poly [3]=50;
    poly [4]=100; poly [5]=100;
    poly [6]=150; poly [7]=100;
    poly [8]=150; poly [9]=150;
    poly [10]=200; poly [11]=150;
    poly [12]=200; poly [13]=200;
    poly [14]=250; poly [15]=200;
    poly [16]=250; poly [17]=250;
    poly [18]=300; poly [19]=250;
    drawpoly(10,poly);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    ÇİZİM TİPİNİN DEĞİŞTİRİLMESİ
    İnitgraph ile grafik sistemi hazır duruma getirildikten sonra yapılan çizimlerde,çizim şekli
    kesiksiz-ince bir çizgi şeklindedir.Yani bir doğru parçası çizimi yapıldığında doğrunun çizim tipi
    ( _____ ) şeklindedir.
    bazı grafik uygulamalarında ,örneğin iki boyutlu bir kartezyen koordinat sisteminde aynı eksenler
    kullanılarak birden fazla eğrinin çizilmesi durumunda eğrilerin birbirinden ayırt edilmesi zorlaşır.
    Bu karışıklıktan kurtulmanın bir yolu,her eğrinin diğerlerinden ayırt edilmesini sağlayacak şekilde
    çizim tiplerinin değiştirilmesidir.
    farklı çizim tiplerini kullanabilmek için ,programcının çeşitli algoritmalar geliştirerek tüm çizim
    komutlarını tekrar düzenlemesi gerekir.Bu da programcı için programın yazımında büyük bir
    zaman kaybına ve hatta programın yavaşlamasına sebep olacaktır. Borland Grafik Paketi bu yükü
    Veri Yapıları ve Programlama Ders Notu

    programcının üstünden kaldırarak çizim tipinin grafik komutları vasıtasıyla kolaylıkla
    tanımlanabilir hale getirmiştir.
    çizim tipinin değiştirilmesi “setlinestyle” komutu yardımıyla gerçekleştirilir.
    void far setlinestyle (int çizimtipi,unsigned patern,int kalınlık);
    setlinestyle komutu çizim tipinin ve çizim kalınlığının değiştirilmesini sağlar.Buradaki
    parametrelerden sırasıyla çizimtipi çizimin ne tipte olacağını belirten bir tamsayı; patern
    kullanıcının kendi çizim tipini tanımlamak istemesi durumunda kullandığı ve yeni çizim tipini
    belirten tamsayı kalınlık . Çizimin kalınlığını belirten bir tamsayı değerdir.
    Çizim Tipi Parametresi:
    Çizim tipi için kullanılabilecek sabit isimler ve bu isimlerin içerdikleri değerler şunlardır.
    Adı Sayısal Değeri Çizim Tipi
    SOLID-LİNE 0 ___________
    DOTTED-LİNE 1 ......................
    CENTER-LİNE 2
    DASHED-LİNE 3
    USERBIT-LİNE 4 ?
    Buradaki userbıt-line çizim tip ismi için çizim şekli ancak programcı tanımlandığında belli olur.
    Veri Yapıları ve Programlama Ders Notu
    Patern parametresi :
    Patern parametresi ,grafik sisteminde tanımlı dört tane doğru .izim tipi dışında programcının kendi
    çizim tipini tanımlamakta kullandığı değeri içeren parametredir.
    Yeni çizim tipi ,2 bayt’lık bir tamsayının bitleri göz önüne alınarak oluşturulur.Örneğin,
    (—— .......——......) şeklinde bir çizim tipi ,tanımlanan çizim tipinin her siyah noktası için 16
    bitlik alan içinde karşılık gelen bitin 1,her beyaz noktası için de bitin 0 yapılmasıyla tanımlanır.Bu
    16 bitlik alan düzeni oluşturulduktan sonra bir işaretsiz tamsayı olarak
    Bu 16 bitlik alan düzeni oluşturulduktan sonra bir işaretsiz tamsayı olarak yorumlanır ve elde
    edilen bu değer patern değeri olarak verilir.
    heksadecimal (16 sayı tabanına göre) 0xEABA
    olarak verilen bu tamsayı değerinin bir çizim şekli olarak tanımlanabilmesi ve kullanılabilmesi
    için ,evvela çizimtipi parametre değeri için 4 değeri veya USERBIT-LİNE sabit isminin verilmesi
    gereklidir.
    Kalınlık Parametresi :
    Kalınlık parametresi ,çizilen çizginin kalınlığının tanımlandığı bir tamsayı değeridir.Bu parametre
    için sadece iki değer tanımlanmıştır.Bunlar;
    Adı Değeri Anlamı
    NORM-WIDTH 1 1 piksel kalınlığında
    THICH-WIDTH 3 3 piksel kalınlığında
    1 1 1 0 1 0 1 0 1 0 1 1 1 0 1 0
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    { .
    int a=DETECT,b;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    setlinestyle(SOLID-LINE,0,3);
    line(100,100,400,100);
    setlinestyle(SOLID-LINE,0,1);
    line(100,110,400,110);
    setlinestyle(DOTTED-LINE,0,3);
    line(100,140,400,140);
    setlinestyle(DOTTED-LINE,0,1);
    line(100,150,400,150);
    setlinestyle(CENTER-LINE,0,3);
    line(100,180,400,180);
    setlinestyle(CENTER-LINE,0,1);
    line(100,190,400,190);
    setlinestyle(DASHED-LINE,0,3);
    line(100,220,400,220);
    setlinestyle(DASHED-LINE,0,1);
    line(100,230,400,230);
    setlinestyle(USERBIT-LINE,0xEABA,3);
    line(100,260,400,260);
    setlinestyle(USERBIT-LINE,0xEABA,1);
            
    -----------------------------------
    -----------------------------------
    ------------------------------------
    Veri Yapıları ve Programlama Ders Notu

    line(100,270,400,270);
    getch( );
    closegraph( );
    }
    ÖRNEK : #include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int i,k;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    k=10;
    for(i=0; i<18; i++)
    {
    setlinestyle(SOLID-LINE,9,3);
    line(70+k,70+k,470-k,70+k);
    setlinestyle(DOTED-LINE,8,3);
    line(470-k,70+k,470-k,470-k);
    setlinestyle(CENTER-LINE,7,3);
    line(470-k,470-k,70+k,470-k);
    setlinestyle(DASHED-LINE,8,3);
    line(70+k,470-k,70+k,70+k);
    k=k+10;
    }
    getch( );
    closegraph( ); }
    Veri Yapıları ve Programlama Ders Notu

    BİRLEŞİK ÇİZİM KOMUTLARI
    bar
     bar3d
     pieslice
     sector
     fillellipse
     fillpoly
    Bu komutlardan bar ve bar3d ,histogram(çubuk) grafiklerin yapımında ;pieslice,sector ve
    fillellipse komutları pay(dilim) grafiklerin yapımında kullanmak üzere tasarlanmışlardır.
    Bar Komutu
    Bu komut genel anlamda içi doldurulmuş bir dikdörtgenin çizimini gerçekleştirir.dikdörtgenin
    içi setfillstyle veya setfillpattern komutu ile belirlenmiş olan tarama deseni ve rengi ile
    doldurulur.
    void far bar (int x1,int y1,int x2,int y2);
    bar komutunda verilen parametreler rectangle komutundakine benzerdir.Bunlar sırasıyla x1,y1
    dikdörtgenin sol üst köşesinin koordinatını ,x2,y2 dikdörtgenin sağ alt köşesinin koordinatını
    belirtir.
    bar komutu rectangle ve floodfill komutlarının birlikte kullanımıyla aşağıdaki gibi ifade edilebilir.
    rectangle(x1,y1,x2,y2);
    floodfill ((int) ((x1+x2)/2),(int) ((y1+y2)/2),getcolor( ));
    (x1,y1)
    (x2,y2)
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK :#include<stdio.h>
    #include<graphics.h>
    main( )
    {
    int a=DETECT,b;
    int i,k;
    clrscr( );
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası”,graphresult);
    getch( );
    exit(1);
    }
    k=10;
    for( i=0; i<18; i++)
    {
    setlinestyle(SOLID-LINE,9,3);
    circle(470-k,360-k,k);
    k=k+10;
    }
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<c:\TC\gekran.c>
    main( ) Satranç Tahtası
    {
    int i,k,m,n;
    clrscr( );
    graph( );
    a=0; k=0; m=0; n=0;
    rectangle(0,0,getmaxx( ),getmaxy( ));
    for( i=0; i<64; i++)
    {
    bar (m,n,m+80,n+60);
    m+=160;
    k++;
    if (k= =8)
    { m=80; n+=60; }
    if (k= =16)
    { m=0; n+=60; }
    if (k= =24)
    { m=80; n+=60; }
    if (k= =32)
    { m=0; n+=60; }
    if (k= =40)
    { m=80; n+=60; }
    if (k= =48)
    { m=0; n+=60; }
    if (k= =56)
    {m=80; n+=60;}
    if (k= =64)
    {m=0; n+=60;}
    }
    getch( );
    closegraph( ); }
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : Ekrana rastgele koordinatlarda ,rastgele renkte bar çizen programı yazınız.
    #include<stdio.h>
    #include<conio.h>
    #include<dos.h>
    #include<c:\TC\gekran>
    main( )
    {
    int i;
    clrscr( );
    randomize( );
    graph( );
    for ( i=0; i<10; i++ )
    {
    setcolor(random(14)+1);
    setfillstyle(random(12),random(14)+1);
    bar(random(639),random(479),random(639),random(479));
    getch( );
    }
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    bar3d komutu
    bar3d komutu,3 boyutlu görünüşe sahip bir dikdörtgenin (bar’ın) çizimi için tasarlanmıştır.
    void far bar3d (int x1,int y1,int x2,int y2,int d,int ust);
    bar3d’de kullanılan parametreler sırasıyla x1,y1 dikdörtgeninin sol üst köşesinin koordinatını ,
    x2,y2 dikdörtgeninin sağ alt köşesinin koordinatını , d dikdörtgeninin piksel sayısı olarak derinliği
    ve üst dikdörtgeninin üst kısmının çizilip çizilmeyeceğini belirtirler.Bu parametrelerle 3 boyutlu
    dikdörtgenin çizimi aşağıdaki gibi olur.
    (x1,y1)
    (x2,y2)
    d
    üst parametresi 0 ‘dan farklı bir değer ise 3 boyutlu bir barın üstü vardır.üst parametresi 0 ise
    çizilen 3 boyutlu barın üstü yoktur (açıktır). Bu tür bir kullanımın amacı üç boyutlu bir görünüşe
    sahip dikdörtgenlerin üst üste yerleştirilebilmesini sağlamaktır.
    y4 bu şeklin çizimi için kullanılan
    üst =1 komutlar;
    bar3d (x1,y1,x2,y2,20,0);
    y3 bar3d (x1,y3,x2,y2,20,0);
    üst =0 bar3d (x1,y4,x2,y3,20,1); şeklindedir.
    y2
    üst =0
    y1
    x1 x2
    yukarıdaki şekilde üst üste üç farklı üç boyutlu dikdörtgen çizimi yapılmıştır.Görüleceği üzere
    en alttaki üç boyutlu dikdörtgenin üzerine diğer bir dikdörtgenin çizilebilmesi için alttaki
    dikdörtgenin üst kısmının oluşmasını gereklidir.
    Bar veya bar3d komutları kullanılarak yapılabilen grafik tiplerine örnek olarak aşağıdaki
    Histogram Grafikler verilebilir.
    Veri Yapıları ve Programlama Ders Notu
    93 Kıyas KAYAALP
    (a) bar ile (b) bar ile
    1 2 3 4 1 2 3 4
    (c) bar3d ile (d) bar3d ile
    1 2 3 4 1 2 3 4
    Örneğin burada x-ekseni yılları,y-ekseni kâr miktarını göstermek üzere (a) ve(c) yıllara göre
    toplam kâr miktarını , (b) ve (d) ise yıllara göre toplam kârda üç şirketin payı bu tip
    grafiklerle oldukça kolay ifade edilebilir.
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK :#include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    clrscr( ); desen şekli
    graph( ); desen rengi
    setcolor(12); setfillstyle(5,6);
    bar3d(100,400,150,450,15,0);
    setcolor(6);
    setfillstyle(8,7);
    bar3d(100,300,150,400,15,0);
    setcolor(9);
    setfillstyle(5,7);
    bar3d(100,250,150,300,15,0);
    setcolor(3);
    setfillstyle(1,8);
    bar3d(100,150,150,250,15,1);
    setcolor(6);
    setfillstyle(7,7);
    bar3d(200,100,250,450,15,0);
    setcolor(15);
    setfillstyle(11,3);
    bar3d(300,150,350,450,15,1);
    getch( );
    closegraph( );
    }
    ÖDEV :
    Veri Yapıları ve Programlama Ders Notu

    Pieslice Komutu
    Histogram grafiklerinden başka sıkça kullanılan diğer bir grafik tipi de pay-dilim (pie)
    grafikleridir.Pay grafikler bir daire %100’ü göstermek üzere olayların bu yüzde içinde etkin
    olduğu orana göre dairenin dilimlere ayrılmasıyla oluşturulmuş grafiklerdir.
    %15 %52
    %11 %11
    %11
    Pay grafiklerinin hazırlanması için Borland Grafik Paketinde bulunan pieslice komutundan
    yararlanılır.
    void far pieslice (int x, int y,int aci1,int aci2,int r);
    pieslice komutu arc komutunun parametrelerine benzerdir.Pieslice x,y merkez koordinatlı
    açı1’den başlayıp açı2’de son bulan r yarıçaplı daire dilimi çizer.Daire diliminin içi
    setfillstyle veya setfillpattern komutu ile belirlenmiş olan tarama deseni ve rengi ile
    doldurulur.
    90o
    180o 0o
    360o
    270o
    Bu komut arc,getarccoords,line ve floodfill komutların birlikte kullanımıyla yapılmıştır.
    açı2
    r
    açı1
    (x,y)
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    clrscr( );
    graph( );
    getcolor(1);
    setfillstyle(9,4);
    pieslice(320,240,0,75,150);
    setfillstyle(9,6);
    pieslice(320,240,75,105,150);
    setfillstyle(9,3);
    pieslice(320,240,105,175,150);
    setfillstyle(9,5);
    pieslice(320,240,175,225,150);
    setfillstyle(9,8);
    pieslice(320,240,225,287,150);
    setfillstyle(9,7);
    pieslice(320,240,287,360,150);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    sector Komutu
    Pieslice komutunun elipsler için uyarlanmış şekli fillellipse ve sector komutlarıdır.İçi dolu bir
    elips diliminin çizimi istenirse sector komutu kullanılır.
    void far sector (int x, int y, int aci1, int acı2, int rx, int ry);
    Bu komutun parametreleri ellipse komutunun parametreleri ile aynıdır.Sırasıyla x,y elips
    diliminin merkez koordinatını , acı1 ve acı2 elips diliminin başlangıç ve bitiş açılarını , rx
    elipsin x-yönündeki , ry ise y-yönündeki yarıçapıdır.
    90o
    0o
    180o 360o
    270o
    sector komutu ellipse, getarccoords,line ve floodfill komutlarının birlikte kullanımıyla
    yapılmıştır.
    ry
    açı2
    açı1
    (x,y) rx
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    clrscr( );
    graph( );
    setcolor(1);
    setfillstyle(2,4);
    sector(320,240,0,75,100,180);
    setfillstyle(3,6);
    sector(320,240,75,105,100,180);
    setfillstyle(4,3);
    setcolor(320,240,105,175,100,180);
    setfillstyle(5,5);
    sector(320,240,175,225,100,180);
    setfillstyle(6,8);
    sector(320,240,225,287,100,180);
    setfillstyle(7,7);
    sector(320,240,287,360,100,180);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    FillEllipse Komutu
    Fillellipse komutu tam bir elips çizerek setfillstyle veya setfillpattern komutu ile belirlenmiş
    olan tarama deseni ve rengi ile doludur.
    void far fillellipse (int x, int y, int rx, int ry);
    0o
    360o
    Bu komutun benzeri ellipse ve floodfill komutlarının birlikte kullanılmasıyla yapılabilir.
    ellipse (x,y,0,360,rx,ry);
    floodfill (x,y,getcolor( ));
    ÖRNEK : #include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    clrscr( );
    graph( );
    setcolor(15);
    setfillstyle(7,4);
    fillellipse(100,400,50,80);
    setfillstyle(3,6);
    fillellipse(250,360,80,120);
    setfillstyle(4,3);
    fillellipse(450,300,100,180);
    getch( );
    closegraph( );
    }
    ry
    (x.y) rx
    Veri Yapıları ve Programlama Ders Notu

    Fillpoly Komutu
    Fillpoly komutu içi taralı poligonların çiziminde kullanılır.Fillpoly’nin kullanımı drawpoly
    komutu ile aynıdır.Tek fark poligon içinin tarama deseni ile doldurulmasıdır..Poligonun içi
    doldurulacağından poligonun kapalı olması gerekir.
    void far fillpoly (int nokta-sayisi, int far *nokta-koord);
    burada nokta-sayisi parametresi poligonu meydana getiren köşe noktalarının sayısını noktakoord
    ise bu noktaların koordinatlarını içeren diziyi gösteren bir pointer’dır.
    int poly [10];
    poly [0]= 200; poly [1]= 300; /* (200,300) koordinatı */
    poly [2]= 100; poly [3]= 150; /* (100,150) koordinatı */
    poly [4]= 150; poly [5]= 50; /* (150,50) koordinatı */
    poly [6]= 400; poly [7]= 75; /* (400,75) koordinatı */
    poly [8]= poly [0]; poly [9]= poly [1] /* başlangıcı koordinatı */
    fillpoly (5,poly);
    (150,50)
    (400,75)
    (100,150)
    (200,500)
    Veri Yapıları ve Programlama Ders Notu

    ÖRNEK : #include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    int ali [22];
    clrscr( );
    graph( );
    ali[0]=40; ali[1]=0;
    ali[2]=30; ali[3]=25;
    =10; =25;
    =25; =40;
    =20; =60;
    =40; =48;
    =60; =60;
    =55; =40;
    =70; =25;
    =50; =25;
    =40; =0;
    setcolor (4);
    setfillstyle (9,9);
    fillpoly (11,ali);
    getch ( );
    closegraph ( );
    }
    Veri Yapıları ve Programlama Ders Notu
    GRAFİK YAZI KOMUTLARI
    Borland Grafik Paketinde metin ekranı ile grafik ekran birbirinden farklıdır.Bu yüzden,grafik
    ekranda C’de printf veya buna benzer komutlarla metin ekranında yazı yazmak EGA ve VGA
    hariç diğer grafik sistemleri için mümkün değildir.
    Borland Grafik sistemindeki bu durumdan dolayı grafik ekranda yazı yazımı için özel
    teknikler kullanılır.
    Bunlar ;
    a- Nokta Temelli Karakter Tanımlama Tekniği
    b- Vektör Temelli Karakter Tanımlama Tekniği
    Bu tekniklerle çeşitli karakter setlerinin oluşturulması ve kullanımı oldukça zahmetli ve sıkıcı
    bir işlemdir.Borland Grafik Paketi bu yükü programcının üzerinden kaldırmak için yukarıdaki
    iki tekniğinde kullanıldığı 11 çeşit karakter setini programcılara hazır olarak sunmuştur.Bu
    karakter font setleri ,oluşturulan yazı tipine uygun olarak verilen bir isimle “.CHR”
    uzantısıyla HDD depolanmıştır.
    Bu dosyalara kısaca Karakter Font Dosyaları denir.
    Yazım Özelliklerinin Belirlenmesi
    Yazım işlemine geçmeden önce ,yazım ile bilgilerin grafik sistemine bildirilmesi
    gerekir.Yazım ile ilgili bilgiler üç tanedir.
    Metnin font tipi
    Yazım yönü
    Büyüklüğü
    Bu özelliklerin grafik sistemine bildirilmesi “settextstyle” komutu ile yapılır.
    void far settextstyle (int font, int yon, int boyut);
    settextstyle komutu ile ekrana yazılacak olan metnin , hangi font tipi,kullanılarak ,hangi
    yönde ve hangi büyüklükte basılacağı belirtilir.
    Bu komut kullanıldıktan sonra her yazım işleminde ,verilen bu bilgiler kullanılır.
    veri ve Programlama Ders Notu

    Font :
    Metnin ekrana basımında kullanılacak olan font karakter dosyasını belirten tamsayı bir
    değerdir.
    İsmi Değeri Bulunduğu Dosya İsmi
    DEFAULT-FONT 0 ---------------
    TRIPLEX-FONT 1 TRIP.CHR
    SMALL-FONT 2 LITT.CHR
    SANS-SERIF-FONT 3 SANS.CHR
    GOTHIC-FONT 4 GOTH.CHR
    Settextstyle komutunda font için ,örneğin 1 veya bunun sembolik ismi olan C’de TRIPLEXFONT
    kullanıldığında TRIP.CHR dosyası bulunduğu yerden bir defalık belleğe yüklenir.
    Program içerisinde settextstyle komutu verilmediği halde yazım yapılırsa , bu durumda font
    tipi olarak grafik sistem içinde hazır olarak bulunan ve DEFAULT olarak isimlendirilen font
    seti kullanılır.
    Yön :
    Bu parametre ,metnin ekranda hangi yönde basılacağını belirten bir tamsayı değerdir.Metin
    yatay (0) yazılacaksa soldan sağa ,dikey (1) yazılacaksa aşağıdan yukarı doğru olur.
    Adı Değeri
    HORIZ-DIR 0 yatay
    VERT-DIR 1 dikey
    Programda yazının yönü belirlenirken adı veya değeri kullanılır.
    Boyut :
    Boyut parametresi ,metnin ekrana basılması sırasında karakterlerinin hangi büyüklükte
    olacağını belirleyen bir tamsayı değerdir.Bu tamsayı değer 1-10 arasında değişebilir.Boyut
    için 1 kullanılırsa ,metnin karakterleri font dosyasında tanımlandığı şekilde gerçek boyutunda
    basılır.Eğer 4 kullanılırsa ,metnin karakterleri gerçek boyutun 4 katı büyüklüğünde basılır.
    Veri Yapıları ve Programlama Ders Notu
    Eğer karakter boyutunun bire-bir oranından farklı bir oranda büyütülmesi istenirse;örneğin
    boyu sabit kalırken eninin büyütülmesi veya eni sabit kalırken boyunun büyütülmesi gibi bu
    durumda settextstyle komutuna ilaveten “setusercharsize” komutu kullanılır.
    Setusercharsize ile tanımlana karakter büyütme oranının geçerli olabilmesi için settextstyle
    ‘de boyut parametresi için “0” veya “USER-CHAR-SİZE” isminin kullanılması gerekir.
    void far setusercharsize (int carpx, int bolx, int carpy, int boly);
    karakterlerin yükseklik ve genişliği için büyütme oranlarının hesabı ;
    Genişlik için Büyütme Faktörü =
    bolx
    carpx
    Yükseklik için Büyütme Faktörü =
    boly
    carpy
    formülü ile yapılır.
    Örneğin,karakterlerin yüksekliğini %100 oranında büyütmek ve genişliğini ise %50 oranında
    küçültmek istenilirse ;
    Eni için
    bolx
    carpx
    =
    2
    1
    ( %50 azalış )
    Boy için
    boly
    carpy
    =
    1
    2
    ( %100 artış)
    Bu oranların grafik sistemine aktarılması ;
    settextstyle ( font ,yon , USER-CHAR-SİZE);
    setusercharsize (1,2,2,1);
    komutları ile yapılır.
    setusercharsize komutu sadece .CHR font dosya karakterlerine uygulanabilir. DEFAULT
    font seti karakterlerine uygulanamaz.
    Veri Yapıları ve Programlama Ders Notu

    Metnin Ekrana Yazımı
    Outtext komutu :
    Outtext komutu,grafik imlecin bulunduğu yeri referans noktası kabul ederek verilen metni
    ekrana basar.
    void far outtext (char far *metin);
    ilk olarak metnin basılacağı referans noktası moveto ile belirlenir ve sonra outtext komutu
    uygulanır.Eğer referans noktası moveto ile belirlenmediyse,o anda grafik imleç nerede
    bulunuyorsa ,yazım bu noktaya göre yapılır.
    ÖRNEK : moveto (50,100);
    outtext (“UMYO”);
    Bu komutların icrası sonunda ,eğer settextstyle’de yazım yönü düşey olarak verildi ise
    aşağıdaki şeklin solundaki gibi,yatay olarak belirlendi ise aşağıdaki gibi bir ekran çıktısı
    oluşur.
    Eğer yazım için *.CHR dosyalarından biri kullanılıyorsa ekrana basılacak metin çizim için
    tanımlanan ekran alanı sınırlarını aştığında aşan kısımları kesilir.Eğer yazım için DEFAULT
    font dosya karakterleri kullanılıyorsa ekrana basılacak metin ekran sınırlarını aştığında metnin
    hiçbir karakteri yazılmaz.
    (500,100) (50,100)
    . .
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : #include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    clrscr( );
    graph( );
    moveto(0,0);
    settextstyle(DEFAULT_FONT_HORIZ_DIR,1);
    outtext(“yatay default_font”);
    moveto(0,15);
    settextstyle(1,0,1);
    outtext(“yatay triplex font”);
    moveto(0,40);
    settextstyle(2,0,4);
    outtext(“yatay small font 4 kat büyütülmüş”);
    moveto(0,70);
    settextstyle(3,0,1);
    outtext(“yatay sans serif font”);
    moveto(0,100);
    settextstyle(4,0,1);
    outtext(“yatay gothic font”);
    moveto(20,200);
    settextstyle(DEFAULT_FONT ,1,1);
    outtext(“dikey default_font”);
    moveto(50,200);
    settextstyle(1,1,1);
    outtext(“dikey triplex font”);
    moveto(90,200);
    settextstyle(2,1,4);
    outtext(“dikey small font 4 kat buyutulmus”);
    moveto(120,200);
    Veri Yapıları ve Programlama Ders Notu

    settextstyle(3,1,1);
    outtext(“dikey sans serif font”);
    moveto(150,200);
    settextstyle(4,1,1);
    outtext(“dikey gothic font”);
    moveto(200,0);
    settextstyle(1,0,USER_CHAR_SIZE);
    setusercharsize(1,2,2,1);
    outtext(“triplex font yukseklık %100 arttı,genişlik %50 azaldi”);
    moveto(0,130);
    settextstyle(1,0,USER_CHAR_SIZE);
    setusercharsize(2,1,1,2);
    outtext(“triplex font yukseklık %100 artti,genişlik %50 azaldi”);
    getch( );
    closegraph( );
    }
    Outtextxy Komutu
    Outtextxy komutu outtext komutuna benzerdir.Aralarındaki tek fark ,outtext grafik imlecin
    yerini değiştirirken outtextxy’nin değiştirmemesidir.Bu komut ,metni ekrana basmak için
    grafik imlecin konumunu referans nokta olarak almaz.Metni nereye basacağını parametre
    listesinde belirler.
    void far outtextxy (int x, int y, char far *metin);
    outtextxy komutundaki parametrelerden ilk ikisi x ve y,basılacak metnin ekrandaki referans
    noktasını ,metin ise basılacak metni belirtir.
    Veri Yapıları ve Programlama Ders Notu

    Metnin Referans Noktasının Neresine Basılacağının Belirlenmesi
    Programcı metni,referans nokta etrafında istediği yere “settextjustify” komutunu kullanarak
    bastırabilir.
    void far settextjustify (int yatay, int düşey);
    Hiçbir yazım özelliği verilmeden ,
    outtextxy (50,100,”UMYO”);
    Komutu kullanıldığında çıkış,verilen (50,100) referans noktasının sağ-alt tarafına yapılır.
    Referans noktası
    Eğer programcı referans noktasını bu şekilde kullanmak istemezse , settextjustify komutu
    vasıtasıyla metni referans nokta etrafında sağa-sola ve aşağı-yukarı şeklinde iki yönlü olarak
    hareketini belirleyerek , metnin konumunu ayarlar.Settextjustify komutundaki yatay ve düşey
    parametreleri , metnin konumunu ayarlayan tamsayı değerlerdir.Bunların alabileceği değerler
    ve bu değerleri gösteren sabit isimler şöyledir.

    UMYO
    Veri Yapıları ve Programlama Ders Notu
    Yatay için :
    Komut Değeri Anlamı
    LEFT-TEXT 0 Ref. Noktası metnin solunda
    CENTER-TEXT 1 Ref. Noktası metnin ortasında
    RIGHT-TEXT 2 Ref. Noktası metnin sağında
    Dikey için :
    Komut Değeri Anlamı
    BOTTOM-TEXT 0 Ref. Noktası metnin altında
    CENTER-TEXT 1 Ref. Noktası metnin ortasında
    TOP-TEXT 2 Ref. Noktası metnin üstünde
    Şematik olarak:
       TOP-TEXT
       CENTER-TEXT
       BOTTOM-TEXT
    LEFT-TEXT CENTER-TEXT RIGHT-TEXT
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEKLER :
    1- Referans noktası metnin yatayda sağında ,dikeyde ortasında ise ,
    Settextjustify (RIGHT-TEXT , CENTER-TEXT);
    Outtextxy (300,200,”UMYO”);
    300
    200
    2- Referans noktası metnin yatayda orta, düşeyde ise üstünde kalmaktaysa ,
    settextjustify (CENTER-TEXT , TOP-TEXT);
    outtextxy (300,200,”UMYO”);
    300
    200
    UMYO
    -------------------- 
    UMYO
    Veri Yapıları ve Programlama Ders Notu
    3- Referans nokta metnin yatayda ve düşeyde ortasında kalıyorsa ,
    settextjustify (CENTER-TEXT , CENTER-TEXT);
    outtextxy (300,200,UMYO);
    300
    200 ------ --------UM YO
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : #include<stdio.h>
    #include<c:\tc\gekran.c>
    main( )
    {
    clrscr( );
    graph( );
    settextjustify (LEFT_TEXT_TOP_TEXT);
    outtextxy (0,0,”kursor sol taraf ust”);
    settextjustify (LEFT_TEXT_CENTER_TEXT);
    outtextxy (0,100,”- kursor sol taraf ORTA”);
    settextjustify (LEFT_TEXT_BOTTOM_TEXT);
    outtextxy (0,200,”_ kursor sol taraf ALT”);
    settextjustify (RIGHT_TEXT_TOP_TEXT);
    outtextxy (600,0,” kursor sag taraf ust ”);
    settextjustify (RIGHT_TEXT_CENTER_TEXT);
    outtextxy (600,100,” kursor sag taraf ORTA-”);
    settextjustify (RIGHT_TEXT_BOTTOM_TEXT);
    outtextxy (600,200,” kursor sag taraf ALT_”);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    Metnin Ekrana Basımında Grafik İmleç Konumunun Değişimi
    Bir metnin ekrana basımından sonra grafik imlecin konumu , her zaman değişmez.Grafik
    imlecin yerinin değişimi settextjustify’de verilen parametre değerlerine bağlıdır.
    Settextjustify komutu grafik kursorünün yerini sadece aşağıdaki şartlar sağlandığında
    değiştirilir.
     Settextstyle’de yön parametresi için 0 veya HORIZ-DIR kullanılır.
     Settextstyle’de yatay parametresi için 0 veya LEFT-TEXT kullanılır.
     Metin yazımı için outtext kullanması ile olur.
    ÖRNEKLER :
    a) moveto (200,100);
    settextstyle (TRIPLEX_FONT , HORIZ_DIR,1);
    settextstyle (LEFT_TEXT , TOP_TEXT);
    outtext (“UMYO”);
    referans noktası yeni koordinat
    b) moveto (200,100);
    settextstyle (TRIPLEX_FONT , HORIZ_DIR ,1);
    settextstyle (LEFT_TEXT , CENTER_TEXT);
    outtext (“UMYO”);
    referans noktası yeni koordinat
    ----------  UMYO
    ------------- UMYO 
    Veri Yapıları ve Programlama Ders Notu

    Metin Boyutlarının Belirlenmesi
    Ekrana basılacak olan metnin ,piksel değeri olarak belirli bir eni ve boyu vardır.Bu değerler ,
    settextstyle ve settextjustify ile verilen metin özelliklerine göre değişir.Örneğin “UMYO”
    metininin TRIPLEX font tipine göre belirli bir uzunluk ve yükseklik değeri vardır.Font tipi ve
    boyutu değiştirildiği vakit aynı metin farklı boyutlara sahip olur.
    TextHeight Komutu
    int far textheight (char far *metin);
    Aktif olan font tipi ve büyütme faktörüne göre verilen metnin piksel olarak yüksekliğini
    verir.Örneğin büyültme faktörü 1 olan DEFAULT font için textheight 8 değerini verir.
    UMYO
    Bu komutun kullanılabileceği yerler;
     Ekrana basılacak olan metnin satırları arasındaki boşlukların ayarlanmasında
     Metnin etrafına bir çerçevenin çizilmesinde
     Çizim alanının yüksekliğinin bulunmasında .
    TextWidth Komutu
    int far textwidth (char far *metin);
    Aktif olan font tipi ve büyütme faktörüne göre verilen metnin piksel olarak genişliğini verir.
    UMYO
    | |
    Bu komutun kullanılabileceği yerler ;
     Ekrana basılacak olan metnin satır genişliklerinin ayarlanmasında
     Metnin etrafına bir çerçevenin çizilmesinde
     Çizim alnının genişliğinin bulunmasında.
    Veri Yapıları ve Programlama Ders Notu
    ÇİZİM RENKLERİNİN SEÇİMİ
    Grafik çizimlerde 2 tip renk belirlenmesi yapılır.Bunlar ;
     Zemin rengi
     Çizim rengi
    İnitgraph ile grafik sistemi açıldığında başlangıçta zemin rengi için siyah , çizim rengi için
    beyaz kullanılır.
    Çizimin Yapıldığı Zemin Renginin Belirlenmesi
    Renk paletlerindeki birinci renk daima zemin rengini belirtir.Başlangıçta ,palette bu renk
    büyük bir olasılıkla siyahtır.Çizime başlamadan önce zemin rengi “setbkcolor”
    Komutu kullanılarak paletteki renklerden biri ile değiştirilebilir.
    void far setbkcolor (int renk);
    ÖRNEK : setbkcolor (1);
    Çizim Renginin Belirlenmesi
    Çizim rengi grafik sisteminin sahip olduğu paletten bir rengin seçilmesiyle belirlenir.Çizim
    renginin belirlenmesi için “setcolor” komutu kullanılır.
    void far setcolor (int renk);
    ÖRNEK : setcolor (2);
    Restorecrtmode Komutları
    void far restorecrtmode (void);
    restorecrtmode komutu , grafik ekrandan çıkmadan geçici olarak metin ekranına geri dönüşü
    sağlar.Grafik ekranından metin ekranına geçişte , ekran modunu initgraph komutu
    çalıştırılmadan önceki durumuna getirir.Bu sırada grafik ekran silinir.
    Veri Yapıları ve Programlama Ders Notu

    Bu iki komutun kullanımı aşağıdaki program yapısı ile gösterilebilir.
    main( )
    {
    /*...........................Metin Ekranı ............................*/
    .
    .
    .
    /*......................Grafik Ekrana Geçiş.......................*/
    initgraph (&a,&b,” “);
    .
    .
    .
    /*...............Tekrar Metin Ekranına Geçiş................*/
    restorecrtmode( );
    .
    .
    .
    /*..............Grafik Ekrana Geri Dönüş.....................*/
    setgraphmode(getgraphmode( ));
    .
    .
    .
    /*..........Grafik Ekranın Kapatılması ve Metin Ekrana Dönüş..........*/
    closegraph( );
    /*.............................Metin Ekranı..........................*/
    .
    .
    .
    }
    Veri Yapıları ve Programlama Ders Notu

    Getgraphmode Komutu
    Getgraphmode komutu , sistemde aktif olan grafik modunu öğrenmek için kullanılır.Bu
    komut , grafik sisteminin hangi moda sahip olduğunu belirleyerek bu moda ait bir tamsayı
    değeri verir.
    int far getgraphmode (void);
    Setgraphmode Komutu
    Setgraphmode komutu , grafik sistemini kapatılıp açılmasına gerek olmadan doğrudan
    kullanılmakta olan grafik modunun değiştirilmesini sağlar.
    void far setgraphmode (int modno);
    Hangi modun aktif hale getirileceği modno ile belirlenir.Modno parametresi , grafik
    adaptörün desteklediği modlardan birini belirten bir tamsayı değerdir.
    Bu komut çalıştırıldığında sırasıyla üç işlemi yerine getirir.
    1) Grafik sisteminin modunu değiştirir.
    2) Grafik ekranı siler.
    3) Graphdefaults komutunu çalıştırır.
    Graphdefaults Komutu
    Bir grafik çalışmasına başlandığında çizim şekli ve rengi bilgileri , zemin renk bilgisi , yazım
    tipi , yönü ve boyutu bilgileri ,alan doldurma deseni ve rengi bilgileri ve grafik imlecin
    konumu bilgileri için aksi belirtilmedikçe grafik sistemi içinde bulunan hazır değerler
    kullanılır.Bunlar grafik sistemi tarafından belirlenmiş başlangıç değerleridir.Daha sonra bu
    bilgiler , programcı tarafından programın akışına ve yapılan çizimin amacına göre yeri
    geldiğinde değiştirilir.Programın bir noktasında değeri değiştirilen bu bilgilerin başlangıç
    değerlerine ihtiyaç duyulursa , başlangıç değerlerin ayrı ayrı komutlar kullanılarak grafik
    sistemine aktarılması yerine “graphdefaults”komutunun kullanımı tercih edilir.Bu komut
    sözü edilen tüm özelliklerin , grafik adaptörünün açılışındaki başlangıç değerlerini almasını
    sağlar.
    void far graphdefaults (void);
    Veri Yapıları ve Programlama Ders Notu
    ÖRNEK : #include<graphics.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<conio.h>
    main( )
    {
    int a=DETECT,b;
    int x,y;
    initgraph(&a,&b,” “);
    if(graphresult( )!=grOk)
    {
    printf(“%d nolu grafik hatası /n”,graphresult);
    getch( );
    exit(1);
    x=getmaxx( )/2;
    y=getmaxy( )/2;
    settextjustify (CENTER_TEXT , CENTER_TEXT);
    outtextxy(x,y,”Grafik Ekrandan Çıkış için bir tuşa basınız”);
    getch( );
    restorecrtmode( );
    printf(“Şu Anda Metin Ekranındasınız”);
    printf(“Grafik Moda Dönüş için tekrar bir tuşa basınız”);
    getch( );
    setgraphmode(getgraphmode( ));
    settextjustify (CENTER_TEXT , CENTER_TEXT);
    outtextxy(x,y + textheight (“w”), “Çıkış için bir tuşa basınız”);
    getch( );
    closegraph( );
    }
    Veri Yapıları ve Programlama Ders Notu

    EKRAN GÖRÜNTÜ DÜZENLENMESİ
    Cleardevice Komutu
    Cleardevice komutu , grafik ekranın tamamını siler.Silme işlemi,tüm piksellere zemin
    renginin verilmesiyle olur.
    void far cleardevice (void);
    Ekranın silinmesinden sonra grafik imleç, ekranın (0,0) koordinatına taşınır.
    Setviewport Komutu
    Setviewport komutu , grafik ekranda bir grafik pencerenin tanımlanmasında
    kullanılır.Başlangıçta tüm ekran getmaxx+1 genişliğinde ve getmaxy+1 yüksekliğinde bir
    grafik penceredir.Yapılan tüm çizimler bu pencere içinde gerçekleştirilir.Programcı ihtiyaç
    duyduğunda bu grafik pencerenin boyutlarını değiştirerek daha küçük boyutlara sahip bir
    alanda çizim yapabilir.
    void far setviewport (int x1, int y1, int x2 ,int y2, int kesme);
    Yukarıda verilen setviewport parametresinde x1,y1,x2,y2 pencere boyutlarının
    belirlenmesinde , kesme parametresi ise çizimin pencere dışına taşan kısımlarının kesilip
    kesilmeyeceğine karar verilmesinde kullanılır.
    Setviewport’un iki tür kullanımı vardır ;
    1. Grafik ekranın (0,0) koordinatının (orijinin) ekranda başka bir yere taşınması
    2. Grafik ekran içinde grafik pencerenin tanımlanması.
    Veri Yapıları ve Programlama Ders Notu

    YENİ BİR GRAFİK PENCERESİNİN TANIMLANMASI
    Tüm grafik ekran içinde daha küçük bir grafik ekranının tanımlanmasıdır.Tanımlanan bu
    alana grafik pencere denir.Tanımlanan grafik penceresi , boyutları haricinde tüm ekranın
    sahip olduğu özelliklere sahiptir.Grafik ekranı, sınırlarından taşan çizimler kesildiği gibi,
    grafik penceresi dışına taşan çizimlerde sınırlarda kesilir.
    Setview ile bir grafik pencerenin tanımlanması için verilen parametrelerin olması gereken
    değerler şöyle olmalıdır ;
    x1,y1 : tanımlanan yeni grafik pencerenin sol üst köşesinin ana ekran üzerindeki sağ alt
    köşesinin koordinatı.
    x2,y2 : x1  x2 ve y1  y2 şartına göre yeni grafik ekranın ana ekran üzerindeki sağ alt
    köşesinin koordinatı.
    0  x1  x2
    0  y1  y2
    şartını sağlanması gerekir.
    Kesme : 0 dan farklı herhangi bir değer (1 olarak alacağız)
    Setviewport (x1,y1,x2,y2,1);
    Şeklinde tanımlanan grafik penceresi aşağıdaki şekilde gösterilmiştir.
    x1 x2
    y1
    y2
    (x1,y1)
    (x2,y2)
    Veri Yapıları ve Programlama Ders Notu

    Bu pencerenin tanımlanmasından sonra yapılan tüm çizimler artık bu pencere içinde
    olacaktır.setviewport ile ekranda (x2-x1) genişliğinde ve (y2-y1) yüksekliğinde tanımlanan
    ekran alanın özellikleri önceden kullanılan tüm grafik ekranın sahip olduğu özelliklerle
    aynıdır.Farklı olan tek şey çizim alanının boyutlarıdır.Yeni grafik penceresi
    tanımlandıktan sonra yeni orijin ,yeni pencerenin sol üst köşesidir.
    Yapılan çizimlerin tanımlanan grafik pencerenin sınırlarını aşması halinde aşan kısımlar
    sınırlarda kesilecektir.
    Yapılan çizimlerin ekran sınırlarında kesilmesine karşın , grafik imleç için böyle bir durum
    söz konusu değildir.Grafik imlecin yeri grafik pencere sınırlarını aşabilir.
    ÖRNEK : setviewport (100,100,250,180,1);
    moveto (10,60);
    lineto (180,20);
    100 200
    100
    grafik imlecin yeni konumu
    çizilmeyen kısım
    180

    (0,0) (180,20)

    Veri Yapıları ve Programlama Ders Notu

    grafik pencere sınırları dışında kalan grafik imlecin konumu , çizimler için bir referans
    noktası olarak kullanılabilir.
    ÖRNEK : setviewport (100,100,250,180,1);
    moveto (10,60);
    lineto (180,20);
    lineto (180,40);
    lineto (40,60);
    lineto (-10,100);
    grafik imlecin son konumu
    setviewport ile tanımlanan pencerenin iptal edilip ana ekrana dönülmek istenmesi durumunda
    tekrar setviewport komutu kullanılır.
    Clearviewport Komutu
    Clearviewport komutu , ana grafik ekran için hazırlanmış olan cleardevice komutunun grafik
    pencerelere uygulanmış halidir.
    void far clearviewport (void);
    clearviewport , ana grafik ekranında setviewport ile tanımlanmış olan grafik pencerenin içini
    zemin rengini kullanarak siler.Grafik imleci , grafik pencerenin sol üst köşesi olan (0,0)
    koordinatına taşır.
    Veri Yapıları ve Programlama Ders Notu
    Kaynaklar



    < Bu mesaj bu kişi tarafından değiştirildi t_arslan -- 29 Mayıs 2006; 0:02:08 >







  • ilk başlarda biraz ek bilgi veriyorum grafiğe daha sonra geçtim
  • arkadaşlar işinize yaramıyomu bi göz gezdirin yahu
  • quote:

    Orjinalden alıntı: t_arslan

    arkadaşlar işinize yaramıyomu bi göz gezdirin yahu


    Valla Java varken artık C'ye pek ihtiyacım oldugunu sanmıyorum ama yine de teşekkürler...
  • Yapay Zeka’dan İlgili Konular
    C programlama
    5 yıl önce açıldı
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.