Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с двухмерным массивом!

18K
05 июля 2006 года
FoxMALDER
2 / / 05.07.2006
Пожалуста, помогите с двухмерным массивом.

Массив необходимо заполнить против часовой стрелки по строкам, начиная с последнего.
13K
06 июля 2006 года
Dr_C++
40 / / 07.06.2006
Цитата:
Массив необходимо заполнить против часовой стрелки по строкам, начиная с последнего.



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

Код:
#include<iostream.h>
#include<conio.h>
 
void main()
{
    const col = 5;
    const row = 5;
 
    int mass [col][row];
    int num = 0;
 
    for(int i = col-1; i != 0; i--)
    {
        for(int j = row-1; j != 0; j--)
        {
            mass[j] = num++;
            if(mass[j] < 10)
                cout<<"  "<<mass[j];
            else
                cout<<" "<<mass[j];
        }
        cout<<endl;
    }
    getch();
}


Хотя может понял и неправильно, но в этом я думаю твоя вина...:p
292
06 июля 2006 года
Matush
726 / / 14.01.2004
[quote=Dr_C++]Сложно понять что ты хочешь конкретно (формируй вопрос более понятно)...
Насколько я понял, ты хочешь сделать это:

Код:
#include<iostream.h>
#include<conio.h>
 
void main()
{
    const col = 5;
    const row = 5;
 
    int mass [col][row];
    int num = 0;
 
    for(int i = col-1; i >= 0; i--)
    {
        for(int j = row-1; j >= 0; j--)
        {
            mass[j] = num++;
            if(mass[j] < 10)
                cout<<"  "<<mass[j];
            else
                cout<<" "<<mass[j];
        }
        cout<<endl;
    }
    getch();
}


Хотя может понял и неправильно, но в этом я думаю твоя вина...:p[/quote]

Поправка ( != на >=)
11K
06 июля 2006 года
Ireul
90 / / 15.06.2006
Зря правил. != правильнее. Если несогласен - пиши на паскале, там всё тормозит одинаково.
292
06 июля 2006 года
Matush
726 / / 14.01.2004
[quote=Ireul]Зря правил. != правильнее. Если несогласен - пиши на паскале, там всё тормозит одинаково.[/quote]

Конечно не согласен. Что теперь писать на паскале? Почему. Обоснуй и обьясни пожалуйста свои слова.

Специально для Тебя простая задачка:
 
Код:
for(int x=10; x!=0; x--)

и
 
Код:
for(int x=10; x>=0; x--)


Внимание вопрос:
каким будет последнее значение переменной x в первом и втором примере?
[SIZE=2][COLOR=#0000ff][/COLOR][/SIZE][SIZE=2]
[/SIZE]
18K
06 июля 2006 года
FoxMALDER
2 / / 05.07.2006
[QUOTE=Dr_C++]
Хотя может понял и неправильно, но в этом я думаю твоя вина...:p[/QUOTE]

А что не понятно? Массив нужно заполнить против часовой стрелки по строкам, начиная с последнего...

Головоломка... :o Например: массив 5X5

5 4 3 2 1
6 19 18 17 16
7 20 25 24 15
8 21 22 23 14
9 10 11 12 13
Называется - а кому слабо? Мне слабо! Пока....... :eek:
292
06 июля 2006 года
Matush
726 / / 14.01.2004
[quote=FoxMALDER]А что не понятно? Массив нужно заполнить против часовой стрелки по строкам, начиная с последнего...

Головоломка... :o Например: массив 5X5

5 4 3 2 1
6 19 18 17 16
7 20 25 24 15
8 21 22 23 14
9 10 11 12 13
Называется - а кому слабо? Мне слабо! Пока....... :eek:[/quote]

То что тебе понятно, я не сомневаюсь. Но другим твое обьяснение никак не одназначно. Я к примеру понял его так:

07 06 05 04
08 15 14 03
09 16 13 02
10 11 12 01
13K
07 июля 2006 года
Dr_C++
40 / / 07.06.2006
[QUOTE=Matush]Поправка ( != на >=)[/QUOTE]
Да, согласен, писал на скорую руку, ночь, и упустил момент... Спасибо что исправил...

А теперь об этом...
[QUOTE= FoxMALDER]А что не понятно? Массив нужно заполнить против часовой стрелки по строкам, начиная с последнего...
Головоломка... Например: массив 5X5
5 4 3 2 1
6 19 18 17 16
7 20 25 24 15
8 21 22 23 14
9 10 11 12 13
Называется - а кому слабо? Мне слабо! Пока....... [/QUOTE]

Блин! конечно слабо! Ты даже вопрос сразу правильно сформулировать не можешь... Запомни, то что тебе очевидно, еще не означает, что это очевидно всем (твои мысли читать никто не умеет...). Так чо вопрос излагай сразу точно и без двухзначностей... Это так, замечание на будущее:cool:


А вот и нужный код:
Код:
#include<iostream.h>
#include<conio.h>

void main()
{
    const col = 5;
    const row = 5;

    int mass [col][row];
    int num = 0;

    bool ValDown = true;
    bool OnRow = true;
    int StartCol = 0;
    int StartRow = 0;
    int EndCol = 5;
    int EndRow = 5;

    while(num < col*row)
    {
        if(ValDown && OnRow)
        {
            for(int i = EndCol-1; i >= StartCol; i--)
            {
                mass[StartRow] = num++;
            }
            StartRow++;
            OnRow = !OnRow;
            ValDown = !ValDown;
        }

        else if(!ValDown && OnRow)
        {
            for(int i = StartCol; i < EndCol; i++)
            {
                mass[EndCol-1] = num++;
            }
            EndRow--;
            //CountCol++;
            OnRow = !OnRow;
            ValDown = !ValDown;
        }

        else if(ValDown && !OnRow)
        {
            for(int i = EndRow-1; i >= StartRow; i--)
            {
                mass[EndCol-1] = num++;
            }
            EndCol--;
            //CountCol++;
            OnRow = !OnRow;
        }

        else if(!ValDown && !OnRow)
        {
            for(int i = StartRow; i < EndRow; i++)
            {
                mass[StartCol] = num++;
            }
            StartCol++;
            OnRow = !OnRow;
        }
    }

    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < col; j++)
        {
            if(mass[j] < 10)
                cout<<"  "<<mass[j];
            else
                cout<<" "<<mass[j];
        }
        cout<<endl;
    }
    getch();
}


Хотя, это я думаю, не однозначное решение, а набросок...
Возможно есть и другие варианты...
3
07 июля 2006 года
Green
4.8K / / 20.01.2000
Да, можно значительно проще:
Код:
template <class T>
void fillHelix(T& matrix, int size)
{
    int y = size;
    int x = size - 1;
    int d = -1;
    int counter = 1;

    for(int i=x; i>=0;)
    {
        for(int j=i; j>=0; --j) {
            y += d;
            matrix[x][y] = counter++;
        }
        --i;
        for(int j=i; j>=0; --j) {
            x += d;
            matrix[x][y] = counter++;
        }
        d *= -1;
    }
}
13K
07 июля 2006 года
Dr_C++
40 / / 07.06.2006
[QUOTE=Green]Да, можно значительно проще:
Код:
template <class T>
void fillHelix(T& matrix, int size)
{
    int y = size;
    int x = size - 1;
    int d = -1;
    int counter = 1;

    for(int i=x; i>=0;)
    {
        for(int j=i; j>=0; --j) {
            y += d;
            matrix[x][y] = counter++;
        }
        --i;
        for(int j=i; j>=0; --j) {
            x += d;
            matrix[x][y] = counter++;
        }
        d *= -1;
    }
}
[/QUOTE]

Блин, это конечно флуд, но не мог не написать... БЛЕСК... Очень красивое решение!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог