Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Taschenrechner,Reference-Value (https://www.delphipraxis.net/164772-taschenrechner-reference-value.html)

hotkey 29. Nov 2011 13:38

Taschenrechner,Reference-Value
 
Hallo , als Übung habe ich mal einen noch unvollständigen Taschenrechner programmiert; hier mal der Code :

Code:
program p1;
        {$AppType Console}

var additionsb,subtraktionsb,multib,divb:string;
zahl1:integer; zahl2:integer;

function addition (x:integer ; y:integer):integer;
 var ergebnis:integer;zahl1:integer; zahl2:integer;
 begin
  ergebnis:=zahl1+zahl2;
  result:=ergebnis;
  writeln('Das Ergebnis lautet:');
  write(ergebnis);
  readln;
  end;


  begin
   writeln('Wollen Sie addieren,subtrahieren,multiplizieren oder dividieren?: ');
   readln(additionsb,subtraktionsb,multib,divb);

   if (additionsb='addieren') then
   begin
   writeln('Geben Sie die erste Zahl ein: ');
   readln(zahl1);
   writeln('Geben Sie die zweite Zahl ein: ');
   readln(zahl2);
   addition(zahl1,zahl2);
   end;
   end.
Und jetzt mal eine Frage ; im Funktionskopf habe ich die Parameter drin , die als Integer deklariert worden sind.

Sobald ich aber jetzt noch var hinzufüge ( also call by reference) , und z.B 6 und 8 als Zahl1 und Zahl2 eingebe , kommt ein riesengroßer Wert raus.
Da bei der Reference-Technik der Inhalt übergeben wird und keine lokale Kopie , verstehe ich nicht , warum man nicht die 14 als Ergebnis rauskriegt.
Bitte um einen Tipp.
Danke.

DeddyH 29. Nov 2011 13:42

AW: Taschenrechner,Reference-Value
 
Du solltest die lokalen Variablen Zahl1 und Zahl2 entweder aus x und y zuweisen oder ganz weglassen und gleich auf die übergebenen Werte zugreifen. Das hat mit Call By Reference/Value nicht die Spur zu tun.

Codewalker 29. Nov 2011 13:43

AW: Taschenrechner,Reference-Value
 
Schau mal in deine Funktion addition und schaue mal genau hin, was mit X und Y passiert und wie genau du Ergebnis ausrechnest.

Edit: DeddyH war mal wieder schneller ;-)

hotkey 29. Nov 2011 13:46

AW: Taschenrechner,Reference-Value
 
Erstmal danke für die Antworten.
Habe das aber jetzt irgendwie nicht verstanden , x und y stehen bei mir als Parameter , das sind doch meine Parameter..
Die Zahlen , die ich eingebe , werden ja mit Zahl1 und Zahl2 angesprochen , aber trotzdem muss ich doch im Funktionskopf Parameter einfügen , oder nicht?

himitsu 29. Nov 2011 13:56

AW: Taschenrechner,Reference-Value
 
Wieso hast du globale Variablen, wo du die Werte doch als Parameter übergeben wolltest?
Abgesehn davon rechnest du auch noch mit den Globalen und nicht mit den Lokalen/Parametern ... und beschwerst dich dann, daß bei den Parametern etwas nicht stimmt :roll:

schaff' erstmal die blöden Globalen ab.

Sir Rufo 29. Nov 2011 13:58

AW: Taschenrechner,Reference-Value
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe mal die Projekt-Quellen formatiert und alle Variablen entsprechend farbig markiert.

rot = globale Variablen
orange = lokale Variablen
grün = Parameter

Dabei ist zu beachten, dass z.B. zahl1 eine völlig andere Variable als zahl1 ist.

hotkey 29. Nov 2011 14:04

AW: Taschenrechner,Reference-Value
 
Wenn ich aber die globalen Variablen entferne , also Zahl1 und Zahl2 , was soll ich dann bei readln und addition() schreiben?

Code:
 if (additionsb='ja') then
   begin
   writeln('Geben Sie die erste Zahl ein: ');
   readln(????);
   writeln('Geben Sie die zweite Zahl ein: ');
   readln(???);
   addition(???);
   end;
EDIT: Hat sich geklärt , danke für die Antworten.

Sir Rufo 29. Nov 2011 14:13

AW: Taschenrechner,Reference-Value
 
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang mal der gute alte Papierrechner. Die einzelnen Punkte habe ich im Quelltest markiert.
Evtl. siehst du ja dann, wo dein Fehler liegt.
Delphi-Quellcode:
program p1;
{$AppType Console}

var
  additionsb, subtraktionsb, multib, divb : string;
  zahl1 :                                  integer;
  zahl2 :                                  integer;

function addition( x : integer; y : integer ) : integer;
var
  ergebnis : integer;
  zahl1 :   integer;
  zahl2 :   integer;
begin
  ergebnis := zahl1 + zahl2; // 5.
  result  := ergebnis; // 6.
  writeln( 'Das Ergebnis lautet:' );
  write( ergebnis );
  readln;
end;

begin
  writeln( 'Wollen Sie addieren,subtrahieren,multiplizieren oder dividieren?: ' );
  readln( additionsb, subtraktionsb, multib, divb ); // 1.

  if ( additionsb = 'addieren' )
  then
    begin
      writeln( 'Geben Sie die erste Zahl ein: ' );
      readln( zahl1 ); // 2.
      writeln( 'Geben Sie die zweite Zahl ein: ' );
      readln( zahl2 ); // 3.
      addition( zahl1, zahl2 ); // 4.
    end;

end.

hotkey 29. Nov 2011 14:16

AW: Taschenrechner,Reference-Value
 
Vielen Dank , habs verstanden.

Ich habe den ganzen Code mal schnell verändert , und so finde ich es jetzt besser , viel übersichtlicher und kürzer :

Code:
program Project2;


{$APPTYPE CONSOLE}

  uses sysutils;


   var
   a,b,c:real;
   bestatigung:string;




    function addition(a:real; b:real):real;
     begin
       result:=a+b;
       end;


      function multiplikation(a:real; b:real):real;
       begin
         result := a*b;
         end;


         function division(a:real; b:real):real;
          begin
            result := a/b;
            end;







  begin

    writeln('Taschenrechner - Addition,Multiplikation,Division');
    writeln('Geben Sie die erste Zahl ein: ');
    readln(a);
    writeln('Geben Sie die zweite Zahl: ');
    readln(b);



    writeln('Welche Rechenoperation moechten Sie ausfuehren(z.B.+,-,/): ');
    readln(bestatigung);

     if bestatigung=('+')
      then
       begin
       c:=a+b;
       writeln(addition(a,b));
       readln(c);
      end;

      if bestatigung=('*')
      then
       begin
    writeln(multiplikation(a,b));
    readln(c);
     end;


      if bestatigung=('/')
      then
       begin
    writeln(division(a,b));
    readln(c);
     end;









end.

DeddyH 29. Nov 2011 14:19

AW: Taschenrechner,Reference-Value
 
Und welchen Sinn soll c dabei haben?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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