AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Namensprogramm hilfe!

Ein Thema von raysto · begonnen am 6. Nov 2010 · letzter Beitrag vom 6. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2   
raysto

Registriert seit: 6. Nov 2010
62 Beiträge
 
#1

Namensprogramm hilfe!

  Alt 6. Nov 2010, 15:36
Hallo,
ich weiß nicht ob ich hier im richtigen Vreich bin, hoffe es aber doch mal
Also ich habe folgendes Problem: Für die Schule muss ich diese Aufgabe machen: Erstelle ein Programm, wo man in einem Textfeld beliebig viele Namen nacheinander eingeben kann. Die Namen werden nach dem Drücken vom Speichern-Button auf ein Array gelegt. Mit Drücken auf den Ausgabe-Button werden alle bisher eingegebenen Namen Nacheinander in einer Messagebox ausgegeben. Gebe das Programm ab



Ich habe jetzt auch schon geschafft, einen Namen zu schreiben und ihn auf den Array zu legen. Auch das ausgeben ist kein Problem. Nur ich weiß jetzt nich wie ich

1. machen soll, dass erst auf (array) Namen[1], dann auf Namen[2], Namen[3] usw. gespeichert wird.
2. machen soll, dass alle Namen die ich eingegeben habe untereinander angezeigt werden. (Showmessage)
Oder auch nacheinander.

Mein bisheriger Code sieht so aus:
Delphi-Quellcode:
unit Kapitel13;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label4: TLabel;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1; namen: array[1..100] of string; namencounter : integer;

implementation

{$R *.dfm}


procedure TForm1.Button3Click(Sender: TObject);
begin
  edit1.Clear;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage (namen[1]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  namencounter := namencounter +1;
end;

end.
Ich hoffe mir kann jemand helfen

Mfg

raysto

Geändert von mkinzler ( 6. Nov 2010 um 15:44 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 15:44
Beim speichern musst du eben immer den Index des Arrayelements angeben in dem der Name abgelegt werden soll. Am besten speicherst du den Index des aktuellen Elementes in einer privaten Variable deiner Formklasse. Da würde ich auch das Array ablegen und es nicht global deklarieren.
Zum Ausgeben musst du eine Schleife über das Array laufen lassen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
raysto

Registriert seit: 6. Nov 2010
62 Beiträge
 
#3

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 15:49
Ich arbeite noch nich so lange mit Delphi. Könntest du mir für das Speichern ein Codebeispiel machen?
Danke im vorraus.

Mfg

raysto
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 15:52
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
Type
  TNamenArray=Array of String;
var
  NamenArray:TNamenArray;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLength(NamenArray , High(NamenArray) + 2); // High eines Leeren Array's ist -1
  NamenArray[High(NamenArray)] := Edit1.Text;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i:Integer;
begin
  for I := Low(NamenArray) to High(NamenArray) do Showmessage(NamenArray[i]);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  i:Integer;
  s:String;
begin
  for I := Low(NamenArray) to High(NamenArray) do s := s + IntToStr(i) + ': ' + NamenArray[i] + #13#10;
  Showmessage(s);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  SetLength(NamenArray,0); // Array leeren
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 15:54
Na, Du hast doch bereits die Variable NamenCounter. Diese setzt Du bei Programmstart auf 1. Speicherst Du nun einen neuen Namen, legst Du ihn im Index NamenCounter des Array ab und erhöhst die Variable anschließend.
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 implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 15:55
Hier mal ein kleiner Pseudocode:
Code:
DU HAST:
- Feld mit Länge 5 vom Typen String
- Indexvariable vom Typen Integer

ROUTINE Speichern
DU HAST DAZU
- Name vom Typ String
BEGINNE
  SETZE Feld AN STELLE Indexvariable AUF Name
  ERHÖHE Indexvariable
ENDE

ROUTINE AlleAnzeigen
DU HAST DAZU
- Eine weitere Indexvariable, nennen wir sie i
BEGINNE
  FÜR i MIT JEDEM WERT VON 0 BIS 4
  BEGINNE
    ZEIGE Feld AN STELLE i
  ENDE
ENDE
Klarer geworden?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 16:06
Und hier meine Lösung mit einem statischen Array:
Delphi-Quellcode:
unit Unit11;

interface

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

const
    MAXNAMES = 3;

type
  TForm11 = class(TForm)
    edtName: TEdit;
    btnSave: TButton;
    btnShowNameList: TButton;
    btnClearList: TButton;
    Label1: TLabel;
    procedure btnClearListClick(Sender: TObject);
    procedure btnShowNameListClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    Names: array[0..MAXNAMES - 1] of string;
    CurrentIndex: Cardinal;
  public
    { Public-Deklarationen }
  end;

var
  Form11: TForm11;

implementation

{$R *.dfm}

procedure TForm11.btnClearListClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to High(Names) do
    Names[i] := '';
  CurrentIndex := 0;
end;

procedure TForm11.btnSaveClick(Sender: TObject);
begin
  btnSave.enabled := CurrentIndex < MAXNAMES - 1;
  edtName.enabled := CurrentIndex < MAXNAMES - 1;
  Names[CurrentIndex] := edtName.Text;
  if CurrentIndex < MAXNAMES - 1 then
  begin
    Inc(CurrentIndex);
    edtName.Clear;
    edtName.SetFocus;
  end;
end;

procedure TForm11.btnShowNameListClick(Sender: TObject);
var
  i: Integer;
  NameList: string;
begin
  for i := 0 to High(names) do
  begin
    NameList := NameList + Names[i] + #13#10;
  end;
  ShowMessage(NameList);
end;

procedure TForm11.FormCreate(Sender: TObject);
begin
  CurrentIndex := 0;
end;

end.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 16:19
2 Dinge dazu: werden lokale Stringvariablen automatisch leer initialisiert? Und selbst wenn, dann würde ich das aus Gewohnheit und gutem Stil geschuldet trotzdem selbst machen. Und wieso verwendet Ihr nicht die Konstante sLineBreak? Ich weiß zwar auch, dass das #13#10 ist, aber das muss man sich ja dann nicht mehr merken
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
raysto

Registriert seit: 6. Nov 2010
62 Beiträge
 
#9

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 16:19
Sry das ich euch nerve, aber ich versteh nur Bahnhof xD
Das Kapitel, mit dem wir Arrays gelernt haben, sieht so aus:

Delphi-Quellcode:
Kapitel 13 - Arrays
Manchmal benötigt man ziemlich viele Variablen, dann ist es etwas problematisch immer wieder neue anzulegen. Auch die Mathematik kennt das Problem und benutzt dann statt der Variablen a, b, c, ... die Variablen a1, a2, a3, ...
Das gleiche Prinzip kann man auch in der Informatik nutzen. Hier heißen solche indizierten Variablen Arrays. Statt der Variable a, b, c, ... legt man sich hier die Variable a[1], a[2], a[3], ... an. Auch diese Variablen müssen einen bestimmten Typ besitzen. Möchte man sich zum Beispiel die Belegung von einem Schachbrett merken, so kann man sich ein Array vom Typ String anlegen, dass von 1 bis 64 indiziert.
 var i : integer;
 var schachbrett: array[1..64] of string; // Legt sich ein Array namens schachbrett vom Typ string an
begin // Das Array akzeptiert einen Index zwischen 1 und 64
  for i := 1 to 64 do // Gehe alle 64 Felder durch und ...
    schachbrett[i]:=''; // ... weise diesen einen leeren String zu
  schachbrett[1]:='Turm'; // Weise dem ersten Feld den Wert 'Turm' zu
  schachbrett[2]:='Springer'; // usw ...
  schachbrett[3]:='Läufer';
  schachbrett[4]:='Dame';
  // ...
end;
Das obige Bespiel beschreibt ein sogenanntes eindimensionales Array. Manchmal möchte man aber auch Daten 2-dimensional ablegen (also in einer Art Tabelle). Dann kann man sich auch ein 2-dimensionales Array erstellen. Gerade beim Schach würde sich ein 2-dimensionales Array anbieten, da auch die Felder auf dem Schachbrett in mehrere Zeilen und Spalten unterteilt sind. Folgendes Beispeil verdeutlicht die Idee und die dazugehörige Syntax.
Delphi-Quellcode:
var i1,i2 : integer;
 var schachbrett: array[1..8,1..8] of string;
begin
  for i1 := 1 to 8 do
    for i2 := 1 to 8 do
      schachbrett[i1,i2]:='';
  schachbrett[1,1]:='Turm';
  schachbrett[2,1]:='Springer';
  schachbrett[3,1]:='Läufer';
  schachbrett[4,1]:='Dame';
end;

Wie man sieht hat jetzt das Array zwei Indizies. Sie rechen jeweils von 1 bis 8. So ergeben sich ebenfalls 64 Felder. Der große Unterschied ist, dass man sich do die Lage der Felder besser vorstellen kann und so besser und übersichtlicher programmieren kann. Selbstverständlich kann man auch Arrays mit noch mehr Dimensionen anlegen. Dies kommt aber in der gängigen Programmierpraxis eher selten vor.

Weitere Beispiele für Arrays sind:

Delphi-Quellcode:
VierGewinntFeld: array[1..7,1..6] of char; // entweder ' ' für leer oder 'g' für gelb, 'r' für rot
Namensliste: array[1..1000] of string; // hier kann man zum Beispiel eine Liste aller Schüler der Schule
                                           // oder Klasse anlegen. Man sollte sich dann aber noch eine Variable
                                           // NamenslisteCount vom Typ integer anlegen, in der man ablegt, wie
                                           // viele Einträge das Array derzeit besitzt. So kann man auch zur
                                           // Laufzeit weitere Einträge hinzufügen, so lange man nicht über
                                           // 1000 Einträge kommt.
UserListe: Array[1...9999] of TUser; // Eine Liste von Usern. Hier gibt es etwas besonderes, TUser ist
                                           // ein eigener Datentyp, den man vorher über das Schlüsselword
                                           // record angelegt hat.
Aufgaben:

Notiere dir wie immer die wichtige Inhalte in deinem Hefter. Insbesondere die fettgedruckten Wörter sind wichtig.
Finde mindestens drei weitere Beispiele für sinnvolle Arrays
Erstelle ein Programm, wo man in einem Textfeld beliebig viele Namen nacheinander eingeben kann. Die Namen werden nach dem Drücken vom Speichern-Button auf ein Array gelegt. Mit Drücken auf den Ausgabe-Button werden alle bisher eingegebenen Namen Nacheinander in einer Messagebox ausgegeben. Gebe das Programm ab

Da steht von euren Sachen noch gar nichts drin xD
Geht das nicht i-wie leichter?
Ich bin grad überfordert, sry...

Geändert von mkinzler ( 6. Nov 2010 um 17:04 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt und aufgespalten
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Namensprogramm hilfe!

  Alt 6. Nov 2010, 16:32
Das ist die leichteste Methode die es gibt
Wie stellst du es dir denn vor?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:09 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