<html>
<head>
<script type="text/javascript">
// http://jsbin.com/
// http://www.webdeveloper.com/forum/showthread.php?278653-HELP!!!-New-to-javascript
// http://www.w3schools.com/jsref/jsref_unshift.asp
// http://www.w3schools.com/jsref/jsref_obj_array.asp
// http://www.w3schools.com/jsref/jsref_join.asp
// http://www.w3schools.com/jsref/jsref_obj_regexp.asp
// http://www.w3schools.com/jsref/jsref_obj_string.asp
// http://www.w3schools.com/jsref/jsref_replace.asp
// http://www.w3schools.com/jsref/jsref_match.asp
/*
Soldan sağa zihinsel çıkarma işlemi de bir bakıma toplama işlemi gibidir. Bu metot, çıkanla hangi sayıyı toplamalıyım ki eksileni elde edeyim şeklinde bir mantığa dayanmaktadır.Zihinsel Matematik Teknikleri (2. kitap), sayfa : 17
*/
function subtract (a,b) {
if(Number(a) < Number(b) ) { alert( 'ilk sayı büyük, ikinci sayı küçük olmalı' ); return false; }
// a sayısını eksilen isimli dizinin içine atalım. b sayısını da çıkan isimli bir dizinin içine atalım.
var eksilen = a.split('');
//alert(eksilen);
alert(typeof(eksilen[0]))
var cikan = b.split('');
// alert(cikan);
// A eleman sayıs B den çok ise, B nin eleman sayısın A ya eşitlemek için B elemanınn baş kısmına 0 ekleyelim:
while(eksilen.length > cikan.length) { cikan.unshift(0); }
//alert(cikan.length);
//alert(cikan);
var i ;
var kalan = []; // işlemin sonucunda kalan sayıyı bu diziye yerleştireceğiz.
for(i=0; i< eksilen.length; i++ ) {
if(eksilen[i] >= cikan[i]) { kalan[i] = eksilen[i] - cikan[i];}
if( eksilen[i] < cikan[i]) {
kalan[i-1]= kalan[i-1] - 1; // alert( 'kalan[i-1] = '+kalan[i-1]);
eksilen[i]= Number(eksilen[i]) + 10; // alert( 'eksilen[i]='+ eksilen[i] );
kalan[i] = eksilen[i] - cikan[i]; // alert( 'kalan[i]= '+ kalan[i]);
}
}
// alert(kalan);
// alert( typeof( kalan.join('') ) );
// Başlangıçtaki 0 ları yok edelim:
// alert(kalan.join('').replace(/^0+/,'') );
return kalan.join('').replace(/^0+/,'') ;
}
function add (c, d) {
var num = c.split('');
var num2= d.split('');
// num ve num2 dizilerinin eleman sayılarını eşitlemek için başlangıca 0 ekliyoruz.
while(num.length > num2.length) { num2.unshift(0); }
while(num.length < num2.length) { num.unshift(0); }
var i, L = num.length-1;
var toplam = [];
var b, elde=0;
for(i=L; i>=0; i--) {
b = Number(num[i]) + Number(num2[i]) + elde;
if(i == 0 ) { toplam[i]= b ; }
else { toplam[i] = b%10 ; }
if(b>9 && i !=0 ) { elde = parseInt(b/10); }
if(b < 10) { elde =0; }
}
// alert(toplam);
// alert( toplam.join('') );
return toplam.join('');
}
function temizle (bu) {
var el = document.getElementById('Input');
el.value = bu;
}
function yaz (bu) {
var el = document.getElementById('Input');
el.value += bu;
}
function hesapla () {
var el = document.getElementById('Input');
var s = el.value;
var n = s.split(/[*+-\/]/);
// alert('n= '+n);
// alert('n[0]= '+ n[0]);
// alert('n[1]= '+n[1]);
var sign = s.match(/[*+-\/]/);
// alert('sign ='+sign);
if(sign == '+' ) {el.value = Number(n[0]) + Number( n[1]); }
// or
// if(sign == '+' ) {el.value = add( n[0], n[1]); }
// if(sign == '-' ) {el.value = Number(n[0]) - Number( n[1]); }
// or
if(sign == '-' ) {el.value = subtract( n[0], n[1] ); }
if(sign == '*' ) {el.value = Number(n[0]) * Number( n[1]); }
if(sign == '/' ) {el.value = Number(n[0]) / Number( n[1]); }
}
</script>
</head>
<body>
<FORM NAME="Calculator">
<TABLE BORDER=2>
<tr>
<td>
<input type = "text" Name = "Input" id="Input" size ="15">
</br>
</td>
</tr>
<tr>
<td>
<input type = "button" Name =
"seven" Value = "7" OnCLick = "yaz(this.value)">
<input type = "button" Name =
"eight" Value = "8" OnCLick = "yaz(this.value)">
<input type = "button" Name =
"nine" Value = "9" OnCLick = "yaz(this.value)">
<input type = "button" Name =
"divide" Value = "/" OnCLick = "yaz(this.value); ">
</br>
<input type = "button" Name =
"four" Value = "4" OnCLick = "yaz(this.value)">
<input type = "button" Name =
"five" Value = "5" OnCLick = "yaz(this.value)">
<input type = "button" Name =
"six" Value = "6" OnCLick = "yaz(this.value)">
<input type = "button" Name =
"multiplication" Value = "*" OnCLick = "yaz(this.value);" >
</br>
<input type = "button" Name =
"one" Value = "1" OnCLick = "yaz(this.value)" >
<input type = "button" Name =
"two" Value = "2" OnCLick = "yaz(this.value)" >
<input type = "button" Name =
"nine" Value = "3" OnCLick = "yaz(this.value)" >
<input type = "button" Name =
"minus" Value = "-" OnCLick = "yaz(this.value);" >
</br>
<input type = "button" Name =
"zero" Value = "0" OnCLick = "yaz(this.value)" >
<input type = "button" Name = "clear" Value = "c" OnCLick = "temizle('')">
<input type = "button" Name =
"equal" Value = "=" onclick="hesapla ()">
<input type = "button" Name =
"plus" Value = "+" OnCLick = "yaz(this.value)" >
</td>
</tr>
</table>
</form>
<script type="text/javascript">
//multiplication
// çarpma işlemi
/*
var num = [ 1, 2];
var num2 = [ 2, 4, 5,6];
*/
/*
var num = [1,2,3,1];
var num2 = [2,4,1,3];
// 2970403
*/
/*
var num = [2,1,2,3,1];
var num2 = [5,2,4,2,2];
//1112971482
*/
var num = [3,4,9,1,0,5,2,7,6,8];
var num2 = [5,8,2,9,7,3,6,0,4,1];
// 20351916142642411488
//var B = [];
while(num.length > num2.length) { num2.unshift(0); }
while(num2.length > num.length) { num.unshift(0); }
var netice = [];
var i, k, t, basamak, elde = 0, L = num.length -1;
for(i=L; i>=0; i--) {
basamak = elde;
t=i;
for(k = L; k>=i; k--) {
basamak += num[k] * num2[t];
t++;
}
if(basamak>9) { elde = parseInt(basamak/10); netice.unshift(basamak % 10); }
if(basamak < 10) { elde = 0; netice.unshift(basamak) ; }
//B[B.length]= basamak;
}
// alert(netice);
// alert('döngüden önce basamak = '+basamak);
var p, r = L - 1, u = r, y;
for( p= r; p >=0; p--) {
y=p;
basamak = elde;
for( m = 0; m<=p; m++) {
basamak += num[m] * num2[y]; y--; // alert(basamak);
}
if(basamak>9) { elde = parseInt(basamak/10); netice.unshift(basamak % 10); }
if(basamak < 10) { elde = 0; netice.unshift(basamak) ; }
//B[B.length]= basamak;
}
if(elde > 0) {
//alert( 'elde = '+elde);
netice.unshift(elde);
}
//alert( 'B dizisinin degeri = '+ B );
// alert(netice);
alert(netice.join('') );
document.write(netice.join(''));
</script>