Advertisement
Guest User

Untitled

a guest
Dec 5th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define SIZE 50
  4. typedef int bool;
  5. #define true 1
  6. #define false 0
  7. int getMaxRange();
  8. int getMileMarker();
  9. void getMarkerPositions(int* markerPositions);
  10. int getCurrentIndex(int* markerPositions, int startingMileMarker);
  11. int getNumOfUnreachablePoints(int* markerPositions, int startingIndex, int maxRange);
  12. int main() {
  13.     int maxRange = getMaxRange();
  14.     int startingMileMarker = getMileMarker();
  15.     int markerPositions[SIZE];
  16.     getMarkerPositions(markerPositions);
  17.  
  18.     int startingIndex = getCurrentIndex(markerPositions, startingMileMarker);
  19.     int numOfUnreachablePoints = getNumOfUnreachablePoints(markerPositions, startingIndex, maxRange);
  20.  
  21.     printf("A total of %d points cannot be reached.", numOfUnreachablePoints);
  22. }
  23.  
  24. int getNumOfUnreachablePoints(int* markerPositions, int startingIndex, int maxRange) {
  25.     int numOfUnreachablePoints = -1;
  26.     bool unreachable = false;
  27.     int currentIndex;
  28.     for (currentIndex = startingIndex; currentIndex < SIZE; currentIndex++) {
  29.         if (markerPositions[currentIndex] == -1) break;
  30.         int nextIndex = currentIndex + 1;
  31.         if (abs(markerPositions[currentIndex] - markerPositions[nextIndex]) > maxRange)
  32.             unreachable = true;
  33.         if (unreachable) numOfUnreachablePoints++;
  34.     }
  35.  
  36.     unreachable = false;
  37.     for (currentIndex = startingIndex; currentIndex > 0; currentIndex--) {
  38.         int nextIndex = currentIndex - 1;
  39.         if (abs(markerPositions[currentIndex] - markerPositions[nextIndex]) > maxRange)
  40.             unreachable = true;
  41.         if (unreachable) numOfUnreachablePoints++;
  42.     }
  43.     return numOfUnreachablePoints;
  44. }
  45.  
  46. int getCurrentIndex(int *markerPositions, int startingMileMarker) {
  47.     int i = 0;
  48.     int currentIndex = -1;
  49.     while (i < SIZE && markerPositions[i] != -1) {
  50.         if (markerPositions[i] == startingMileMarker) {
  51.             currentIndex = i;
  52.         }
  53.         i++;
  54.     }
  55.     return currentIndex;
  56. }
  57.  
  58. int getMaxRange() {
  59.     int maxRange = -1;
  60.     while (maxRange < 1) {
  61.         printf("Enter maximum fuel range: ");
  62.         scanf("%d", &maxRange);
  63.         if (maxRange < 1)
  64.             printf("Error! Positive values only!!\n");
  65.     }
  66.     return maxRange;
  67. }
  68.  
  69. int getMileMarker() {
  70.     int mileMarker = -1;
  71.     while (mileMarker < 0) {
  72.         printf("Enter starting mile marker location: ");
  73.         scanf("%d", &mileMarker);
  74.         if (mileMarker < 0)
  75.             printf("Error! Non-negative values only!!\n");
  76.     }
  77.     return mileMarker;
  78. }
  79.  
  80. void getMarkerPositions(int* markerPositions) {
  81.     int count = 0;
  82.     int currentNumber;
  83.     printf("Enter mile marker positions:");
  84.     do {
  85.         scanf("%d", &currentNumber);
  86.         markerPositions[count] = currentNumber;
  87.         count++;
  88.  
  89.     } while(count <  SIZE && currentNumber != -1);
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement