Benutzer Diskussion:Soufiane

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
Die funktion h wird implementiert, wie im Fachtext defeniert .

Die funktion h lieft Gödelnummer von eingabe Wort (Verschlusselung im 3er-System)
<code id="6193dd180c248">
let set = new Set(["a","b"]); // a: 1 und b: 2 
function h(w){
	let somme=0;
    for (let i = 0; i < w.length; i++) {
	   let val=0;
	   if(w[i]=="a")
		   val=1;
	   if(w[i]=="b")
		   val=2;
	   somme +=val* Math.pow(3,(w.length-i-1));
    }
	return somme;
}
</code>

die Funktion isGoedelnumber testet, ob eine gegebene natürliche Zahl eine Gödelnummer ist.

  xxxx
  
wenn  zahl  1 oder 2 eingeben,tritt der Elementarfall ein und die Lösung lautet wahr,sonsten prüft die Funktion, ob der eingabe Zahl lauft wie folgenden shema:

hhhhhhhh

sodass X jeweils die Werte 1 oder zwei annehmen muss. Ist der letzte Summand gleich 0, so entspricht die angegebene Zahl einem Vielfachen von 3 . Da der letzte Summand aber 1 oder 2 sein muss entspricht das nicht dem Schema und es muss falsch zurückgegeben werden. (x mod 3=0) Die folgenden Schritte bestehen nun darin auch die nachfolgenden Summanden dieser Prüfung zu unterlegen. Dazu eliminiert man mittels division durch drei und anschließender Abrundung den letzten Summanden.
<code id="6193dd180c2e5">
function isGoedelnumber(n){
if(n< 3)
return true;
if(n%3==0)
return false;
return isGoedelnumber(Math.floor(n/3));
}
</code>

wir prüfen nummer 10 und 16 (der Beispiel im Fachtext gegeben)

<run id="6193dd180d0d4">
isGoedelnumber(10);
</run>
<run id="6193dd51580b2">
isGoedelnumber(16);
</run>
die funktion g liefert die Folge der Gödelnummern mit hilfe der Funktion p 

<code id="6193dd180cee5">

function g(i){
   let muf= function f(i){
        let m = 0;
        while(true){
            let min = 1 - p(i, m);
            if (min < 0)
                min = 0;
            if (min == 0)
                return m;
            m += 1;
		}
	}
    if (i == 1)
        return muf(0);
    else
        return muf(g(i - 1) + 1);	
	}


function p(r,y){
	if(isGoedelnumber(y) && r<=y)
		return 1;
	else
		return 0;
}
</code>

- funktion getCombination erstellt alle möglich variante( combination ) zwichen gegeben Zahlen . 
- funktion praedikat funktioniert wie ein filter für alle variante, die funktion getCombination erstellt. und lieft passenden combination mit eingabe Zahl 
- funktion convert Konvertieret eingabe zahl zu alphabet, sodass a=1 und b=2

<code id="6193dd180cfb7">
function getCombination(array, size){
    let arrayValues = [];
    for(let i = 0; i < Math.pow(2,size); i++){
        let cont = size - 1;
        row = [];
        while( cont >= 0 ){
            res = ((1 << cont) & i);
            if( res == 0)
                row.push(array[0]);
            else
                row.push(array[1]);   
            cont -= 1;
        }
        arrayValues.push(row);
    }
    return arrayValues;
}


function praedikat(n) {
    let s = 1;
    let sum = 0;
    let result = 0;
	// programm endet, wenn summ grüße als eingabe Zahl.
    while(sum < n){
	// hier erstellen wir alle möglich variante von 1 bis eingabe zahle.
        let combination = getCombination([1,2], s)
        if ( combination[0] != 0 ){
            for(let i = 0; i < combination.length; i++){
                sum = 0;
                for (let j= 0; j< combination[i].length; j++) {
				// hier sammelen wir die summe für alle werte von Reihe
                    sum += combination[i][j] * 3 ** j;
                }
				// wenn summe egal eingabe Zahl, lieft die funktion letzte liste in dieser Reihe, sonst führt programm weiter
                if (sum == n){
                    let result = combination[i].slice(-combination[i].length);
                    return result.reverse();
                }               
            }
        }
        s += 1;
    }
    return [];
}

function convert(n){
 if(n ==1)
	return 'a';
    if(n % 10==2)
	return 'b';
}

</code>

funktion k liefet - mit hilfe der funktion praedikat und convert - wort der eingabe Zahl.

<code id="6193dd180d03f">
function k(n){
let cont=1;
let l=praedikat(n);
while(cont<n){
let w='';
          for(let j=0;j<l.length;j++){
              w+=convert(l[j]);
              } 
			if(g(cont+1)==n)
			return w;
			
	 cont++;
    w='';
}
}
</code>


Prozedur zur Berechnung der ersten 10 Gödelnummern

<run id="6193dd180d14f">
for(let i=1;i<=10;i++){
console.log(g(i));
}
</run>

test zu funtionen h und k

<run id="6193dd180d1b6">
let wort="aba";
console.log("Wort:"+wort);
let godelnummer=h(wort);
k(godelnummer);
</run>