• Herzlich Willkommen!

    Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.

    Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.

Coding-Thread

Okay dann werde ich wohl mal mit dem Tut weitermachen, obwohl sich Tutorial und Compiler manchmal nicht gleichen. zB.:

tut: " #include <iostream.h> "
Dev-C++: " #include <iostream> "

tut: std::cout...
Dev-C++: using namespace std; und dann nur cout...

deshalb dachte ich mir das es da ungereimtheiten gibt...aber ich werd schon zurechtkommen :hammer:
 
So, wtf-Moment hinter mir gehabt.

Excel-Formel eines Fragenden (ja, die muss in voller Länge hier rein):

=WENN(H15=1;H16;WENN(H15=2;H17;WENN(H15=3;H18;WENN(H15=4;H19;WENN(H15=5;H20;WENN(H15=6;H21;WENN(H15=7;H22;WENN(H15=8;H23;))))))))
&WENN(H15=9;H24;WENN(H15=10;H25;WENN(H15=11;H26;WENN(H15=12;H27;WENN(H15=13;H28;WENN(H15=14;H29;WENN(H15=15;H30;WENN(H15=16;H31;))))))))
&WENN(H15=17;H32;WENN(H15=18;H33;WENN(H15=19;H34;WENN(H15=20;H35;WENN(H15=21;H36;WENN(H15=22;H37;WENN(H15=23;H38;WENN(H15=24;H39;))))))))
&WENN(H15=25;H40;WENN(H15=26;H41;WENN(H15=27;H42;WENN(H15=28;H43;WENN(H15=29;H44;WENN(H15=30;H45;WENN(H15=31;H46;WENN(H15=26;H41;))))))))
&WENN(H15=27;H42;WENN(H15=28;H43;WENN(H15=29;H44;WENN(H15=30;H45;WENN(H15=31;H46;WENN(H15=32;H47;WENN(H15=33;H48;WENN(H15=34;H49;))))))))
&WENN(H15=35;H50;WENN(H15=36;H51;WENN(H15=37;H52)))

Die funktioniert nicht - allerdings nur, weil vor den letzten drei Klammern ein ";" fehlt. Naja, kurzer Blick auf die Formel, meine Formel, die das gleiche bewirkt:

=BEREICH.VERSCHIEBEN(H15;H15;0)

nach einem Einwand wegen eines Spezialfalls noch verbessert:

=WENN(H15=0;H16;BEREICH.VERSCHIEBEN(H15;H15;0))

Ergebnis: Er nutzt jetzt seine alte Formel mit dem korrigierten Semikolon.
 
Hmpf, bräuchte mal dringend Hilfe bei Perl:

Ich will die Zeilen einer Textdatei der Reihe nach nach einem Muster durchsuchen (und mir 2 Zahlen rauspicken). Falls es in einer Zeile gefunden wird soll die Differenz der Zahlen zu nem counter dazuaddiert werden.

Code:
while (my $line = <FH>)
	{
	
	$line =~ m/HELIX.*\w{3}\s{1}\w{1}\s+(\d+)\s+\w{3}\s+\w{1}\s+(\d+)\s+/; #sucht die init und final AS einer Helix
	
	if ($1 && $2) #Falls Werte gefunden, addiere die Differenz zu $helix
		{
		print "$1         $2\n"; #HIER FEHLER		
		$helix += ($2 - $1);				
		}

		
	}

Irgendwie werden aber wohl $1 und $2 (die beiden Zahlen) nicht zurückgesetzt nach einem Schleifendurchlauf, weil in der "print"-Zeile zig mal nacheinander die selben Werte ausgeprinted werden, obwohl diese eigentlich nur einmal addiert werden dürfen. Kann man diese $1 /$2 irgendwie manuell am Ende der Schleife zurücksetzen? Oder wo liegt der Fehler?

Wäre euch wirklich sehr dankbar :(


edit: Mit Pattern-Matching in if abfrage packen geht's
 
Zuletzt bearbeitet:
Ah, sehr schön, danke, kann ich evtl. für die Arbeit gebrauchen ^^
Auch wenn wir dort noch zusätzliche Umständlichkeiten haben, die es noch erschweren ;)
 
*thread ausgrab*
*tief grab*

So, da ich irgendwie relativ ratlos bin wieso das Programm einfach so terminiert poste ichs einfach mal:

Das ganze soll die Ackermannfunktion in MIPS asm darstellen, kompilieren tuts, abfragen ab anfang funktionieren wunderbar (mein prog wird von einem vorgegebenen anderen aufgerufen mittels entry label in dem eben writedec usw. definiert sind)

[ASM (NASM)] #include "asm_regnames.h" .data input_n: .asciiz "Enter a decimal - Pastebin.com

Consoleoutput von VMIPS:
Code:
*************RESET*************

Enter a decimal for n
1
Enter a decimal for m
1
* BREAK instruction reached -- HALTING *

*************HALT*************
 
Blöde Frage: Wohin genau springt "jr ra"? Es soll wohl den jeweiligen Aufruf der Ackermann-Funktion beenden, also auf den Befehl springen, der die Funktion zuletzt aufgerufen hat - was durchaus ein paar Sprünge zurückliegen kann.

Was mir als Debugmöglichkeit spontan einfällt: Lass dir unter "end:" die Variablen ausgeben, das dürfte den Programmverlauf gut verdeutlichen.
 
Blöde Frage: Wohin genau springt "jr ra"? Es soll wohl den jeweiligen Aufruf der Ackermann-Funktion beenden, also auf den Befehl springen, der die Funktion zuletzt aufgerufen hat - was durchaus ein paar Sprünge zurückliegen kann.

Richtig erkannt, das ist ganz normale Call-Konvention. Die aufgerufene Funktion merkt sich die Rücksprungadresse (schreibt sie auf den Stack) und stellt sie später wieder her. Das wird eigentlich immer so gemacht.


Ich habe mir das jetzt nicht genauer angeschaut, aber müsstest du nicht zumindest die Parameter irgendwo auf den Stack legen (bzw. die Register am Anfang des Calls sichern und später wiederherstellen), da die Register ja in jedem weiteren Aufruf überschrieben werden und somit danach die Werte nicht mehr gültig sind? Kommt mir irgendwie komisch vor.
 
Zuletzt bearbeitet:
Doch, das passiert eigentlich jeweils bei der Ackermannfkt. - habe nun auch online geschaut, ich habe die Vermutung dass ich die Rücksprungmarke irgendwie falsch ablege und daher nicht sauber terminiere.

Ich melde mich gegen später wieder wenn ich's nochmal anpacke.

Habe mich im Endeffekt dann hier orientiert : assembly - Mips Ackermann function in floating point - Stack Overflow

Sein programm läuft ohne Probleme in Mars, daher habe ich mich daran orientiert.

Meine Vermutung ist wie gesagt, dass ich dadurch, dass ich quasi mein programm vom bereitgestellten Basisprog aufrufen lasse eine Rücksprungmarke zu wenig sichere und daher falsch zurück gehe. Der Sache muss ich mal nachgehen und einfach mal Debugmsgs einfüge und die retjumps kontrolliere.
 
Zurück
Oben