Det är ett ganska litet program som kan vara svårt att göra just effektivisera. Däremot kan man göra det mer läsbart som att t ex. använda funktioner för beräkningar och köra `using namespace `.
Är ingen guru men så här skrev jag mitt program (utan att inkludera constants.h):
#include <iostream>
#include <cmath>// #include "constants.h"
namespace myConstants {
const double gravity = 9.8;
}using namespace std;
using namespace myConstants;double heightAfterSeconds(int second)
{
return (gravity * pow(second, 2)) / 2;
}int main(void)
{
int initHeight = 0, seconds = 0;cout << "Enter the initial height of the tower in meters: ";
cin >> initHeight;if (initHeight <= 0) {
cerr << "invalid input: Tower height must be at least 1 meter\n";
}double currentBallHeight = initHeight;
while (currentBallHeight > 0) {
currentBallHeight = (initHeight - heightAfterSeconds(seconds));if (currentBallHeight < 0) {
break;
}cout << "At " << seconds++ << " the ball is at height " << currentBallHeight << endl;
}cout << "At " << seconds << " seconds, the ball is on the ground\n";
return 0;
}
Tack! Det är vad jag kallar effektiv optimisering.
Den här kände jag inte till: pow(second, 2)
Och du tänkte också att kontrollera höjden av ton, tack för det.
Jag hade ingen aning att man kunde addera sekunder i cout:en (cout << "At " << seconds++ << " the ball is at height " << currentBallHeight << endl;). Jag trodde att detta behövde göras i insidan av en if parentes.
Jag har frågor:
- jag ser att det är tillåtet att använda flera namespace för att du skrev using namespace std; OCH using namespace myConstants; Jag trodde att det blir crash? Kan man torna upp hur många namespace man vill? Finns det begränsningar eller regler om programmeringsstil?
- varför ibland avslutar du linjer med bara '';'' (cout << "Enter the initial height of the tower in meters: ";) och ibland med \n ( cerr << "invalid input: Tower height must be at least 1 meter\n";)?
- vad är cerr?
Mutipla namespace: testa! Det som kan bli ett problem är om samma konstant är definerad olika i de olika namepacen, vad händer då? testa!
+n gör att det låaggs till en newline så nästa sak som skrivs kommer på en ny rad.
cerr används för errors: se tex http://www.cplusplus.com/reference/iostream/cerr/
Tycker det är viktigt att veta varför ett program behöver effektiviseras/optimeras innan man gör det. Är källkoden för svårläst, är programmet för långsamt, för stort, läser för ofta från filsystemet, skickar för stora paket till andra system, et c?
För att veta det behöver man:
- någon slags referens eller krav som säger vad som är acceptabelt
- något sätt att mäta programmet gentemot referenserna eller kraven
- något sätt att effektivisera/optimera programmet
Okej, vi är inte där än... Vi håller på att försöka optimisera våra arrayer.
Hur ser dessa arrayer ut? Vad är det i dessa som behöver optimeras?
Sorry jag menade bara fatta arrayer.