1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

verstehe den quelltext nicht ganz und wie kann ich hochrechnung mit einbauen?

  • traceurmicha
  • 6. März 2009 um 17:15
  • Unerledigt
  • traceurmicha
    2
    traceurmicha
    Mitglied
    Punkte
    20
    Beiträge
    3
    • 6. März 2009 um 17:15
    • #1

    Hallo leute,
    erstmal ein kräftiges Hallo von mir :wave:, und Lob:schönes Forum:D

    Nun mal zu meiner Frage, eigentlich sind es 2, ich hoffe das ist kein Problem.

    Also ich sollte nen Taschenrechner programmieren, als Bewerbungsaufgabe, und nun hab ich mit nem Infostudenten den Text geschrieben nur hat er mir nicht erklärt was er gemacht hat und nun versteh ich den Text nicht und er ist jetz n jahr in canada und ich erreiche ihn nicht. Weiterhin müsste ich noch einbauen dass das Programm zu allererst hochrechnung macht (also z.B. 4^3).
    Könnt ihr mir helfen?

    C#
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    
    namespace calculator
    {
        class Program
        {
            private static int count = 0;
    
    
            static void Main(string[] args)
            {
                string input = null;
                List<double> inputList = new List<double>();
                double tempNum = 0;
    
    
                while (true)
                {
                    count = 0;
                    inputList.Clear();
                    input = System.Console.ReadLine();
    
    
                    while (count < input.Length)
                    {
                        switch (input[count])
                        {
                            case '+':
                                break;
                            case '-':
                                count++;
                                inputList.Add(-1 * readNextNumber(input));
                                break;
                            case '*':
                                count++;                        
                                tempNum = inputList[inputList.Count - 1] * readNextNumber(input);
                                inputList.RemoveAt(inputList.Count - 1);
                                inputList.Add(tempNum);
                                break;
                            case '/':
                                count++;
                                tempNum = inputList[inputList.Count - 1] / readNextNumber(input);
                                inputList.RemoveAt(inputList.Count - 1);
                                inputList.Add(tempNum);
                                break;
                            default:
                                inputList.Add(readNextNumber(input));
                                break;
                        }
                        count++;
                    }
                    count = 0;
    
    
                    double solution = 0;
                    while (count < inputList.Count)
                    {
                        solution += inputList[count];
                        count++;
                    }
    
    
                    Console.WriteLine(solution);
                }
            }
    
    
            private static double readNextNumber(string input)
            {
                char temp = input[count];
                bool isNegative = false;
    
    
                while (temp == '-')
                {
                    isNegative = !isNegative;
                    count++;
                    if (count < input.Length)
                        temp = input[count];
                    else
                        break;
                }
    
    
                int j = count;
                while (temp != '*' && temp != '/' && temp != '+' && temp != '-')
                {
                    j++;
                    if (j < input.Length)
                        temp = input[j];
                    else 
                        break;
                }
    
    
                char[] num = new char[j - count];
                input.CopyTo(count, num, 0, j - count);
    
    
                count = j - 1;
    
                if (isNegative)
                    return -arr2double(num);
                else
                    return arr2double(num);
            }
    
    
            private static double arr2double (char[] arr)
            {
                int i = 0;
                string stringArr = "";
                while (i < arr.Length)
                {
                    stringArr += arr[i];
                    i++;
                }
    
    
                return Convert.ToDouble(stringArr);
            }
        }
    }
    Alles anzeigen
  • serprime
    8
    serprime
    Mitglied
    Reaktionen
    14
    Punkte
    629
    Beiträge
    122
    • 6. März 2009 um 17:36
    • #2
    Zitat von traceurmicha


    Also ich sollte nen Taschenrechner programmieren, als Bewerbungsaufgabe, und nun hab ich mit nem Infostudenten den Text geschrieben nur hat er mir nicht erklärt was er gemacht hat und nun versteh ich den Text nicht...

    Ist der Sinn einer Aufgabe nicht der, sie selbst zu lösen?
    Dieser Taschenrechner ist vom Programm her schon etwas komplizierter aufgebaut, aber naja jedem sein Stil. Es gibt hier im Forum auch Threads zu einfacheren Taschenrechnern nur halt in Java.

    Zitat von traceurmicha

    Weiterhin müsste ich noch einbauen dass das Programm zu allererst hochrechnung macht (also z.B. 4^3).
    Könnt ihr mir helfen?

    Schonmal probiert, das Programm durchzugehen?
    Für die '^' Eingabe solltest du, im 'switch (input[count]) {}' - Block einen weiteren case hinzufügen. Dieser sollte dann entsprechend a^b in
    for(1:b) {a *=a} umsetzen, eventuell den Fall b==0 beachten.


  • Trux
    12
    Trux
    Mitglied
    Reaktionen
    26
    Punkte
    1.396
    Beiträge
    274
    • 6. März 2009 um 17:38
    • #3

    Rein aus Interesse: Sollte das nur irgendein Rechner werden, od gibts da eine Aufgabenstellung, die gewisse Vorgaben macht?

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 6. März 2009 um 17:45
    • #4
    Zitat von serprime

    a^b in for(1:b) {a *=a} umsetzen


    Das schaut für mich verdächtig nach einem Programm für [tex='a^{2^b}'][/tex]

    aus, nicht für [tex='a^b'][/tex]

    . Aber ich irre mich manchmal.

    *plantsch*

  • traceurmicha
    2
    traceurmicha
    Mitglied
    Punkte
    20
    Beiträge
    3
    • 6. März 2009 um 17:46
    • #5
    Zitat von Trux

    Rein aus Interesse: Sollte das nur irgendein Rechner werden, od gibts da eine Aufgabenstellung, die gewisse Vorgaben macht?


    Er sollte in C# sein, die grundrechenarten beherschen, punkt soll vor strichrechnung gerechnet werden und er soll zahlen hoch nemen (ich glaub potenzieren heißt das!?)

  • davide
    23
    davide
    Mitglied
    Reaktionen
    110
    Punkte
    5.660
    Beiträge
    1.048
    • 6. März 2009 um 17:50
    • #6

    welche teile verstehst du denn nicht?
    wenn die antwort "alle" ist, empfehle ich ein buch, oder nachhilfe :winking_face:

    Sich berühren ist wie Afrika, fremd und kalt.

    http://www.penisland.net

    http://runtastic.com/

  • traceurmicha
    2
    traceurmicha
    Mitglied
    Punkte
    20
    Beiträge
    3
    • 6. März 2009 um 18:16
    • #7

    Also was mir absolut nicht klar ist ist die überprüfung ob es ne negative zahl ist oder nicht. Weiterhin schnall ich net wie es punkt vor strichrechnung rechnet, und dann müsst ich ja noch überprüfen lassen ob n hochzeichen drin ist um das zu allererst rechnen zu lassen. Den befehl kenn ich, der ist

    Code
    pow(Basis,Exponent);

    oder irr ich mich da?:zwinker:

  • lowkey
    4
    lowkey
    Mitglied
    Punkte
    130
    Beiträge
    24
    • 10. März 2009 um 21:41
    • #8

    Ohne eine spezifikation kann man nicht viel machen weil auch fuer ein Taschenrechner sehr viele Fragen aufkommen, wie z.b. die Input Notation
    (ie. 1 2 + oder 1 + 2 oder + 1 2 etc)

    zu dem Code was du gepostet hast:
    meiner Meinung nach sollte man den default zweig des switches NUR fuer eine Fehlermeldung verwenden. Fuer das was du machst gibt es denn '?' case, ich weis jezt nicht genau ob das in C# auf drin ist aber sollte sein. Das ? heist einfach das alle anderen characters in diesen Case fallen, was auch eine zahl waere.

    Die negativ ueberpruefung:
    der User Input erfolg mittels der Konsole also kommt es ueber einen String zu deinem Programm. Daher wird ein char array verwendet. Jede zahl wird in einezelen zahlen gegliedert z.B. 999 wird als '9' '9' '9' in je einem Index gespeichert.

    Code
    ---99 == -99

    das oben angegebene code stueck zeigt dir warum

    Code
    while (temp == '-')
                {
                    isNegative = !isNegative;
                    count++;
                    if (count < input.Length)
                        temp = input[count];
                    else
                        break;
                }

    ausgefuehrt wird, eben wegen diesen mehrfachen '-'. Sobald dieses '-' nicht mehr auftritt bleibt der nicht '-' char in temp gespeichert und die boolean variable isNegativ ist entweder true oder false, true bei ungerader Anzahl an '-' chars und anders false.

    Das potenz Zeichen ist '^'. Die Funktion sollte so aussehen wie du sie hast. Das mit dem Punkt vor Strich Rechnung wuerde dann vieleicht so aussehen das man zwei schleifen hat mit je einem switch. Einmal fuer + und - und dann einmal fuer * und /

    Die Prioritaet fuer den Potenz Operator ist das wirklich entscheidende an diesem Beispiel, sonst waere es ja viel zu einfach fuer eine Bewerbung. Ein Ansatz waere den input String durchzulaufen und dir den Index von drei Operatoren zu merken, das heist du brauchst einem int array [3]. Du gehst den input String durch und speicherst in [0] den Index eines Operators in der folgenden Enumeration {'-','+','/','*'}. Sollten nun ein '^' char im input String sein sollte dieser Index in [1] gespeichert werden. Dann geht es weiter bis man den naechsten Operator erreicht und speichert dessen index in [2]. Zwischen diesen drei Indecies sind jetzt deine zwei Zahlen fuer die Potenz Rechnung.

    Jetzt schneidest du Teilstrings ab, und zwar von inputString[0] bis inputString[[0]], das heist alles inlusieve des ersten operators. Ein zweiter Teilstring ist dann inputString[[2]] bis inputString[inputString.length()]. Also alles von dem dritten operator bis zum ende. Jetzt hast du in inputString nur noch deine zahlen und den potenz Operator. Nach erfolgreichem rechnen muss man das ergebnis der Potenz rechnung mit den Teilstring wieder zusammen schneiden.

    Also in ungefaehr so: teilstring1 + ergebnis + teilstring2. Natuerlich muesste das ganze in einer schleife durchlaufen werden weil es mehrere potenz Operatoren geben koennte.

    Dies ist jetzt nur so schnell hingetippt und ich weis den genauen C# code nicht und ich weis auch nicht ob es die beste Loesung ist, wahrscheinlich nicht. Ich hoffe ich habe jetzt nicht zu viel geholfen da dies ein Bewerbungsbeispiel ist.

    ______________________________________________
    (\__/)
    (='.'=)This is Bunny. Copy and paste Bunny into ur
    (")_(")signature to help him gain world domination.
    ______________________________________________
    Windows ist für nur eins gut: WinZip :mad:@ AlgoDat

    Einmal editiert, zuletzt von lowkey (10. März 2009 um 21:47)

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung