Skip to content

Instantly share code, notes, and snippets.

@huseyin
Last active March 22, 2016 21:41
Show Gist options
  • Save huseyin/23db4255f23d67327804 to your computer and use it in GitHub Desktop.
Save huseyin/23db4255f23d67327804 to your computer and use it in GitHub Desktop.
C'de biraz tekrar (Ampirik bir denemedir)
#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