7 svar
260 visningar
dajamanté behöver inte mer hjälp
dajamanté 5139 – Fd. Medlem
Postad: 4 jul 2018 16:20

Bollen ramlar från to.

Hej!

Jag vill gärna ha hjälp för att effektivisera lösningen till frågan:

Jag har försökt inte ha några magic numbers den här gången.

 

 

Jag kan while-loopar så jag har skrivit en kod som är oberoende på to-höjden. Den finns där. Jag tar gärna alla kommentar!

kodbert 4 – Fd. Medlem
Postad: 4 jul 2018 19:31

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;
}

dajamanté 5139 – Fd. Medlem
Postad: 4 jul 2018 20:14

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?
joculator 5296 – F.d. Moderator
Postad: 5 jul 2018 11:10

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/

Lindehaven 820 – Lärare
Postad: 8 jul 2018 01:09

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:

  1. någon slags referens eller krav som säger vad som är acceptabelt
  2. något sätt att mäta programmet gentemot referenserna eller kraven
  3. något sätt att effektivisera/optimera programmet
dajamanté 5139 – Fd. Medlem
Postad: 8 jul 2018 05:59

Okej, vi är inte där än... Vi håller på att försöka optimisera våra arrayer.

Lindehaven 820 – Lärare
Postad: 8 jul 2018 11:15

Hur ser dessa arrayer ut? Vad är det i dessa som behöver optimeras?

dajamanté 5139 – Fd. Medlem
Postad: 8 jul 2018 12:00

Sorry jag menade bara fatta arrayer.

Svara
Close