Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Abi-Rechner (https://www.delphipraxis.net/125950-abi-rechner.html)

AlexanderBrade 15. Dez 2008 15:00


Abi-Rechner
 
Hallo,
wir haben in der Schule die Aufgabe erhalten einen Abi-Rechner(f. Sachsen-Anhalt) zu programmieren. Nur leider weiß ich nicht so
recht wie ich das Anfangen soll. Das Formular mag machbar sein, aber die sich dahinter verbergenden
Programmstrukturen?
Hat jemand eine Idee mein Problem möglichst schnell und unkompliziert zu lösen?
Danke im Voraus

divBy0 15. Dez 2008 15:01

Re: Abi-Rechner
 
Was soll denn ein Abi-Rechner sein? :gruebel:

AlexanderBrade 15. Dez 2008 15:05

Re: Abi-Rechner
 
Ein Abi-Rechner ist ein Programm, welches mir den Abiturdurchschnitt durch Eingabe der Halbjahres- bzw. Prüfungsleistungen
angibt. Sorry für den späten Hinweis!

freak4fun 15. Dez 2008 15:27

Re: Abi-Rechner
 
Zitat:

Zitat von AlexanderBrade
Hallo,
wir haben in der Schule die Aufgabe erhalten einen Abi-Rechner(f. Sachsen-Anhalt) zu programmieren. Nur leider weiß ich nicht so
recht wie ich das Anfangen soll. Das Formular mag machbar sein, aber die sich dahinter verbergenden
Programmstrukturen?
Hat jemand eine Idee mein Problem möglichst schnell und unkompliziert zu lösen?
Danke im Voraus

Öhm ... du hast dein Studienheft als Vorlage. ;) So wie du es "von Hand" rechnest machst es auch im Programm. :D

Sherlock 15. Dez 2008 15:27

Re: Abi-Rechner
 
Schreib doch noch ein bisschen genauer auf, was das Ding können soll. Wenn Du das nämlich getan hast, werden sich einige Fragen von ganz alleine Lösen. Andere können wir dann alle gemeinsam klären ;)

Sonst wird das nämlich nix, bzw. nur sowas:

Zitat:

Zitat von DocBrown
Ich müsste da mal einen Fluxkompensator basteln. Hat da einer eine Idee dazu?

Tage später:
Zitat:

Zitat von DocBrown
*PUSH*
Keiner?

Wochen später:
Zitat:

Zitat von DocBrown
Hab da selber was gebastelt... McFly probierts grad aus...


Sherlock

AlexanderBrade 21. Dez 2008 12:24

Re: Abi-Rechner
 
Ich bin jetzt auf das erste Problem gestoßen:
Als erstes möchte ich die Wahl der Fächer ermöglichen, z.B. Englisch, Französisch und Chemie aus insgesamt 6 möglichen Profilfächern.
Dazu habe ich 6 Checkboxen erstellt. Nur wie kann ich erreichen, dass das programm merkt wieviele Checkboxen angeklickt wurden um damit weiter zu arbeiten(suche eine Möglichkeit, die mir dies infach ermöglicht, da es ja nicht sein kein, dass ich alle Rutinen für jede mögliche Kombination einzeln programmieren muss).
Danke im voraus.

DeddyH 21. Dez 2008 12:30

Re: Abi-Rechner
 
Das ließe sich z.B. gut in einer Bitmaske oder einer Menge abbilden. Für weitere Infos verweise ich mal auf mein Tutorial.

AlexanderBrade 21. Dez 2008 12:36

Re: Abi-Rechner
 
Da find ich mich überhaupt nicht durch...
Was ind überhaupt flags?
Gibt es keine andere Möglichkeit?

P.S. Wie erzeuge ich eine Infobox?[lediglich ein "showmessage" mit einem "i" für info davor und mehrenen möglichen Zeilen Text]

DeddyH 21. Dez 2008 12:44

Re: Abi-Rechner
 
Ein Flag ist ein gesetztes Bit. Aber wahrscheinlich wäre es einfacher, mit einer Menge zu arbeiten. Du definierst Dir also je CheckBox eine Konstante und legst diese bei Bedarf in der Menge ab. Abfragen kannst Du dann mit dem in-Operator.
Delphi-Quellcode:
const cb1 = 1;
      cb2 = 2;
      cb3 = 3;
//usw.
var iMenge: set of Byte;
begin
  iMenge := [];
  if Checkbox1.Checked then
    Include(iMenge,cb1);
  if Checkbox2.Checked then
    Include(iMenge,cb2);
  //usw.

//Abfragen
if cb1 in iMenge then
  //Behandlungsroutine für Checkbox1
Für die "InfoBox" kannst Du <Application.>MessageBox verwenden. Schau dazu mal in die Hilfe, da sind auch die möglichen Werte für die Grafiken beschrieben.

AlexanderBrade 21. Dez 2008 13:03

Re: Abi-Rechner
 
Und wie frage ich jetzt ab, wieviele Elemnte die Menge enhält? P.S. Irgedetwas haut noch nicht hin...

DeddyH 21. Dez 2008 13:06

Re: Abi-Rechner
 
Wozu musst Du wissen, wieviele Elemente Deine Menge enthält? Und was haut nicht hin? Genauere Infos wären schon hilfreich.

AlexanderBrade 21. Dez 2008 13:09

Re: Abi-Rechner
 
Es gibt ja die Möglichkeit alle 6 Boxen gleichzeiig anzuklicken, als erstes muss ich überprüfen, dass nicht mehr als 3 Boxen aktiviert sind[ich möche für 4, 5 bzw. 6 aktivierte eine nachricht ausgeben die zur Korrektr der Angabn zwingt]der Rest funktioniert dann.

DeddyH 21. Dez 2008 13:12

Re: Abi-Rechner
 
Zähl doch einfach in einer globalen Variablen bzw. einem privaten Feld mit, wieviele Checkboxen aktiviert sind.

AlexanderBrade 21. Dez 2008 13:15

Re: Abi-Rechner
 
und wie? es tut mir immer leid so elementare Fragen zu stellen...
Aber unser Lehrer , so hat man immer den EIndruck, weiß garnicht wo von er spricht...

DeddyH 21. Dez 2008 13:25

Re: Abi-Rechner
 
Eine Beispielunit mit 6 Checkboxen:
Delphi-Quellcode:
unit Unit12;

interface

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

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    procedure RefreshCBCount(Sender: TObject);
  private
    { Private-Deklarationen }
    FCntCBs: Cardinal;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm12 }

//Diese Methode wurde per Objektinspektor allen Checkboxen zugewiesen (OnClick)
procedure TForm1.RefreshCBCount(Sender: TObject);
begin
  if Sender is TCheckBox then
    begin
      if TCheckBox(Sender).Checked then
        inc(FCntCBs)
      else
        dec(FCntCBs);
      if FCntCBs > 3 then
        MessageBox(Handle,'Zuviele Checkboxen gewählt','Info',MB_OK or MB_ICONINFORMATION);
    end;
end;

end.

AlexanderBrade 21. Dez 2008 14:54

Re: Abi-Rechner
 
Wo muss ich diese Prozedur hinzufügen?
P.S. Soll ja beim Klick eines Buttons ducrhlaufen werden!

DeddyH 21. Dez 2008 14:58

Re: Abi-Rechner
 
Kopier sie einfach in Deinen Quellcode (den Interface- und den Implementation-Teil). Und die Prüfung der Anzahl kannst Du ja ausschneiden und in Dein ButtonClick einfügen.
Zitat:

Delphi-Quellcode:
if FCntCBs > 3 then
  MessageBox(Handle,'Zuviele Checkboxen gewählt','Info',MB_OK or MB_ICONINFORMATION);


AlexanderBrade 21. Dez 2008 15:07

Re: Abi-Rechner
 
Und wo kommt dann der Res deiner vorigen Prozedur hin(wenn ich nur die Abfrage der Anzahl einfüge hat er die Anzahl doch noch garnich gezählt), d.h. wie weise ich allen Checkboxen diese Methode per Objektinspektor zu?

DeddyH 21. Dez 2008 15:09

Re: Abi-Rechner
 
Markiere die Checkboxen in der IDE, wechsel im OI auf den Reiter "Ereignisse" und wähle OnClick diese Methode aus.

AlexanderBrade 21. Dez 2008 15:15

Re: Abi-Rechner
 
Wo schreibe ich jetzt die Prozedur hin?
Wenn ch sie einfach so im Quelltext al gliechwertige Prozedur einfüge werden verschiedene Betandteile der Prozedur rot unterstrichen und er kann nicht kompilieren!

DeddyH 21. Dez 2008 15:21

Re: Abi-Rechner
 
:glaskugel: Dann machst Du irgend etwas falsch, ich habe sie auch "frei Hand" in meinen Source geschrieben. Zur Not häng mal Deine Unit an, ich komplettiere sie dann.

AlexanderBrade 21. Dez 2008 15:23

Re: Abi-Rechner
 
Liste der Anhänge anzeigen (Anzahl: 1)
Alles klar!
siehe Anhang...
Delphi-Quellcode:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    procedure RefreshCbCount(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);


   
  private
    { Private-Deklarationen }
    FCntCBs: Cardinal;
  public
    { Public-Deklarationen }
  end;


  const cb1 = 1;
        cb2 = 2;
        cb3 = 3;
        cb4 = 4;
        cb5 = 5;
        cb6 = 6;
var
  Form2: TForm2;
  iMenge: set of Byte;

implementation

uses Unit3, Unit1;

{$R *.dfm}
 { Tform12 }




 procedure TForm1.RefreshCBCount(Sender: TObject);
begin
  if Sender is TCheckBox then
    begin
      if TCheckBox(Sender).Checked then
        inc(FCntCBs)
      else
        dec(FCntCBs);
      if FCntCBs > 3 then
        MessageBox(Handle,'Zuviele Checkboxen gewählt','Info',MB_OK or MB_ICONINFORMATION);
    end;
end;




procedure TForm2.Button2Click(Sender: TObject);
begin
form2.Visible:=false;
form1.visible:=true;
end;

procedure TForm2.Button4Click(Sender: TObject);
begin
form3.Visible:=true;
end;



procedure TForm2.Button3Click(Sender: TObject);
begin
iMenge:= [];
 if checkbox1.Checked then
    include(iMenge, cb1);
 if checkbox2.Checked then
    include(iMenge, cb2);
 if checkbox3.Checked then
    include(iMenge, cb3);
 if checkbox4.Checked then
    include(iMenge, cb4);
 if checkbox5.Checked then
    include(iMenge, cb5);
 if checkbox6.Checked then
    include(iMenge, cb6);

    if FCntCBs > 3 then
  MessageBox(Handle,'Zuviele Checkboxen gewählt','Info',MB_OK or MB_ICONINFORMATION);

if (cb1) and (cb2) and (cb3) in iMenge then showmessage('Naturwissenschaft'); //Abfragen der Menge
if (cb4) and (cb5) and (cb6) in iMenge then showmessage('Sprache');
{if cb1 and cb2 and cb4   then form4.label2.caption:= }



end;

end.

DeddyH 21. Dez 2008 15:28

Re: Abi-Rechner
 
Ich seh schon, was fehlt. Schreib mal in der Typdeklaration des Formulars folgene Zeile vor das "private":
Delphi-Quellcode:
procedure RefreshCBCount(Sender: TObject);
Btw: Auch wenn das kompiliert wird, glaube ich, dass Du bei
Zitat:

Delphi-Quellcode:
if (cb1) and (cb2) and (cb3) in iMenge then showmessage('Naturwissenschaft');

falsche Ergebnisse bekommst.
Schreib das lieber mal so um:
Delphi-Quellcode:
if (cb1 in iMenge) and (cb2 in iMenge) and (cb3 in iMenge) then showmessage('Naturwissenschaft');

AlexanderBrade 21. Dez 2008 15:33

Re: Abi-Rechner
 
Nein, das hat nicht gefhlt, hab es nur wo anders hingeschrieben...
Aber trotzdem kann es nicht kompiliert werden, bleibt immer bei der Prozedur hängen:
Delphi-Quellcode:
procedure TForm1.RefreshCBCount(Sender: TObject);
begin
{usw}
Im Übrigen danke für den anderen Tipp!

DeddyH 21. Dez 2008 15:39

Re: Abi-Rechner
 
Das muss ja auch TForm2 heißen.

[edit] Was mir gerade auffällt: Deine Logik scheint etwas merkwürdig zu sein. Wieso müssen die Checkboxen 1 bis 3 alle aktiv sein, um als Naturwissenschaft zu gelten? Das Gleiche mit den anderen Checkboxen :gruebel: [/edit]

AlexanderBrade 21. Dez 2008 16:15

Re: Abi-Rechner
 
Ja da hast du Recht, werde ich gleich korrigieren...
Noch mal ne andere Frage[klappt jetzt]:
Wie kann ich die Captions von Panels während des Programmablaufs ändern?
Delphi-Quellcode:
form5.Panel5.caption:='EN'
Das klappt nicht!!!

DeddyH 21. Dez 2008 16:30

Re: Abi-Rechner
 
Was heißt "klappt nicht"? Compilerfehler oder Laufzeitfehler? Syntaktisch ist Dein Code in Ordnung.

AlexanderBrade 21. Dez 2008 16:34

Re: Abi-Rechner
 
ALso kleine Korrektur den vorher gegebenen Code kompiliert er, wenn ich aber so etwas schreibe:
Delphi-Quellcode:
if (cb1 in iMenge) and (cb2 in iMenge) and (cb4 in iMenge) then (form5.Panel5.caption:='EN') and (form2.panel1.caption:='1');
heißt es "Poerator ist auf diesen Operandentyp nicht anwendbar.

DeddyH 21. Dez 2008 16:38

Re: Abi-Rechner
 
So geht das ja auch nicht. Versuch es mal so (ein Grundlagentutorial zu lesen wäre vielleicht auch eine gute Idee):
Delphi-Quellcode:
if (cb1 in iMenge) and (cb2 in iMenge) and (cb4 in iMenge) then
  begin
    form5.Panel5.caption:='EN';
    form2.panel1.caption:='1';
  end;

AlexanderBrade 21. Dez 2008 16:47

Re: Abi-Rechner
 
und warum schriebt er bei folgendem inkompatible Typen?
Delphi-Quellcode:
if (cb1 in iMenge) and (cb2 in iMenge) and (cb4 in iMenge) then begin form5.Panel5.caption:='EN'; form5.panel6.caption:='FRZ'; form5.Panel7:='PHY'; end;
Sorry mein Fehler "caption" fehlt.

DeddyH 21. Dez 2008 16:49

Re: Abi-Rechner
 
Zitat:

Delphi-Quellcode:
form5.Panel7:='PHY';

Da fehlt was ;)

AlexanderBrade 21. Dez 2008 18:44

Re: Abi-Rechner
 
Delphi-Quellcode:
edit1.Text := a;
form5.panel12.Caption:= a;
edit2.Text := b;
form5.panel13.caption:= b;
Warum funktionert das nicht?
a habe ich als string deklariert.
Mekkert auch nicht beim compilieren!
-->Was ich in die editbox schreibe sollte er doch in die Panelüberschrift übernehmen...

DeddyH 21. Dez 2008 18:53

Re: Abi-Rechner
 
Meintest Du das nicht eher so?
Delphi-Quellcode:
form5.panel12.Caption:= edit1.Text;
form5.panel13.caption:= edit2.Text;
P.S.: die Namen von Komponenten kann man auch ändern, dann sieht man bei gescheiter Namensgebung gleich im Quelltext, was was ist.

AlexanderBrade 21. Dez 2008 19:04

Re: Abi-Rechner
 
Delphi-Quellcode:
if edit1.Text:='' then showmessage('Bitte geben Sie ein Fach ein')
Gibt es sowas? Bzw. wie kann ich realisiere, dass man mindestens ein Feld ausfüllen muss?

DeddyH 21. Dez 2008 19:09

Re: Abi-Rechner
 
Für ein einziges Edit ist Dein Code schon ganz in Ordnung (Vergleiche aber mit = statt :=, das wäre sonst eine Zuweisung). Ansonsten musst Du die Bedingungen klammern.
Delphi-Quellcode:
if (Edit1.Text = '') and (Edit2.Text = '') and (Edit3.Text = '') then
  ShowMessage('Was soll'' s denn nun sein?');

AlexanderBrade 22. Dez 2008 09:12

Re: Abi-Rechner
 
Delphi-Quellcode:
if (form5.Panel6.caption = 'CHE') and (form5.Panel6.color:= clblue) then
Gibt es sowas?

Außerdem möchte ich, da ich aus dem Bereich der Wahlpflichtfächer noch 8 weitere Notenpunkte einbringen muss, mein array sortieren um dem Programm zu ermöglichen, dass automatisch nur die besten Leistungen eingebracht werden.
-->Ist das möglich???????

DeddyH 22. Dez 2008 11:21

Re: Abi-Rechner
 
Natürlich geht so etwas. Allerdings solltest Du die Logik von der Darstellung trennen. Und zum Sortieren hat Daniel mal ein schönes Tut geschrieben, schau mal in der entsprechenden Sparte nach.

AlexanderBrade 22. Dez 2008 12:26

Re: Abi-Rechner
 
UNd wie wende ich den BubbleSort auf mein Array[1..3,7..12] an?
Delphi-Quellcode:
Procedure BubbleSort;
var i,j : Integer;
Begin
  For i:= N downto 1 Do
    For j:= 1 To i Do
      If (Data[j-1] > Data[j]) Then SwapValues( j-1, j );
End;

DeddyH 22. Dez 2008 12:34

Re: Abi-Rechner
 
Du hast ja da ein 2-dimensionales Array. Nun musst Du Dir überlegen, in welcher Dimension Du das sortieren möchtest. Die Syntax ist dann dabei fast die Gleiche mit der Ausnahme, dass die 2. Dimension halt noch dazugeschrieben werden muss.

[edit] Wobei ich nun endgültig der Meinung bin, dass Du je Frage einen neuen Thread eröffnen solltest. [/edit]

AlexanderBrade 22. Dez 2008 12:40

Re: Abi-Rechner
 
Ja ich werde bei der nächsten großen Frage einen neuen Thread eröffnen.
Aber ich habe zunächst noch zwei Fragen, wie schreibe ich die zweite Dimension dazu? Im übrigen wofür steht "data" und wohin muss ich die Prozedur schreiben?
Und wie kann ich dann aus der sortierten "Liste" die 8 besten Leistungen auslesen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 Uhr.
Seite 1 von 2  1 2      

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