RDT ve TCP Protokolü Similatörü

    var checksum=false;
    var seqnumenabled = false;
    var onlyack = false;
    var seqnum = 0;
    var rtd30 = false;
    var seqnumold = seqnum;
    var tcp = false;
 
    function send(){
 
        delay();
 
        checksum = $("#checksum").is(":checked");
        seqnumenabled = $("#seqnum").is(":checked");
        onlyack = $("#onlyack").is(":checked");
        rtd30 = $("#rtd30").is(":checked");;
        tcp = $("#tcp").is(":checked");;
 
        if(!checksum)
            return tabloyaekle($("#datawillsend").val(),"==>",recieve());
        else{
            if(seqnumenabled){
                if(onlyack){
                    if(rtd30){
 
                        if(tcp){
                            var recieved = recieve();
                            var crecieved = checksummed(recieved);
                            var sended =  $("#datawillsend").val();
                            var csended = checksummed(sended);
                            if(kayboldumu()){
 
                                tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","=[KAYIP]>","");
 
                                setTimeout(send,$("#time").val());
 
                            }else{
 
                                tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
 
                                seqnumold = seqnum;
 
                                sendACKforTCP(csended==crecieved)
 
 
                                setTimeout(function () {
                                    if(seqnumold == seqnum)
                                        send();
                                },$("#time").val());
 
 
                            }
 
                        }
                        else{
 
                            var recieved = recieve();
                            var crecieved = checksummed(recieved);
                            var sended =  $("#datawillsend").val();
                            var csended = checksummed(sended);
 
                            if(kayboldumu()){
 
                                tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","=[KAYIP]>","");
 
                                setTimeout(send,$("#time").val());
 
                            }else{
 
                                tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
 
                                seqnumold = seqnum;
 
                                sendACKwithCS2withLoss(csended==crecieved)
 
 
                                setTimeout(function () {
                                    if(seqnumold == seqnum)
                                        send();
                                },$("#time").val());
 
 
                            }
 
                        }
 
 
 
                    }else{
 
                        var recieved = recieve();
                        var crecieved = checksummed(recieved);
                        var sended =  $("#datawillsend").val();
                        var csended = checksummed(sended);
 
                        tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
 
                        seqnumold = seqnum;
 
                        sendACKwithCS2(csended==crecieved);
 
                        setTimeout(function () {
                            if(seqnumold == seqnum)
                                send();
                        },$("#time").val());
 
                    }
 
 
                }else{
                    var recieved = recieve();
                    var crecieved = checksummed(recieved);
                    var sended =  $("#datawillsend").val();
                    var csended = checksummed(sended);
 
                    tabloyaekle("["+seqnum+"] "+sended+"("+csended+")","==> ","["+seqnum+"] "+recieved+"("+csended+"/"+crecieved+")");
 
                    if(csended==crecieved){
                        sendACKwithCS();
                    }else{
                        sendNACKwithCS();
                    }
                }
 
 
 
 
            }else{
                var recieved = recieve();
                var crecieved = checksummed(recieved);
                var sended =  $("#datawillsend").val();
                var csended = checksummed(sended);
 
                tabloyaekle(sended+"("+csended+")" , " ==>" , recieved+"("+csended+"/"+crecieved+")");
 
 
                if(csended==crecieved){
                    sendACK();
                }else{
                    sendNACK();
                }
 
            }
 
        }
    }
 
    function sendACK(){
        delay();
 
        if(bozuldumu()){
            tabloyaekle("?NACK?"," <==  ","ACK");
            send();
            return tabloyaekle("","","! HATA : duplikasyon tespit edildi ?");
        }
        else
            return tabloyaekle("ACK"," <==  ","ACK") + tabloyaekle("","BiTTi","");
    }
    function sendNACK(){
        delay();
 
        if(bozuldumu()){
            tabloyaekle("?ACK?"," <==  ","NACK");
            return tabloyaekle("","","! HATA : istenen veri alınamadı ?");
        }
        else
            return tabloyaekle("NACK"," <==  ","NACK");
        return send();
    }
 
    function sendACKwithCS(){
        delay();
 
        if(bozuldumu()){
            if(checksumdogrumu()){
                tabloyaekle("NACK (A)"," <==  ","ACK (A)");
                tabloyaekle("checksum eşleşmedi","   ","");
                tabloyaekle("","","! DÜZELTİLDİ : duplikasyon tespit edildi?");
                send();
            }else{
                tabloyaekle("NACK (N)"," <==  ","ACK (A)");
                send();
            }
        }else{
            tabloyaekle("ACK (A)"," <==  ","ACK (A)");
            seqnum++;
            tabloyaekle("","BiTTi","");
        }
    }
 
    function sendNACKwithCS(){
        if(bozuldumu()){
            if(checksumdogrumu()){
                tabloyaekle("ACK (N)"," <==  ","NACK (N)");
                tabloyaekle("checksum eşleşmedi","   ","");
                send();
            }else{
                tabloyaekle("ACK (A)"," <==  ","NACK (N)");
                seqnum++;
                return tabloyaekle("","","! HATA : istenen veri alınamadı ?");
            }
        }else{
            tabloyaekle("NACK (N)"," <==  ","NACK (N)");
            send();
        }
    }
 
    function sendACKwithCS2(checksum){
        delay();
 
        if(bozuldumu()){
            {
                tabloyaekle("["+seqnum+"] ACK (N)"," <==  ","["+seqnum+"] ACK (A)");
                tabloyaekle("checksum eşleşmedi","   ","");
                send();
                tabloyaekle("","","! DÜZELTİLDİ : duplikasyon tespit edildi ?");
            }
        }else{
            if(checksum){
                tabloyaekle("["+seqnum+"] ACK (A)"," <==  ","["+seqnum+"] ACK (A)");
                seqnum++;
                tabloyaekle("","BiTTi","");
            }
        }
 
 
    }
 
    function sendACKwithCS2withLoss(checksum){
        delay();
 
        if(kayboldumu()){
            tabloyaekle(""," <[KAYIP]=  ","["+seqnum+"] ACK");
        }else{
            sendACKwithCS2(checksum);
        }
 
    }
 
    function sendACKforTCP(checksum){
        delay();
        if(kayboldumu()){
            tabloyaekle(""," <[KAYIP]=  ","["+seqnum+"] ACK");
        }else{
            if(bozuldumu()){
                {
                    if(checksum) {
                        tabloyaekle("[" + seqnum + "] ACK (N)", " <==  ", "[" + seqnum + "] ACK (A)");
                        tabloyaekle("checksum eşleşmedi", "   ", "");
                        send();
                    }
                }
            }else{
                if(checksum){
                    tabloyaekle("["+seqnum+"] ACK (A)"," <==  ","["+seqnum+"] ACK (A)");
                    seqnum+=$("#datawillsend").val().length;
                    tabloyaekle("","BiTTi","");
                }
            }
        }
    }
 
    function checksummed(t){
        var csum = 0;
        for(var i= 0;i<t.length;i++){
                if(t[i]=="1") csum++;
        }
        return csum;
    }
    function recieve(){
        var t = $("#datawillsend").val();
        for(var i= 0;i<t.length;i++){
            if(bozuldumu()){
                if(t[i]=="0") t = t.replaceAt(i, "1");
                else  t = t.replaceAt(i, "0");;
            }
        }
        return t;
    }
 
 
    function bozuldumu(){
        return Math.random()*100<parseInt($("#bozulma").val());
    }
    function kayboldumu(){
        return Math.random()*100<parseInt($("#kayip").val());
    }
    function checksumdogrumu(){
        return Math.random()*100<50;
    }
    function tabloyaekle(a,b,c){
        $("#tablo").append("<tr><td>"+Date.now().toTime()+"</td></td><td>"+a+"</td><td>"+b+"</td><td>"+c+"</td></tr>");
    }
 
    function temizle(){
        $("#tablo").html("<tr><th>GÖNDEREN</th><th>ARA</th><th>ALAN</th></tr>");
        seqnum = 0;
    }
    String.prototype.replaceAt=function(index, character) {
        return this.substr(0, index) + character + this.substr(index+character.length);
    }
 
    Number.prototype.toTime = function(){
        return Math.floor(this%3600000/60000)+":"+ Math.floor(this%60000/1000) + ':' + this%1000
    };
 
    function delay(){
        sleep(parseInt($("#thr").val()));
    }
    function sleep(milliseconds) {
        var start = new Date().getTime();
        for (var i = 0; i < 1e7; i++) {
            if ((new Date().getTime() - start) > milliseconds){
                break;
            }
        }
    }

Veri Sıkıştırma – Huffman Algoritması – JS

 
 
 var sozluk=[];
 
function print(a){
	$("#out").html($("#out").html()+a);
}
function clone(oldObject){
	return jQuery.extend({}, oldObject);
}
 
$("#buton").click(function(e){
	calc();
});
 
 
function Node(ust,left,right,level,frekans,char){
	this.ust = ust;
  this.left = left;
  this.right = right;
  this.level = level ;
  this.char = char;
  this.frekans = frekans;
  this.kod="";
}
 
function calc(){
  var text = $("#tb").val();
  var array = text.split("");
  var chars = [];
  var frekans = [];
  var sorted = [];
 
	$("#out").html("Toplam : "+array.length+"<h2>Frekanslar</h2>");
 
  for(k in array){
    if(chars.indexOf(array[k]) == -1)
      chars.push(array[k]);
  }
 
  for(k in array){
      ch = chars.indexOf(array[k]);
      if(ch != -1){
        if(frekans[ch]){
          frekans[ch]++;
        }
        else
        {
          frekans[ch]=1;
        }
      }
  }
 
  for(i in chars){
    print("'"+chars[i]+"' "+( frekans[i]/array.length)+"<br>" );
    sorted.push({
    	"char" : chars[i],
      "frekans" : (frekans[i]/array.length)
    });
  }
 
 
  var levels=[[]];
 
  for(i=0;i<sorted.length;i++){
  		levels[0].push(new Node(false,false,false,0,sorted[i].frekans,sorted[i].char));
  }
 
  var level = 0;
  while(levels[level].length>2){
 
    levels[level].sort(function(a, b) {
    	return parseFloat(b.frekans) - parseFloat(a.frekans);
		});
 
    level++;
    levels.push([]);
 
    i = levels[level-1].length-1;
 
    levels[level].push(new Node(false,levels[level-1][i-1],levels[level-1][i],level,(levels[level-1][i-1].frekans+levels[level-1][i].frekans),"yok"));
 
    levels[level-1][i-1].ust = levels[level][levels[level].length-1];
    levels[level-1][i].ust = levels[level][levels[level].length-1];     
 
		for(var j = levels[level-1].length-3 ; j>=0;j--){
      	levels[level].push(levels[level-1][j]);
        levels[level-1][j].ust = levels[level][levels[level].length-1];
    }
 
 
  }
 
   levels[level].sort(function(a, b) {
    	return parseFloat(b.frekans) - parseFloat(a.frekans);
	});
 
 
 
  GenerateCode(levels[level][0],"1");  
  GenerateCode(levels[level][1],"0");
 
 
 
 
 
 
 
  print("<h2>Ağaç</h2>");
 
 
 
  levels.forEach(function(e){
  	print("<br>");
    e.forEach(function(l){
    	print(Math.round(l.frekans*100)/100+" | ");
    })
  });
 
    print("<h2>Kod</h2>");
 
 
 
  levels.forEach(function(e){
  	print("<br>");
    e.forEach(function(l){
    	print(l.kod+" | ");
    })
  });
 
  sozluk=[];
 
  print("<h2>Kodlama</h2>");
      levels[0].forEach(function(l){
    	print(l.char+" = "+l.kod+" <br> ");
      sozluk.push({
      	"char" : l.char,
        "kod" : l.kod
      });
    })
 
  print("<h2>Encode</h2>");
 
  array.forEach(function(e){
  	print(encode(e));
  });
 
  console.log(levels);
 
 
}
 
 
function GenerateCode(node,kod){
  	node.kod=kod;
    if(node.left)
  		GenerateCode(node.left,"1"+node.kod);  	
    if(node.right)
    	GenerateCode(node.right,"0"+node.kod);
}
 
function encode(char){
  for(k in sozluk){
  	if(sozluk[k].char==char)
    	return sozluk[k].kod;
  }
  return "?";
}

Perceptron Eğitimi – Yapay Sinir Ağları

 
 
    var w, // ağırlık
            A, B, // girişler
            dA,dB; // istenenler
 
 
    function calculate(){
        $('#console').html('');
        MAXLOOP=Number($("#maxloop").val());
 
        var data = [];
        data.push(A);
        data.push(B);
        var beklenen = [];
        beklenen.push(dA);
        beklenen.push(dB);
 
        var c=Number($("#c").val());
        var k=1; // itarasyon ks
        var E=1; //ERROR
        var o=0; //sign(toplam)
        var p=0; // adım sayısı
        while (E>0 && p < MAXLOOP) {
 
 
 
            E = 0;
            p++;
            if (p == MAXLOOP - 1){
                alert("MAX LOOP Aşıldı");
                break;
            }
 
 
            for (var j = 0; j < data.length; j++) {
                o = sign(toplam(data[j], w));
 
                if (o == beklenen[j]) {
                    //ok
                } else {
 
                    for (var i = 0; i < w.length; i++) {
                        w[i] = w[i] + c * (beklenen[j] - o) * data[j][i] / 2;
                    }
                }
 
                E = E + 1 / 2 * (Math.pow(beklenen[j] - o, 2));
 
            }
            k++;
 
            print("<br>w = "+w.toString()+"[ E= "+E+" ]");
 
 
        }
 
        alert("w = "+w.toString());
 
 
 
 
 
 
 
 
    }
 
 
 
 
 
    function toplam(x,w){
        var toplam=0;
        for(key in w){
            toplam+=w[key]*x[key];
        }
        return toplam;
    }
 
    function sign(x){
        return Math.sign(x);
    }
 
    function f(x){
        return 2/(1+Math.exp(-1*x))-1;
    }