मैं एक प्रोग्राम लिख रहा हूं जो उपयोगकर्ता से 'एन' मान के लिए पूछेगा, फिर वे 'एन' मान दर्ज करेंगे जिन्हें एक सरणी में संग्रहीत किया जाएगा और क्रमबद्ध किया जाएगा। मैंने इस पार्ट को काफी आसानी से कर लिया है। मैं इस सरणी की तुलना टेक्स्ट फ़ाइल से पढ़ी गई संख्या से इनपुट के साथ करूंगा। यदि संख्या किसी भी मौजूदा सरणी मान से बड़ी है तो यह उन्हें बदल देगा और बाकी को नीचे स्लाइड कर देगा। यह सबसे बड़े 'n' मानों की एक सरणी बनाता है

उदाहरण: n = 4 n मान हैं: 999 972 954 462 937

a[4] = {999, 972, 954, 462, 937};

क्रमबद्ध:

a[4] = {999, 972, 954, 937, 462};

अगर फ़ाइल इनपुट 968 कहते हैं तो परिणाम है। सहारा:

a[4] = {999, 972, 968, 937, 937};

यह मेरा वर्तमान कोड है।

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
    if (argc<3)                            //error checking
        return -1;
    int size = atoi(argv[2]);
    int a[size];
    int i, j, temp=0;
    printf("Enter %d numbers\n", size);     //user array input for size and n values
    for(i = 0; i < size; i++)
        scanf("%d", &a[i]);
    for(i=0; i < size; i++){                //sorting array
        for(j = i+1; j <size; j++){
            if( a[i] < a[j]){
                temp = a[i];
                a[i] = a[j];
                a[j] = temp; 
            }
        }
    }
    FILE *input;
    input = fopen(argv[1], "r");
    if(input ==NULL)                          //error checking
        return -1;
    if(fscanf(input, "%d", &temp) != 1)
        return -1;
    while(fscanf(input, "%d", &temp) ==1){   //loop while  there is file input
        for(i =1 < size; i++){                //check if temp is larger than array values
            if(temp > a[i] && temp < a[i-1]){      
                for(j = size-1; j >= i; j--)   //slide down the rest of the array
                    a[j] = a[j-1];
                a[i] = temp;
            }
        }
    }
    for(i=0; i <size; i++){                    //print out array
        printf("%d ", a[i]);
    }
    return (0);
}

मैंने इसे एक छोटे से सरल कौशल पर आजमाया है, क्या मैंने पहले ही उपयोगकर्ता इनपुट का उपयोग करने के बजाय सरणी और मान बना लिए हैं। मैंने अभी भी एक लूप के माध्यम से सरणी चेक अनुक्रम पारित किया है जो फ़ाइल से पढ़ने के बजाय संख्या मान बढ़ाता है। ऐसा कुछ के साथ ठीक काम करने लग रहा था

a[5] = {10, 8, 6, 4, 2};
number = 5;   // number++  number = 6 number = 7... until 10
result: a[5] = {10, 9, 8, 7, 6};

मुझे यह कहते हुए दुख हो रहा है कि भले ही प्रोग्राम शुरुआत में सही एरे को प्रिंट नहीं कर रहा था, मैं देख सकता था कि फाइल से नंबर थे। लूप अभी भी फ़ाइल को गर्त में ले जा रहा है, लेकिन एक बिंदु पर आउटपुट बस सॉर्ट किए गए उपयोगकर्ता सरणी होने लगा। मुझे सरणी मान सही नहीं लग रहे हैं। कोई विचार?

0
below_avg_st 5 मार्च 2017, 06:18

1 उत्तर

/*I'm a beginner C programmer so I don't know much of the syntax.
  But I think I can help you with that problem.

  I created a simple code and I hope I can really help

  the integers from the file must be already sorted.
  So the only integer that we will sort is the recent integer that the user inputed.
  */


  /*So here's my code of sorting array of integers coming from file.
   Please give it a try.
    It's not the same syntax as your code but I know you can see my point*/

#include <stdio.h>
#include <stdlib.h>

//my style here is I'm declaring the max Num that I want to put in array. 
//But you can do this with different style.

#define MAX_ARRAY 10

//I created separate functions
void readFile(int num_arr[]);
void sortArray(int num_arr[]);
void writeFile(int num_arr[]);

int main()
{
    int num_arr[MAX_ARRAY + 1]; // take note that I added 1 (one). And you will see later why I did that


    readFile(num_arr);

    sortArray(num_arr);

    writeFile(num_arr);

    //Now we can sort them. Use a temp_num holder.

    return 0;
}

void readFile(int num_arr[])
{
    int x = 0;
    int y = 0;
    int temp_num;

    FILE *sample_file_pointer = fopen("sample_file.txt", "r");

    //first I read the integers from the file and put them in int array.
    while(fscanf(sample_file_pointer, " %d\n", &num_arr[x]) == 1)
    {
        x++;
    }//after reading the integers, the last element of the array we declared is still unused.. Now we will use it.
    fclose(sample_file_pointer);

    //now we will use the unused element by entering the 'n'. Then we will sort the array later.
    printf("Enter value of n: ");
    scanf(" %d", &num_arr[MAX_ARRAY]);//We put the n value in the last element of the array
}

void sortArray(int num_arr[])
{
    int x = MAX_ARRAY;//We will use this to point the last element of the array.
    int temp_num;

    /*because the array from
    the file is already
    sorted, (I know you can
    do the sorting of that.
    That's why I didn't include
    it here to make this short)
    we can just test the most recent
    integer that is added by the user*/

    //We do that with this loop
    for(int i = MAX_ARRAY; i > 0; i--)
    {
        if(num_arr[x] >= num_arr[i - 1])
        {
            temp_num = num_arr[x];
            num_arr[x] = num_arr[i - 1];
            num_arr[i - 1] = temp_num;

            //now set the x to the swapped element to follow the recent number all through. Till the element test becomes 1.
            x = i - 1;
        }
    }

    //now we're ready to write this sorted array to a file again
}

void writeFile(int num_arr[])
{
    FILE *sample_file_pointer = fopen("sample_file.txt", "w");

    for(int i = 0; i < MAX_ARRAY; i++)
    {
        fprintf(sample_file_pointer, "%d\n", num_arr[i]);
    }
    //We can ignore the last element of the array. She's out of the group now. It's her fault for being the lowest.. LOL..

    fclose(sample_file_pointer);
}
0
Bicolano 5 मार्च 2017, 10:46