C de Rasyonel Sayılarda Dört İşlem

yorumsuz
323 kez okundu

Merhaba arkadaşlar,

Bu yazımızda rasyonel sayılarda 4 işlem yapabilen bir c kodunu ele alacağız. Bir rasyonel sayının pay ve payda olmak üzere iki bölümü bulunduğunu biliyoruz. Biz bunları programda tutabilmek için “rasyonel” adında bir struct yapısı tanımladık ve “typedef” anahtar kelimesiyle değişken yeni, eskisine kıyasla “struct rasyonel” daha kısa “Rasyonel” bir değişken adı verdik.Kodda tüm işlemleri foknsiyonlar yardımıyla gerçekleştirdik. Bu programın daha etkin çalışmasını sağlayan en önemli etken, programı fonksiyonel yazmaktır. Programda bazı kısıtlamalar var. “Oku” fonksiyonuna bakacak olursanız; kullanıcının hem pay hemde payda için “0”(sıfır) değerini girmesini engelledik. Kullanıcı her “0”(sıfır) girişinde program kullanıcıya uyarı mesajı verecek ve değeri tekrar girmesini isteyecektir. Programda “oku” fonksiyonun yanında “yaz” fonksiyonu, toplama, çıkarma, çarpma, bölme işlemleri için sırasıyla “topla”,”cikar”,”carp”,”bol” fonksiyonlarıyla birlikte “ebobBul” fonksiyonu bulunmaktadır. Bu fonksiyon veri girişi sırasında sadaleşebilecek veri girişlerinde ve yapılan 4 işlem sonucunda çıkan sonuçların sadeleşmesi işlemi kullanılmaktadır. Program işlemler sonucunda sonucun hem sadeleşmiş hemde sadeleşmemiş halini yazdıracaktır.

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

typedef struct rasyonel{
int pay;
int payda;
}Rasyonel;

Rasyonel ebobBul(Rasyonel);
Rasyonel bol(Rasyonel sayi1,Rasyonel sayi2);
Rasyonel carp(Rasyonel sayi1,Rasyonel sayi2);
Rasyonel cikar(Rasyonel sayi1,Rasyonel sayi2);
Rasyonel topla(Rasyonel,Rasyonel);
void oku(Rasyonel*);
void yaz(Rasyonel);

int main()
{
Rasyonel sayi1,sayi2,toplam,carpim,farki,bolum;

printf(“\n 1.rasyonel sayi icin”);
oku(&sayi1);
printf(“\n 2.rasyonel sayi icin”);
oku(&sayi2);

system(“CLS”); // Bu koddan önce yazilan yazilari siler yani sayfayı temizler..

printf(“\n 1.Rasyonel Sayiniz : “);
yaz(sayi1);
if(sayi1.pay != ebobBul(sayi1).pay || sayi1.payda == 1)
{
printf(” Sadelesmis hali : “);
if(ebobBul(sayi1).payda == 1)
printf(“%d\n”, ebobBul(sayi1).pay);
else
yaz(ebobBul(sayi1));
}

printf(“\n 2.Rasyonel Sayiniz : “);
yaz(sayi2);
if(sayi2.pay != ebobBul(sayi2).pay || sayi2.payda == 1)
{
printf(” Sadelesmis hali : “);
if(ebobBul(sayi2).payda == 1)
printf(“%d\n”, ebobBul(sayi2).pay);
else
yaz(ebobBul(sayi2));
}

toplam=topla(ebobBul(sayi1),ebobBul(sayi2));
printf(“\n Rasyonel sayilarin toplami : “);
yaz(toplam);
if(toplam.pay != ebobBul(toplam).pay || toplam.payda == 1 || toplam.pay == 0)
{
printf(” Sadelesmis hali : “);
if(ebobBul(toplam).payda == 1)
printf(“%d\n”, ebobBul(toplam).pay);
else if(ebobBul(toplam).pay == 0)
printf(“0\n”);
else
yaz(ebobBul(toplam));
}

farki = cikar(ebobBul(sayi1), ebobBul(sayi2));
printf(“\n Rasyonel sayilarin farki : “);
yaz(farki);
if(farki.pay != ebobBul(farki).pay || farki.payda == 1 || farki.pay == 0)
{
printf(” Sadelesmis hali : “);
if(ebobBul(farki).payda == 1)
printf(“%d\n”, ebobBul(farki).pay);
else if(ebobBul(farki).pay == 0)
printf(“0\n”);
else
yaz(ebobBul(farki));
}

carpim = carp(ebobBul(sayi1), ebobBul(sayi2));
printf(“\n Rasyonel sayilarin carpimi : “);
yaz(carpim);
if(carpim.pay != ebobBul(carpim).pay || carpim.payda == 1)
{
printf(” Sadelesmis hali : “);
if(ebobBul(carpim).payda == 1)
printf(“%d\n”, ebobBul(carpim).pay);
else
yaz(ebobBul(carpim));
}

bolum = bol(ebobBul(sayi1), ebobBul(sayi2));
printf(“\n Rasyonel sayilarin bolumu : “);
yaz(bolum);
if(bolum.pay != ebobBul(bolum).pay || bolum.payda == 1)
{
printf(” Sadelesmis hali : “);
if(ebobBul(bolum).payda == 1)
printf(“%d\n”, ebobBul(bolum).pay);
else
yaz(ebobBul(bolum));
}
return 0;
}
void yaz(Rasyonel okunanSayi)
{
printf(“%d/%d \n”,okunanSayi.pay,okunanSayi.payda);
}
void oku(Rasyonel* okunanSayi)
{
byte flag1 = 0, flag2 = 0;
do{
if(flag1 == 1)
printf(“\n YANLIS VERI GIRISI!!”);

printf(“\n Pay kismini giriniz\n >> “);
scanf(“%d”,&okunanSayi->pay);

if(okunanSayi->pay == 0)
flag1 = 1;
else
flag1 = 0;
}while(okunanSayi->pay == 0 && flag1 == 1);

do{
if(flag2 == 1)
printf(“\n YANLIS VERI GIRISI!!”);

printf(“\n Payda kisimini giriniz\n >> “);
scanf(“%d”,&okunanSayi->payda);

if(okunanSayi->payda == 0)
flag2 = 1;
else
flag2 = 0;
}while(okunanSayi->payda == 0 && flag2 == 1);
}
Rasyonel topla(Rasyonel sayi1,Rasyonel sayi2)
{
Rasyonel toplam;
if(sayi1.payda == sayi2.payda)
{
toplam.pay = sayi1.pay+sayi2.pay;
toplam.payda = sayi1.payda;
}else{
toplam.pay = (sayi2.payda*sayi1.pay)+(sayi1.payda*sayi2.pay);
toplam.payda = sayi1.payda*sayi2.payda;
}

return toplam;
}
Rasyonel cikar(Rasyonel sayi1,Rasyonel sayi2)
{
Rasyonel fark;
if(sayi1.payda == sayi2.payda)
{
fark.pay = sayi1.pay – sayi2.pay;
fark.payda = sayi1.payda;
}else{
fark.pay = (sayi2.payda*sayi1.pay)-(sayi1.payda*sayi2.pay);
fark.payda = sayi1.payda*sayi2.payda;
}
return fark;
}
Rasyonel carp(Rasyonel sayi1,Rasyonel sayi2)
{
Rasyonel carpim;
carpim.pay = sayi1.pay*sayi2.pay;
carpim.payda = sayi1.payda*sayi2.payda;

return carpim;
}
Rasyonel bol(Rasyonel sayi1,Rasyonel sayi2)
{
Rasyonel bolum;
bolum.pay = sayi1.pay*sayi2.payda;
bolum.payda = sayi1.payda*sayi2.pay;

return bolum;
}
Rasyonel ebobBul(Rasyonel okunan)
{
int kucuk, ebob, i;

if(okunan.pay>okunan.payda)
kucuk = okunan.payda;
else
kucuk = okunan.pay;

if(kucuk >= 0)
{
for(i=kucuk; i>=1; i–)
{
if((okunan.pay%i==0)&&(okunan.payda%i==0))
{
ebob = i;
break;
}else
continue;
}
}else{
for(i=kucuk; i<=-1; i++)
{
if((okunan.pay%i==0)&&(okunan.payda%i==0))
{
ebob = i;
break;
}else
continue;
}
}
okunan.pay = okunan.pay/ebob;
okunan.payda = okunan.payda/ebob;

return okunan;
}

Program ilk çalıştırıldığında bizden 2 sayıya ait pay ve payda değerlerini girmemizi isteyecektir.

1

 

Görüldüğü üzere yanlış veri girişinde program uyarı mesajı verip yeniden veri giriği yapmamızı isteyecektir. Son veri de düzgün girilip “enter” tuşuna basıldığında; progrmanda bulunan “system(“CLS”);” komutu sayesinde yukarıdaki ekran görüntüsüne ait tüm yazılar silinip hesaplama sonuçlarını başka yazı olmayan bir ekran üzere yazacaktır.

2

 

Program istenilen hesaplama sonuçları, sadeleşebilenleri sadeleşmiş hali ile de ekrana yazdırmıştır. Başka bir yazımızda görüşmek üzere 🙂


Sosyal Medyada Paylaş Facebook Twitter Google+
Etiketler: , , , , , , , ,
Eklenme Tarihi: 13 Eylül 2015

Facebook Yorumları

Konu hakkında yorumunuzu yazın


Time limit is exhausted. Please reload the CAPTCHA.