Zum Inhalt springen

(C#) Standard-Taschenrechner


Empfohlene Beiträge

Geschrieben

Hallo, Leute

Bin neu hier und hab noch wenig Erfahrung im Programmieren. Ich benutze Microsoft Visual Studio und wollte in C# einen Standard- Taschenrechner programmieren. Bis jetzt bin ich so weit das man Zahlen eintippen und wieder löschen kann. Aber wie bring ich dem Ding bei das er addieren, subtrahieren, multiplizieren und dividieren soll? Ich hoffe ihr könnt mir helfen. Wär voll toll.

Gruß

"der Neue"

PS: Ich muss ihn bis Freitag fertig haben, wär also schön wenn ihr schnell antwortet. Aber keinen Stress wegen mir machen:) .

Geschrieben

hm also zu Beginn solltest du erstmal die variablen deklarieren..

Z.B.

float fZahl1;

float fZahl2;

flot fGesamt;

char cRechenart;

void main (void)

{

cout << "Bitte wählen Sie eine Rechenart (+,-,/,*) \n";

cin >> cRechenart;

cout << "Bitte geben SIe eine Zahl ein: \n";

cin >> fZahl1;

cout << "Bitte geben SIe eine zweite Zahl ein: \n";

cin >> fZahl2;

switch (cRechenart)

{

case '+':

{

fGesamt = fZahl1 + fZahl2;

cout << "Das Ergebnis lautet: " << fGesamt;

}

case '-':

{

fGesamt = fZahl1 - fZahl2;

}

}

}

so oder so ähnlich musste das funktionieren!

Geschrieben

Hallo Nova,

danke für die Antwort, aber bei meinem Rechner sollen die Zahlen über Buttons eingegeben werden, die dann in einer Textbox erscheinen soll. Die Rechenzeichen werden ebenfalls über Buttons eingegeben werden.Das Ergebnis soll auch dort angezeigt werden. Kannst du mir da auch helfen? Wär echt net:).

PS: Nutze Microsoft Visual Studio 2005.

Geschrieben

du musst hlat hinter jeden button eine funktion legen.

bei + z.b.



public class calc{


TextBox box;

double zwischenerg = 0;


     //beispiel addieren

     private void Add(double zahl){

          zwischenerg+=zahl;

          box.Text = zwischenerg;

     }


     //beispiel minus

     private void minus(double zahl){

          zwischerg-=zahl;

          box.Text = zwischenerg;

     }


     ......

}


so in der art...

alten inhalt der textbox merken,

neuen inhalt der textBox merken,

button welcher gedrückt worde durchrechenen,

in die textbox schreiben und wieder von vorne.

bigredeyes

Geschrieben

Hallo Bigredeyes,

danke für die Antwort, aber wenn ich das so eingebe zeigt er folgende Fehler an:

Fehler 1 Invalid expression term 'private'

Fehler 2 ; expected

Fehler 3 Keyword 'void' cannot be used in this context

Fehler 4 Expected ; or ( cannot spezify constructor arguments in declaration)

:(

Geschrieben
Hallo Bigredeyes,

danke für die Antwort, aber wenn ich das so eingebe zeigt er folgende Fehler an:

Fehler 1 Invalid expression term 'private'

Fehler 2 ; expected

Fehler 3 Keyword 'void' cannot be used in this context

Fehler 4 Expected ; or ( cannot spezify constructor arguments in declaration)

:(

*g* Fehler genau lesen ;))))

DU hast ";" am Ende der Zeile vergessen!

  • 1 Jahr später...
Geschrieben

Hallo,

ich habe diesen TR programmiert wo die Grundfkt fkt(+ - * /)

Jetzt möchte Vorzeichenregeln hinzufügen weiß nur nicht wie ...das habe ich bereits...

BITTE UM SCHNELLE ANT...DANKE!!!!:)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace taschenrechnerneu

{

public partial class Form1 : Form

{

double zahl;

double zahl1;

double zahl2;

double verfahren;

double zahl3;

double wert;

double wert1;

public Form1()

{

InitializeComponent();

}

private void plus_Click(object sender, EventArgs e)

{

zahl1 = zahl;

verfahren = 1;

}

private void minus_Click(object sender, EventArgs e)

{

zahl1 = zahl;

verfahren = 2;

}

private void mal_Click(object sender, EventArgs e)

{

zahl1 = zahl;

verfahren = 3;

}

private void dividieren_Click(object sender, EventArgs e)

{

zahl1 = zahl;

verfahren = 4;

}

private void box_TextChanged(object sender, EventArgs e)

{

zahl = Convert.ToDouble(box.Text);

}

private void ergebnis_Click(object sender, EventArgs e)

{

zahl2 = zahl;

zahl3 = zahl;

//plus

if (verfahren == 1)

{

zahl = zahl1 + zahl2;

}

//minus

if (verfahren == 2)

{

zahl = zahl1 - zahl2;

}

//mal

if (verfahren == 3)

{

zahl = zahl1 * zahl2;

}

//durch

if (verfahren == 4)

{

zahl = zahl1 / zahl2;

}

box.Text = Convert.ToString(zahl);

}

private void Form1_Load(object sender, EventArgs e)

{

}

private void picture_Click(object sender, EventArgs e)

{

}

private void klammerr_Click(object sender, EventArgs e)

{

wert = 1;

}

}

}

Geschrieben

Hallo,

ich bin ganz neu in C# und wollte mich mal ins Formular-Programmieren einarbeiten. Die 9 Buttons, die Textbox, die Rechenzeichen und den "C-Button" hab ich erstellt.

Doch wie und wo binde ich nun folgenden Ansatz ein?

Und wie lese ich einen Text aus der Box und wie schreibe ich einen hinein?

du musst hlat hinter jeden button eine funktion legen.

bei + z.b.



public class calc{


TextBox box;

double zwischenerg = 0;


     //beispiel addieren

     private void Add(double zahl){

          zwischenerg+=zahl;

          box.Text = zwischenerg;

     }


     //beispiel minus

     private void minus(double zahl){

          zwischerg-=zahl;

          box.Text = zwischenerg;

     }


     ......

}


so in der art...

alten inhalt der textbox merken,

neuen inhalt der textBox merken,

button welcher gedrückt worde durchrechenen,

in die textbox schreiben und wieder von vorne.

bigredeyes

mfG

Geschrieben

Hallo ich würde ein label erstellen

label.visible = false;

label.text = "0";

//beispiel add

public void add(){

label.text = Convert.ToInt32(label.text) + Conver.ToInt32(box.text);

box.text = label.text;

}

mfg

  • 4 Monate später...
Geschrieben

hallo!

so...bin relativ unerfahren, was das programmieren angeht. jetzt hab ich von meinem lehrer eine aufgabe bekommen, die für mich nicht ganz einfach ist. daher wollte ich hier mal um hilfe und rat fragen.

achso, habe nicht extra einen neuen thread aufgemacht, weil ja das thema hierzu passt. hoffe, dass ich dennoch genügend hilfe bekomme.

also...ich muss auch eine art taschenrechner programmieren, der lediglich +,-,*,/ und die klammersetzung (klammer vor punkt und strich) kann, jedoch soll ich die zahlen und operationen nicht selbstständig eingeben, sondern das programm soll die formel/rechnung selbstständig aus einer datei lesen und korrekt berechnen. wie mache ich das?? ich tu mir da wirklich verdammt schwer! einen taschenrechner mit den einfachen grundrechenregeln würde ich wohl schon noch hinbekommen, aber dass er das selbstständig liest und interpretiert?!? ich hab echt keine ahnung...

wäre euch sooo dankbar für eine hilfestellung!

gruß iwi

Geschrieben
einen taschenrechner mit den einfachen grundrechenregeln würde ich wohl schon noch hinbekommen, aber dass er das selbstständig liest und interpretiert?!?

Die Vorgehensweise ist doch dieselbe. Ob du nun das Zeichen aus einer Datei liest oder aus einem Button, den der Anwender drückt, ist doch egal.

Geschrieben

oh mein gott...sorry jungs, manchmal bin ich echt zu deumm zum sch*****. :rolleyes:

ziemlich ordentlichen denkfehler gemacht...naja, ich meld mich wieder wenn ich ein "richtiges" problem habe.

gruß :)

Geschrieben

hi!

so...bisher bin ich noch gar nicht dazu gekommen, mich weiter mit der aufgabe zu beschäftigen, da mir sonst noch genügend aufgaben um die ohren geworfen werden. :rolleyes:

aber faustenator hat glaub recht...

Er schrieb auch was von Klammerung...

Das ist nicht ganz so trivial wie der Rest hier

beim interpretieren der formel, wie bekomme ich es hin, dass zunächst alles in den klammern berechnet wird, dann die multiplikation und division und dann erst addition und subtraktion. addition und subtraktion der teilergebnisse dürfte ja kein problem sein, aber wie komme ich zunächst auf die korrekte ausführungsreihenfolge. ich kann ja nicht einfach die ersten zwei zahlen addieren (wenn zwischen ihnen ein "+" steht), wenn danach ne klammer oder ein "*" zeichen kommt?!

müsste man erst einmal die formel einlesen, alles multiplizieren oder dividieren, wo halt ein "*" oder "/" steht und danach nochmal die formel einlesen und die zwischenergebnisse dann halt addieren bzw subtrahieren oder wie stellt man das am besten an?? dazu kommt ja noch die sache mit den klammern.

klar, beim taschenrechner selber ist das prinzip ja nicht anders, wenn man eine rechnung mit verschiedenen operationen hat, dennoch weiß ich nicht, wie man es hinbekommt, einen taschenrechner mit korrekter auswertungsreihenfolge zu schreiben.

ich hab mal als ich mich noch bisschen informiert hatte etwas von einem parser gelesen. der ja anscheinend mein problem lösen könnte, oder? könnt ihr mir vielleicht mehr dazu sagen?!?

bitte habt rücksicht, wie gesagt...programmieranfänger. :hells:

gruß

Geschrieben

Das Thema ist bei mir schon einige Zeit her, daher gibts von mir nur mal den Hinweis, das Dir bei dem Aufgabenteil mit der Klammerung Stacks weiterhelfen können. (das ist zumindest ein klassischer Ansatz)

http://de.wikipedia.org/wiki/Stapelspeicher#Verarbeitung_von_Klammerstrukturen" data-cite="\"

http://de.wikipedia.org/wiki/Stapelspeicher#Verarbeitung_von_Klammerstrukturen

">

Verarbeitung von Klammerstrukturen

Stapelspeicher eignen sich auch zur Auswertung von Klammerausdrücken, wie sie etwa in der Mathematik geläufig sind. Dabei wird zunächst für Operatoren und Operanden je ein Stapelspeicher initialisiert. Der zu verarbeitende Klammerausdruck wird nun symbolweise eingelesen. Wird eine öffnende Klammer eingelesen, so ist diese zu ignorieren. Wird ein Operand oder Operator eingelesen, so ist dieser auf den jeweiligen Stapelspeicher zu legen. Wird eine schließende Klammer eingelesen, so wird der oberste Operator vom Stapelspeicher für die Operatoren genommen und entsprechend diesem Operator eine geeignete Anzahl von Operanden, die zur Durchführung der Operation benötigt werden. Das Ergebnis wird dann wieder auf dem Stapelspeicher für Operanden abgelegt. Sobald der Stapelspeicher für die Operatoren leer ist, befindet sich im Stapelspeicher für die Operanden das Ergebnis.

(Zwischenfrage an die, die ein wenig aufpassen: Welches Problem tritt auf, wenn man es so umsetzt, wie oben beschrieben??)

Eine bessere Hilfe wäre wahrscheinlich jedes Buch über Algorithmik, aber vielleicht hast Du sowas ja zufällig zur Hand...

Geschrieben

Hmm...

Ich kenn das mit den Klammern als einfachste Variante mit Rekursion...

Das bedeutet, dass sich der Parser selbst mit einem neuen Übergabewert neu aufruft. Der Übergabewert wäre dann der Inhalt der Klammer, sobald dieser berechnet ist, springt der Parser zurück und die Klammer ist gelöst, daher kann er "einfach" weiter rechnen... :)

Keinen Anspruch auf Richtigkeit :D

Geschrieben
Er schrieb auch was von Klammerung...

Das ist nicht ganz so trivial wie der Rest hier

Substring von erster Index von '(' + 1 bis letzter Index von ')' (rekursion bei Schachtellung)

Dann hast du den Term, der in den Klammern steht und schon gehts.

Geschrieben
Substring von erster Index von '(' + 1 bis letzter Index von ')' (rekursion bei Schachtellung)

Dann hast du den Term, der in den Klammern steht und schon gehts.

Aber für sowas (a+B) * (c-d) würde Deine Beschreibung nicht reichen.... .oO(a+B)*(c-d läßt sich nicht so leicht rechnen, wenn man die erste und die letzte Klammer entfernt hat)

Geschrieben

Ja ok, mehrere klammern hab ich jetzt nicht beachtet.

Dann inkrementierst du halt für jede geöffnete Klammer einen Zähler und für jede geschlossene dekrementierst du den.

Bei 0 haste die letzte Klammer für den Term.

  • 3 Monate später...
Geschrieben

Das wäre mein Konsolen-Rechner, vielleicht hilft er dir, er fängt auch texteingaben ab.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


namespace ConsoleCalculator

{

	class Program

	{

		public static void Main()

		{


			while (true)

			{

				Console.WriteLine("\n\nErste Zahl:\n");

				String zahl1 = Convert.ToString(Console.ReadLine());

				if (zahl1 == "exit") break;

				zahl1 = LeerSchlägeEntfernen(zahl1);

				if (EnthaeltBuchstaben(zahl1))

				{


					Console.WriteLine("\n\nOperator:");

					String zeichen = Console.ReadLine();

					if (zeichen == "exit") break;

					zeichen = LeerSchlägeEntfernen(zeichen);

					if (OperatorPruefen(zeichen))

					{


						Console.WriteLine("\n\nZweite Zahl:\n");

						String zahl2 = Convert.ToString(Console.ReadLine());

						if (zahl2 == "exit") break;

						zahl2 = LeerSchlägeEntfernen(zahl2);

						if (EnthaeltBuchstaben(zahl2))

						{


							string additionsOperator = " + ";


							switch (zeichen)

							{

								case "+":

									Console.WriteLine(zahl1 + additionsOperator + zahl2 + " = " + (Convert.ToDouble(zahl1) + Convert.ToDouble(zahl2)));

									break;


								case "-":

									Console.WriteLine(zahl1 + " - " + zahl2 + " = " + (Convert.ToDouble(zahl1) - Convert.ToDouble(zahl2)));

									break;


								case "/":

									Console.WriteLine(zahl1 + " / " + zahl2 + " = " + (Convert.ToDouble(zahl1) / Convert.ToDouble(zahl2)));

									break;


								case "*":

									Console.WriteLine(zahl1 + " * " + zahl2 + " = " + (Convert.ToDouble(zahl1) * Convert.ToDouble(zahl2)));

									break;


								default:

									break;

							}

						}

					}

				}

			}






		}

		public static string LeerSchlägeEntfernen(String zahl1)

		{

			String ausgabe = "";


			for (int i = 0; i < zahl1.Length; i++)

			{

				if (zahl1.Substring(i, 1) != " ")

				{

					ausgabe = ausgabe + zahl1.Substring(i, 1);

				}

			}

			return ausgabe;

		}

		public static bool EnthaeltBuchstaben(String zahl1)

		{

			string test = "";


			for (int i = 0; i < zahl1.Length; i++)


				switch (zahl1.Substring(i, 1))

				{

					case "1":

						test = test + zahl1.Substring(i, 1);

						break;


					case "2":

						test = test + zahl1.Substring(i, 1);

						break;


					case "3":

						test = test + zahl1.Substring(i, 1);

						break;


					case "4":

						test = test + zahl1.Substring(i, 1);

						break;


					case "5":

						test = test + zahl1.Substring(i, 1);

						break;


					case "6":

						test = test + zahl1.Substring(i, 1);

						break;


					case "7":

						test = test + zahl1.Substring(i, 1);

						break;


					case "8":

						test = test + zahl1.Substring(i, 1);

						break;


					case "9":

						test = test + zahl1.Substring(i, 1);

						break;


					case "0":

						test = test + zahl1.Substring(i, 1);

						break;


					default:

						Console.WriteLine("\nBitte nur Zahlen verwenden\n");

						return false;

				}

			return true;

		}

		public static bool OperatorPruefen(String zeichen)

		{

			string halter = "";




			for (int j = 0; j < zeichen.Length; j++)



				switch (zeichen.Substring(j, 1))

				{

					case "/":

						halter = halter + zeichen.Substring(j, 1);

						break;


					case "*":

						halter = halter + zeichen.Substring(j, 1);

						break;


					case "+":

						halter = halter + zeichen.Substring(j, 1);

						break;


					case "-":

						halter = halter + zeichen.Substring(j, 1);

						break;


					default:

						Console.WriteLine("\nUngültiger Operator\n");

						return false;

				}

			return true;

		}

	}

}




void SetToTen(out int number)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...