Модераторы: Alx, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив по диагонали, На языке паскаль 
:(
    Опции темы
TwisT_X
  Дата 1.1.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



Дана матрица размером МхМ. Записать все элементы матрицы в диагональном порядке в одномерный массив. Прикрепленный фаил показывает последовательность. smile 

Это сообщение отредактировал(а) TwisT_X - 1.1.2007, 19:14

Присоединённый файл ( Кол-во скачиваний: 47 )
Присоединённый файл  Massiv.JPG 5,16 Kb


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
sergejzr
Дата 2.1.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



JPEG так сериализирует отфильтрованную матрицу. Где-нить в исходниках там алг стопудово выписан.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
TwisT_X
Дата 2.1.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



sergejzr, ну да.. он мне говорил, когда давал это задание, что это прога как то что там типа ужимает и с кортинками фармата JPG! А что делать я под конец ваще запутался smile 


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
sergejzr
Дата 2.1.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Вот, я набросал кое-что. Правда на JAVA. Просто шуруешь по диагонали, пока не упрёшься, разворачиваешься и назад smile
Можно красивше сделать, но времени нет. И комменты на англицком, потому что русского на работе нет и переписывать лень smile

Код

public class MatrixReader {
    static final int UPRIGHT = 11; // go diagonal up-right

    static final int DOWNLEFT = 15; // go diagonal down-left

    public static void ReadZigZack(Matrix m, ReaderListener l) {
        int x = 0, y = 0, direction = UPRIGHT;
        int maxX = m.colsCount(); // matrix width
        int maxY = m.rowsCount(); // matrix height

        while (x < maxX || y < maxY) { // Do, until we are not in the right
                                        // lower corner.
        // correct border, if we are out of bounds with one coordinate
            if (!(y < maxY))
                y--;
            if (!(x < maxX))
                x--;

            // read character.
            l.character(m.getAt(x, y));

            switch (direction) {
            case UPRIGHT: {
                if (x == maxX - 1) { // we are at the right border. Go one
                                        // step down and change direction
                    y++;
                    direction = DOWNLEFT;
                } else {
                    if (y > 0)// we can follow the diagonal since we have not
                                // reached the top row
                        y--;
                    else if (x % 2 == 0) // we are at the top row. every
                                            // second cell changes the direction
                        direction = DOWNLEFT;
                }
                x++;
            }

                break;
            // The same in a mirror
            case DOWNLEFT: {
                if (y == maxY - 1) {
                    x++;
                    direction = UPRIGHT;
                } else {
                    if (x > 0)
                        x--;
                    else if (y % 2 != 0)
                        direction = UPRIGHT;
                }
                y++;

            }
                break;
            }

        }
    }

}



Добавлено @ 20:34 
l.character(m.getAt(x, y)); непосредственно выдаёт ячейку.


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
TwisT_X
Дата 12.1.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



sergejzr, ну препод говорил, что этот код мона написть в 20 строк.. может тут надо какието процедуры или функции? Кстати на ДЖАВЕ не че не понял))


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
sergejzr
Дата 12.1.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Код

       while (x < maxX || y < maxY) { 
            if (!(y < maxY)) y--;
            if (!(x < maxX)) x--;
            l.character(m.getAt(x, y));
            switch (direction) {
            case UPRIGHT: {
                if (x == maxX - 1) {y++; direction = DOWNLEFT;} 
               else {
                    if (y > 0) y--;
                    else if (x % 2 == 0) direction = DOWNLEFT;
                }x++;
            }break;
            case DOWNLEFT: {
                if (y == maxY - 1) {x++; direction = UPRIGHT;} 
               else {
                    if (x > 0) x--;
                    else if (y % 2 != 0) direction = UPRIGHT;
                }y++;
            }break;}}


Так устроит? smile)) Я просто комменты вырезал. Даже укоротить ещё можно. как минимум на две строки. Но лень.
А насчёт Явы - замени '{' на BEGIN '}' на END и будет почти паскаль.

Добавлено @ 15:36 
И весь switch/case можно на if заменить.

Добавлено @ 15:38 
Код

       while (x < maxX || y < maxY) { 
            if (!(y < maxY)) y--;
            if (!(x < maxX)) x--;
            l.character(m.getAt(x, y));
            if (direction) {
                if (x == maxX - 1) {y++; direction = false;} 
               else {
                    if (y > 0) y--;
                    else if (x % 2 == 0) direction = false;
                }x++;
            }else {
                if (y == maxY - 1) {x++; direction = true;} 
               else {
                    if (x > 0) x--;
                    else if (y % 2 != 0) direction = true;
                }y++;
            }

Вроде того..


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
TwisT_X
Дата 13.1.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


It's works!
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.2.2005
Где: Earth

Репутация: 1
Всего: 4



Всеравно не понимаю всяких вослкицательных знаков и прямых палок  smile 
Ну ты плиз когда будет время напиши на Паскале.. А то всетаки тяжело разобраться smile


--------------------
Если ты упадешь я буду рядом. (с) Асфальт
PM MAIL WWW   Вверх
V.A.KeRneL
  Дата 14.1.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: нет
Всего: 14



TwisT_X, случайно наткнулся при поиске в инете нужной мне проги, на почти ту, что нужна тебе... smile
http://sumdu.edu.ua/tournament/mathematic/ua/simple/inform/ (1-ая задача)
Нужны лишь минимальные переделки. В том плане, что там идёт заполнение матрицы, а тебе нужно их считывание и запись в одномерный.



--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
keenara
Дата 2.2.2007, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 2.2.2007

Репутация: нет
Всего: 2



Цитата

Всеравно не понимаю всяких вослкицательных знаков и прямых палок   
Ну ты плиз когда будет время напиши на Паскале.. А то всетаки тяжело разобраться  

Дорогуша, а ты лучше бы чем задавать такие вопросы - почитал бы простейшие учебники по C++ и Паскалю. Задачи такого уровня гораздо быстрее и проще самому решить, чем ждать пока другие решат
Итак, ! - это отрицание, в Паскале - not
|| - логическое "или", в Паскале - or
{ - енто BEGIN, }-енто END.

Теперь справишься, надеюсь? Если нет, скажи, напишу на Паскале.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




[ Время генерации скрипта: 0.6509 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.