AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi FreePascal Niedrigsten Werte in Array finden
Thema durchsuchen
Ansicht
Themen-Optionen

Niedrigsten Werte in Array finden

Ein Thema von MastersOfDesasters · begonnen am 4. Mär 2013 · letzter Beitrag vom 4. Mär 2013
Antwort Antwort
MastersOfDesasters

Registriert seit: 4. Mär 2013
5 Beiträge
 
#1

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 10:51
Wie mach ich das?
Ich weiß nicht wie man das sortiert, und dann anspricht -.-
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#2

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 10:57
Delphi-Quellcode:
type
  TSpinEditArray = array[0..10] of TSpinEdit;

  TDeinForm = class(TForm)
  ...
  private
    FSpinEdits: TSpinEditArray;
    ...
  end;
Den einzelnen Array-Elementen weist Du nun z.B. im FormCreate die entsprechenden SpinEdits zu. Auf Knopfdruck oder wann auch immer sortierst Du nun das Array. Angedeuteter Bubblesort:
Delphi-Quellcode:
for i := Low(FSpinEdits) to High(FSpinEdits) - 1 do
  if FSpinEdits[i].Value > FSpinEdits[i + 1].Value then
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
MastersOfDesasters

Registriert seit: 4. Mär 2013
5 Beiträge
 
#3

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 11:09
Vieleicht reden wir aneinander Vorbei.
In der Praxis sieht es so aus (beispielsweise):

Mathematik: 12 / 10 / 9 / 12
Geschichte: 9 / 10 / 7 / 5
Englisch: 11 / 7 / 13 / 11
Physik: 11 / 5 / 6 / 9

Nun soll das Programm die 4 geringsten Werte finden,
und diese rot einfärben. Dabei dürfen in jeder "Zeile" bzw. einem
Fach NUR bis zu 2 Bewertungen gestrichen werden.

Das Ergebnis sollte dann so in der Richtung aussehen:

Mathematik: 12 / 10 / 9 / 12
Geschichte: 9 / 10 / 7 / 5
Englisch: 11 / 7 / 13 / 11
Physik: 11 / 5 / 6 / 9
  Mit Zitat antworten Zitat
MastersOfDesasters

Registriert seit: 4. Mär 2013
5 Beiträge
 
#4

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 11:21
Naja es ist so in Thüringen,
das wir am Ende das Abis 4 Semester "streichen" müssen.
Logischerweise streicht man die schlechtesten Bewertungen.
Da wir hier 4 Semester pro Fach haben (2 Jahre Oberstufe), und
man nicht ein Fach komplett streichen darf, gibt es die Regel, das man
pro Fach nur maximal 2 Semester streichen kann.
Es kann natürlichauch nur eins gestrichen werden.

Die effektivste "Streichung" habe ich unten mal an einem Beispiel
demonstriert.

Mathematik: 12 / 10 / 9 / 12
Geschichte: 9 / 10 / 7 / 5
Englisch: 11 / 7 / 13 / 11
Physik: 11 / 5 / 6 / 9

Das Ergebnis sollte dann so in der Richtung aussehen:

Mathematik: 12 / 10 / 9 / 12
Geschichte: 9 / 10 / 7 / 5
Englisch: 11 / 7 / 13 / 11
Physik: 11 / 5 / 6 / 9
Das ist auch das, was das Programm machen soll.

Fazit:

*schlechtesten Fächer sollen gestrichen werden
*11 Fächer mit je 4 Semestern (Halbjahresnoten)
*nur maximal 2 Semester pro Fach "streichbar"
*Ziel: maximale Gesamtpunktzahl

  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 11:27
[OT]komplett gestrichen[/OT]

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 11:37
Die ganze Prozedur ist allerdings noch nicht eindeutig für einen Algorithmus spezifiziert! Warum wird zB nicht die 7 in Geschichte sondern die in Englisch gestrichen? Weiter: Wie soll der Fall behandelt werden, wenn in den 11 Fächern zB 5-mal der Minimalwert in verschiedenen Fächern vorkommt?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 13:22
Scheint egal zu sein, wenn es nur darum geht die Gesamtpunktzahl zu maximieren.

1. Nimm von jedem Fach die beiden schlechtesten Semester.
2. Bilde eine Gesamtmenge aus den Ergebnissen von 1.
3. Wähle die vier schlechtesten aus dieser Gesamtmenge.

Delphi-Quellcode:
type
  TSpinArr = array of TSpinEdit;

procedure Tausche(var A, B: TSpinEdit);
var
  T: TSpinEdit;
begin
  T := A;
  A := B;
  B := T;
end;

function ErmittleSchlechteste(const AEditArr: TSpinArr; ACount: Integer): TSpinArr;
var
  i1, i2, n: Integer;
  Item: TSpinEdit;
begin
  SetLength(Result, ACount);
  n := 0;
  for i1 := Low(AEditArr) to High(AEditArr) do
  begin
    Item := AEditArr[i1];
    if n < ACount then
    begin
      Result[n] := Item;
      Inc(n);
    end
    else
    begin
      for i2 := 0 to ACount - 1 do
      begin
        if Item.Value < Result[i2].Value then
          Tausche(Item, Result[i2]);
      end;
    end;
  end;
  SetLength(Result, n);
end;

function Gesamtmenge(const A1, A2: TSpinArr): TSpinArr;
var
  i, n1, n2: Integer;
begin
  n1 := Length(A1);
  n2 := Length(A2);
  SetLength(Result, n1 + n2);
  for i := 0 to n1 - 1 do
    Result[i] := A1[i];
  for i := 0 to n2 - 1 do
    Result[n1 + i] := A2[i];
end;

var
  FFach: array of record
    Name: string;
    Semester: TSpinArr;
  end;
  X1, X2: TSpinArr;
  i: Integer;
begin
  SetLength(FFach, 11);

  FFach[0].Name := 'Mathematik';
  SetLength(FFach[0].Semester, 4);
  FFach[0].Semester[0] := SpinEditFach1Semester1;
  FFach[0].Semester[1] := SpinEditFach1Semester2;
  FFach[0].Semester[2] := SpinEditFach1Semester3;
  FFach[0].Semester[3] := SpinEditFach1Semester4;
  {usw.}
  SetLength(X1, 0);
  for i := Low(FFach) to High(FFach) do
  begin
    X2 := ErmittleSchlechteste(FFach[i].Semester, 2);
    X1 := Gesamtmenge(X1, X2);
  end;
  X1 := ErmittleSchlechteste(X1, 4);
end;

Geändert von Blup ( 4. Mär 2013 um 16:37 Uhr) Grund: Code ergänzt
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 11:09
Sortieren ist fast schon Overkill.

Pseudocode:
Code:
MinWert := Wert des 1. Element
Gehe alle Elemente durch:
  Wenn Wert des aktuellen Elements < MinWert:
    MinWert := Wert des aktuellen Elements
So findest du das Minimum. Jetzt solltest du dir zusätzlich zum minimalen Wert natürlich noch den Index des Elements merken, um das zugehörige Edit zu rauszufinden.

Anschließend entfernst du das gefundene Element und führst den Algorithmus erneut aus, um das „zweitminimalste“ Element zu finden.

Edit: Oder du implementierst einen Selection-Sort, der nach dem 4. Durchlauf abgebrochen wird. Ist eigentlich fast dasselbe...

Geändert von Namenloser ( 4. Mär 2013 um 11:11 Uhr)
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#9

AW: Niedrigsten Werte in Array finden

  Alt 4. Mär 2013, 11:11
Ich habe das eher so verstanden für jedes Fach das schlechteste Semester zu finden.
Wenn nur 1 aus n gefragt ist, kann man sich das sortieren auch sparen:
Delphi-Quellcode:
procedure MarkiereSchlechtesteNote(const AEditArr: array of TSpinEdit);
var
  i: Integer;
  Item: TSpinEdit;
begin
  Item := nil;
  for i := Low(AEditArr) to High(AEditArr) do
  begin
    if (Item = nil) or (Item.Value > AEditArr[i].Value) then
      Item := AEditArr[i];
    AEditArr[i].Color := clWindow;
  end;
  if Assigned(Item) then
    Item.Color := clRed;
end;

{Fach1}
MarkiereSchlechtesteNote([SpinEditFach1Semester1,
                          SpinEditFach1Semester2,
                          SpinEditFach1Semester3,
                          SpinEditFach1Semester4]);
{Fach2}
MarkiereSchlechtesteNote([SpinEditFach2Semester1,
                          SpinEditFach2Semester2,
                          SpinEditFach2Semester3,
                          SpinEditFach2Semester4]);
{usw.}
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 17:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz