AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Taschenrechner,Reference-Value

Ein Thema von hotkey · begonnen am 29. Nov 2011 · letzter Beitrag vom 29. Nov 2011
Antwort Antwort
Seite 1 von 2  1 2      
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#1

Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 13:38
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.
Felix

Geändert von hotkey (29. Nov 2011 um 13:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 13:42
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 13:43
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
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#4

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 13:46
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?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.155 Beiträge
 
Delphi 12 Athens
 
#5

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 13:56
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

schaff' erstmal die blöden Globalen ab.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 13:58
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.
Angehängte Dateien
Dateityp: pdf p1.pdf (37,7 KB, 7x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (29. Nov 2011 um 14:01 Uhr)
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#7

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 14:04
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.
Felix

Geändert von hotkey (29. Nov 2011 um 14:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 14:13
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.
Angehängte Dateien
Dateityp: pdf p1_var.pdf (19,1 KB, 3x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#9

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 14:16
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.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Taschenrechner,Reference-Value

  Alt 29. Nov 2011, 14:19
Und welchen Sinn soll c dabei haben?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 Uhr.
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