Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

 

     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;

      
      
      }

 

 

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

 

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

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.