Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi [Non VCL] Dynamisches Array erstellen, füllen & ausgeben (https://www.delphipraxis.net/169576-%5Bnon-vcl%5D-dynamisches-array-erstellen-fuellen-ausgeben.html)

Back2Code 30. Jul 2012 10:02

[Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Delphi-Quellcode:
// Dynamisches Array erstellen, füllen & ausgeben
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  anzahl,anzahl1,i,o: integer;
  eingabe: string;
  ListArray: array of string;
  valid: boolean = True;

begin
  WriteLn('########################################');
  WriteLn('Wieviele Namen moechten Sie eintragen?');
  ReadLn(anzahl);
  SetLength(ListArray, anzahl);

  for i := 0 to anzahl - 1 do

    begin
      if i = anzahl -1 then
      begin
        WriteLn('Geben sie bitte den letzten Namen ein: ');
        end
        else
      WriteLn('Geben sie bitte den Namen ein: ');
      ReadLn(ListArray[i]);
    end;


  WriteLn('');

    WriteLn('Alle Namen wurden eingespeichert!');

      WriteLn('');

    WriteLn('Ausgabe aller Namen erfolgt...');

      WriteLn('');

  for o := 0 to anzahl - 1 do
    begin
      WriteLn(ListArray[o]);
    end;


    WriteLn('');
    WriteLn(' Aktueller Indexstand : ' + IntToStr(anzahl));

    while valid = True do

    begin
    WriteLn(' Geben Sie einen Index an, um das entsprechende Item auszugeben: ');
    ReadLn(anzahl1);
    if anzahl1 > anzahl then
    begin
    WriteLn('Item existiert nicht!');
    end
    else
    begin
    WriteLn(ListArray[anzahl1-1]);
    Valid := False;
    end;
  end;

    WriteLn('');
    WriteLn('########################################');
    WriteLn('Programmende');
    WriteLn('');
    ReadLn;
end.

p80286 30. Jul 2012 10:12

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Seehr hübsch.
Aber warum mal "Namen" und dann "Items"?
Und was passiert wenn man als "Anzahl" z.B. Anzahl eingibt?
Außerdem ist mir der Eigentliche Programmablauf nicht so ganz klar, aber das liegt wohl an der sehr individuellen Formatierung.

Übrigens ist ein String als Element eines Dyn.Arrays nicht so geeignet,eine Stringlist wäre da geeigneter.

ach ja gibst Du den alozierten Speicher auch mal wieder frei?

Gruß
K-H

Back2Code 30. Jul 2012 10:17

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Zitat:

Aber warum mal "Namen" und dann "Items"?
Hab ich wohl noch vergessen zu ändern, da ja jeder gespeicherte Name im Array ein "Index" ist.


Zitat:

Und was passiert wenn man als "Anzahl" z.B. Anzahl eingibt?
Noch nicht getestet. Da ich keine Exception eingebaut habe wirds zu nem Fehler kommen.


Und der Speicher wird nicht freigegeben :o Dass es nicht perfekt ist, war mir vornerein klar ich bin ja auch noch ein Anfänger :)

p80286 30. Jul 2012 10:23

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Da hab' ich wohl etwas falsch verstanden.
Nichts für ungut, da Du ein Anfänger bist, war es unverzeilich Dich auf Schwächen in Deinem Programm hin zu weisen.

Gruß
K-H

Back2Code 30. Jul 2012 10:27

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Zitat:

Zitat von p80286 (Beitrag 1176280)
Da hab' ich wohl etwas falsch verstanden.
Nichts für ungut, da Du ein Anfänger bist, war es unverzeilich Dich auf Schwächen in Deinem Programm hin zu weisen.

Gruß
K-H

Ich verzeih dir :wink:

Wie gibt man den Speicher denn genau wieder frei am Ende? Und wie könnte man am besten am Anfang abfragen, dass nur Zahlen bei der Anzahlabfrage eingegeben werden ansonsten ne Fehlermeldung ausgeben.

Hab eben schon was mit ne IF Abfrage versucht nur das wollte nicht so ganz.:oops:

Medium 30. Jul 2012 10:30

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Drei Dinge:

1) Das ganze hat nichts mit NonVCL zu tun. Du benutzt sie zwar nicht, aber da man für Arrays die VCL ohnehin nicht braucht, ist dies keine Besonderheit deines Codes.
2) Wenn du schon weisst, dass der Code Schwächen hat, dann sollte dir doch auch klar sein, dass der kaum als Musterbeispiel für eine Code-Lib taugt.
3) Das Beispiel ist willkürlich und unnötig in einen Kontext gebracht. Ein kurzes allgemeines Tutorial mit Erläuterungen zu z.B. SetLength() wäre verständlicher. Ein auscodiertes Beispiel würde dort dann eher als Anwndungsbeispiel Platz finden.

Punkt 2 ist imho der ungünstigste. Wenn man schon Muster, Tipps für andere, gerade Anfänger, posted, sollte alles so sauber und best-practice sein wie es eben nur geht. Fehleranfälliger und mäßig formatierter unkommentierter Code ist wertfrei.

EWeiss 31. Jul 2012 06:20

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Zitat:

Zitat von Robin2k (Beitrag 1176281)
Zitat:

Zitat von p80286 (Beitrag 1176280)
Da hab' ich wohl etwas falsch verstanden.
Nichts für ungut, da Du ein Anfänger bist, war es unverzeilich Dich auf Schwächen in Deinem Programm hin zu weisen.

Gruß
K-H

Ich verzeih dir :wink:

Wie gibt man den Speicher denn genau wieder frei am Ende? Und wie könnte man am besten am Anfang abfragen, dass nur Zahlen bei der Anzahlabfrage eingegeben werden ansonsten ne Fehlermeldung ausgeben.

Hab eben schon was mit ne IF Abfrage versucht nur das wollte nicht so ganz.:oops:

Warum verzeihen ?
Es war Ironisch von p80286 gemeint.
Denke eher du solltest dir selbst verzeihen das du nicht verstanden hast das er dir nur Helfen wollte.
Gerade dann wenn man Anfänger ist sollte man Dankbar sein über die Hilfe die einem widerfährt.

Das ist was ich hier so sehr vermisse ein Einfaches "DANKE"
Anstelle rumzumosern dafür das man Tip's und Hilfestellungen umsonst bekommt.

Ansonsten zu deiner Frage.
Zitat:

Wie gibt man den Speicher denn genau wieder frei am Ende?
Setze dein Array doch auf den Urzustand zurück .. der wäre wenn du nur Strings verwendest auf die länge "0"
Hätte dir p80286 auch verraten wenn du etwas freundlicher gewesen wärest.


gruss

Bummi 31. Jul 2012 07:06

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Zitat:

ach ja gibst Du den alozierten Speicher auch mal wieder frei?
Kinders, ich glaube ich werde alt, welchen Speicher soll man warum wieder freigeben?

Back2Code 31. Jul 2012 07:09

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Ich versteh nicht, wieso hier immer alle gleich so eingeschnappt sind, wenn man eine präzise Frage stellt..Soll ich noch 100 Herzen + Bitte posten damit es "freundlicher" rüber kommt?

EWeiss 31. Jul 2012 07:15

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Zitat:

Zitat von Robin2k (Beitrag 1176395)
Ich versteh nicht, wieso hier immer alle gleich so eingeschnappt sind, wenn man eine präzise Frage stellt..Soll ich noch 100 Herzen + Bitte posten damit es "freundlicher" rüber kommt?

Nö. Ein Danke hätte gereicht. :)
Sowas kommt immer gut an und sind doch nur 4 nee warte mal 5 Buchstaben.

gruss

himitsu 31. Jul 2012 07:53

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Was hat eigentlich VCL und NonVCL mit einem Typen zu zun, der eh nichtvisual ist und mit "VCL" sowieso nix zu tun hat?

p80286 31. Jul 2012 09:55

AW: [Non VCL] Dynamisches Array erstellen, füllen & ausgeben
 
Zitat:

Zitat von himitsu (Beitrag 1176403)
Was hat eigentlich VCL und NonVCL mit einem Typen zu zun, der eh nichtvisual ist und mit "VCL" sowieso nix zu tun hat?

a) es ist ein Consolen-Programm
b) "und mit "VCL" sowieso nix zu tun hat" eben drum.

Zitat:

Zitat von Bummi (Beitrag 1176394)
Zitat:

ach ja gibst Du den alozierten Speicher auch mal wieder frei?
Kinders, ich glaube ich werde alt, welchen Speicher soll man warum wieder freigeben?

Den seines Arrays? Ist hier nicht notwendig, aber wenn sich das einschleicht.
(Gehört meiner Meinung nach zum guten Ton den Speicher wieder sauber zu hinterlassen)

@EWeiss
:thumb:

Gruß
K-H


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