Benutzer Diskussion:Soufiane

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
Die Funktion h wird implementiert, wie im Fachtext definiert, und sie 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

$$f(x) = \begin{cases}
true , x < 3\\
false , x mod 3 = 0\\
f( \lfloor{}x/3 \rfloor{}), sonst
\end{cases}$$.

Wenn zahl 1 oder 2 eingeben, tritt der Elementarfall ein und die Lösung lautet wahr, sonst prüft die Funktion, ob der Eingabe Zahl lauft wie folgenden Schema:

$$X_{i}3^{i} + X_{i-1}3^{i-1} + ... + X_{1}3^{1} + X_{0}3^{0} $$

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 das Programm mittels Division durch drei und anschließender Abrundung den letzten Summanden und wird selbst angerufen.

<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 Nummern 10 und 16.

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


<code id="6193dd180cee5">

function g(i){
   let muf= function f(i){
        let m = 1;
        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>

- Die Funktion getCombination erstellt alle möglich Varianten(Kombination) zwischen gegeben Zahlen. 
- Die Funktion praedikat funktioniert wie ein filter für alle Varianten, die die Funktion getCombination erstellt. Und lieft passenden Kombination von Eingabe Zahl 
- Die Funktion convert konvertiert 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 die Summe groß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 sammeln wir die Summe für alle werte von aktuelle Reihe
                    sum += combination[i][j] * 3 ** j;
                }
		   // Wenn Summe gleich Eingabe Zahl, liefert 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>

Die Funktion k liefert - mithilfe der Funktion praedikat und convert -wort von Eingabe Gödelnummer.

<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)==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 die funktionen h und k

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