используя вывод программы в качестве ввода в той же программе - PullRequest
0 голосов
/ 25 сентября 2018

Я пишу программу для генерации всех возможных перестановок заданного ряда чисел, а затем для генерации всех возможных двоичных деревьев из этих перестановок, поэтому я подумал, что у меня есть программа, которая генерирует перестановки и сохраняет результат в файле, а затемнаписать дополнительный код, чтобы читать построчно (который имеет все перестановки) и генерировать из них двоичные деревья, поэтому сейчас я написал половину программы, которая генерирует перестановку и сохраняет результат в файле.

#include <stdio.h>

//function to print the array
void printarray(int arr[], int size)
{
        FILE *fp;
    int i,j;
        fp=fopen("result.txt","w");
    for(i=0; i<size; i++)
    {
          //  printf("%d\t",arr[i]);
          fprintf(fp,"%d\t",arr[i]);
    }
    printf("\n");
    fclose(fp);
}

//function to swap the variables
void swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

//permutation function
void permutation(int *arr, int start, int end)
{
    if(start==end)
    {
        printarray(arr, end+1);
        return;
    }
    int i;
    for(i=start;i<=end;i++)
    {
        //swapping numbers
        swap((arr+i), (arr+start));
        //fixing one first digit
        //and calling permutation on
        //the rest of the digits
        permutation(arr, start+1, end);
        swap((arr+i), (arr+start));
    }
}

int main()
{
   //taking input to the array
    int size;
    printf("Enter the size of array\n");
    scanf("%d",&size);
    int i;
    int arr[size];
    for(i=0;i<size;i++)
        scanf("%d",&arr[i]);
    //calling permutation function
    permutation(arr, 0, size-1);
    return 0;
}

но проблема здесь в этой программе состоит в том, что эта программа хранит только одну перестановку и не сохраняет другие перестановки в файле result.txt, как мне продолжать сохранять результат таким способом.Также программа не прекращает мигание пустого курсора, который создает ложное впечатление бесконечного цикла while.Мне пришлось нажать Ctrl + C, чтобы завершить программу, как избавиться от этого?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Существует множество проблем с кодом, вам действительно нужно постараться просмотреть его построчно с записной книжкой, чтобы увидеть, что происходит (или использовать отладчик, если необходимо).Чтобы ответить на ваши вопросы:

  1. Каждый вызов printarray открывается в режиме записи, w - это очистит файл.Чтобы добавить, используйте a (вам, вероятно, также нужна новая строка, printf->fprintf).
  2. Цикл не бесконечен.Попробуйте запустить для небольших размеров (скажем, до 5?).Затем попробуйте рассчитать сложность вашей программы в зависимости от размера массива.Это не маленькая задача, которую вы выполняете, и на каждой итерации вы также выполняете файловую операцию.
0 голосов
/ 25 сентября 2018
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define N 10

void print(int *num, int n)
{
        FILE *fp;
        fp=fopen("result.txt","a");
    int i;
    for ( i = 0 ; i < n ; i++)
//        printf("%d ", num[i]);
          fprintf(fp,"%d ",num[i]);
    fprintf(fp,"\n");
   fclose(fp);
}
int main()
{
    int num[N];
    int *ptr;
    int temp;
    int i, n, j;
    printf("\nHow many number you want to enter: ");
        scanf("%d", &n);
    printf("\nEnter a list of numbers to see all combinations:\n");
    for (i = 0 ; i < n; i++)
        scanf("%d", &num[i]);
    for (j = 1; j <= n; j++) {
        for (i = 0; i < n-1; i++) {
            temp = num[i];
            num[i] = num[i+1];
            num[i+1] = temp;
            print(num, n);
        }
    }
    return 0;
}
0 голосов
/ 25 сентября 2018

ваш fopen("result.txt","w"); обрезает файл при каждом открытии.используйте fopen("result.txt","a"); вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...