Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распечатывание матрицы в строку, никак не пойму где ошибка... 
V
    Опции темы
Krazyzy
Дата 3.12.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Надо распечатать квадратную матрицу в строку, чтоб элементы шли в таком порядке
1  3   4 10
2  5   9 11
6  8  12 15
7 13 14 16

код написал пока так, и на 4 числе вывод идет уже неправильно, авотв чем косяк хз
Код

#include <stdio.h>
#include <conio.h>

void main() {
  int i, j, n, N, M[9][9];
  clrscr();
  do {
    printf("Enter size of matrix: ");
    scanf("%d", &n);
  } while(1 > n || n > 9);

  for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
      M[i][j] = (i + 1) * 10 + j + 1;
         printf("\n");
  for(i = 0; i < n; i++)
    {for(j = 0; j < n; j++)
     printf("%4d ",M[i][j]);
     printf("\n");
    }
printf("\nLine printed after detour ==>\n\n==>");
 
 N = n * n;
  int dis = 0, x, y, det;
  i = j = 0;
  x = y = 1;
  while(dis < N) {
    for(det = x++; det && dis < N; det--, dis++) printf("%4d", M[i++][j]);
    for(det = y++; det && dis < N; det--, dis++) printf("%4d", M[i--][j++]);
    for(det = x++; det && dis < N; det--, dis++) printf("%4d", M[i][j++]);
    for(det = y++; det && dis < N; det--, dis++) printf("%4d", M[i--][j--]);
  }
  getch();
}


Это сообщение отредактировал(а) Krazyzy - 3.12.2009, 23:56
PM MAIL   Вверх
bsa
Дата 4.12.2009, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
Читаем срочно Оформление кода.



напиши на бумажке соответствие индекса номерам строки и столбца. Возможно, увидишь закономерность.  smile Кстати, такой вопрос я уже тут встречал. Можешь попробовать найти похожую тему. Вот только ключевых слов (кроме матрица) не знаю. Хотя, можешь попробовать еще "змейка".
PM   Вверх
Dov
Дата 4.12.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(Krazyzy @  3.12.2009,  22:53 Найти цитируемый пост)
авотв чем косяк хз


Krazyzy, чем твой код разбирать проще самому написать...  smile 
Код
#define SZ 4

int main()
{
    int    matr[][SZ] = {1, 3, 4, 10, 2, 5, 9, 11, 6, 8, 12, 15, 7, 13, 14, 16};    
    int    i, j, n = SZ * SZ, d = -1;      // d = -1, - направление движения вниз-влево

    puts("Source matrix:");
    for(i = 0; i < SZ; i++)
    {
        for(j = 0; j < SZ; j++)
            printf("%4d", matr[i][j]);
        puts("");
    } 

    puts("\nResult:");    
    for(i = j = 0; n; n--)
    {
        // меняем направление движения: вверх-вправо(+1) или вниз-влево(-1)
        d = i < 0 || i > SZ - 1 || j < 0 || j > SZ - 1 ? -d : d;

        // корректируем выход индексов за пределы допустимого диапазона
        j > SZ - 1 ? i += 2, j-- : i > SZ - 1 ? j += 2, i-- : j < 0 ? j++ : i < 0 ? i++ : 0;
        
        printf("%d ", matr[i][j]);

        // 'движемся' вверх/вниз вдоль диагоналей матрицы 
        i -= d;
        j += d; 
    }
    puts("");

    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
bsa
Дата 5.12.2009, 00:04 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Dov, твой код не сильно лучше. особенно строки 20 и 23.  smile 
PM   Вверх
Dov
Дата 5.12.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(bsa @  4.12.2009,  23:04 Найти цитируемый пост)
Dov, твой код не сильно лучше. особенно строки 20 и 23

bsa, а что тебя смущает? Там обычная проверка индексов на валидность и всё. Ничего лишнего там нет.

Добавлено @ 01:15
Можно эти две строки заменить на это:
Код
        if(j > SZ - 1)
        {
            d = -d;
            i += 2;
            j--;
        }
        else if(i > SZ - 1)
        {
            d = -d;
            j += 2;
            i--;
        }
        else if(j < 0)
        {
            d = -d;
            j++;
        }
        else if(i < 0)
        {
            d = -d;
            i++;
        }

Так лучше?  smile 

Это сообщение отредактировал(а) Dov - 5.12.2009, 01:16


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 5.12.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Dov,  к коду не присматривался, но это  что за хак ?  smile 
Цитата(Dov @  4.12.2009,  19:42 Найти цитируемый пост)
    int    matr[][SZ] = {1, 3, 4, 10, 2, 5, 9, 11, 6, 8, 12, 15, 7, 13, 14, 16};    

по заданию надо получить такую матрицу, а Вы ее изначально вводите.




--------------------
PM MAIL WWW   Вверх
Dov
Дата 5.12.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



mes,  ты недопонял задание. А может быть я недопонял?
Я понимаю так, что есть матрица такого вида:
Код

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

Её нужно распечатать в одну строку(как говорит bsa -  "змейкой"), что бы она выглядела так:
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Если я неверно понял, то звыняйте..   smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 5.12.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

Репутация: 79
Всего: 250



Цитата(Dov @  5.12.2009,  17:46 Найти цитируемый пост)
Её нужно распечатать в одну строку(как говорит bsa -  "змейкой"), что бы она выглядела так:

я понял с точностью до наоборот, что матрицу, которая в линейном случае представляет строку порядковых чисел, нужно записать "змейкой", т.е как показано в примере у тс.
 smile 

Ну это пусть тс уточняет .. хотя если ему надо обратное, то и самому переделать будет не сложно. smile 

Это сообщение отредактировал(а) mes - 5.12.2009, 23:00


--------------------
PM MAIL WWW   Вверх
Krazyzy
Дата 6.12.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dov огромное спасибо!!!!!!!!!! smile  smile  просто спас!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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