Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tarifrechner (https://www.delphipraxis.net/164142-tarifrechner.html)

xsus 30. Okt 2011 18:51

Delphi-Version: 7

Tarifrechner
 
Hey, ich bin total neu hier und Anfänger beim Programmieren..also nicht böse sein^^

Mein Problem sieht wiefolgt aus:
Ich möchte einen Tarifrechner erstellen, der bei eingabe des Gewichtes ausrechnet, wie teuer der Versand wird.
Es sollen ausschließlich Pakete bis 100 Kilo transportiert werden.
Das Gewicht wird grammgenau gemessen, die sich ergebende Gebühr aber auf zwei Dezimalen gerundet.
3 Tarife sind verfügbar:
  1. Tarif - bis 10 kg - Grundgebühr 6 € - Zusatzgebühr 0,6 € pro kg
  2. Tarif - über 10 bis 20 kg - GG 12 € - ZG 0,3 € pro kg
  3. Tarif - über 20 kg - GG 18 € - 0,2 € pro kg

Mein bisheriger Quellcode sieht wiefolgt aus:
Delphi-Quellcode:
program tarife;
{$APPTYPE CONSOLE}
uses sysutils;

procedure info;
begin
  writeln('Dies Programm berechnet automatisch die Beförderungssgebühr,');
  writeln('wenn Sie das Paketgewicht eingeben .');
  writeln;
  writeln
end;

procedure eingabe(var gewicht:real);
begin
  write('Paketgewicht in kg :   ');
  readln(gewicht);
  writeln;
  writeln
end;

function tarif(gewicht:real):byte;
begin
{HIER FEHLT WAS !}
end;

procedure berechnung(gewicht:real;var gebuehr:real);
var t:byte;
begin
  t:=tarif(gewicht);
  gebuehr:=6*t+gewicht*(0.6/t)
end;

procedure ausgabe1(gebuehr:real);
begin
  writeln('Die Gebühr beträgt ',gebuehr:5:2,' €.')
end;

procedure ausgabe2(gewicht:real);
var uebergewicht:real;
begin
  uebergewicht:=gewicht-100;
  writeln('Das Paket ist ',uebergewicht:8:3,' kg zu schwer und wird nicht befördert.')
end;

procedure ablauf;
var gw,gb:real;
begin
  info;
  eingabe(gw);
  if tarif(gw)<>0 then
  begin
    berechnung(gw,gb);
    ausgabe1(gb)
  end
  else
    ausgabe2(gw);
  readln
end;

begin
  ablauf
end.
Ich komme nicht weiter, bei der vorhandenen Lücke...es wäre SUPER, wenn mir jmd. helfen könnte (und das evtl. sogar noch ein bisschen erklärt) ...bitte..
Liebe Grüße und Vielen Dank ;)

fkerber 30. Okt 2011 19:06

AW: Tarifrechner
 
Hi,

herzlich willkommen in der DP.

Was würdest du denn machen, wenn du diesen Schritt von Hand lösen müsstest. Also wie würdest du das ganze aufschreiben, quasi in natürlicher Sprache.
Ergänzend dazu die Frage: Was sollen für Werte bei dieser Funktion rauskommen? (Das lässt sich anhand der Funktion "berechnung" erkennen.)


LG, Frederic

xsus 30. Okt 2011 19:12

AW: Tarifrechner
 
Hey, also ich würde eine if - Anweisung aufstellen..wenn das bis 10 kg geht nimm tarif 1 usw.
Das hatte ich im folgendem probiert, bevor ich mich hierher gewendet habe:
Delphi-Quellcode:
function tarif(gewicht:real):byte;
begin
  if gewicht<=10 then
     gewicht:=1 else
        if (gewicht>10) and (gewicht<=20) then
            gewicht:=2 else
                if (gewicht>20) then
                   gewicht:=3
...aber wie Delphi mir selbst schon sagt, scheint das totaler mist zu sein ;) ..der Rauskommende Wert soll ja vom Typ Byte sein, also eine Zahl ?

UND:..in der Procedure Ausgabe1 und Ausgabe2 kommt ja z.b. vor: "gebuehr:5:2"...was hat es plötzlich mit den Zahlen auf sich?^^

Sorry, wenn die Fragen zu doof sind ;)

LG

mkinzler 30. Okt 2011 19:18

AW: Tarifrechner
 
Delphi-Quellcode:
function tarif(gewicht:real):byte;
begin
  if gewicht<=10 then
     tarif:=1 else
        if (gewicht>10) and (gewicht<=20) then
            tarif:=2 else
                if gewicht>20 then
                   tarif := 3;
end;

fkerber 30. Okt 2011 19:21

AW: Tarifrechner
 
Hi,

vllt. noch ein paar warme Worte zu Markus' Quelltext:
Das Problem bei deinem Code ist, dass du einfach die Variable Gewicht veränderst, aber die Außenwelt davon nichts mitbekommt. In Markus' Fall wird das Ergebnis dem Rückgabewert der Funktion (erreichbar über den Namen der Funktion oder über die Variable result) zugewiesen, sodass die Außenwelt den Wert auch mitbekommt.

Was die Zahlen angeht:
Soweit ich weiß beziehen die sich auf die Anzahl Stellen vor (in dem Fall 5) und nach (in dem Fall 2) dem Komma.


Edit:
Und noch was: Der else-Fall wird immer dann aufgerufen, wenn die Überprüfung der Bedingung des if fehl schlug. D.h. wenn <= 10 nicht gestimmt hat, kommst du in diesen ersten else-Fall und kannst sicher sein, dass das Gewicht > 10 ist - d.h. du kannst dir diesen Teil der Bedingung sparen. Gleiches beim letzten else.

LG, Frederic

xsus 30. Okt 2011 19:25

AW: Tarifrechner
 
Vielen Dank ihr beide!
Dann war ich garnicht so weit entfernt..ich dachte nur das ich tarif nicht verwenden darf, es sich nur um den namen der function handelt..und mir halt nur gewicht zur verfügung steht..jetzt hab ichs verstanden :thumb:

TBx 30. Okt 2011 19:35

AW: Tarifrechner
 
Nun auch nochmal meinen Senf dazu:

- Du prüfst nicht ab, ob da womöglich jemand ein Gewicht <= 0 eingibt
- Du prüfst nicht ab, ob ein Gewicht >100 eingegeben wird
- Der in der Procedure Ablauf abgeprüfte Wert für Tarif wird nie erreicht.

Gruß aus dem hohen Norden

Thomas

PS: Ach ja, Dein Delphi meckert wahrscheinlich auch immernoch, daß der Funktion Tarif möglicherweise kein Ergebnis zugewiesen wird.
PPS: Um den Rückgabewert einer Funktion zu setzen kann man entweder den Namen der Funktion verwenden oder das reservierte Wort Result.

xsus 30. Okt 2011 19:40

AW: Tarifrechner
 
Und damit nicht genug ..wenn ich über 100 kg komme, zeigt er mir trotzdem ein Preis an und nicht Ausgabe2 und das nächste Problem: es hieß ja ..das paketgewicht ist grammgenau ..aber ich kann nur ganze Zahlen eingeben...HILFE :pale:

TBx 30. Okt 2011 19:46

AW: Tarifrechner
 
Zitat:

Zitat von xsus (Beitrag 1133597)
..aber ich kann nur ganze Zahlen eingeben...HILFE :pale:

versuch mal, den '.' oder das ',' als Dezimaltrenner zu verwenden, ich vermute mal, Du versuchst den falschen von beiden.

xsus 30. Okt 2011 19:50

AW: Tarifrechner
 
also ich habe angefügt
Delphi-Quellcode:
else tarife:=0
..damit funktioniert das mit dem über 100 kilogramm und ich muss einen punkt anstatt einem komma eingeben (verwirrt mich total) ..damit müsste sich alles erledigt haben bis auf gewicht von kleinergleich 0 ?!

Und das weiß ich nicht, wie ich es deklariere..ansonsten ist das jetzt so in Ordnung oder?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz