1

Тема: Оформити програму у вигляді багатофайлового проекту

У функції main повинен бути виклик функції для основних дії та виклик функції для виводу результатів, решта функцій повинна бути розміщена в окремому файлі.
Допоможіть будь ласка, ніяк не получається.

#include <stdio.h>
#define N 9
#define M (N * N + 1)/ 2 - N


int main() {

    int matrix[N][N];
    int b[M];
    int i, j;
    int counter = 0;

    for (i = 0; i < M; i++) {
        b[i] = i + 1;
    }

    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            matrix[i][j] = 0;
        }
    }

    for (i = 1; i < N - 1; i++) {
       
        for (j = 0; j < N; j++) {
            if (i == 1 || i == 7)
                if (j > 0 && j  < N - 1)
                    matrix[i][j] = 0;
                else 
                    matrix[i][j] = b[counter++];
            if (i == 2 || i == 6)
                if (j > 1 && j < N - 2)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
            if (i == 3 || i == 5)
                if (j > 2 && j < N - 3)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
            if (i == 4)
                if (j == 4)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
        }

    
    }

    printf("matrix:\n");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

2

Re: Оформити програму у вигляді багатофайлового проекту

Почніть з того, що винесіть код з main у функції в цьому файлі.
Тут за вас вашу роботу, швидше за все, не зроблять; а от якщо ви самі будете щось робити й питати, що незрозуміло, залюбки допоможуть.

3

Re: Оформити програму у вигляді багатофайлового проекту

#include <stdio.h>
#define N 9
#define M (N * N + 1)/ 2 - N

void print(int mass[N][N]) {
    int i, j;
    printf("matrix:\n");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            printf("%d\t", mass[i][j]);
        }
        printf("\n");
    }
}
int FillArray(int mass[M]) {
    int i;
    
    for (i = 0; i < M; i++) {
        mass[i] = i + 1;
    }
    return mass[M];
}
int FillArrayWithNull(int mass[N][N]) {
    int i, j;
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++) {
            mass[i][j] = 0;
        }
    }
    return mass[N][N];
}
int array(int matrix[N][N], int b[M]) {
    int i, j;
    int counter = 0;
    for (i = 1; i < N - 1; i++) {

        for (j = 0; j < N; j++) {
            if (i == 1 || i == 7)
                if (j > 0 && j < N - 1)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
            if (i == 2 || i == 6)
                if (j > 1 && j < N - 2)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
            if (i == 3 || i == 5)
                if (j > 2 && j < N - 3)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
            if (i == 4)
                if (j == 4)
                    matrix[i][j] = 0;
                else
                    matrix[i][j] = b[counter++];
        }


    }
    return matrix[N][N];
}
int main() {

    int matrix[N][N];
    int b[M] = {0};
    int i, j;
    int counter = 0;

    FillArray(b[M]);
    FillArrayWithNull(matrix[N][N]);
    array(matrix[N][N], b[M]);
    print(matrix);
   

    return 0;
}

не можу знайти як правильно повернути дані з функцій, дуже багато помилок

Подякували: plusxx1

4

Re: Оформити програму у вигляді багатофайлового проекту

Уже краще, але все ще недостатньо. Які саме помилки? Ви намагалися їх виправити?
Ось тут є приблизний опис того, як слід питати, щоб дістати відповідь.

5

Re: Оформити програму у вигляді багатофайлового проекту

FillArrayWithNull(matrix[N][N]);
    array(matrix[N][N], b[M]);
    print(matrix);

в цих 3 рядках, з функції main,  компілятор повідомляє про 2 помилки C2664 i E0167, шукав в інтернеті як їх виправити нічого не зміг знайти

6

Re: Оформити програму у вигляді багатофайлового проекту

Запис array[index] має в C++ два певним чином протилежних значення - проголошення масиву і доступ до елементу. Наприклад,

int maxtrix[N][N]; 

означає "matrix - це масив з N масивів з N int-ів", а

a = matrix[N][N];

означає "взяти з масиву matrix елемент (підмасив) під номером N, з нього - елемент під номером N і занести значення цього елементу в a". При цьому компілятор не перевіряє коректність цієї операції, і якщо у вас в масиві немає елементу під номером N, все одно спробує взяти щось з пам'яті там, де воно могло б бути.
Відповідно, вирази

FillArrayWithNull(matrix[N][N]);
array(matrix[N][N], b[M]);

намагаються передати в функції елементи масивів (тип int), а не самі масиви (тип int[][]), а оскільки функції визначені як такі, що приймають саме масиви, компілятор намагається знайти перетворення int -> int[][], не знаходить і повідомляє про помилку, яку ви й спостерігаєте. Передаєте в функцію масив - так і пишіть:

FillArrayWithNull(matrix);
array(matrix, b);

Наступного разу, будь ласка, наводьте повний текст помилок. Гуглити ви й самі можете (і робите, що правильно), а напам'ять, як ви розумієте, ніхто ці помилки за номерами не пам'ятає; ну а виконувати роботу, яку хтось вже зробив, лише тому, що йому ліньки поділитися результатами, зовсім нецікаво.

Подякували: plusxx1

7

Re: Оформити програму у вигляді багатофайлового проекту

дуже дякую, все працює

Подякували: koala1