• 21-06-2009, 22:53:10
    #1
    #include <stdio.h>

    void change(int *arr[], int *ss)
    {

    *arr[3] = *arr[0];
    *arr[0] = 'V' - *ss;

    *arr[1] = 'N' + 2 * (*ss);

    if(*arr[1] == 'R')
    *arr[2] = 'N';

    else if(*arr[1] == 'M')
    *arr[2] = 'R';

    }


    void main()
    {

    int a[5] = {'C','M','P','E'};

    int *arr[4];

    arr[0]= a;
    arr[1]= a + 1;
    arr[2]= a + 2;
    arr[3]= a + 3;

    int s = 2, x=0;

    change(arr,&s);

    for(x=0; x<4; x++)
    printf("%c",*arr[x]);

    }


    Arkadaşlar sunun outputunun nası cıktıgını bırı anlatabilir mi?
  • 21-06-2009, 23:02:02
    #2
    TRNC

    yazdırdı vs2005 te ama sanırım mantığını soruyosun

    şaka maka biraz baktım kodlara da resmen eziyet, pratikte arraylerin böyle kullanıldığını hiç sanmıyorum. ha "hayatında kaç defa array kullandın ki" desen onu da bilmiyorum
  • 21-06-2009, 23:03:02
    #3
    aynen saçma olan elde bi alfabe dizisi yok ki.
  • 21-06-2009, 23:29:43
    #4
    resmen saçmalamış olabilir. yine de fikir verebilir . C bilen biri daha iyi anlatabilir tabi

    #include <stdio.h>
    
    void change(int *arr[], int *ss)
    {
    
    *arr[3] = *arr[0];
    // arr[3]'e direkt atama yapılıyor. 67 değerini alıyor arr[3]
    *arr[0] = 'V' - *ss;
    // arr[0] 84 oldu *ss in neyi gösterdiğin bilmiyorum :D
    *arr[1] = 'N' + 2 * (*ss);
    // arr[1] 82 oldu. muhtemelen burdaki karakterlerin (N'nin) ascii lerinin matematiksel
    // kodlarıyla oynayıp yeni karakterler elde ediyor.
    if(*arr[1] == 'R')
    // bu koşul sağlandığına göre. 82'nin R'nin ASCII kodu olduğunu söyleyebiliriz xD
    // sonuçta array'de bunlar int olarak tutuluyor.
    *arr[2] = 'N';
    // arr[2]'ye N yani ascii koduyla 78 atandı
    else if(*arr[1] == 'M')
    // yukardaki if sağlandığı için buna girmedi.
    *arr[2] = 'R';
    // direkt değer ataması. arr[2] 78 oldu int olarak.
    }
    
    
    void main()
    {
    
    int a[5] = {'C','M','P','E'}; // bildigimiz dizi tanimlamasi 5. eleman yani a[4] bos
    // ASCII ler
    // a[0] = 67
    // a[1] = 77
    // a[2] = 80
    // a[3] = 69
    // a[4] = 0
    
    int *arr[4];
    
    arr[0]= a; 
    // burdaki a aslında dizinin ilk elemanının adresi. arr[0] da pointer olduğu için
    // bu satır çalıştıktan sonra arr[0] = a[0] oluyor. yani arr[0] = 67 oluyor
    arr[1]= a + 1;
    // bir soraki eleman için. yani arr[0] = a[1] gibi
    
    arr[2]= a + 2;
    // devam
    arr[3]= a + 3;
    // ....
    
    int s = 2, x=0;
    
    change(arr,&s);
    //bu kısmı yukarda fonksiyon içinde açıklamaya çalıştım.
    
    for(x=0; x<4; x++)
    // bu arrayin elemanlarını yazdırma döngüsü zaten.
    printf("%c",*arr[x]);
    
    }
  • 21-06-2009, 23:36:00
    #5
    Usta mantıgın dogruda biz bunları sınav kagıdında yapıyoruz.Herhangi bir şekilce ascii kodlarına ulasma sansımız yok
  • 21-06-2009, 23:42:19
    #6
    anladığım kadarıyla string ascii lerine değer ekleyip çıkartarak farklı harfler elde ediyor. mesela:

    *arr[0] = 'V' - *ss;

    sana T yi veriyor

    R S T U V

    diye gittiğini düşünürsek V'den 2 karakter geri gitmiş oluyorsun. *ss'in değer'ini V nin ASCII değerinden çıkarttığında sana T'yi veriyor. Tek tek ascii karakterlerini bilmene gerek yok sanırsam
  • 21-06-2009, 23:55:11
    #7
    aynen öyle usta ama alfabe ıle alakası ne.

    C de alfabe herhangi bir kütüphanede tanımlı degil ki.
  • 22-06-2009, 00:11:15
    #8
    abi alfabe değil onlar. ASCII karakterleri. C kitaplarının arkasında görürsün gelende. Yani bir standartlaştırma kurumunun belirlediği birşey. C ye özel bir durum değil.

    bir byte 8 bit ya. yani 2^8 = 256farklı olasılık var. Amerikan Standart Cominitesi bunların hepsine kafasına göre değer vermiş.

    ASCII tablosu - Vikipedi

    gördüğün gibi 65 den sonra harfler başlıyor. Bu örnekte yapılan olay şu. karakterlerin ASCII kodu üzerinde aritmatik işlemler yapılarak farklı karakterler elde ediliyor.

    mesela V den yani 86 dan 2 çıkartıyor. 84 elde ediyor. O da char olarak yazdırdığın zaman sana 84 ü veriyor.

    ASCII çok kıl bir olaydır. bu karakter setlerinde falan da oluyor. türkçe karakter sorunsalı yaratıyor. kanser ediyor alemi. bence ezberle geç boşver mantığı falan çok da takma .

    ama yine de ASCII nedir diye soruyosan ASCII - Vikipedi

    aslında kendim anlatmaya çalıştım ama anlatamadım sildim tekrar
  • 22-06-2009, 00:34:45
    #9
    ASCII kodları hakkında bilgim var ama hiç alfabenin ASCII kodlarında arka arkaya geldigini düşünmedim.

    Okeydir ustam saolasın