Функции на случайном порядке, read_vector, display_vector - PullRequest
0 голосов
/ 02 января 2019

Как я могу использовать read_vector и display_vector в C? Я должен перемешать массив, а затем использовать эту функцию. void shuffle(int tab[], int size). Я не знаю, хороши ли read_vector и display_vector. Любая помощь будет хорошей. (Должно быть не более 100 чисел)

#include<stdio.h>

void shuffle(int tab[], int size);
int read_vector(int vec[], int size, int stop_value);
void display_vector(const int vec[], int size);

int main()
{
int i; 
int tab[101], a;

printf("Podaj pierwszy wektor: ");
for(i=0; i<100; i++)
{
a = scanf("%d", &tab[i]);
if(a<1)
{
    printf("Incorrect input");
    return 1;
}
if(tab[0]==0)
{
    printf("Not enough data available");
    return 2;
}
if(tab[i]==0)
{
    break;
}
}

shuffle(tab[i], i);

for(i=0; i<100; i++)
{
    printf("%d", tab[i]);
}
return 0;
}

void shuffle(int tab[], int size)
{
int i, j=0, x=0;

for(i=size; i>0; i--)
{
    j = rand() % size+1;
    x = tab[i];
    tab[i]=tab[j];
    tab[j]=x;
    x=0;
}

}

1 Ответ

0 голосов
/ 02 января 2019

следующий предложенный код:

  1. чисто компилирует
  2. включает комментарии к вопросу
  3. выполняет желаемую функциональность
  4. правильно проверяет наличие ошибок
  5. устранены «магические» числа 100 и 101
  6. , поскольку в коде OP нет отдельных функций для read_vector() и display_vector(). Я не реализовывал их отдельно, однако для реализации * 1016 они должны быть тривиальными.

А теперь предложенный код:

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

void shuffle(int tab[], int size);
//int read_vector(int vec[], int size, int stop_value);
//void display_vector(const int vec[], int size);

#define MAX_VECTOR_LENGTH 100

int main( void )
{
    int i; 
    int tab[ MAX_VECTOR_LENGTH ];

    srand( (unsigned)time( NULL ) );

    printf("Podaj pierwszy wektor:\n ");
    for(i=0; i<MAX_VECTOR_LENGTH; i++)
    {
        printf( "%s", "enter vector entry or 0 to indicate done " );
        if( scanf("%d", &tab[i]) != 1)
        {
            fprintf( stderr, "scanf failed\n");
            exit( EXIT_FAILURE );
        }

        // implied else, scanf successful

        if(tab[i]==0)
        {
            break;
        }
    }

    shuffle(tab, i-1);

    for(int j = 0; j < i; j++)
    {
        printf("%d  ", tab[j]);
    }
    return 0;
}


void shuffle(int tab[], int size)
{
    int i;
    int j;
    int x;

    for(i=size; i>0; i--)
    {
        j = rand() % size;
        x = tab[i];
        tab[i]=tab[j];
        tab[j]=x;
    }
}

Типичный запуск программы приводит к:

Podaj pierwszy wektor: 
enter vector entry or 0 to indicate done 1
enter vector entry or 0 to indicate done 2
enter vector entry or 0 to indicate done 3
enter vector entry or 0 to indicate done 4
enter vector entry or 0 to indicate done 5
enter vector entry or 0 to indicate done 6
enter vector entry or 0 to indicate done 7
enter vector entry or 0 to indicate done 0
1  6  5  3  4  7  2  
...