Veröffentlicht 7. Mai7. Mai static public int RechnelastTage(DateTime anfang , DateTime ende , Belegung[] belegen , Station station) { DateTime t_date = anfang; int arrayLength = 0; while (t_date < ende) { arrayLength++; t_date = t_date.AddDays(1); } int[] tage = new int[arrayLength]; t_date = anfang; int j = 0; while (t_date < ende) // ich kann eigentlich direkt auf tage iterieren , aber bei der prüfung ist mir nicht eingefallen { for( int i = 0; i < belegen.Length; i++) { if (belegen[i].GetStart() >= anfang && belegen[i].GetEnd() <= ende && belegen[i].IdStation() == station.ID()) { tage[j]++; } } j++; t_date = t_date.AddDays(1); } int lastTage = 0; foreach ( int i in tage) { double last = (double)i / (double)station.AnzahlBett(); if ( last > 0.8) { lastTage++; } } return lastTage; }
7. Mai7. Mai Autor Getestet habe ich und funktioniert... ich weiß nicht ob ich etwas ausgelassen habe 😥
7. Mai7. Mai Meine Definition der Funktion static public int RechnelastTage(DateTime anfang , DateTime ende , Belegung[] belegenungen, Station station) currentDate := anfang; countAusgelasteteTage := 0; While currentDate <= end countBelegteBetten := 0; for i := 0 to belegungen.length -1 if belegungen[i].getStationId() = station.getStationId() if belegungen[i].getDatumVon() <= currentDate and belegungen[i].getDatumBis() >= currentDate countBelegteBetten := countBelegteBetten + 1; end if end if end for if countBelegteBetten / station.getAnzahlBetten() > 0.8 countAusgelasteteTage := countAusgelasteteTage + 1; end if end while return countAusgelasteteTage; end RechnelastTage
7. Mai7. Mai Ich habe allerdings bis <= endDatum iteriert in der äußeren Schleife. Ich hoffe, dass das nicht falsch ist 😕
7. Mai7. Mai Hier ist meine Loesung: func auslastungAusrechnen(belegung: Array<Belegung>, startDatum: Date, endDatum: Date, station: Station) -> Int { // Rechne wie viel Auslastung 80% der Gesamtverfuegbarkeit entspricht let auslastung80Prozent = Int(station.anzahlBetten * 0.8) // Rechne Auslastung pro Tag var tage: [Date: Int] = [:] // Dictionary bzw. Map! Z.B. std::map<Date, int> in C++ for datum in startDatum...endDatum { tage[datum] = 0 for b in belegung { if b.stationId == station.stationId && b.datumVon <= datum && b.datumBis > datum { tage[datum]! += 1 } } } // Rechne Anzahl Tage an denen Auslastung mehr als 80% war var ergebnis = 0 for (_, belegungen) in tage { if belegungen > auslastung80Prozent { ergebnis += 1 } } return ergebnis } In dem Pseudocode den ich in der Prüfung geschrieben hab, hatte ich die map so deklariert: tage := new Map<Date, Int> Wichtig zu bedenken ist, dass Belegung::datumBis EXKLUSIV war: Belegungen sollten nicht für den Tag gezählt werden an dem sie enden. Das sehe ich bei @user2001 und bei @BeppeCSharpNauter falsch gelöst. Bearbeitet 7. Mai7. Mai von tuxifan
7. Mai7. Mai Autor Wenn dann kriegen ein paar Punkte Abzug 😅 Bearbeitet 7. Mai7. Mai von BeppeCSharpNauter
8. Mai8. Mai Das war meine Lösung in etwa: auslastungBette( belegung: Belegung[], startDatum: Date, endDatum: Date, station: Station ): ausgelastetZaehler = 0 aktuellesDatum = startDatum while aktuellesDatum <= endDatum: auslastungZaehler = 0 for i = 0 to belegung.length: aktuelleBelegung = belegung[i] if aktuelleBelegung.getDatumVon() <= aktuellesDatum and aktuelleBelegung.getEndDatum() >= aktuellesDatum: auslastungZaehler = auslastungZaehler + 1 endif endfor if auslatungZaehler > (station.getAnzahlBetten * 0.8) ausgelastetZaehler = ausgelastetZaehler + 1 endif aktuellesDatum = aktuellesDatum + 1 endwhile return ausgelastetZaehler Bearbeitet 8. Mai8. Mai von jonas.teich
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.