Autor |
Beitrag |
xsus
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Fr 28.10.11 16:57
Hallo, ich habe in der Vergangenheit nur Konsolenanwendungen geschrieben,
nun gehe ich dazu über Programme mit GUI zu schreiben. Zum Üben versuche ich einfach,
meine alten Konsolenanwendungen in Programme mit GUI umzuschreiben. Nun stehe ich aber vor einem Problem.
Ich möchte ein Programm schreiben, dass alle Teiler einer beliebigen Zahl auflistet. In der Konsolenanwendung kein Problem,..
Ich weiß genau was und wo der Fehler steckt. Er überschreibt meine Variable immer und gibt mir nur den größten, letzten Teiler aus...
Wie realisiere ich, dass er mir eine Liste erstellt und alle Teiler auflistet? Benötige ich dafür Arrays? Wenn ja, wie gehe ich damit um?
Konsolenanwendung:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| program alleTeiler;
{$APPTYPE CONSOLE}
uses SysUtils;
var n, t:integer;
begin writeln ('Geben Sie bitte eine natuerliche Zahl ein, '); writeln ('von der Sie alle Teiler wissen moechten.'); writeln; write ('Eingabe: '); readln (n); writeln; writeln ('.................................'); writeln ('Sie haben ',n,' eingegeben.'); writeln ('.................................'); writeln; writeln ('---------------------------------------------------------'); writeln ('Ich liste Ihnen nun alle Teiler der Zahl ',n,' auf:'); writeln; for t:=1 to n do if n mod t=0 then writeln (n, ' ist durch ', t, ' teilbar.' ); writeln ('---------------------------------------------------------'); readln; end. |
...funktionier ja soweit ganz gut...
...nun zum Problemfall - Anwendung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; Label2: TLabel; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var eingabe,zaehler:integer; begin eingabe:=StrToInt(edit1.text); for zaehler:=1 to eingabe do if eingabe mod zaehler=0 then label2.Caption:=IntToStr(zaehler);
end;
end. |
Bin halt noch totaler Anfänger..also einfach erklären ^^ ...vielen Dank ..LG Moderiert von Narses: Topic aus Algorithmen, Optimierung und Assembler verschoben am Fr 28.10.2011 um 17:47
|
|
Teekeks
      
Beiträge: 211
Erhaltene Danke: 23
|
Verfasst: Fr 28.10.11 17:08
Entweder du ersetzt die Konsole durch ein TMemo wodurch aus jedem Writeln() ein memo1.Add() wird, oder du fügst zu deinem label immer nur die neuen Zahlen hinzu mit
Delphi-Quelltext 1:
| label2.caption := label2.caption + inttostr(zaehler) |
Dein momentanes Problem ist, dass ein Label bei der Ausgabe nicht wie eine Konsole den Text nur hinzufügt sondern komplett jedes mal neu setzt.
Gruß Teekeks
Für diesen Beitrag haben gedankt: xsus
|
|
GuaAck
      
Beiträge: 378
Erhaltene Danke: 32
Windows 8.1
Delphi 10.4 Comm. Edition
|
Verfasst: Fr 28.10.11 18:12
Auch TStringgrid ist dafür hübsch (Eine Liste, die etwa wie eine EXCEL-Tabelle aussieht.) Dann hat man das Ergebnis schön übersichtlich in Spalten und Zeilen. Zeilen- und Spaltenindex für die nächste zahl muss man allerdings selbst führen.
Gruß
GuaAck
Für diesen Beitrag haben gedankt: xsus
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Fr 28.10.11 18:26
Hey,
also das mit dem label immer eins hinzufügen klappt..ist simple und nicht so schön ^^ ...
wie verwende ich denn TMemo und / oder Tstringgrid ? ;D davon hab ich noch nie gehört ...
LG schumann.vas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 28.10.11 18:39
xsus hat folgendes geschrieben : | wie verwende ich denn TMemo und / oder Tstringgrid ? ;D davon hab ich noch nie gehört ... |
Auf dein Formular legen und/oder ausprobieren oder F1 drücken oder...
Außerdem gibts z.B. die Doku:
docwiki.embarcadero....Bearbeitungselemente
docwiki.embarcadero....StdCtrls.TMemo.Lines
...
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Fr 28.10.11 18:56
Zitat: | Auf dein Formular legen und/oder ausprobieren oder F1 drücken oder...
Außerdem gibts z.B. die Doku:
docwiki.embarcadero....Bearbeitungselemente
docwiki.embarcadero....StdCtrls.TMemo.Lines |
....ausprobieren..hatte ich schon längst gemacht, deshalb habe ich mich ja nochmal gemeldet^^ (ich nerv euch net umsonst) ...bei meinem Probieren kam herraus: Inkonpatible Typen TMemo und Integer ...
F1 - die Hilfe , die funktioniert nicht...ist ein bekannter Fehler bei Windows 7 und Delphi 7 ...
und die Links sind für nen Anfänger (für mich) zu komplex ._.
...wär jmd. so lieb das zu erklären? Danke LG
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 28.10.11 19:48
Also wenn dir so ein Beispiel MyMemo.Lines.Add(...); schon zu komplex ist, dann sollte man über ein anderes Hobby nachdenken. 
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Fr 28.10.11 19:51
das hat nichts damit zu tun  ..ich lerne das zur Zeit in der Schule ..jetzt sind Ferien und ich möchte meinen Horizont erweitern ..bloß .soll ichs mir aus den fingern saugen? ich glaube du hast das auch nicht von alleine gelernt, sondern duch personen die es dir lehrten ;b
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 28.10.11 22:00
xsus hat folgendes geschrieben : | ...bei meinem Probieren kam herraus: Inkonpatible Typen TMemo und Integer ... |
Bei welchem Quelltext denn?
xsus hat folgendes geschrieben : | F1 - die Hilfe , die funktioniert nicht...ist ein bekannter Fehler bei Windows 7 und Delphi 7 ... |
Richtig, das Problem ist bekannt, das habe ich in meiner Anleitung auch alles geschrieben, inklusive der Lösung:
www.delphi-library.de/topic_89408.html
xsus hat folgendes geschrieben : | und die Links sind für nen Anfänger (für mich) zu komplex ._.
...wär jmd. so lieb das zu erklären? |
Naja, die Frage ist halt was dir daran nicht klar ist...
xsus hat folgendes geschrieben : | ich glaube du hast das auch nicht von alleine gelernt, sondern duch personen die es dir lehrten ;b |
Ich hatte als ich angefangen habe Delphi 1 und die Hilfe dazu, mehr nicht. Internet hatte ich da noch nicht, nur später dann mal in der Bibliothek oder in der Schule, aber nicht ganz am Anfang.
Das ging eigentlich relativ gut bis ich mit der Windows API zu tun bekommen habe, da hatte ich zuerst ein paar Probleme.
Für diesen Beitrag haben gedankt: xsus
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Fr 28.10.11 22:08
Ich hab ganz vieles durchprobiert..entweder waren die nicht kompatibel oder ich hatte zu wenig echt parameter (oder so..) ...der 2. Quelltext..ganz am anfang..den wollte ich mit TMemo und / oder Tstringgrid ausstatten, wie vorgeschlagen , um das Programm anständig auszuführen.. nur mein problem ist das ich im moment nicht weiß wie ich mit denen umzugehen habe..man kann mir z.b sagen: nimm ne for-schleife ..wenn man davon noch nie hörte, kann man das nicht mal eben (gut ..die for schleife beherrsch ich..genug des beispiels)..LG ...danke für den Hinweis mit der Hilfe..werd ich mir gleich morgen mal anschauen 
|
|
n1con
Hält's aus hier
Beiträge: 12
Erhaltene Danke: 1
Win7 Ultimate x64
Delphi 6, Delphi 2007
|
Verfasst: Sa 29.10.11 02:28
Also mit einem Memo funktioniert das folgendermaßen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var eingabe, i : integer; begin eingabe:= StrToInt(Edit1.Text);
for i:= 1 to eingabe do begin if eingabe mod i = 0 then Memo1.Lines.Add(IntToStr(i)); end; end; |
Für diesen Beitrag haben gedankt: xsus
|
|
xsus 
      
Beiträge: 51
Win 2000, Win XP, Win 7; Ubuntu
Delphi 7, Delphi XE2, C
|
Verfasst: Sa 29.10.11 17:56
Okee ...vielen Dank...ich kanns 
|
|
n1con
Hält's aus hier
Beiträge: 12
Erhaltene Danke: 1
Win7 Ultimate x64
Delphi 6, Delphi 2007
|
Verfasst: So 30.10.11 17:43
Wenn du es natürlich ganz Effizient gestalten möchtest, dann schreibst du dir eine Funktion, die du in einer Unit speicherst und somit immer wieder verwenden kannst.
|
|
|