• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] unbestimmt viele for Schleifen ?

Isabell

New member
Also ich habe ein Programm das einen Hash ( von dem ich weiß er hat 7 Buchstaben ) in Klartext
übersetzt und dazu habe ich eben 7 for Schleifen gebraucht. Die Aufgabenstellung ist nun
im Prinzip die gleiche, ich weiß nur nicht wie lange das Wort ist.

Hat jemand eine Idee wie ich das mit den unbestimmt vielen for Schleifen regeln
kann ?
 
Ja ist mir klar aber die for schleifen sind ja verschachtelt :

Code:
for ....
  for .....
    for ...
    }
  }
}

Wie kann ich das mit einer while bewerkstelligen :)
 
Hallo Isabell,

while loops kannst du genau so verschachteln wie for loops.

Allerdings versaust du dir mit While loops den code etwas weil, Du außerhalb der While loop eine 2te Variable definieren musst

Vergleich for, while.

Code:
var N = 10;

for(var i=0;i<=N;i++){}

//die while:
var i = 0; // Zähl  Variable außerhalb der While. 
while(i<=N){
i++;
}

Sowas zu verschachteln ist eher unschön.
Ein häufiger Fehler, der oft gemacht wird ist, i++ steht an der falschen stelle.

Code:
var N = 10;
var i = 0;
while(i<=N){
i++;
console.log(i);
}

ist was anderes als

Code:
var N = 10;
var i = 0;
while(i<=N){
console.log(i);
i++;
}
und ++i ist was anderes als i++

In deinem Fall ist es klever die while gegen 0 laufen zu klassen.
Code:
var N = 10;
while(N--){
}

Also:
Code:
var myString  = "Isabell's Schleifen Tutorial."
var Len = myString.length;
while(Len--){
console.log(myString.charAt(Len));
}
Eine kürzer Schreibweise gibt es nicht. Der nachteil ist, der String wird rückwärts durchlaufen.

Ps.: man kann auch eine for schleife zu while machen.
for(;xyz != null;i++,j--;){}
ist dasselbe wie while(xyz!=null)

PPS.: es gibt auch noch die do while loop.
 
Zuletzt bearbeitet:
aber selbst wenn sie eine while mit 10 gegen 0 laufen lässt muss sie weiter verschachteln, da sie ja 1-10 stellen haben kann und irgendeine schleife muss ja an jeder stelle das array durchlaufen
 
Ich wollte ja nur verdeutlichen was der Unterschied zwischen einer for und while ist.

Ja stimmt "ich weiß nur nicht wie lange das Wort ist."
Hatte ich ganz vergessen, kommt davon wenn man neben bei noch ein Betriebsanleitung liest. Ich hatte vor ner weil mal ein Morsecode Generator programmiert, die Aufgabestellung ist ungefähr die gleiche. allerdings hatte ich das in c geschrieben. Ich schlampe kann den code nicht mehr finden :mad: Jedenfalls hatte ich drei schleifen, Die erste ging durch den string, die 2te durch ein struct mit dem morse zeichnen. Eine schleife hat für die Pausen gesorgt.
Das hätte sich ganz leicht auf Isablle's Problem umbauen lassen können. Am ende brauch sie nur 2 Schleifen eine für den String, eine innere die für jeden i-ten Buchstaben die (was weiß ich) Datenbank, Objekt, durchläuft und sich da für jeden i-ten Buchstaben den richtigen rausspikt.

Leider hab ich dafür jetzt keinen nerv Mehr das Umzusetzen.

Außerdem habe ich jetzt ein Rießen hunger.. du weißt.;) Ab morgen bin ich dann bis zum WE nicht mehr on weil, naja ich steh Morgen (mal wider vor einer großen Aufgabe auf arbeit ):grin:

@ TecEye ich lege mein Hand ins Feuer das du das managst.
 
Zuletzt bearbeitet:
Danke für die vielen Antworten.

Dennoch ist mir unklar wie ich daran : 2c5d0225068b08105c92cb85fc9e7d1648e333f1
erkennen soll wie lange das Wort ist. Vielleicht ist es ja ganz einfach, aber ich kenn
mich mit Hash Zeugs leider gar nicht aus, ich weiß nur wie man verschlüsselt und ich
dachte immer das reicht :D

Naja wenn jemand eine Idee hat einfach drunter schreiben.
 
welche verschlüsselung wird denn da angewendet, das wäre ja schonmal hilfreich, ich mein man muss dann trotzdem in reinform den code generieren, jeden versuch verschlüsseln und gucken ob generiert und gesucht gleich sind

- - - Aktualisiert - - -

@ TecEye ich lege mein Hand ins Feuer das du das managst.
Du meinst weil ich sonst keine Hobbys hab ja :D ich werde es nach bestem wissen und gewissen begleiten und Hilfestellungen geben, aber im Endeffekt muss Sie es selber lösen ;)
 
Es ist SHA1, ich glaube das es so heißt :D

Ja ich hab ja alles soweit nur weiß ich nicht wie ich das ansetzen soll wenn ich eine unbekannte länge des Strings habe.
Das ist der Code von meinem Programm mit den 7 Zeichen:

Code:
var crypto = require('crypto');
var pw = "81975f9a1f0185652f692f1b304f1544c2e2407d";
var found = false;

//array comment some letters to devalue the time it will take
var letters = ["r", "i", "c", "h", "t", "i", "g", "a"/*, "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"*/];

//generate words
for(i = 0; i < letters.length && found === false; i++){
  for(j = 0; j < letters.length && found === false; j++){
    for(k = 0; k < letters.length && found === false; k++){
      for(l = 0; l < letters.length && found === false; l++){
        for(m = 0; m < letters.length && found === false; m++){
          for(n = 0; n < letters.length && found === false; n++){
            for(o = 0; o < letters.length && found === false; o++){
              var shasum = crypto.createHash('sha1');
              var brut = letters[i]+letters[j]+letters[k]+letters[l]+letters[m]+letters[n]+letters[o];
              console.log(brut);
              shasum.update(brut,"utf8");
              var hash = shasum.digest('hex');
              console.log(hash);
              //if word is found exit the loops and show it
              if(hash == pw){
                console.log(brut);
                found = true;
              }
            }
          }
        }
      }
    }
  }
}

console.log("fertig");

und der funktioniert :)
 
das ist super aber wo sind die Großbuchstaben, Zahlen und die Sonderzeichen?

Gut dann mal zu Grundgedanken, du lässt eine schleife laufen mit einem zeichen, solltest du da kein ergebnis erzielen musst du ein zeichen anhängen und von vorne beginnen
 
Die Aufgabenstellung hat beinhaltet das das Wort nur aus 7 Kleinbuchstaben besteht.

Ja den Ansatz hab ich natürlich auch , nur hab ich keine Ahnung wie man das mit der while/ for Verschachtelung machen kann. Es soll mir
keiner meinen Code vorgeben aber ein kleines allgemeines Beispiel wäre sehr hilfreich.
 
TecEye schrieb:
Du meinst weil ich sonst keine Hobbys hab ja
Das eine dauert doch nur 3bis4h... fürs http://forum.jswelt.de ist natürlich immer Zeit.:p:cool:;)

Zurück zu Isabell.

Isabell schrieb:
unbekannte länge des Strings habe.
Ich sehe in deinem Code aber keinen String sondern nur ein Array. Ich denke aber du meintest das Array.

Code:
var crypto = require('crypto');
var pw = "81975f9a1f0185652f692f1b304f1544c2e2407d";


//array comment some letters to devalue the time it will take
var letters = ["r", "i", "c", "h", "t", "i", "g", "a" /*, "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"*/ ];


var i = 0,
    n = 0;
var hash = "";
do {
    var brut = "";
    if (n < letters.length) {
        if (i++ < letters.length) {
            brut += letters.slice(n, i).join("");
        } else {
            i = 0;
            n++;
        }
    } else {
        console.log("Something is wrong.");
        break;
    }
    console.log(brut);
    var shasum = crypto.createHash('sha1');
    shasum.update(brut, "utf8");
    hash = shasum.digest('hex');
    console.log(hash);
} while (hash != pw)
console.log("fertig");
Wenn das nicht das ist was Du suchst dann weiß ich auch nicht.

Mfg,
xorg1990
 
Zuletzt bearbeitet:
Kannst du bitte den Teil, warum du was machst erklären ?

Code:
if (n < letters.length) {
        if (i++ < letters.length) {
            brut += letters.slice(n, i).join("");
        } else {
            i = 0;
            n++;
        }
    }
 
mikdoe schrieb:
er war noch nicht online.
Ja sry habe zur Zeit ganz schön viel Arbeit. Wie ich erwähnte... Betriebsanleitung lesen. Eine meiner Maschinen will nicht so wie ich.... Und der Auftraggeber schart mit den Füssen. Egal zurück zum eigentlichen Thema.



Code:
    if (n < letters.length) {
        if (i++ < letters.length) {
            brut += letters.slice(n, i).join("");
        } else {
            i = 0;
            n++;
        }
    } else {
        console.log("Something is wrong.");
        break;
    }
Ich gehe mal schwer davon aus, dass ich Dir die If's nicht erklären muss. Bis auf if (i++ < letters.length)
Bei jeden while Durchlauf wird i um eins erhöht n ist 0 und bleibt auch 0 wenn alles gut geht. Die slice Methode ist ihr erklärt:
JavaScript Array slice() Method. die join Methode wandelt ein Array in ein String um die "" entfernen das Komma/ die Kommas aus dem Array.
Wäre das nicht der Fall hättest du eine Endlosschleife, dafür ist das n zuständig. Wenn n größer ist als das Array wird, wird via break die schleife abgewürgt.
Oder du vertippst dich z.B richtig/tichtig.

Soviel dazu.
Ich hoffe du hast dich damit nicht all zu lang auseinander gesetzt.:sorrow:
Wen ja wie kann ich das wider gut machen. vielleicht mit einem Dinner auf der IL-92
oder der PartyTram
Zu billig?? Dann 3 Sterne und mehr im Panorama tower
Rechnung geht auf xorg. :cool:

Was ist den das Ziel der Veranstaltung wenn man fragen darf?? Weil ein sha1 zu reversen geht nicht.
 
Ne Ifs sind natürlich klar, mir gings einfach nur um die Logik dahinter. Ja ich ziemlich viel Zeit
damit verschwendet haha :D Naja ist echt kein Thema ist ja nicht dein Job mir zu helfen.

Das was ne blöde Aufgabe auf so einem Aufgaben Blatt :/ Also völlig sinnlos aber gut
ich musste es halt machen.

Danke nochmal !
 
Isabell schrieb:
Naja ist echt kein Thema ist ja nicht dein Job mir zu helfen.
Nee mein Job nicht, aber helfen tue ich gerne und eigentlich erkläre ich das auch was ich da einstanze. mik kann das auch bezeugen.
Ich gebe ja auch Unterricht im bereich Amateurfunk außerdem darf ich Lehrlinge in meinem Beruf ausbilden.. dafür muss man extra Lehrgänge besuchen.
Mein Ellis sage immer ich hätte Kindergärtner werden sollen oder Grundschullehrer. :d

Isabell schrieb:
Das was ne blöde Aufgabe auf so einem Aufgaben Blatt :/ Also völlig sinnlos aber gut
Ha, zum glück habe ich mir Programmieren selber beigebracht.:p


TecEye schrieb:
Scheinst n Leipziger Jung zu sein aber hey danke für die Ideen, fürs nächste Date weiß ich wo es hingeht Das Flugzeugding ist hammer
Jup bin Vollblut Leipziger.
Leipziger.jpg

Leipzig kenne ich von oben genau zu gut wie von unten. Das "Flugzeugding" da war unser Firma mit beteiligt.. ich mit dabei. https://www.youtube.com/watch?v=EjRoqTeyKZY

Mal was von Unten:
Der wohl geheimste und zugleich geilste ort in LE ist dieser:
https://www.youtube.com/watch?v=DubVRv9U560.(schreckliche Musik) Da ist die Zeit stehen geblieben.
Und noch krasser und noch tiefer so ca 3bis4 Stockwerke:https://www.youtube.com/watch?v=dDi4i1udLu4
Schaut euch mal bei 1:30 das Treppenhaus an... Das ist unter Tage wie in einer anderen Welt. (wie der Hive bei Resident Evil).

auch cool https://www.youtube.com/watch?v=y7fu_utrQ9I
Das was man im letzten video sieht, gibt es leider nicht mehr, weil nach 1995 der Hbf umgebaut wurde. Aber drausen unterm Gleisbett da kommt man noch rein natürlich illegal.

Solche Orte erwartet man in Berlin aber nicht doch in LE.

Isabell schrieb:
Nicht zu danken

Ihr Reiseleiter für Abwegige Attraktionen,
xorg1990
 
Zuletzt bearbeitet:
Zurück
Oben