Pseudocode check. Needs validatie voor de toewijzing

stemmen
5

Ik heb dit al gedraaid in, zodat u niet helpt me te bedriegen. Just me af of dit eruit ziet rechts:

De opdracht: Voer een lijst van de werknemer namen en salarissen, en bepaal de gemiddelde (gemiddelde) salaris, evenals het aantal salarissen boven en onder het gemiddelde.

Het plan: Sta ingang van namen en salarissen vastgesteld en de gemiddelde Sorteren waardes tellen waarden boven de gemiddelde telling waarden onder Mean

//This program will allow a user to input an employee name and salary
//The output will contain the mean salary 
//as well as the number of salaries above and below the mean
//
//Arrays Used:
//Name(K) = Array for employee names
//Salary(K) = Array for salaries
//
//Variables Used:
//Mean = Mean of all employees Salaries
//UpMean = Number of Employees making more than the mean
//DwnMean = Number of Employees making less than the mean
//Sum = Sum of all salaries
//CountM = Counter for Mean
//CountUp = Counter for # of salaries above mean
//CountDwn = Counter for # of salaries below mean

Main
    Call WelcomeMessage
    Call InputData
    Call Calculate
    Call OutputData
End Program

WelcomeMessage
    Write, “Beginning the Salary Program” 
End WelcomeMessage

InputData
    Declare Name(100) Of Strings
    Declare Salary(100) Of Real
    Declare Mean, UpMean, DwnMean As Real
    Set Sum = 0
    Set CountM = 0
    Set CountUp = 0
    Set CountDwn = 0
    Write, Enter Employee name and Salary.
    Write, Enter *,0 when done.
    Input Name(K), Salary(K)
    While Name(K) <> *
        Set CountM = CountM + 1
        Set Sum = Sum + Salary
        Write, Enter Employee name and Salary.
        Write, Enter *,0 when done.
        Input Name(K), Salary(K)
    End While
End InputData

Calculation
    //Here Mean is found
    Set Mean = Sum / CountM
    //Here Number of Employees making more than the mean is found
    For K = Step 1 to CountM
        If Salary(K) > Mean Then
            Set CountUp = CountUp + 1
        End If
    //Here Number of Employees making more than the mean is found
    Set CountDwn = CountM - CountUp
    //The above algorythm doesn't account for the possibility 
    //of someone making exactly the average so subtract 1 to reconcile
    If Salary(K) = Mean Then
            Set CountDwn = CountDwn - 1
    End If
End Calculation

OutputData
    Write, There were,  CountM, salaries entered.
    Write, The mean salary is:, Mean
    Write, There are, CountUp, employees who make more than the average
    Write, There are, CountDwn, employees who make less than the average
End OutputData
De vraag is gesteld op 12/06/2009 om 00:02
bron van user
In andere talen...                            


3 antwoorden

stemmen
5

Ziet er ok uit. Het enige wat ik heb te suggereren, is om een ​​do-while structuur te gebruiken tijdens het lezen van input voor naam / Salaris. Zoals je kunt zien heb je dezelfde logica voordat de lus begint, en in de lus:

Write, "Enter Employee name and Salary."
Write, "Enter *,0 when done."
Input Name(K), Salary(K)

Ook zal de pseudo-code niet compileren, omdat u belt Bereken maar de routine wordt aangeroepen Berekening;)

Bedankt voor de suggesties. Niet echt vertrouwd toch met Do-While. Hoe zou dat eruit zien? Ik hoewel misschien iets over de ingang moet veranderen in de loop, maar was niet zeker hoe.

Het zou er ongeveer zo uit:

Do 
    Write, "Enter Employee name and Salary."
    Write, "Enter *,0 when done."
    Input Name(K), Salary(K)
    If Name(K) <> "*"
        Set CountM = CountM + 1
        Set Sum = Sum + Salary
    Else
        BreakLoop
    End If
End While (true)

Het is niet echt een groot verschil, maar meer een kwestie van smaak echt. Persoonlijk denk ik dat het makkelijker is om te lezen, omdat de code op een zodanige wijze dat u gemakkelijk beseffen dat je verondersteld wordt om input iets, de ingevoerde en iets, afhankelijk van de ingang doen is geschreven.

In je while lus de Set COUNT min etc komen na (in de tekst flow) de eerste ingang, maar voor de rest van de input, wat betekent dat je moet terug in de top van de lus kijken om te begrijpen dat het iets doet na de vorige "round" in de lus. Nu is dit slechts een kleine lus, maar als het 30 rijen lang was (god verhoede) je zou moeten omhoog te bladeren om te zien wat er gaande is. Als je weet wat ik bedoel :)

antwoordde op 12/06/2009 om 00:12
bron van user

stemmen
1

Een opmerking over het berekenen van CountDwn:

Uw "aftrekken 1 te verzoenen" zal, afhankelijk van hoe precies de Forlus werkt in de taal implementatie, (a) het genereren van een "zwartwerk variabele" type fout, (b) het genereren van een "index buiten bereik" fout, of (c ) aftrekken IFF het laatste salaris was precies gelijk aan het gemiddelde. (Ook, de code bevat geen End Forin Calculation, maar ik neem aan dat het zou moeten onmiddellijk na de eerste te zijn End Ifin die functie.)

In plaats van het berekenen CountDwnvan CountUp(immers, elk salaris kon gelijk aan het gemiddelde zijn), zou ik willen voorstellen op te nemen in de lus:

Calculation
    //Here Mean is found
    Set Mean = Sum / CountM

    For K = Step 1 to CountM
        //Here Number of Employees making more than the mean is found
        If Salary(K) > Mean Then
            Set CountUp = CountUp + 1
        End If

        //Here Number of Employees making less than the mean is found
        If Salary(K) < Mean Then
            Set CountDwn = CountDwn + 1
        End If
    End For
End Calculation

Merk op dat CountUp + CountDwnis niet per se gelijk aan CountM.

antwoordde op 12/06/2009 om 00:50
bron van user

stemmen
0
FINAL ALGORITHM

START
OUTPUT "Enter the number of parcels"
INPUT NUMBEROFPARCELS
INTEGER PRICE = 0
INTEGER PARCELWEIGHT [1:NUMBEROFPARCELS]
INTEGER TOTALPRICE = 0

FOR PARCELLOOP = 1 TO NUMBEROFPARCELS
    INTEGER REJECT = 0
    INTEGER ACCEPT = 0
    INTEGER ACCEPTWEIGHT = 0
    INTEGER REJECTEDPARCELS = 0

    OUTPUT "Enter the weight of the parcel in kg"
    INPUT WEIGHT
    IF (WEIGHT < 1) THEN
        REJECT = REJECT + 1
        OUTPUT "The weight of the parcel should be atleast 1kg"
    ELSE
        IF (WEIGHT > 10) THEN
            REJECT = REJECT + 1
            OUTPUT "The weight of the parcel should be less than 10kg"
    ENDIF
    IF (WEIGHT > 1) THEN
        IF (WEIGHT < 10) THEN
            PARCELWEIGHT[PARCELLOOP] = WEIGHT
        ENDIF
    ENDIF


    OUTPUT "Enter the first dimension of the parcel in cm"
    INPUT DIMENSION1
    IF (DIMENSION1 > 80 ) THEN
        REJECT = REJECT + 1
        OUTPUT "Each dimension of the parcel should be less than 80"
    ENDIF

    OUTPUT "Enter the second dimension of the parcel in cm"
    INPUT DIMENSION2
    IF (DIMENSION2 > 80 ) THEN
        REJECT = REJECT + 1
        OUTPUT "Each dimension of the parcel should be less than 80"
    ENDIF

    OUTPUT "Enter the third dimension of the parcel in cm"
    INPUT DIMENSION3
    IF (DIMENSION3 > 80 ) THEN
        REJECT = REJECT + 1
        OUTPUT "Each dimension of the parcel should be less than 80"
    ENDIF

    TOTALDIMENSION = DIMENSION1 + DIMENSION2 + DIMENSION3
    IF (TOTALDIMENSION > 200 ) THEN
        REJECT = REJECT + 1
        OUTPUT "The size of the parcel should be less than 200cm"
    ENDIF

    IF (REJECT > 0 ) THEN
        OUTPUT "Your parcel has been rejected for the reasons above"
        REJECTEDPARCELS = REJECTEDPARCELS + 1
    ENDIF

    IF (REJECT = 0)THEN
        OUTPUT "Your parcel has been accepted"
        ACCEPT = ACCEPT + 1 
        ACCEPTWEIGHT = ACCEPTWEIGHT + WEIGHT
    END IF

    INTEGER PARCELSACCEPTED = ACCEPT
    INTEGER TOTALWEIGHT = ACCEPTWEIGHT
    INTEGER PARCELSREJECTED = REJECTEDPARCELS

    OUTPUT "The number of parcels accepted is " PARCELSACCEPTED " and the total weight of the parcels is " TOTALWEIGHT
    OUTPUT "The number of parcels rejected is " PARCELSREJECTED
NEXT PARCELLOOP

FOR PRICELOOP = 1 TO NUMBEROFPARCELS
    IF (PARCELWEIGHT[PARCELLOOP] < 5) THEN
        PRICE = PRICE + 10
        TOTALPRICE = TOTALPRICE +PRICE
    END IF

    IF (PARCELWEIGHT[PARCELLOOP] > 5) THEN
        PRICE = ((PARCELWEIGHT[PARCELLOOP] - 5)*0.10)/100
        TOTALPRICE = TOTALPRICE +PRICE
    END IF

    OUTPUT "The price of the parcel is " PRICE
NEXT PRICELOOP

OUTPUT "The total price of all the parcels is " TOTALPRICE
STOP
antwoordde op 13/11/2016 om 04:29
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more