Hierna moet je de levensondersteuning-status controleren, door de zuurstofgenerator-status te vermenigvuldigen met de CO2-schrobber-status.
Zowel de zuurstofgenerator-status als de CO2-schrobber-status zijn waarden die je rechtstreeks in het diagnostisch rapport kunt vinden - het vinden ervan is het lastigste deel. Beide waarden moeten met een gelijkaardig procedure gevonden worden, dat neerkomt op het filteren van de waarden totdat er maar één overblijft. Voor je naar één van de status-waarden begint te zoeken, begin je steeds met de volledige reeks van alle binaire getallen uit het diagnostisch rapport en kijk je in eerste instantie enkel naar het eerste bit van dit getallen. Daarna:
Het bit-criterium hangt af van het soort status-waarde dan je wilt vinden:
0
of 1
) op de huidige bit-positie, en hou je enkel de getallen over met die bit op de huidige bit-positie. Als 0
en 1
even vaak voorkomen, hou dan de getallen over met een 1
op de huidige bit-positie.0
of 1
) op de huidige bit-positie, en hou je enkel de getallen over met die bit op de huidige bit-positie. Als 0
en 1
even vaak voorkomen, hou dan de getallen over met een 0
op de huidige bit-positie.Dit is bijvoorbeeld hoe je de zuurstofgenerator-status bepaalt voor het diagnostisch rapport dat we hiervoor als voorbeeld gebruikt hebben:
1
-bits (7) dan 0
-bits (5), en dus houden we enkel de 7 getallen over met een 1
op de eerste positie: 11110
, 10110
, 10111
, 10101
, 11100
, 10000
, en 11001
.0
-bits (4) dan 1
-bits (3), en dus houden we enkel de 4 getallen over met een 0
op de tweede positie: 10110
, 10111
, 10101
, en 10000
.1
, en dus houden we deze drie getallen over: 10110
, 10111
, en 10101
.1
, en dus houden we deze twee getallen over: 10110
and 10111
.0
-bits als 1
-bits (elk één). Om de zuurstofgenerator-status te vinden houden we dus het getal over met een 1
op die positie: 10111
.10111
, of 23
als decimaal getal.Daarna bepalen we de CO2-schrobber-status voor hetzelfde voorbeeld als hiervoor:
0
-bits (5) dan 1
-bits (7), en dus houden we enkel de 5 getallen over met een 0
op de eerste positie: 00100
, 01111
, 00111
, 00010
, en 01010
.1
-bits (2) dan 0
-bits (3), en dus houden we enkel de 2 getallen over met een 1
op de tweede positie: 01111
en 01010
.0
-bits als 1
-bits (elk één). Om de CO2-schrobber-status te vinden houden we dus het getal over met een 0
op die positie: 01010
.01010
, of 10
als decimaal getal.Om ten slotte de levensondersteuning-status te vinden, vermenigvuldigen we de zuurstofgenerator-status (23
) met de CO2-schrobber-status (10
), en zo krijgen we 230
.
Gebruik de binaire getallen uit het diagnostisch rapport om de zuurstofgenerator-status en de CO2-schrobber-status te berekenen, en vermenigvuldig ze vervolgens met elkaar. Wat is de levensondersteuning-status van de onderzeeër? (Zorg ervoor dat je het resultaat als een decimaal getal teruggeeft, niet als een binair getal.) Bepaal dit op de volgende manier:
life_support_rating
waaraan de padnaam (char*
) moet doorgegeven worden van een tekstbestand dat een diagnostisch rapport bevat. De functie moet het product (int
) teruggeven van de zuurstofgenerator-status en de CO2-schrobber-status die berekend worden op basis van de binaire getallen in het diagnostisch rapport.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden report01.txt
1 en report02.txt
2 zich in de huidige directory bevinden.
> life_support_rating("report01.txt")
230
> life_support_rating("report02.txt")
4203981