Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wichtige allgemeine Fragen (https://www.delphipraxis.net/164756-wichtige-allgemeine-fragen.html)

hotkey 28. Nov 2011 17:59

Wichtige allgemeine Fragen
 
Hallo , ich gehe in die 12.Klasse und schreibe am Donnerstag eine Informatik-LK-Klausur.

Wir arbeiten mit Delphi.

Nun , ich habe da einige Fragen, hab zwar bei Wikipedia geguckt , aber die Sachen da finde ich nicht so dolle.

Also ; was sind Paramater und warum benutzt man Parameter , wo ist der Vorteil?

Was ist eine Verzweigung ? Wofür benutzt man Verzweigungen?

Wenn ich z.B einen Array habe :

type TSchuler= array [1..3] of string;
var Schuler:Tschuler;

Jetzt habe ich in diesem Array 3 Schüler :

Schüler[1] ='Hans';
Schüler[2] ='Peter';
Schüler[3] ='Marcel';

Kann ich das so machen ?

Und jetzt will ich eine Funktion aufbauen , mit der ich z.B einen Schüler aus dem Array entfernen bzw. ändern will , wie geht das ?

function loeschenoderaendern , wie geht das weiter ?

Und wie kann ich mit einer Funktion einem Array Daten zuweisen ?
Zum Beispiel will ich , dass ich dem Schüler 2 mit einer Funktion nicht Peter zuweise sondern Klaus , wie geht das ? Ich bitte um den kleinen Code mit einer Funktion , das ist für mich sehr wichtig.

Delphi-Laie 28. Nov 2011 18:13

AW: Wichtige allgemeine Fragen
 
Diesen Wust an Einsteigerfragen (immerhin hast Du schon 14 Beiträge auf Deiner Habenseite) Dir zu beantworten wird sich hier wohl kaum jemand die Mühe machen. Es gibt gute Delphi-Einstiegsliteratur auch im Internet.

DeddyH 28. Nov 2011 18:14

AW: Wichtige allgemeine Fragen
 
Parameter erhöhen die Flexibilität einer Routine. Man übergibt ihr je nach Situation verschiedene Parameterwerte, und die Routine benutzt diese dann intern.
Verzweigungen dienen der Unterscheidung möglicher Zustände. Es gibt die einfache (if then else) und die mehrfache (case of) Verzweigung.
Du hast da ein statisches Array. Die Zuweisung ist so in Ordnung. Löschen geht bei statischen Arrays allerdings nicht, Du kannst das höchstens simulieren, indem Du einen festgesetzten Wert einträgst und das Array-Element so als gelöscht markierst.
Um ein Array an eine Routine zu übergeben, welche dessen Inhalte dauerhaft verändern kann, muss dieses als Var-Parameter gekennzeichnet sein (Call by Reference).

Für weitergehende Infos verweise ich auf die Tutorials bzw. das E-Book im Delphi-Treff.

hotkey 28. Nov 2011 18:18

AW: Wichtige allgemeine Fragen
 
Na gut , aber es wäre nett , wenn das mit diesen Funktionen erläutert wird , denn ich möchte wissen wie man Daten an Arrays über Funktion vergeben kann , das ist echt wichtig.

Darlo 28. Nov 2011 18:34

AW: Wichtige allgemeine Fragen
 
DeddyH hat Dir doch alle Antworten gegeben! Bisschen solltest Du Dich schon mit
dem Thema beschäftigen....


http://www.delphi-treff.de/object-pa...ktionen/#c4922


Code:
procedure machwas(var zahl: integer);
  begin
    zahl := zahl+5;
    ...
  end;

  procedure aufruf;
  var einezahl: integer;
  begin
    einezahl := 5;
    machwas(einezahl);
  end;

hotkey 28. Nov 2011 18:36

AW: Wichtige allgemeine Fragen
 
Das habe ich mir schon angeguckt.

Mein größtes Problem ist ja , dass , wenn ich einen Array habe , wie in meinem ersten Thread zu sehen ist , an diese Daten übergeben will , mit einer FUNKTION.
Wie geht sowas ? Das steht leider NICHT in diesem Tutorial.

Ich will zum Beispiel dem Feld 2 einen anderen Namen zuweisen , mit einer Funktion , wie geht das ?

DeddyH 28. Nov 2011 18:40

AW: Wichtige allgemeine Fragen
 
Kleine Demo ohne Typisierung (eine solche böte sich zwar wahrscheinlich an, aber ich will es nicht zu kompliziert machen):
Delphi-Quellcode:
procedure ChangeArrayFirstElement(var Arr: array of string); //Var-Parameter
begin
  if Length(Arr) > 0 then
    Arr[0] := 'Blabb';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TestArr: array[0..10] of string;
begin
  TestArr[0] := 'Wuppdi';
  ShowMessage(TestArr[0]);
  ChangeArrayFirstElement(TestArr);
  ShowMessage(TestArr[0]);
end;

Klaus01 28. Nov 2011 18:43

AW: Wichtige allgemeine Fragen
 
Delphi-Quellcode:
function changeValue(sArray: TSchuler;idx: Byte; newValue: AnsiString): Boolean;
begin
  result := true;
  try
    sArray[idx] := newValue;
  except
    result := false;
  end;
end;
Grüße
Klaus

DeddyH 28. Nov 2011 18:49

AW: Wichtige allgemeine Fragen
 
Ich bezweifle, dass das mit einem Call By Value so funktioniert wie gedacht.

hotkey 28. Nov 2011 18:53

AW: Wichtige allgemeine Fragen
 
Zitat:

Zitat von DeddyH (Beitrag 1138292)
Kleine Demo ohne Typisierung (eine solche böte sich zwar wahrscheinlich an, aber ich will es nicht zu kompliziert machen):
Delphi-Quellcode:
procedure ChangeArrayFirstElement(var Arr: array of string); //Var-Parameter
begin
  if Length(Arr) > 0 then
    Arr[0] := 'Blabb';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TestArr: array[0..10] of string;
begin
  TestArr[0] := 'Wuppdi';
  ShowMessage(TestArr[0]);
  ChangeArrayFirstElement(TestArr);
  ShowMessage(TestArr[0]);
end;

Danke für das Beispiel , aber warum hast du bei der Prozedur " ChangeArrayFirstElement" im Kopf mit var gearbeitet , warum ist das Call-by-Reference ?

DeddyH 28. Nov 2011 18:56

AW: Wichtige allgemeine Fragen
 
Warum hörst Du nicht auf uns und liest die Tutorials? Ich habe keine Lust, jetzt hier über den Urschleim zu referieren, die Mühe haben sich bereits andere gemacht.

Klaus01 28. Nov 2011 18:59

AW: Wichtige allgemeine Fragen
 
Zitat:

Zitat von DeddyH (Beitrag 1138297)
Ich bezweifle, dass das mit einem Call By Value so funktioniert wie gedacht.

Vielleicht liege ich ja falsch, aber werden Arrays nicht immer call-by-reference übergeben.
Egal ob es sich um ein statisches oder dynamisches handelt.

Grüße
Klaus

Bummi 28. Nov 2011 19:00

AW: Wichtige allgemeine Fragen
 
zum rumspielen, ausprobieren und entdecken.
Einfach mal alles verdrehen und schauen was dann nicht mehr geht ....

Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TSchueler=Array of String;


  TForm2 = class(TForm)
    FuellenMit10: TButton;
    ListBox1: TListBox;
    Umbenennen: TButton;
    NachNameLoeschen: TButton;
    procedure FuellenMit10Click(Sender: TObject);
    procedure UmbenennenClick(Sender: TObject);
    procedure NachNameLoeschenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FSchueler:TSchueler;
    procedure DisplayArray;
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}



Procedure AddSchueler(var Arr:TSchueler;const Entry:String);
begin
  SetLength(Arr, High(Arr) + 2);
  Arr[High(Arr)] := Entry;
end;

Procedure RenameSchueler(var Arr:TSchueler;Index:Integer;const NewEntryName:String);
begin
  if (Index <= High(Arr)) and (Index >= Low(Arr)) then Arr[Index] := NewEntryName;
end;


Procedure DeleteByIndex(var Arr:TSchueler;Index:Integer);
var
  i:Integer;
begin
   if (Index <= High(Arr)) and (Index >= Low(Arr)) then
    begin
      if Index=High(Arr) then SetLength(Arr,High(Arr))
      else
        begin
            for I := Index + 1 to High(Arr) do Arr[i - 1] := Arr[i];
            SetLength(Arr,High(Arr));
        end;
    end;

end;



Procedure DeleteByName(var Arr:TSchueler;const EntryName:String);
var
  i:Integer;
  foundIndex:Integer;
begin
  foundIndex := -1;
  i := Low(Arr) - 1;
  while (i< High(Arr)) and (foundIndex = -1) do
    begin
       inc(i);
       if Arr[i] = EntryName then foundIndex := i;
    end;
  if foundIndex > -1 then DeletebyIndex(Arr, FoundIndex);

end;


procedure TForm2.UmbenennenClick(Sender: TObject);
begin
   RenameSchueler(FSchueler,5,'Fünf');
   DisplayArray;
end;

procedure TForm2.FuellenMit10Click(Sender: TObject);
var
  i:Integer;
begin
  for I := 1 to 10 do   AddSchueler(FSchueler, 'Test ' +IntToStr(i));
  DisplayArray;
end;

procedure TForm2.NachNameLoeschenClick(Sender: TObject);
begin
  DeleteByName(FSchueler,'Test 10');
  DisplayArray;
end;

procedure TForm2.DisplayArray;
var
  i:Integer;
begin
  Listbox1.Items.Clear;
  for I := Low(FSchueler) to High(FSchueler) do ListBox1.Items.Add(FSchueler[i]);

end;
end.

patti 28. Nov 2011 19:13

AW: Wichtige allgemeine Fragen
 
Zitat:

Zitat von Klaus01 (Beitrag 1138301)
Zitat:

Zitat von DeddyH (Beitrag 1138297)
Ich bezweifle, dass das mit einem Call By Value so funktioniert wie gedacht.

Vielleicht liege ich ja falsch, aber werden Arrays nicht immer call-by-reference übergeben.
Egal ob es sich um ein statisches oder dynamisches handelt.

Grüße
Klaus

Ohne zu wissen, wie es in Delphi wirklich gehandhabt wird, weiß ich, wie das in anderen Sprachen (Java, C) gemacht wird: Bei einem Array wird immer einer Referenz übergeben (alles andere wäre fatal: man stelle sich vor, ein Array der Größe 1000x1000 müsste bei einem Methodenaufruf jedesmal komplett auf den Stack kopiert werden...). Allerdings handelt es sich dabei trotzdem um eine Call-By-Value-Semantik und NICHT um Call-by-Reference! Grund: Wenn ich dem Parameter ein "neues" Array zuweise (und nicht den "Inhalt" des alten Arrays verändere), dann ändert sich beim Aufrufer nichts.

lg

Edit:
Mir fällt gerade ein: In C gibt es m.W.n. sogar einen "Trick", wie man den Compiler wirklich dazu bringen kann, das Array auf den Stack zu kopieren, und zwar, indem man das Array in einen struct einbettet...

Sir Rufo 28. Nov 2011 21:01

AW: Wichtige allgemeine Fragen
 
Zitat:

Zitat von hotkey (Beitrag 1138284)
Hallo , ich gehe in die 12.Klasse und schreibe am Donnerstag eine Informatik-LK-Klausur.

Wir arbeiten mit Delphi.

Nun , ich habe da einige Fragen, hab zwar bei Wikipedia geguckt , aber die Sachen da finde ich nicht so dolle.

Also ; was sind Paramater und warum benutzt man Parameter , wo ist der Vorteil?

...

das ist für mich sehr wichtig.

Ich habe hier ein Dejavu http://www.delphipraxis.net/164205-klausur-fragen.html
Zitat:

Zitat von hotkey (Beitrag 1134073)
Hallo , ich schreibe morgen eine Informatik-LK-Klausur und habe nun ein paar Fragen:

Was sind Parameter , wo ist der Unterschied zwischen Parameter und Variable , haben Parameter einen Vorteil?

...

ist super wichtig !

Mal sehen wie wichtig das nächste Thema wird ... giga, mega oder ultra :roll:

Die Themen-Titel waren auch schon mal besser ...

Delphi-Laie 28. Nov 2011 21:50

AW: Wichtige allgemeine Fragen
 
Zitat:

Zitat von hotkey (Beitrag 1138290)
Das habe ich mir schon angeguckt.

Mein größtes Problem ist ja , dass , wenn ich einen Array habe , wie in meinem ersten Thread zu sehen ist , an diese Daten übergeben will , mit einer FUNKTION.
Wie geht sowas ? Das steht leider NICHT in diesem Tutorial.

Ich will zum Beispiel dem Feld 2 einen anderen Namen zuweisen , mit einer Funktion , wie geht das ?

Oh meine Güte, mir reißt der Geduldsfaden.

William, genannt Bill Gates, erzählte (ich will nicht von prahlen sprechen), daß er das Programmieren lernte, indem er weggeworfene BASIC-Ausdrucke intensiv studierte - er war sich dafür angeblich sogar nicht zu fein, sie aus Papierkörben / Abfallcontainern zu fischen/angeln. Studieren kommt aus dem Latein und heißt soviel wie sich befleißigen. Dieses Forum (und andere Foren) ist (sind) überfüllt mit Quelltexten. Wie wäre es demnach, in diesem (diesen) zu stöbern, anstatt hier den Frageroboter zu spielen?

Delphi-Laie 28. Nov 2011 22:02

AW: Wichtige allgemeine Fragen
 
Zitat:

Zitat von hotkey (Beitrag 1138287)
Na gut , aber es wäre nett , wenn das mit diesen Funktionen erläutert wird , denn ich möchte wissen wie man Daten an Arrays über Funktion vergeben kann , das ist echt wichtig.

Das ist nicht "echt" wichtig (und auch nicht super, auf Deutsch über) wichtig (wie kann denn etwas "über wichtig" sein??), sondern es ist DIR wichtig. Es ist aber nicht objektiv wichtig (denk' mal an ein Lied Herbert Grönemeyers).

Für einen Abiturienten solltest Du ein wenig mehr Spürsinn und soziale Kompetenz mitbringen. Mit "Ich will" ohne ein Wort des Dankes wirst Du auf wenig Altruismus Deiner Gegenüber stoßen.

Luckie 28. Nov 2011 22:05

AW: Wichtige allgemeine Fragen
 
@Delphi-Laie: Es recht langsam, denke ich.

Wolfgang Mix 28. Nov 2011 22:15

AW: Wichtige allgemeine Fragen
 
Gegen Unwissenheit kann man etwas tun, gegen Dummheit nicht :-D:-D

Luckie 28. Nov 2011 22:26

AW: Wichtige allgemeine Fragen
 
Muss ich hier jetzt jeden einzeln ermahnen? Wenn ihr schon nichts konstruktives zum Thema beizutragen habt, dann schreibt auch bitte nichts. :roll:

Daniel 29. Nov 2011 07:02

AW: Wichtige allgemeine Fragen
 
Ich denke, wir sollten es dabei bewenden lassen.
:roll:


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