folder Tahribat.com Forumları
linefolder C - C++
linefolder C Syntax Sorusu...



C Syntax Sorusu...

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Shaban Interactive
    Dj_DooM3
    Dj_DooM3's avatar
    Kayıt Tarihi: 31/Ağustos/2005
    Erkek

    Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)

    int a=5;

    int f1() { a=14; return 9;}

    int f1() { a=11; return 2;}

    Void f3() { a=f1() + a + f2();}

    main() { f3();}

     

    yukaridaki f3() te bir yan etki varmis, bunun ne oldugunu bulamadim, yardimci olsursaniz gercekten sevinirim. bir de nasil duzeltebilirsiz???

     

    simdiden tesekurler...

     

     


    Shaban Interactive Pro.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wking
    wking's avatar
    Kayıt Tarihi: 28/Mart/2010
    Erkek

    Şuna bir bak?

    http://www.hardwaremania.com/forum/yazilim/bilgisayar-programlama/genel-code/fonksyonlar-yan-etkiler-24012.html

  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    seretide
    seretide's avatar
    Kayıt Tarihi: 14/Haziran/2010
    Erkek

     

    Dj_DooM3 bunu yazdı:
    -----------------------------

    Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)

    int a=5;

    int f1() { a=14; return 9;}

    int f1() { a=11; return 2;}

    Void f3() { a=f1() + a + f2();}

    main() { f3();}

     


    -----------------------------

     

    yan etki f2() ve f1()'in a nın değerini değiştirmesi.

    f3() çalıştıktan sonra fonksiyonlar soldan çalışmaya başladığı için önce f1() çalışır a=14 olur f1() 9 döndürür

    bu durumda  a=9+a+f2()   olur.a=14 olduğundan a=9+14+f2() olur f2() çalışır.a nın değeri yine değişir ama en son f3() a yı değiştirdiği için bi önemi olmaz.

    f2() 9 döndürür   a=9+14+2  a=25 olur.

     

    void f3() {a=a+ f1() + f2();} yaparsak düzelir

     

    edit: düzelmiyomuş :) bende anlamadım önce fonksiyonlar çalışıyo her zaman


    Saçma
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Shaban Interactive
    Dj_DooM3
    Dj_DooM3's avatar
    Kayıt Tarihi: 31/Ağustos/2005
    Erkek

    seretide bunu yazdı:
    -----------------------------

     

    Dj_DooM3 bunu yazdı:
    -----------------------------

    Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)

    int a=5;

    int f1() { a=14; return 9;}

    int f1() { a=11; return 2;}

    Void f3() { a=f1() + a + f2();}

    main() { f3();}

     


    -----------------------------

     

     

    yan etki f2() ve f1()'in a nın değerini değiştirmesi.

    f3() çalıştıktan sonra fonksiyonlar soldan çalışmaya başladığı için önce f1() çalışır a=14 olur f1() 9 döndürür

    bu durumda  a=9+a+f2()   olur.a=14 olduğundan a=9+14+f2() olur f2() çalışır.a nın değeri yine değişir ama en son f3() a yı değiştirdiği için bi önemi olmaz.

    f2() 9 döndürür   a=9+14+2  a=25 olur.

     

    void f3() {a=a+ f1() + f2();} yaparsak düzelir

     

    edit: düzelmiyomuş :) bende anlamadım önce fonksiyonlar çalışıyo her zaman


    -----------------------------

    iyi denemeydi hocam :D eyvallah ugrastigin icin ;) henuz cozebilmis degilim :D


    Shaban Interactive Pro.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    Sevgili kardeşim senin sorunun operatör önceliği konusunu anlamaman. Operatör önceliği konusu okuduktan sonra hangi operatörlerin öncelikli olduğunu bu tablodan inceleyebilirsin.. Eğer bir fonksiyona diğer fonksiyondan öncelik tanımak istiyorsan parantez operatörlerini kullanabilirsin..

     

     

    Operator

    Description

    Associativity

    ()
    []
    .
    ->
    ++  --
    Parentheses (function call) (see Note 1)
    Brackets (array subscript)
    Member selection via object name
    Member selection via pointer
    Postfix increment/decrement (see Note 2)

    left-to-right

    ++  --
    +  -
    !  ~
    (type)
    *
    &
    sizeof
     
     
    Prefix increment/decrement
    Unary plus/minus
    Logical negation/bitwise complement
    Cast (change type)
    Dereference
    Address
    Determine size in bytes
    right-to-left
    *  /  % Multiplication/division/modulus left-to-right
    +  - Addition/subtraction left-to-right
    <<  >> Bitwise shift left, Bitwise shift right left-to-right
    <  <=
    >  >=
    Relational less than/less than or equal to
    Relational greater than/greater than or equal to
    left-to-right
    ==  != Relational is equal to/is not equal to left-to-right
    & Bitwise AND left-to-right
    ^ Bitwise exclusive OR left-to-right
    | Bitwise inclusive OR left-to-right
    && Logical AND left-to-right
    || Logical OR left-to-right
    ?: Ternary conditional right-to-left
    =
    +=  -=
    *=  /=
    %=  &=
    ^=  |=
    <<=  >>=
    Assignment
    Addition/subtraction assignment
    Multiplication/division assignment
    Modulus/bitwise AND assignment
    Bitwise exclusive/inclusive OR assignment
    Bitwise shift left/right assignment
    right-to-left

    ,

    Comma (separate expressions) left-to-right
    Note 1:
    Parentheses are also used to group sub-expressions to force a different precedence; such parenthetical expressions can be nested and are evaluated from inner to outer.
    Note 2:
    Postfix increment/decrement have high precedence, but the actual increment or decrement of the operand is delayed (to be accomplished sometime before the statement completes execution). So in the statement  y = x * z++; the current value of z is used to evaluate the expression (i.e., z++ evaluates to z) and z only incremented after all else is done. See postinc.c for another example.

    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    asmin
    asmin's avatar
    Kayıt Tarihi: 14/Haziran/2010
    Dişi

    Dj_DooM3 bunu yazdı:
    -----------------------------

    Merhaba arkadaslar, Bir soru var aklima takildi? bir yardimci olsursaniz cok sevinirim ;)

    int a=5;

    int f1() { a=14; return 9;}

    int f1() { a=11; return 2;}

    Void f3() { a=f1() + a + f2();}

    main() { f3();}

     

    yukaridaki f3() te bir yan etki varmis, bunun ne oldugunu bulamadim, yardimci olsursaniz gercekten sevinirim. bir de nasil duzeltebilirsiz???

     

    simdiden tesekurler...

     

     


    -----------------------------

     

     

    Void keywordu void olarak yazılır... Sorduğun yan etkiye gelecek olursak, f3() fonksiyonu cağrılğında, önce f1() fonksiyonu çağrılır, f1 fonksiyonu içersinde gloabal a değişkeni güncellenerek 14 değeri atanır, f1 fonksyionu da geri dönüş değeri olarak 9 değerini gönderir. Daha sonra f2() fonksiyonu çağrılır oradada geri önüş değeri olarak 2 döndürülür. Bunu kod üzerinden anlatacak olursam;

    void f3() {
         a = f1()+ a + f2();
          // 9 + 14 + 2
    }

    buradaki a ifadesi, f1 den sonra yazıldığı için değeri 14 tur.. eğer f2 den sonrada yazilsa idi değeri 11 olacakti yani,

    void f3() {
         a = f1()+ a + f2() + a;
          // 9 + 14 + 2 + 11
    }

    Yan etki kavrami da su... a değerinin de sürekli guncelleniyor olmasi.. Umarim anlatabilmişimdir. Anlamadıysan PM ile ulaş bana.. Selametle...

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    asmin
    asmin's avatar
    Kayıt Tarihi: 14/Haziran/2010
    Dişi

    kodunu şu sekilde yazarsan a nin değişimini de inceleyebilrsin..



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

    int a = 5;

    int f1() {
        a = 14;
        return 9;
        }

    int f2() {
        a = 11;
       return 2;
        }

    void f3() {
        a = f1() + a + f2();
        }

    int main()
    {
        f3();
        printf("a = %d",a);
        getchar();
        return 0;
    }

Toplam Hit: 1980 Toplam Mesaj: 7