मेरे पास यह होमवर्क असाइनमेंट है जहां उपयोगकर्ता को संख्याओं को इनपुट करने के लिए कहा जाता है और फिर माध्य माध्य और मोड की गणना करता है, इसके बाद यह पूछता है कि क्या वह फिर से खेलना चाहता है, और या तो प्रोग्राम को दोहरा रहा है या छोड़ रहा है। सब कुछ संकलित करता है, लेकिन मुझे लगता है कि कुछ चीजें गलत हो रही हैं:

माध्य काम करता है। माध्यिका नहीं है। यदि इनट्स की सरणी की लंबाई समान है, यानी सरणी में 4 संख्याएं हैं, तो माध्यिका को दो औसत के बीच की संख्या माना जाता है। इसलिए यदि संख्याएं '1, 3, 5, 6' क्रम में हैं, तो माध्यिका 4.000000 होनी चाहिए। मोड या तो काम नहीं करता है, और जब उसे 'फिर से खेलने' के लिए कहा जाता है? कोई भी उत्तर प्रोग्राम को अचानक बाहर निकलने और क्रैश होने का कारण बनता है। क्या कोई मेरी माध्य माध्य मोड गणनाओं में त्रुटि खोजने में मेरी सहायता कर सकता है, और मेनू के साथ मेरी सहायता कर सकता है?

#define MAX 25
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#include <stdlib.h>

int readTotalNums();
void fillArray(int total, int nums[]);
void sortArray(int nums[], int total);
double findMean(int nums[], int total);
double findMedian(int nums[], int total);
int findMode(int nums[], int total);
void printResults(double mean, double median, double mode);
bool goAgain();

int main()  {
    int nums[MAX];
    int total;
    double mean, median, mode;
    do {
        total = readTotalNums(); //guarantee 1-25
        fillArray(total, nums); //read in the #s don't need to check range
        sortArray(nums, total);
        mean = findMean(nums, total);
        median = findMedian(nums, total);
        mode = findMode(nums, total);
        printResults(mean, median, mode);
    } while (goAgain());
    return 0;
}

int readTotalNums() {
    int num;
    do {
        printf("How many numbers? ");
        scanf("%i", &num);
    } while (num < 1 || num > 25);
    return num;
}

void fillArray(int total, int nums[]) {
    int temp;
    int i;
    printf("Please enter %i numbers\n", total);
    for (i = 0; i <= total-1; i++) {
        scanf("\n%i",&nums[i]);
    }
}

void sortArray(int nums[], int total) {
int x;
int y;
for(x=0; x<total; x++) {
    for(y=0; y<total-1; y++) {
        if(nums[y]>nums[y+1]) {
            int temp = nums[y+1];
            nums[y+1] = nums[y];
            nums[y] = temp;
        }
    }
}
}

double findMean(int nums[], int total) {
    int i;
    double sum = 0.0;
    for(i = 0; i < total; i++) {
        sum += nums[i];
    }
    return (sum/total);
}

double findMedian(int nums[], int total) {
    int temp;
    int i,j;
    for(i=0;i<total;i++)
        for(j=i+1;j<total;j++) {
            if(nums[i]>nums[j]) {
                temp=nums[j];
                nums[j]=nums[i];
                nums[i]=temp;
            }
        }
        if(total%2==0) {
            return (nums[total/2]+nums[total/2-1])/2;
        }else{
            return nums[total/2];
        }
}

int findMode(int nums[],int total) {
    int i, j, maxCount, modeValue;
    int tally[total];
    for (i = 0; i < total; i++) {
         tally[nums[i]]++;
    }
    maxCount = 0;
    modeValue = 0;
    for (j = 0; j < total; j++) {
        if (tally[j] > maxCount) {
            maxCount = tally[j];
            modeValue = j;
        }
    }
    return modeValue;
}

void printResults(double mean, double median, double mode) {
    printf("Mean: %d\tMedian: %d\tMode: %i", mean, median, mode);
}


bool goAgain() {
    char *temp;
    printf("\nWould you like to play again(Y/N)? ");
    scanf("%s", &temp);
    while (temp != 'n' && temp != 'N' && temp != 'y' && temp != 'Y') {
        printf("\nI am sorry that is invalid -- try again");
        printf("\nWould you like to play again(Y/N)? ");
        scanf("%s", &temp);
    }
    if (temp == 'y' || temp == 'Y') {
        return true;
    } else {
        return false;
    }
}

आउटपुट कुछ इस तरह होना चाहिए:

How many numbers 4
Please enter 4 numbers
6
2
5
25
 Mean: 9.50 Median:  5.50   Mode:  2
Go again (y/n) n
1
anthony 24 फरवरी 2012, 05:34

1 उत्तर

सबसे बढ़िया उत्तर

खैर, मुझे 3 समस्याएं मिलीं:

  1. आपका प्रिंटफ गलत है। double प्रिंट करने के लिए, आपको %f का उपयोग करना चाहिए। %d या %i नहीं।
  2. उपयोग करने से पहले आपको tally को इनिशियलाइज़ करना चाहिए।
  3. goAgain में, temp char होना चाहिए, और आपको %s के बजाय %c का उपयोग करना चाहिए।
2
asaelr 1 पद 2017, 15:45