1 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 00:46:10)

Тема: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Скласти програму сортування елементів двовимірного квадратного масиву розміром 6х6 за вказаними правилами. (Стрілка вказує напрямок від малого до великого елемента.В масиві можуть бути будь-які значення ... Я загнав тільки масив b в масив а, ще потрібно загнати масив с в масив а в такому ж порядку ...(Фото завдання прикріплене внизу)
Я майже все зробив.Залишилось якось внести масив c в масив a, в такому ж порядку..Але я не знаю як.Допоможіть, пж.Спасибі)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#define N 6 
int main()
{
    int a[N][N], b[N - 1], c[N*3];
    int i, j, k, tmp;
    srand(time(0));
    for (i = 0; i < N; i++)
        //Виводимо масив а і заповнює значеннями
    {
        printf("\n");
        for (j = 0; j < N; j++)
        {
            a[i][j] = rand() % 100;
            printf("%3d", a[i][j]);
        }
    }
    //Вивовидимо і заповнюємо значеннями масив b
    for (i = 0; i < N - 1; i++)
    {
        b[i] = a[N-2-i][i];
        //printf("\n%3d", b[i]);
    }
    //Сортуэмо масив В
    for (k = N - 1; k >= 0; k--)
        for (i = 0; i<k; i++)
            if (b[i] < b[i + 1])
            {
                tmp = b[i + 1];
                b[i + 1] = b[i];
                b[i] = tmp;
            }
    //Виводимо і заповнюємо значеннями масив с
    k = 0;
    for (i = 1; i <=N; i++)
    {
        c[k] = a[N - i][i - 1];
        k++;
        //printf("\n%3d", c[i]);
    }

    for (i = 1; i < N; i++)
    {
        c[k] = a[i][N - 1];
        k++;
            //printf("\n%3d", c[i+6+5]);
    }

    for (i = 1; i < N-1; i++)
    {
        c[k] = a[N - 1][N - 1 - i];
        k++;
        //printf("\n%3d", c[i + 6 + 5+4]);
    }


    for (i = 1; i < N - 2; i++)
    {
        c[k] = a[N-1-i][N+i-5];
        k++;
        //printf("\n%3d", c[i + 6 + 5 + 4+3]);
    }
    //Сортуємо масив с
    for (k = N*3 - 1; k >= 0; k--)
        for (i = 0; i<k; i++)
            if (c[i] > c[i + 1])
            {
                tmp = c[i + 1];
                c[i + 1] = c[i];
                c[i] = tmp;
            }
    for (i = 0; i < N * 3; i++)
    {
        printf("\n%3d", c[i]);
    }

    //printf("\n");
    for (i = 0; i < N; i++)
    {
        //printf("\n");
        for (j = 0; j < N; j++)
        {
            a[i][N - 2 - i] = b[i];
            //printf("%3d", a[i][j]);
        }
    }




    getch();
    return 0;
}
Post's attachments

Записати.PNG 22.85 kb, 2 downloads since 2017-11-18 

Dr3am ARbuZzz :)

2 Востаннє редагувалося #Sparta (19.11.2017 00:40:14)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Ну стрілка у Вас нарисована на матриці 4х4, а не на 6х6, тому яка саме логіка Вам там потрібно - важко здогадатись.

Код не Ваш, правда? :)
Просто дивно, що ви маєте коментарі руссо-українською.

Студент НУ "ЛП".

3 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 12:03:23)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

#Sparta написав:

Ну стрілка у Вас нарисована на матриці 4х4, а не на 6х6, тому яка саме логіка Вам там потрібно - важко здогадатись.

Код не Ваш, правда? :)
Просто дивно, що ви маєте коментарі руссо-українською.

Код мій.Просто я закидав не тільки на українські форуми...А щодо матриці,просто вона має бути розміром більше 5..Тому і 6 на 6
(P.S.  можете спробувати,працює..)

Dr3am ARbuZzz :)

4 Востаннє редагувалося koala (19.11.2017 01:00:32)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Можна уточнити? Якщо початковий масив (4х4, як на малюнку) був

16 15 14 13
12 11 10  9
 8  7  6  5
 4  3  2  1

то результат має бути

 1  3  6 10
 2  5  9 11
 4  8 16 12
 7 15 14 13

чи

16 15 14  4
12 11  3  5
 8  2 13  6
 1 10  9  7

Ну і нічого принципово складного в спіралях немає, тільки занудно. Вам треба пройти N клітинок по діагоналі вгору, N-1 вниз, N-2 ліворуч і далі знову N-3 по діагоналі, N-4 вниз... коротше, три цикли в циклі, після кожного перевіряєте поточну довжину, якщо 0 - робите break в зовнішньому циклі.

5 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 01:17:27)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Якщо поточний масив 4 на 4 такий:

16 15 14 13
12 11 10  9
 8  7  6  5
 4  3  2  1

то результат має бути :

16 15 14 4
12 11  3 5
8   2 13 6
1  10  9 7

(P.S. Я не зовсмім зрозумів,якщо не важко,можна кодом?)
Я повитягав всі ті числа і записав в 1 цикл.Тепер як мені його вставити в перший масив?
Але ж масив має бути 6х6))

Dr3am ARbuZzz :)

6

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Десь так (не відлагоджував):

int step = N; //довжина гілки спіралі
int row = N; //номер рядка до початку руху
int col = -1; //номер стовпця до початку руху
int k = 0; //індекс в c
while(step>0) {
  int i = 0;
  //діагональний рух
  for(i=0;i<step;++i) {
    row--;
    col++;
    a[row][col]=c[k];
    k++;
  }
  step--;
  //рух вниз
  for(i=0;i<step;++i) {
    row++;
    a[row][col]=c[k];
    k++;    
  }
  step--;
  //рух ліворуч
  for(i=0;i<step;++i) {
    col--;
    a[row][col]=c[k];
    k++;    
  }
}

7 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 01:26:54)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Це в Сі?
Ми ще такого не проходили...Мені потрібно так,би в мене написано...В мене майже все зроблено,просто треба якось загнати масив с в масив а..

Dr3am ARbuZzz :)

8

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

D3ad ARbuZzz написав:

Це в Сі?
Ми ще такого не проходили...Мені потрібно так,би в мене написано...В мене майже все зроблено,просто треба якось загнати масив с в масив а..

Якого "такого"? З того, чого не було у вас, там один while і проголошення змінної в блоці, яке, насправді, не дуже і потрібне, бо у вас воно і так є. Ви не знаєте про цикли while?

9 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 11:39:23)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

koala написав:
D3ad ARbuZzz написав:

Це в Сі?
Ми ще такого не проходили...Мені потрібно так,би в мене написано...В мене майже все зроблено,просто треба якось загнати масив с в масив а..

Якого "такого"? З того, чого не було у вас, там один while і проголошення змінної в блоці, яке, насправді, не дуже і потрібне, бо у вас воно і так є. Ви не знаєте про цикли while?

Та знаю я про всі ці цикли..Просто якийсь код незвичний..
Але Ви мене всеодно не зрозуміли...Подивіться мій перший код,там майже все зроблено вже.Потрібно лише якимось чином вставити масив "с" в масив "а" в такому ж порядку...Ось в цьому мені і потрібна допомога.Мені не потрібно заново писати код,він у мене вже є..

Dr3am ARbuZzz :)

10

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

D3ad ARbuZzz написав:

Та знаю я про всі ці цикли..Просто якийсь код незвичний..

І що ж у ньому незвичного? Назви змінних у більш ніж один символ? Так навпаки, це загальна практика, односимвольні змінні припустимі хіба що як параметри циклів, та й то не дуже. Тільки студенти пишуть односимвольні змінні, бо гадають, що так "швидше" писати. А насправді програміст 90% (якщо не 99%) часу не пише, а читає код, тому зрозумілі назви змінних - обов'язкова умова якісного коду.

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

11 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 13:15:04)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

koala написав:
D3ad ARbuZzz написав:

Та знаю я про всі ці цикли..Просто якийсь код незвичний..

І що ж у ньому незвичного? Назви змінних у більш ніж один символ? Так навпаки, це загальна практика, односимвольні змінні припустимі хіба що як параметри циклів, та й то не дуже. Тільки студенти пишуть односимвольні змінні, бо гадають, що так "швидше" писати. А насправді програміст 90% (якщо не 99%) часу не пише, а читає код, тому зрозумілі назви змінних - обов'язкова умова якісного коду.

Та я все це розумію..Але Ви мене всеодно не зрозуміли...Подивіться мій перший код,там майже все зроблено вже.Потрібно лише якимось чином вставити масив "с" в масив "а" в такому ж порядку...Ось в цьому мені і потрібна допомога.Мені не потрібно заново писати код,він у мене вже є..Але дякую і на цьому)

Dr3am ARbuZzz :)

12

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

D3ad ARbuZzz написав:
koala написав:
D3ad ARbuZzz написав:

Та знаю я про всі ці цикли..Просто якийсь код незвичний..

І що ж у ньому незвичного? Назви змінних у більш ніж один символ? Так навпаки, це загальна практика, односимвольні змінні припустимі хіба що як параметри циклів, та й то не дуже. Тільки студенти пишуть односимвольні змінні, бо гадають, що так "швидше" писати. А насправді програміст 90% (якщо не 99%) часу не пише, а читає код, тому зрозумілі назви змінних - обов'язкова умова якісного коду.

Та я все це розумію..Але Ви мене всеодно не зрозуміли...Подивіться мій перший код,там майже все зроблено вже.Потрібно лише якимось чином вставити масив "с" в масив "а" в такому ж порядку...Ось в цьому мені і потрібна допомога.Мені не потрібно заново писати код,він у мене вже є..

Скопiювати вмiст масиву с в масив а без змiн ?

13 Востаннє редагувалося D3ad ARbuZzz (19.11.2017 13:06:02)

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

vtorgashov написав:
D3ad ARbuZzz написав:
koala написав:

І що ж у ньому незвичного? Назви змінних у більш ніж один символ? Так навпаки, це загальна практика, односимвольні змінні припустимі хіба що як параметри циклів, та й то не дуже. Тільки студенти пишуть односимвольні змінні, бо гадають, що так "швидше" писати. А насправді програміст 90% (якщо не 99%) часу не пише, а читає код, тому зрозумілі назви змінних - обов'язкова умова якісного коду.

Та я все це розумію..Але Ви мене всеодно не зрозуміли...Подивіться мій перший код,там майже все зроблено вже.Потрібно лише якимось чином вставити масив "с" в масив "а" в такому ж порядку...Ось в цьому мені і потрібна допомога.Мені не потрібно заново писати код,він у мене вже є..

Скопiювати вмiст масиву с в масив а без змiн ?

Масив с я уже відсортував,просто потрібно загнати його в такому ж порядку в масив а,в якому я його вивів(Як вказано на малюнку..2 стрілка)..Так,без змін

Dr3am ARbuZzz :)

14

Re: Мова Сі ... Потрібно загнати одновимірний масив в двомірний

Освітянин створив клона, тому допомоги не буде.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»