Autor Beitrag
Ottchen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Do 08.08.02 16:03 
Hallo Forum!

Schön, dass es wieder da ist. Mein Account wurde gelöscht; sicherlich durch diese Hacker-Attacke. Ist ja auch egal. Hauptsache, es ist wieder vorhanden. Vielen Dank an die "Betreiber"!! Sieht toll aus!

Ich möchte eine Notenverteilung für die Schule schreiben. Dazu soll eine beliebige Punktzahl die es auf eine Leistungskontrolle gab eingegeben werden können. Eingegeben werden soll auch meine erreichte Punktzahl. Für eine 1 braucht man z.B. 96 % der Leistung. Das Programm soll also intern (oder auch darstellbar) die Punkte (entsprechend den Prozentzahlen) umrechnen und per Knopfdruck meine erreichten Note ausgeben. Mit einer Case-Anweisung ist letzteres Problem ja machbar. Aber wie gestaltet man die Rohpunktzahl variabel?

Hat jmd. eine Idee? (Ich hoffe, meine Erklärung war nicht zu kompliziert...)

Vielen Dank! :roll:
Ottchen

_________________
See you.
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Do 08.08.02 18:00 
Hallo,

ich bin nicht sicher ob ich dich richtig verstanden habe.
Aber wenn, das besteht den Problem darin Zahlenbereiche in einer Case Anweisung abzufragen. Das geht so:
ausblenden Quelltext
1:
2:
3:
4:
Case Prozentzahl OF
 96..100 : Note := 1;
 89..95 : Note := 2;
[...]


Gruß
Klabautermann
Spike
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 69
Erhaltene Danke: 1



BeitragVerfasst: Do 08.08.02 18:26 
Hallo,

hab ich das richtig verstanden das Du in Deinem Programm die Prozentwerte variabel halten willst? In diesem Fall kommst Du mit Case nicht weiter da hier keine Variablen möglich sind. Da wirst Du wohl auf If..Then zurückgreifen müssen.

Spike
Ottchen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Do 08.08.02 18:39 
Titel: Hallo Klabautermann!
Hallo Klabautermann!

Klabautermann hat folgendes geschrieben:
Hallo,

ich bin nicht sicher ob ich dich richtig verstanden habe.
Aber wenn, das besteht den Problem darin Zahlenbereiche in einer Case Anweisung abzufragen. Das geht so:
ausblenden Quelltext
1:
2:
3:
4:
Case Prozentzahl OF
 96..100 : Note := 1;
 89..95 : Note := 2;
[...]


Gruß
Klabautermann



Ja das ist schon richtig, aber wie kann ich die Zahlen vor "Note" variabel gestalten. Schließlich ändert sich ja die Punktzahl auch immer.

Vielen Dank für die Antwort!

Ottchen

Ich glaube Spike hat Recht.

_________________
See you.
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Do 08.08.02 20:43 
Tag auch

@Ottchen: brauchst du doch garnicht. du errechnest anhand der möglichen punkte und der erreichten punkte die prozentzahl aus die er/sie erreicht hat, und dann kannst du den code von Klabautermann anwenden

auf die art kann sich doch die punktezahl ändern wie sie will. du bleibst doch immer bei der brechnung der prozentzahl und dann erst ermittelst du aus der prozentzahl die note

so stell ich mir das vor:

- punkte ist variabel zu prozentzahl
- aber prozentzahl entspricht einer note (statisch)
Spike
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 69
Erhaltene Danke: 1



BeitragVerfasst: Do 08.08.02 20:47 
@cbs: also ich hab's so verstanden das eben diese Prozentzahlen variabel sein sollen (warum auch immer). Und dann geht's nicht mit Case.

Spike
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Do 08.08.02 20:51 
@Spike:
Ottchen hat folgendes geschrieben:
...Für eine 1 braucht man z.B. 96 % der Leistung...

damit hat er sich doch festgelegt, welche prozentzahl einer note entspricht

so wie ich es verstanden habe:
cbs hat folgendes geschrieben:
- punkte ist variabel zu prozentzahl
- aber prozentzahl entspricht einer note (statisch)


@Ottchen: klär das doch mal bitte, was meinst du jetzt genau?
Spike
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 69
Erhaltene Danke: 1



BeitragVerfasst: Do 08.08.02 20:56 
Das ist natürlich richtig - bei statischer Prozentzahl ist der Code von Klabautermann die einfachste Form.
Ottchen müßte wohl noch mal genauer definieren was er mit variabler Rohpunktzahl meint.

Spike
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Fr 09.08.02 01:37 
Titel: Re: Hallo Klabautermann!
Ottchen hat folgendes geschrieben:
Ja das ist schon richtig, aber wie kann ich die Zahlen vor "Note" variabel gestalten. Schließlich ändert sich ja die Punktzahl auch immer.


Wie schon gesagt wurde, wenn dir Prozentzahl gleichbleibt hast du kein Problem. Wenn diese sich aber ändern kann (also in einem Andern Fach gibt es die 1 schon mit 80%) dann musst du auf IF THEN ELSE IF... ausweichen.

Gruß
Klabautermann
Ottchen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Fr 09.08.02 13:30 
Ja! das ist es!

@cbs hat's denke ich gefunden.
Man berechnet einfach aus der erreichten und der vorgegebenen Punktezahl (die sich ja bei jeder Arbeit ändert) die Prozentzahl und weist sie dann mit der case-Anw. zu. Cool.

Manchmal hat man eben einen Denkfehler und stellt sich ein bisschen dumm an...

Das mit der if-Anweis. ist auch eine gute Idee.

Vielen Dank Euch allen!


Im Pascal-Buch habe ich gefunden, dass man auch Zeichen eingeben kann. Allerdings kommt Delphi mit dem Datentyp "char" nicht zurecht, wenn ich folgendes eingebe:
ausblenden Quelltext
1:
2:
3:
4:
case taste of
  'a', 'A': ausgabe_edit.text:='Das war Tatse A';
  'b', 'B': ausgabe_edit.text:='Das war Tatse B';
end;

Kann man denn einfach so die Tasten abfragen bzw. die Befehle von Pascal hier anwenden?

Ottchen

_________________
See you.
MathiasH
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: Fr 09.08.02 21:46 
Da muss amn tricksen, schon mal was von Chr und Ord gehört, schau mal in der Delphi-Hilfe nach

MathiasH

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Fr 09.08.02 22:01 
komisch, ich hab damit noch nie probleme gehabt

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var c: char;
begin
  c:= 'a';
  case c of
    'a': showmessage('A');
    'b': showmessage('B');
    'c', 'd': showmessage('C oder D');
  end;
end;

klappt bei mir wunderbar!!!

wenn du c als string deklarierst gehts nicht so einfach
schau dir dann mal das hier an: case of und string
Ottchen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 43



BeitragVerfasst: Mi 14.08.02 15:34 
Titel: Es klappt nicht...
Hallo cbs!

Also: auf einem Formular wird aufgefordert, z.B. die Taste 'A' zu drücken und in einem Panel oder mit showmessage wird dann eine Nachricht (" Das war Tatse A...") ausgegeben. Nach deiner Variante ist die Variable c schon mit dem Wert a vorbelegt.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var c: char; 
begin 
  c:= 'a'; 
  case c of 
    'a': showmessage('A'); 
    'b': showmessage('B'); 
    'c', 'd': showmessage('C oder D'); 
  end; 
end;



Es wird also immer "A" ausgegeben! Niemals B oder C etc. Ich habe die Case-Anweisung einem Button zugewiesen, d.h. nach jedem Klick bzw. ENTER sollte eine der case-Anweisung entsprechende Nachricht erscheinen. Es klappt nicht.

Und wenn ich den Buchstaben per Edit-Feld einlese sind die Datentypen nicht kompatibel!

Also ohne EDIT-Feld Buchstaben drücken und dann soll die Nachricht erscheinen.

Hast du oder jmd. anders noch eine Idee für mich?

Ottchen :(

_________________
See you.
cbs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 207
Erhaltene Danke: 1



BeitragVerfasst: Mi 14.08.02 19:02 
ja, das 'a' habe ich vorbelegt weil doch sonst garnichts angezeigt werden würde. das war ja nur nen bsp das du dir noch ummogeln solltest.

haste leider nicht gemacht. na ok...

...du kannst trotzdem ein edit feld nehmen

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var c: char;
begin
  if Length(Edit1.Text) > 0 then begin
    c:= Edit1.Text[1];  //erstes zeichen nach c übergeben
    case c of 
      'a': showmessage('A'); 
      'b': showmessage('B'); 
      'c', 'd': showmessage('C oder D'); 
    end;
  end;
end;


um das ganze idiotensicher zu machen kannst du die eigenschaft MaxLength des TEdit auf 1 setzen. damit kannst du dann maximal ein zeichen eingeben (aber auch garkein zeichen, deshalb die prüfung mit length(Edit1.Text))

ich hoffe diesmal klappt alles :lol:

nachtrag: du kannst natürlich auch andere komponente nutzen, zb. TListBox oder TComboBox. mußte den code halt entsprechend anpassen. wenn nicht dann poste einfach nochmal mit ner genauen problem schilderung und was du genau machen möchtest

nochn nachtrag: du kannst die prüfung ob ein zeichen eingegeben wurde auch mit
ausblenden Quelltext
1:
if Edit1.Text <> '' then begin					

machen. :lol: viel spaß noch