Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

 

     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;

      
      
      }

 

Geschrieben

 

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

 

Geschrieben (bearbeitet)

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 von tuxifan
Geschrieben (bearbeitet)

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 von jonas.teich

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...