Programeer opdrachtenOpdracht : opdr3b_grendel.txt

Terug naar de inzendingen
Opdracht 3b,Tom Grendel
23 Feb 2005
 Mijn inzending voor 3b in ANSI C:
 1 
*****Makefile*****
  
 2TARGET= flight
 3CC=gcc
 4CFLAGS=-g -ansi -pedantic-errors -Wall -lm -O2
 5LDFLAGS=
 6
 7.o:
 8 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
 9
 10clean:
 11 rm -f flight.o flight.c
 1 
****flight.c*****
  
 2/*
 3 * Name:        flight.c
 4 * Author:      Thomas Grendel 
 5 * Description: Pascal Schik's programming assignment 3b:
 6 *   Read altitude (Ft) and distance (NM) and calculate:
 7 *   1. flight duration, distance and required amount of 
 8 *   fuel to get to the altitude (gain_alt()).
 9 *   2. flight duration, distance and required amount of 
 10 *   fuel to continue the rest of the flight (rest()).
 11 *   3. total flight duration and total required fuel amount
 12 *
 13 *   Rounding of duration and USG is done with ceilf() from math.h
 14 *
 15 * Usage: Compile with Makefile with 'make flight' on the command-line. 
 16 *   This creates a binary with the name 'flight' in the working
 17 *   directory. 
 18 *
 19 * License: Copyright (c) 2005 GNU/GPL
 20 *
 21 */
 22
 23
 24#include 
 25#include 
 26
 27float Ft;  /* altitude */
 28float Nm;  /* distance */
 29
 30float Kts;  /* speed (NM/uur) */
 31float VSI;  /* Vertical Speed Indicated (Ft/min daling) */
 32float USG;  /* United States Gallon (fuel) 
 33      consumption = USG/hour */
 34float duration;  /* flight duration */
 35float oNm;  /* original distance */
 36
 37int total_duration;
 38int total_USG;
 39float tmp;
 40
 41int gain_alt(void);
 42int rest(void);
 43
 44int main(void)
 45{
 46 printf("======== FLIGHT 0.2\n");
 47 
 48 /* get input */
 49 printf("altitude? (Ft): ");
 50 scanf("%f", &Ft);
 51 printf("distance? (NM): ");
 52 scanf("%f", &Nm);
 53
 54 oNm = Nm; /* save original Nm in oNm, Nm will be used as global
 55variable */
 56
 57 if (Ft < 0 || Nm < 0)
 58  printf("(!) NEGATIVE VALUE(S) ENTERED");
 59 else if (gain_alt() != -1) {
 60  printf("\n\n======== CLIMB TO CRUISE ALTITUDE\n\n");
 61  printf("Duration: %i min.\n", (int)ceilf(duration));
 62  printf("Distance: %i\n", (int)(oNm - Nm));
 63  printf("USG: %i\n", (int)ceilf(USG));
 64
 65  rest();
 66  printf("\n\n======== CONTINUE REST OF FLIGHT\n\n");
 67  printf("Duration: %i min.\n", (int)ceilf(duration));
 68  printf("Distance: %i\n", (int)(oNm - Nm));
 69  printf("USG: %i\n", (int)ceilf(USG));
 70
 71  /* add fuel for start/land */
 72  total_USG += 8;  /* OPTIONAL: 10% safety margin: +
 73(total_USG/10); */
 74
 75  printf("\n\n======== TOTALS\n\n");
 76  printf("Duration: %i min.\n", total_duration);
 77  printf("USG: %i\n", total_USG);
 78
 79  /* total amounts */
 80  printf("\n");
 81 }
 82 else 
 83  printf("(!) CLIMBING TO ALTITUDE OF %i REQUIRES %i MORE NM
 84THAN GIVEN AMOUNT '%i'\n", 
 85   (int)Ft, (int)ceilf(tmp - Nm), (int)Nm);
 86
 87 return 0;
 88}
 89
 90/* compute duration, distance and fuel comsumption while climbing to cruise
 91 * altitude */
 92int gain_alt()
 93{
 94 Kts = 70;
 95 VSI = 700;
 96
 97 /* time to climb to cruise altitude (duration) */
 98 duration = (float)(Ft/VSI);
 99
 100 /* travelled distance (Nm) */ 
 101 tmp = (float)(duration * (Kts/60.0));
 102 
 103 /* test whether given distance is enough to climb to altitude */
 104 if (tmp > Nm) 
 105  return -1;
 106 else {
 107  Nm -= tmp;
 108
 109  /* fuel consumption (USG), per minute (duration) */
 110  USG = (float)(duration/60.0) * 9;
 111
 112  total_duration += ceilf(duration);
 113  total_USG += ceilf(USG);
 114 }
 115 return 0;
 116}
 117
 118/* compute duration, distance and fuel comsumption for the remaining distance
 119 * of the flight */
 120int rest()
 121{
 122 Kts = 100;
 123
 124 /* remaining time to reach destination */
 125 duration = (float)Nm / (Kts/60.0);
 126
 127 /* fuel consumption (USG), per minute (duration) */
 128 USG = (float)(duration/60.0) * 7.0;
 129
 130 total_duration += ceilf(duration);
 131 total_USG += ceilf(USG);
 132 return 0;
 133}
 
 
Mijn commentaar
 
 Oops,
 Ik zie nu ineens aan jouw programma dat ik heb verzuimd te kijken of de input
 wel correct is.
 Gelukkig heb jij daar op regel 56 wel aan gedacht.
 Op regel 82 laat je mooi zien dat je de in de opdracht ingebouwde bug hebt
 afgevangen.
 Voor hen die het niet zagen,
 Waneer je zeer korte afstand wil afleggen op een relatief grote hoogte,
 dan duurt de klim zolang dat de afgelegde afstand langer is dan de totale
 afstand.
 
 Tom,
 Probeer in volgende opgaven eens langzaam het gebruik van globale variabelen
 wat te verminderen.
 Ik heb dat in mijn BASIC versie welliswaar ook gedaan,
 maar in C zijn daar mooiere methodes voor.
 Wat je helaas niet gedaan hebt is afronden zoals in de opdracht vermeld staat.
 De code ziet er verder netjes en overzichtelijk uit, niets over aan te merken.