Last active
March 22, 2016 21:41
-
-
Save huseyin/23db4255f23d67327804 to your computer and use it in GitHub Desktop.
C'de biraz tekrar (Ampirik bir denemedir)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| typedef struct _fixnum { | |
| int num; | |
| int (*plus_int)(struct _fixnum *, int); | |
| int (*plus_fx)(struct _fixnum *, struct _fixnum *); | |
| int (*subs_int)(struct _fixnum *, int); | |
| int (*subs_fx)(struct _fixnum *, struct _fixnum *); | |
| int (*multi_int)(struct _fixnum *, int); | |
| int (*multi_fx)(struct _fixnum *, struct _fixnum *); | |
| int (*div_int)(struct _fixnum *, int); | |
| int (*div_fx)(struct _fixnum *, struct _fixnum *); | |
| float (*fdiv_int)(struct _fixnum *, int); | |
| float (*fdiv_fx)(struct _fixnum *, struct _fixnum *); | |
| } Fixnum; | |
| /* Bir Fixnum !örneği ile integer tipli sayıyı topla. */ | |
| int plus_int(Fixnum *fx, int n) { | |
| return fx->num + n; | |
| } | |
| /* Bir Fixnum !örneği ile başka bir fixnum örneğini topla. */ | |
| int plus_fx(Fixnum *fx1, Fixnum *fx2) { | |
| return (fx1->num) + (fx2->num); | |
| } | |
| /* Bir Fixnum !örneğiden integer tipli sayıyı çıkar. */ | |
| int subs_int(Fixnum *fx, int n) { | |
| return fx->num - n; | |
| } | |
| /* Bir Fixnum !örneğinden başka bir fixnum örneğini çıkar. */ | |
| int subs_fx(Fixnum *fx1, Fixnum *fx2) { | |
| return (fx1->num) - (fx2->num); | |
| } | |
| /* Bir Fixnum !örneğini integer tipli sayıyla çarp. */ | |
| int multi_int(Fixnum *fx, int n) { | |
| return fx->num * n; | |
| } | |
| /* Bir Fixnum !örneğini başka bir fixnum örneğiyle çarp. */ | |
| int multi_fx(Fixnum *fx1, Fixnum *fx2) { | |
| return (fx1->num) * (fx2->num); | |
| } | |
| /* Bir Fixnum !örneğini integer tipli sayıya böl. */ | |
| int div_int(Fixnum *fx, int n) { | |
| return fx->num / n; | |
| } | |
| /* Bir Fixnum !örneğini başka bir fixnum örneğine böl. */ | |
| int div_fx(Fixnum *fx1, Fixnum *fx2) { | |
| return (fx1->num) / (fx2->num); | |
| } | |
| /* Bir Fixnum !örneğini integer tipli sayıya sonucu float olacak | |
| * şekilde böl. | |
| */ | |
| float fdiv_int(Fixnum *fx, int n) { | |
| return (float)fx->num / (float)n; | |
| } | |
| /* Bir Fixnum !örneğini başka bir fixnum örneğine sonucu float | |
| * olacak şekilde böl. | |
| */ | |
| float fdiv_fx(Fixnum *fx1, Fixnum *fx2) { | |
| return (float)(fx1->num) / (float)(fx2->num); | |
| } | |
| /* Bir nevi (pek alakası yok) kurucu method! */ | |
| Fixnum fixnum_new(int value) { | |
| Fixnum fx; | |
| fx.num = value; | |
| fx.plus_int = &plus_int; | |
| fx.plus_fx = &plus_fx; | |
| fx.subs_int = &subs_int; | |
| fx.subs_fx = &subs_fx; | |
| fx.multi_int = &multi_int; | |
| fx.multi_fx = &multi_fx; | |
| fx.div_int = &div_int; | |
| fx.div_fx = &div_fx; | |
| fx.fdiv_int = &fdiv_int; | |
| fx.fdiv_fx = &fdiv_fx; | |
| return fx; | |
| } | |
| int main(void) { | |
| Fixnum f1 = fixnum_new(5); | |
| Fixnum f2 = fixnum_new(8); | |
| // Deneme kodları... | |
| printf("%d\n", f1.plus_fx(&f1, &f2)); | |
| printf("%d\n", f2.plus_int(&f2, 19)); | |
| printf("%f\n", f1.fdiv_fx(&f1, &f2)); | |
| return EXIT_SUCCESS; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment