rausfinden ob gerade oder ungerade Zahl



  • ~fricky schrieb:

    eine fehlermeldung ist doch auch eine lösung (wahrscheinlich die einzig richtige bei sowas wie +--++--+--). aber du könntest es ja benutzerfreundlich gestalten, indem der cursor auf die stelle springt, mit der dein parser nicht mehr klar kommt und den user zum ausbessern auffordern. dann muss er nicht den ganzen ausdruck nochmal reinhacken.
    🙂

    klingt gut nur glaube ich schaffe ich das von meinem Wissensstand nicht XD

    naja hier ist meine Lösung wie es jetzt inplementiert ist und sogar "funktioniert"...

    char * my_zeichenstrcpy2(char* dest, const char * source)
    {
    	int j = 0;
    	int minus = 0;
    	int i=0;
    	int einmalnur = 0;
    	int zeichen = -1;
    	int operatorenbegin = -1;
    	int nureinmal = 0;
    	int k;
    
    	for (int i=0; source[i] != '\0'; i++)
    	{
    		if (isdigit(source[i]))//source[i] != '+' || source[i] != '-')
    		{
    			dest[j] = source[i];
    			j++;
    		}
    		else if (source[i] == '+' || source[i] == '-')
    		{
    			for(int k = i; ispunct(source[k]) ; k++)
    			{
    				if (source[k] == '-')
    				{
    					minus = minus + 1;
    					zeichen = zeichen + 1;
    				}
    				i = k;
    			}
    			double unodergerade = minus % 2;
    
    			if ( unodergerade != 0 )
    				dest[j++] = '-';
    			else
    				dest[j++] = '+';
    		}
    	}
    	dest [j] = '\0';
    	return dest;
    }
    

    gruß

    Edit:

    zeichen = zeichen + 1; kann natürlich weg
    und das kommentar in Zeile 14 ebenso.



  • Virokams schrieb:

    Dann werden die Leute mein Fertigen Rechner nicht nutzen wollen 😃 😃

    Leute, die "+-+-" eingeben gehören geschlagen.

    Taschenrechner, die sowas zulassen, würde ich nie verwenden.

    Wieso gibst du nicht eine Fehlermeldung aus und zeigst an, an welcher Stelle, der Parser nicht klarkommt (wie fricky es meinte)? Ein Compiler versucht z.B. auch nicht den Blödsinn der Menschen zu interpretieren, wenn er nicht klar kommt. Fehler sind nun mal Fehler.

    Was deinem Code anbetrifft:

    double unodergerade = minus % 2;
    

    da reicht auch ein int . Du mietest dir auch nicht eine Lagerhalle, wenn du eine Nadel aufbewahren willst, oder?



  • recht hast du...



  • supertux schrieb:

    Taschenrechner, die sowas zulassen, würde ich nie verwenden.

    naja, aber viele taschenrechner lassen sowas zu. wahrscheinlich ignoriert der eine überflüssige operatoren, während ein anderer die plusse und minusse gegeneinander aufrechnet. der windoofs-taschenrechner macht z.b. aus:
    -> 5////6 = 0.83333, also 5/6
    -> 5 /-+ 6 = 11*
    scheinbar nimmt er nur die letzte operation, alles andere wird missachtet.
    🙂



  • 5/*/*//6 und 5+-+-6 sind ein himmelweiter Unterschied, / und * sind wohl keine gültigen prä-unäre Operatoren.



  • Badestrand schrieb:

    5/*/*//6 und 5+-+-6 sind ein himmelweiter Unterschied,

    der einzige unterschied ist die ursache der zuckungen im finger des taschenrechner-benutzers.

    Badestrand schrieb:

    / und * sind wohl keine gültigen prä-unäre Operatoren.

    um diese inkrement/dekrement anhängsel (a++, --a, usw.) geht's doch nicht.
    🙂



  • ~fricky schrieb:

    der windoofs-taschenrechner macht z.b. aus:
    -> 5////6 = 0.83333, also 5/6

    so ein Müll Taschenrecher. Sage ich doch, ich würde niemals so einen Taschenrechner benutzen, der sowas zulässt. gnome-calculator streikt da. Ich muss aber zugeben, 3+++-+++3 hat er akzeptiert und eine 0 daraus gemacht! Traurige Welt, ich weiß, warum ich nur den gnu-bc Calculator nehme.



  • supertux schrieb:

    Leute, die "+-+-" eingeben gehören geschlagen.

    Taschenrechner, die sowas zulassen, würde ich nie verwenden.

    Na zum Glück ist C kein Taschenrechner :p



  • Wenn ich je wieder in die Verlegenheit käme, nochmal einen Taschenrechner basteln zu müssen, würde ich den wieder auf UPN/Stack- Basis erstellen. Die Eingaberegeln sind durch das Postfix- Format so eng gesteckt, daß der ganze komplizierte Parser- Kram wegfällt, Vorzeichenwechsel und Substraktion sind zudem getrennte Operationen und Fehlerrückgaben sind ganz leicht aussagekräftig gestaltbar.
    Bestes Beispiel sind die HP- Taschenrechner, deren Nutzer mehrheitlich als ersten Bedienschritt die Werkseinstellung CAS (Computer Algebra System) auf UPN umstellen. 😃



  • pointercrash() schrieb:

    Bestes Beispiel sind die HP- Taschenrechner, deren Nutzer mehrheitlich als ersten Bedienschritt die Werkseinstellung CAS (Computer Algebra System) auf UPN umstellen.

    klar, man will ja l33t sein. dazu gehört auch 'ne armbanduhr, die die zeit binär anzeigt, sowie ein notebook mit beschleunigungssensor und programmiert wird sowieso nur in scheme oder lisp.
    🙂



  • ~fricky schrieb:

    klar, man will ja l33t sein. dazu gehört auch 'ne armbanduhr, die die zeit binär anzeigt, sowie ein notebook mit beschleunigungssensor und programmiert wird sowieso nur in scheme oder lisp. 🙂

    Nein, sondern weil man via UPN auch große Terme schneller (weniger Tastendrücke) und sicherer eingeben kann, also ganz klare Bedienvorteile hat.
    Das kann man von der Uhr mit Binäranzeige nicht behaupten und den Schlepptop mit Maple drauf kann man sich so auch meist sparen. Daß Andere mit der eingebauten Programmiersprache klarkommen, zeigt der große Freeware- Fundus für die Rechnerlein.
    Das pauschal lächerlich machen zu wollen, zeugt eher davon, daß Du Dich anscheinend nicht (intensiv genug) mit dem Konzept vertraut gemacht hast.



  • ~fricky schrieb:

    Badestrand schrieb:

    / und * sind wohl keine gültigen prä-unäre Operatoren.

    um diese inkrement/dekrement anhängsel (a++, --a, usw.) geht's doch nicht.
    🙂

    Ne, aber um "-a" und um "+a". Und "3--3" (also "3-(-3)") ist ein gültiger Ausdruck, "3*/3" hingegen nicht. Aber egal, du weißt worauf ich hinauswill und mir wird das langsam zu doof.



  • pointercrash() schrieb:

    Das pauschal lächerlich machen zu wollen, zeugt eher davon, daß Du Dich anscheinend nicht (intensiv genug) mit dem Konzept vertraut gemacht hast.

    ich bin ein grosser freund von einfachen und nützlichen dingen, soll heissen: maschinen sind dazu da, dem menschen das leben erleichtern. upn ist 'ne eingabemethode, die mehr der maschine entgegenkommt, nicht der schreibweise, wie menschen berechnungen auf papier kritzeln. sich mit zwei verschiedenen notationen, für ein und dieselbe sache, herumzuschlagen, ist daher nur was für echte freaks, aber nix für normale anwender.
    🙂



  • Badestrand schrieb:

    Und "3--3" (also "3-(-3)") ist ein gültiger Ausdruck, "3*/3" hingegen nicht.

    aber 3-+-3 auch nicht. ausserdem ist ein vorzeichen kein operator, das macht ja nichts mit der zahl, sonder gehört zu ihr.
    🙂



  • ~fricky schrieb:

    aber 3-+-3 auch nicht. ausserdem ist ein vorzeichen kein operator, das macht ja nichts mit der zahl, sonder gehört zu ihr.
    🙂

    nicht? kann man vorzeichenoperatiren nicht überladen? das wäre aber doof. dann könnte ich meine langzaglklasse ja nicht mehr wie ints aussehen lassen.



  • volkard schrieb:

    ~fricky schrieb:

    aber 3-+-3 auch nicht. ausserdem ist ein vorzeichen kein operator, das macht ja nichts mit der zahl, sonder gehört zu ihr.
    🙂

    nicht? kann man vorzeichenoperatiren nicht überladen?

    nö, kennste nicht noch aus der schule die reellen zahlen? null in der mitte, links die negativen und rechts die positiven.
    🙂



  • ~fricky schrieb:

    volkard schrieb:

    ~fricky schrieb:

    aber 3-+-3 auch nicht. ausserdem ist ein vorzeichen kein operator, das macht ja nichts mit der zahl, sonder gehört zu ihr.
    🙂

    nicht? kann man vorzeichenoperatiren nicht überladen?

    nö, kennste nicht noch aus der schule die reellen zahlen? null in der mitte, links die negativen und rechts die positiven.
    🙂

    ah, verstehe.

    (-5) ist -5 //vorzeichen
    aber
    (- 5) ist operator-(5) //unärer minus-operator



  • ~fricky schrieb:

    ... upn ist 'ne eingabemethode, die mehr der maschine entgegenkommt, nicht der schreibweise, wie menschen berechnungen auf papier kritzeln.

    Du hast Dich also gar nicht damit auseinandergesetzt. Mit klammerfreien Darstellungen hat sich Gottlob Frege schon 1879 befaßt, es ist eher eine Sache der Schwerfälligkeit des Konventionalismus als der pragmatischen Betrachtung und hat mit Maschinenfreundlichkeit erstmal gar nichts zu tun. Warum brauchen wir einen Klammern- und Vorzeichenmüllhaufen, den wir genausowenig auf einen Blick auflösen können, wie die Maschine?

    ~fricky schrieb:

    sich mit zwei verschiedenen notationen, für ein und dieselbe sache, herumzuschlagen, ist daher nur was für echte freaks, aber nix für normale anwender. 🙂

    Also ist jemand, der Steno kann, ein Freak? Die Darstellung ist kompakter, wenn man sie zu lesen gelernt hat, gibt es einen flüssigeren Arbeitslauf und schnelleren Überblick.

    UPN ist so einfach wie nützlich.

    Die eigentlichen Freaks sind eher Leute, die einen sinnvollen Kalkül für 3+-++-4 suchen oder C-Wettbewerbe für das unübersichtlichste Programm veranstalten.



  • volkard schrieb:

    ah, verstehe.
    (-5) ist -5 //vorzeichen
    aber
    (- 5) ist operator-(5) //unärer minus-operator

    so ungefähr. bei einer taschenrechnereingabe kannst du z.b. machen: 3 + -5, dabei ist nur ein operator im spiel, das +. in programmiersprachen geht auch a = -b; das minus ist dann ein vorzeichen-umkehroperator.

    pointercrash() schrieb:

    Mit klammerfreien Darstellungen hat sich Gottlob Frege schon 1879 befaßt, es ist eher eine Sache der Schwerfälligkeit des Konventionalismus als der pragmatischen Betrachtung und hat mit Maschinenfreundlichkeit erstmal gar nichts zu tun.

    das wenigste, was mathematiker so austüfteln, hat in der realität einen hohen gebrauchswert. ausserdem schmeckt diese stackbasierte upn einer maschine ganz vorzüglich. ich glaube irgendwo mal was darüber gelesen zu haben.

    pointercrash() schrieb:

    Die Darstellung ist kompakter, wenn man sie zu lesen gelernt hat, gibt es einen flüssigeren Arbeitslauf und schnelleren Überblick.

    stell dir vor, es gäbe nur upn. was wäre dann 123*? 12*3 oder 1*23?. schon bräuchten wir ein zusätzliches trennzeichen und die kurze schreibweise wäre fast dahin.
    🙂



  • ~fricky schrieb:

    das wenigste, was mathematiker so austüfteln, hat in der realität einen hohen gebrauchswert. ausserdem schmeckt diese stackbasierte upn einer maschine ganz vorzüglich. ich glaube irgendwo mal was darüber gelesen zu haben.

    Achnee, kein Gebrauchswert? Deswegen folgen also die meisten shells den Prinzipien der polnischen Notation. Die Koinzidenz, daß Mensch und Maschine die freundlichen Häppchen gleichermaßen gut lesen können, bedeutet ja gerade, daß ein Mathematiker was Sinnvolles erdacht hat, das Datum der Erfindung ist der Beleg, daß der Mensch als Leser Ziel der Notation war.

    ~fricky schrieb:

    stell dir vor, es gäbe nur upn. was wäre dann 123*? 12*3 oder 1*23?...

    Zunächst einmal ein Stack- Error und zweitens kein UPN.
    Faktisch braucht es natürlich Trenner und erst mit komplexen Termen spielt UPN seine Stärken aus. Wer als Mensch lieber auf Krücken geht, als mal einen Rollstuhl auszuprobieren, weil ihm das zu maschinenfreundlich ist, hat noch lange keinen Grund, sich darüber lustig zu machen, daß andere Vorteile sehen und nutzen.


Anmelden zum Antworten