1

Тема: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

Заповнити матрицю значеннями вектора b1, b2, ... ,
b81 від лівого нижнього кута по діагоналі: вліво –
вверх.

45 53 60 66 71 75 78 80 81
36 44 52 59 65 70 74 77 79
28 35 43 51 58 64 69 73 76
21 27 34 42 50 57 63 68 72
15 20 26 33 41 49 56 62 67
10 14 19 25 32440 48 55 61
 6  9 13 18 24 31 39 47 54
 3  5  8 12 17 23 30 38 46
 1  2  4  7 11 16 22 29 37

2

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

https://replace.org.ua/uploads/images/11470/5ebebe87f8e34a15eb112d5e419161de.jpg

3

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int** CreateMatrix(int m, int n)
{
    int** a;
    a = (int**)malloc(m * sizeof(int*));
    for (int i = 0; i < m; i++)
        a[i] = (int*)malloc(n * sizeof(int));
    return a;
}
void DeleteMatrix(int** a, int m, int n)
{
    for (int i = 0; i < m; i++)
        free(a[i]);
    free(a);
}
void FillMatrix(int** a, int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            a[i][j] = i+1+j + j + j + j + j + j + j + j + j;
        }
}
void PrintMatrix(int** a, int m, int n)
{
    int i, j;
    printf("\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            printf("%d\t", a[i][j]);
        printf("\n");
    }
}
void ChangeMatrix(int** a, int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++)
        {
            a[i][j] = rand() % 81;
        }
    }
}
int main(void)
{
    int M=9, N=9, ** A;
    A = CreateMatrix(M, N);
    FillMatrix(A, M, N);
    printf("Matrix A:\n");
    PrintMatrix(A, M, N);
    ChangeMatrix(A, M, N);
    printf("Matrix A:\n");
    PrintMatrix(A, M, N);
    DeleteMatrix(A, M, N);
    return 0;
}

ця програма заповнює массив рандомно

4

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

в чому проблема ?_?

5

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

В тому шо замість рандомного заповнення, мені треба заповнити матрицю від лівого нижнього кута по діагоналі: вліво –
вверх.

6

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

то це ви робили

заповнити матрицю від лівого нижнього кута по діагоналі: вліво –
вверх.

, а в результаті вийшло рандомне заповнення, чи ви просто чужий код взяли, і кажете - "переробіть мені так, як мені треба"?

7

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

ні цей код я сам писав, просто нема уявлення як той цикл реалізувати

8

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

у вас індекси мають змінюватись від найбільшого до найменшого по осі Y, це у вас індекс "j", а по X навпаки, від меншого до більшого, це у вас індекс "i", наче.
Якшо матриця квадратна, то достатньо одного циклу. Тоді вам треба буде значення X, котре змінюється від 0 до найбільшого значення (якшо матриця 10 x 10, то це значення буде 9, тобто ...X  = 0; X < 10..., бо 0 теж рахується), тоді значення індексу "i" буде дорівнювати X, а "j" - це розмір матриці мінус X, тобто  j = 9 -  0, коли X = 0,  j = 9 - 1, коли X = 1, і так до останнього значення, коли X буде 9, і тоді значення "j" буде змінюватись від 9 до 0, а значення "i" буде змінюватись від 0 до 9.
потім робите оце ваше

 a[i][j] = а тут вже запихуйте, що там треба.

9

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

мены всеодно не вдалось реалызувати код, зможете допомогти з блоком коду на перетворення?

10

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

Що, взагалі нічого не вийшло? Жодного рядка коду?

11

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int** CreateMatrix(int m, int n)
{
    int** a;
    a = (int**)malloc(m * sizeof(int*));
    for (int i = 0; i < m; i++)
        a[i] = (int*)malloc(n * sizeof(int));
    return a;
}
void DeleteMatrix(int** a, int m, int n)
{
    for (int i = 0; i < m; i++)
        free(a[i]);
    free(a);
}
void FillMatrix(int** a, int m, int n)
{
    int i, j;
    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
        {
            a[i][j] = i + 1 + j + j + j + j + j + j + j + j + j;
        }
}
void PrintMatrix(int** a, int m, int n)
{
    int i, j;
    printf("\n");
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
            printf("%d\t", a[i][j]);
        printf("\n");
    }
}
void ChangeMatrix(int** a, int m, int n)
{
    int i, j;
    for (i = 0; i < 9; i++) {
        for (j = 0; j < 9; j++)
        {
            a[i][j]= a[i-j][j];
        }
    }
}
int main(void)
{
    int M = 9, N = 9, ** A;
    A = CreateMatrix(M, N);
    FillMatrix(A, M, N);
    printf("Matrix A:\n");
    PrintMatrix(A, M, N);
    ChangeMatrix(A, M, N);
    printf("Matrix A:\n");
    PrintMatrix(A, M, N);
    DeleteMatrix(A, M, N);
    return 0;
}

12

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

Поясніть, будь ласка. В умові сказано "Заповнити матрицю значеннями вектора b1, b2, ... , b81". У вас є матриця A, яка спершу заповнюється (FillMatrix) якимись лівими числами (i+1+9*j в якийсь дивній формі), а потім вони переставляються (ChangeMatrix). Де вектор b на 81 елемент? І чому матриця A спершу заповнюється, а потім змінюється, коли в умові лише одне заповнення?

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

13

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

мены всеодно не вдалось реалызувати код, зможете допомогти з блоком коду на перетворення?

14 Востаннє редагувалося koala (04.10.2021 14:40:51)

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

Я не розумію, в чому ваша проблема, а ви мені не хочете пояснювати. "Не вдалось реалізувати" і "не розумію умову" - трохи різні речі. Поки що я бачу, що ви чомусь чіпляєтеся за код до іншої задачі замість розв'язувати власну. Ви взагалі не розумієте, як програмувати? То є підручник. Ви не розумієте, що таке декомпозиція? Чи як її тут провести?

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

15

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

відповідаю на ваше питання) спочатку я заповнюю просту матрицю від 1 до 81 а потім вже мені треьа її перетворити в діагональну

16

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

Ну то ви собі роботи додаєте. У вас в умові треба з вектора брати елементи, а не переставляти в матриці. От скажіть, як легше кубики перекладати - з однієї коробки до іншої чи в одній заповненій коробці туди-сюди постійно вишукувати, що із чим поміняти? Так і тут.

17

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

void ChangeMatrix(int** a, int m, int n)
{
    int i, j, t;
            for (t = 0; t < m + n; ++t) {
                for (i = t, j = 0; i >= 0; --i, ++j) {
                    if ((i < m) && (j < n)) {
                        printf("%d ", a[i][j]);


                    }
                }
            }
}
як зробити так щоб результат виводився у масиві 9х9 а не все у рядок?

18

Re: Заповнити матрицю від лівого нижнього кута по діагоналі: вліво – вверх

rostukzhuk написав:
void ChangeMatrix(int** a, int m, int n)
{
    int i, j, t;
            for (t = 0; t < m + n; ++t) {
                for (i = t, j = 0; i >= 0; --i, ++j) {
                    if ((i < m) && (j < n)) {
                        printf("%d ", a[i][j]);


                    }
                }
            }
}
як зробити так щоб результат виводився у масиві 9х9 а не все у рядок?

може так

void ChangeMatrix(int** a, int m, int n)
{
    int i, j, t;
            for (t = 0; t < m + n; ++t) {
                for (i = t, j = 0; i >= 0; --i, ++j) {
                    if ((i < m) && (j < n)) {
                        printf("%d ", a[i][j]);


                    }
                        printf("\n");

                }
            }
}

але це не точно