Etiket arşivi: Implicit None

Rus Çarpması

Rus kelimesi geçince hemen aklınıza Rus kızları gelmesin, konumuzun hiç alakası yok. 🙂 Rusların başarılı oldukları bir alan olan matematikten bahsediyoruz. Yememiş içmemiş çarpma için ilginç bir algoritma bulmuşlar, adına da Russian Peasant Algorithm demişler. Adamların köylüsünün bile matematiği kuvvetli, yapacak birşey yok… 🙂 Bu dönem nümerik dersini aldığım içinde kendileri karşıma çıktılar. Algoritma karmaşık değil sonuç olarak yazdığım kodda karmaşık değil ancak yine de benden sonrakilerin elinde örnek kod bulunsun diyerek kendi yazdıklarımı paylaşmak istedim. Hem C hemde Fortran dilinde yazdığım kodun algoritması basit. Program verilen 2 sayıdan birincisini 2 ile çarparken ikincisini 2’ye bölüyor. İkincisinin tek olduğu satırlardaki birinci sayıları toplayarak sonuca ulaşıyor. Buyrun kodlarımız;

#include 

main(){

int i=0,j=0,result=0;

printf("Please write two number for multiplication. (Please leave a space between numbers)\n");

scanf("%d %d", &i,&j);

printf("First number is %d\nSecond number is %d\n", i,j);

while(j>=1){

	if(j%2 != 0)
		result = result + i;

	i = i*2;
	j = j/2;

	printf("Now First number is %d Second number is %d\n", i,j);
}

printf("Result is %d\n", result);
}

Bu da Fortran 90 ile yazılmış şekli;

PROGRAM peasant

	implicit none

! Here, i is the first number and j is the second number for multiplication
! And k will hold result

	integer i, j, k
! We initialized k to 0.
	k=0

	print *, ' This program multiply 2 integer numbers'
	print *, ' Type them in now separated by a comma or space'
! We read i and j from console
	READ *,i,j
! In this while loop, we aplied Russian Peasent Algorithm
	DO WHILE(j>=1)

		IF (mod(j,2)/=0) k = k + i

		i = i*2;
		j = j/2;
! End of While loop
	END DO
! Prints the result to screen
	print *, 'The multiplication is ', k
END

Fortran olanı ödev olarak teslim edildiği için yorumlarada sahip, yukarıda fazlasıyla açıklama yazdığım ve kod basit olduğu için yorumları eklemedim, sormak istediğiniz birşey olursa bu yazıya yorum yaparak sorabilirsiniz. Umarım işinizi görür…