![]() |
Re: Taschenrechner Programmieren
Die Suche ist doch so was schönes: [dp]fakultät[/dp]. :roll:
|
Re: Taschenrechner Programmieren
Ich hab auch versucht nen Rechner zu proggen und hab ein Prob, deshalb greif ich den Thread mal auf....
Es soll ein Taschenrechner entstehen, bei dem man 2 Zahlen und das zu verwendende Rechenzeichen angeben können soll, wobei auch negative und , Zahlen möglich sein sollen.
Code:
Hat da jemand ne Fehlerlösung zu? (ich hab erst kürzlich mit Delphi angefangen, etwas Ahnung von TurboPascal und mir schon einige Tuts durchgelesen, hab aber nicht sooo ne große Ahnung von den Fachbegriffen)
Var Zahl1, Zahl2, Rechenzeichen, Ergebnis: integer;
Begin Zahl1:=strtoint(edit1.text); Zahl2:=strtoint(edit2.text); Rechenzeichen:=was muss ich hier nehmen(edit3.text); If Rechenzeichen = '+' then Ergebnis :=Zahl1 + Zahl2; If Rechenzeichen = '-' then Ergebnis := Zahl1 - Zahl2; etc.... hier bekomm ich immer den Fehler: Ausdruck erwartet, aber then gefunden Label5.caption:=inttostr(Ergebnis); End. |
Re: Taschenrechner Programmieren
Delphi-Quellcode:
Probiers aus, und sag dann, welcher fehler kommt ...
Var
Zahl1, Zahl2, Ergebnis: integer; RechenZeichen: String; Begin Zahl1 := strtoint(edit1.text); Zahl2 := strtoint(edit2.text); Rechenzeichen := edit3.text; If Rechenzeichen = '+' then Ergebnis := Zahl1 + Zahl2; If Rechenzeichen = '-' then Ergebnis := Zahl1 - Zahl2; Label5.caption := inttostr(Ergebnis); End; |
Re: Taschenrechner Programmieren
der Fehler beim If befehl is komischer Weise nichtmehr da (hab eigentlich nix geändert)
Das mit dem Rechenzeichen klappt auch, aber Kommazahlen klappen noch nicht und ich muss bei Rechenzeichen div eingeben... kann ich das irgendwie machen das ich einfach / mach? Thx 4 help schomma ;) |
Re: Taschenrechner Programmieren
Du willst ja eine Kommazahl darstellen. Dazu benutzt du die Falsche Variable! Integer kann grundsätzlich nur ganze Zahlen darstellen. Du müsstest also in deiner Variablen-Deklaration folgendes schreiben:
Delphi-Quellcode:
Alternativ könntest du auch Extended verwenden, aber Real sollte für 'nen kleinen Taschenrechner reichen. Jetzt kannst du auch folgende if-Abfrage hinter deine beiden bereits bestehenden packen:
var Zahl1,Zahl2,Ergebnis:Real;
Delphi-Quellcode:
Nun wird deine letzte Zeile auch nicht mehr funktionieren, da du ja keinen Integer, sondern einen Real-Wert umwandeln willst. Ich glaube in dem Fall müsste
if Rechenzeichen = / then
ergebnis:=zahl1/zahl2;
Delphi-Quellcode:
funzen. Ansonsten:
floattostr();
Delphi-Quellcode:
Dazu müsstest du aber estr als String-Variable deklarieren.
str(ergebnis,estr);
label5.caption:=estr; |
Re: Taschenrechner Programmieren
ich post die Frage einfach mal hier rein ;)
ich versuche im mom ein Prog zum Umwandeln von zB Meter in Fuß/Meter in CM/etc... Aber da ja bei Groß/Kleinbuchstaben unterschieden wird sieht das ganze jetzt so aus (siehe unten) :( normal müsste das doch mit lower case gehen?!
Delphi-Quellcode:
If (lowercase(Einheit)='cm') and (lowercase(Umwandeln)='m') then.....
Delphi-Quellcode:
:coder2:
var Eingabe, Ergebnis : real;
Einheit, Einheitneu:string; begin Eingabe:=strtoint(Edit1.text); Einheit:=(Edit2.Text); EInheitneu:=Edit3.Text; If (Einheit='cm') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='CM') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='Cm') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='cM') and (einheitneu='m') Is da irgendwo ein Fehler drin? Mfg, Excalibur |
Re: Taschenrechner Programmieren
Was geht denn bei deinem Programm nicht?
|
Re: Taschenrechner Programmieren
kommt ne Fehlermeldung beim lowercase
|
Re: Taschenrechner Programmieren
Und die wäre?
|
Re: Taschenrechner Programmieren
Inkompatible Typen: 'String' und 'Real' :gruebel:
|
Re: Taschenrechner Programmieren
Dann zeig mal deinen ganzen Code, wie du Umwandeln deklarierst usw.
|
Re: Taschenrechner Programmieren
Is halt etwas lang geraten, wegen den vielen groß/klein-Möglichkeiten (und das sind nur die häufigsten) :roll: :roll:
Delphi-Quellcode:
unit wandler;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Edit3: TEdit; Label3: TLabel; Button1: TButton; Label4: TLabel; Label5: TLabel; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Eingabe, Ergebnis : real; Einheit, Einheitneu:string; begin Eingabe:=strtoint(Edit1.text); Einheit:=(Edit2.Text); EInheitneu:=Edit3.Text; If (lowercase(Einheit)='cm') and (lowercase(Ergebnis)='m') then Ergebnis:=Eingabe /100; If (Einheit='CM') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='Cm') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='cM') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='CM') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='cm') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='Cm') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='cM') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='m') and (einheitneu='cm') then Ergebnis:=Eingabe *100; If (Einheit='M') and (einheitneu='cm') then Ergebnis:=Eingabe *100; If (Einheit='m') and (einheitneu='Cm') then Ergebnis:=Eingabe *100; If (Einheit='m') and (einheitneu='cM') then Ergebnis:=Eingabe *100; If (Einheit='M') and (einheitneu='Cm') then Ergebnis:=Eingabe *100; If (Einheit='M') and (einheitneu='cM') then Ergebnis:=Eingabe *100; If (Einheit='M') and (einheitneu='CM') then Ergebnis:=Eingabe *100; If (Einheit='m') and (einheitneu='CM') then Ergebnis:=Eingabe *100; If (Einheit='DM') and (einheitneu='cm') then Ergebnis:=Eingabe *10; If (Einheit='DM') and (einheitneu='CM') then Ergebnis:=Eingabe *10; If (Einheit='DM') and (einheitneu='Cm') then Ergebnis:=Eingabe *10; If (Einheit='DM') and (einheitneu='cM') then Ergebnis:=Eingabe *10; If (Einheit='DM') and (einheitneu='CM') then Ergebnis:=Eingabe *10; If (Einheit='dm') and (einheitneu='CM') then Ergebnis:=Eingabe *10; If (Einheit='dm') and (einheitneu='Cm') then Ergebnis:=Eingabe *10; If (Einheit='dm') and (einheitneu='cM') then Ergebnis:=Eingabe *10; If (Einheit='dm') and (einheitneu='cm') then Ergebnis:=Eingabe *10; If (Einheit='cm') and (einheitneu='dm') then Ergebnis:=Eingabe /10; If (Einheit='CM') and (einheitneu='dm') then Ergebnis:=Eingabe /10; If (Einheit='cm') and (einheitneu='DM') then Ergebnis:=Eingabe /10; If (Einheit='Cm') and (einheitneu='Dm') then Ergebnis:=Eingabe /10; If (Einheit='cM') and (einheitneu='dM') then Ergebnis:=Eingabe /10; If (Einheit='CM') and (einheitneu='DM') then Ergebnis:=Eingabe /10; If (Einheit='cM') and (einheitneu='dm') then Ergebnis:=Eingabe /10; If (Einheit='Cm') and (einheitneu='dM') then Ergebnis:=Eingabe /10; If (Einheit='cM') and (einheitneu='Dm') then Ergebnis:=Eingabe /10; If (Einheit='M') and (einheitneu='dm') then Ergebnis:=Eingabe *10; If (Einheit='m') and (einheitneu='dm') then Ergebnis:=Eingabe *10; If (Einheit='M') and (einheitneu='DM') then Ergebnis:=Eingabe *10; If (Einheit='m') and (einheitneu='DD') then Ergebnis:=Eingabe *10; If (Einheit='M') and (einheitneu='dM') then Ergebnis:=Eingabe *10; If (Einheit='M') and (einheitneu='Dm') then Ergebnis:=Eingabe *10; If (Einheit='m') and (einheitneu='dM') then Ergebnis:=Eingabe *10; If (Einheit='m') and (einheitneu='Dm') then Ergebnis:=Eingabe *10; If (Einheit='m') and (einheitneu='mm') then Ergebnis:=Eingabe *1000; If (Einheit='M') and (einheitneu='mm') then Ergebnis:=Eingabe *1000; If (Einheit='m') and (einheitneu='MM') then Ergebnis:=Eingabe *1000; If (Einheit='m') and (einheitneu='mM') then Ergebnis:=Eingabe *1000; If (Einheit='m') and (einheitneu='Mm') then Ergebnis:=Eingabe *1000; If (Einheit='M') and (einheitneu='mM') then Ergebnis:=Eingabe *1000; If (Einheit='M') and (einheitneu='Mm') then Ergebnis:=Eingabe *1000; If (Einheit='M') and (einheitneu='MM') then Ergebnis:=Eingabe *1000; If (Einheit='km') and (einheitneu='mm') then Ergebnis:=Eingabe *1000000; If (Einheit='KM') and (einheitneu='MM') then Ergebnis:=Eingabe *1000000; If (Einheit='Km') and (einheitneu='Mm') then Ergebnis:=Eingabe *1000000; If (Einheit='kM') and (einheitneu='MM') then Ergebnis:=Eingabe *1000000; If (Einheit='kM') and (einheitneu='mM') then Ergebnis:=Eingabe *1000000; If (Einheit='Km') and (einheitneu='mm') then Ergebnis:=Eingabe *1000000; If (Einheit='kM') and (einheitneu='mm') then Ergebnis:=Eingabe *1000000; If (Einheit='Km') and (einheitneu='Mm') then Ergebnis:=Eingabe *1000000; If (Einheit='km') and (einheitneu='m') then Ergebnis:=Eingabe *1000; If (Einheit='KM') and (einheitneu='M') then Ergebnis:=Eingabe *1000; If (Einheit='km') and (einheitneu='M') then Ergebnis:=Eingabe *1000; If (Einheit='kM') and (einheitneu='M') then Ergebnis:=Eingabe *1000; If (Einheit='Km') and (einheitneu='m') then Ergebnis:=Eingabe *1000; If (Einheit='KM') and (einheitneu='m') then Ergebnis:=Eingabe *1000; If (Einheit='kM') and (einheitneu='m') then Ergebnis:=Eingabe *1000; If (Einheit='mm') and (einheitneu='km') then Ergebnis:=Eingabe /1000000; usw Label5.caption:=floattostr (Ergebnis)+(Einheitneu); end; end. |
Re: Taschenrechner Programmieren
ich hab mir nicht die ganze diskussion durchgelesen, aber mal 'n kleiner tipp, wie du den Code 'n bissl übersichtlich machen könntst:
versuch mal, mit
Delphi-Quellcode:
die ganzen IFs mit dem 'CM', 'cm', 'Cm', 'cM'.... wegzuräumen!
UpperCase()
|
Re: Taschenrechner Programmieren
Hi Excalibur,
Delphi-Quellcode:
Hier liegt der Fehler. Die Richtige Variable müsste Einheitneu, und nicht Ergebnis heißen. Jedenfalls verwendest du später immer wieder Einheitneu..
If (lowercase(Einheit)='cm') and (lowercase(Ergebnis)='m')
Greetz alcaeus |
Re: Taschenrechner Programmieren
HI Excalibur!
Zitat:
|
Re: Taschenrechner Programmieren
aber da kommt immernoch: Inkompatible Typen: 'String' und 'Real'
-> ich muss des erst noch umwandeln, aber wie und wo muss des hin? |
Re: Taschenrechner Programmieren
Hi Excalibur,
Hier mal ein Auszug aus deinem Code:
Delphi-Quellcode:
Du verwendest in den einzelnen if-Abfragen Einheit und Einheitneu, und anschließend rechnest du das ergebnis aus. Also musst du auch im lowercase-teil Einheit und Einheitneu verwenden. So kompliziert dürfte das wohl nicht sein :zwinker:
If (lowercase(Einheit)='cm') and (lowercase(Ergebnis)='m')
then Ergebnis:=Eingabe /100; If (Einheit='CM') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='Cm') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='cM') and (einheitneu='m') then Ergebnis:=Eingabe /100; If (Einheit='CM') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='cm') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='Cm') and (einheitneu='M') then Ergebnis:=Eingabe /100; If (Einheit='cM') and (einheitneu='M') then Ergebnis:=Eingabe /100; Greetz alcaeus |
Re: Taschenrechner Programmieren
Code:
So geht's.
procedure TForm1.Button1Click(Sender: TObject);
var Eingabe, Ergebnis : real; Einheit, Einheitneu:string; begin Eingabe:=strto[size=18]float[/size]('17'); Einheit:='CM'; EInheitneu:='M'; If (lowercase(Einheit)='cm') and (lowercase(EinheitNeu)='m') then Ergebnis:=Eingabe /100; |
Re: Taschenrechner Programmieren
Delphi-Quellcode:
so sollte deine button-prozedur aussehen... (abgesehn davon dass noch nicht alle kombinationen drin sind :mrgreen:)
procedure TForm1.Button1Click(Sender: TObject);
var Eingabe,Ergebnis: Real; Einheit,EinheitNeu: string; begin Eingabe := StrToFloat(Edit1.Text); //StrToFLOAT ! Einheit := Edit2.Text; EinheitNeu := Edit3.Text; Ergebnis := 0; if (UpperCase(Einheit)='CM') and (UpperCase(EinheitNeu)='DM') then Ergebnis := Eingabe / 10; if (UpperCase(Einheit)='CM') and (UpperCase(EinheitNeu)='M') then Ergebnis := Eingabe / 100; if (UpperCase(Einheit)='MM') and (Uppercase(EinheitNeu)='KM') then Ergebnis := Eingabe / 1000000; if (UpperCase(Einheit)='DM') and (UpperCase(EinheitNeu)='CM') then Ergebnis := Eingabe * 10; if (UpperCase(Einheit)='M') and (UpperCase(EinheitNeu)='DM') then Ergebnis := Eingabe * 10; if (UpperCase(Einheit)='M') and (UpperCase(EinheitNeu)='CM') then Ergebnis := Eingabe * 100; if (UpperCase(Einheit)='M') and (UpperCase(EinheitNeu)='MM') then Ergebnis := Eingabe * 1000; if (UpperCase(Einheit)='KM') and (UpperCase(EinheitNeu)='M') then Ergebnis := Eingabe * 1000; if (UpperCase(Einheit)='KM') and (UpperCase(EinheitNeu)='MM') then Ergebnis := Eingabe * 1000000; Label5.Caption := FloatToStr(Ergebnis) + EinheitNeu; end; //Edit: und das mit UpperCase und LowerCase is reine geschmackssache... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz