• 29-05-2010, 14:34:55
    #1
    Değerli forum sakinleri,
    C ile ilgilenmeme ve bazı konularda bilgim olmasına rağmen, işaretleyicilere pek hakim değilim. Yani okulda gördüğüm konular oraya kadar. Bir arkadaşımın ödevini çözerken yardımınıza ihtiyacım var. İşin aslı ne yapıp ettiysem herhangi bir kitapta ya da internette bulamadım. Hazır çözüm arıyormuş gibi olmamak için geldiğim noktayı size aktarayım.

    SORU: x ve y gibi iki pozitif tamsayı degişkeni olsun.Üçüncü bir degişken kullanmadan x'in degerini y degişkenine;y'nin degerini de x degişkenine atayan bir program yazınız.

    Bunu işaretçi olmadan yapabilmek mümkün değil bence, ama o da değişken sayılabilir aslında. Çözümüm şöyle;

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    int *p,*q,x=4,y=12;
    *q=x;
    *p=y;
    x=*q;
    y=*p;    
    printf("yeni x %d, yeni y %d",x,y);
    system("PAUSE");
    return 0;
    }
    Yardımcı olabilecek, fikir verebilecek biri olursa çok memnun olurum, sırf okumaya bile zaman ayıran herkese teşekkürler.
  • 29-05-2010, 20:35:40
    #2
    Bence yukarda yazdığın kod access violation verir.

    yapmaya çalıştığının doğrusu:

    #include <stdio.h>
    #include <stdlib.h>
    int main(){
    int *p,*q,x=4,y=12;
    q=&x;
    p=&y;
    printf("1.Durumda x: %d\n",*q);
    printf("1.Durumda y: %d\n",*p);
    q=&y;
    p=&x;  
    printf("2.Durumda x: %d\n",*q);
    printf("2.Durumda y: %d\n",*p);
    system("PAUSE");
    return 0;
    }
    olabilir. Ama bu da aslında 2 tane yeni pointer kullanmak *4 = 8byte yer almak demek. 2 tane integer değişken almış gibisin yani. Tek pointer ile de yapılabilir.

    Biraz baktım hiç extra yer almadan bence mümkün değil. Ama bir fonksiyon yazıp orada swap işlemlerini pointerlar ile halledip aldığın yeri sisteme iade ederek yapabilirsin. Ayrıca C++ ın STL kütüphanesinde de bir tane swap algoritması var.

    referans için:
    http://www.cplusplus.com/reference/algorithm/swap/
  • 30-05-2010, 00:29:12
    #3
    Cevabınız için teşekkür ederim. Benim takıldığım nokta şu, pointer'la x'in değerini y'ye y'nin değerini x'e atayamıyorum.Yani sizin örneğinizde yazılış doğru ama x ve y'nin değeri aynı kalıyor.swap'a da baktım. Başka bir forumda toplama çıkarma algoritması ile çözüm yazılmış. Cevabınıza teşekkürler.
  • 30-05-2010, 01:04:33
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    inş demeye calıstıgın budur verim dedim yinede

    #include <stdio.h>
    #include <stdlib.h>
    
    void degistir(int *i, int *j) {
       int t = *i;
       *i = *j;
       *j = t;
    }
    
    
    int main(){
    int x=4,y=12;
    
    degistir(&x,&y);
    
    printf("yeni x %d, yeni y %d",x,y);
    system("PAUSE");
    return 0;
    }