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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c++] перемещение елементов в матрице, Заполнить матрицу линейной последователь 
V
    Опции темы
Patchuley
Дата 18.5.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно заполнить матрицу 9х9 линейной последовательностью(это 1, 2, 3...! можно это как то сделать автоматически, а то я вручную ввожу склавы=))) а потом переместить элементы из левого верхнего угла вниз по диагонали(влево-вниз) Вот что должно получиться:
  1    2    4    7  11  16  22  29  37
  3    5    8  12  17  23  30  38  46
  6    9  13  18  24  31  39  47  54
10  14  19  25  32  40  48  55  61
15  20  26  33  41  49  56  62  67
21  27  34  42  50  57  63  68  72
28  35  43  51  58  64  69  73  76
36  44  52  59  65  70  74  77  79
45  53  60  66  71  75  78  80  81
Я тока начинаю...тут написала кое что, но оно не работает:
Код

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
int main(void)
{
clrscr();
int Ar[9][9];
int i;
int j;
for (i=0; i<9; i++)
    for (j=0; j<9; j++)
scanf("%4d",&Ar[i][j]);
printf ("Nachalnuj masiv:\n");
for(i=0; i<9;i++){
    for( j=0;j<9;j++)
    printf("%4d", Ar[i][j]);
    putchar('\n');}
putchar('\n');
putchar('\n');
for (i=0;i<9; i++){
for(j=0;j<9;j++)
{
Ar[0][0]=Ar[0][0];
Ar[0][1]=Ar[0][1];
Ar[0][2]=Ar[1][0];
Ar[0][3]=Ar[0][2];
Ar[0][4]=Ar[1][1];
Ar[0][5]=Ar[2][0];
Ar[0][6]=Ar[0][3];
Ar[0][7]=Ar[1][2];
Ar[0][8]=Ar[2][1];
Ar[1][0]=Ar[3][0];
}}
printf("Masiv-rezultat:\n");
 for(i=0; i<9; i++){
     for(j=0;j<9;j++)
 printf("%4d", Ar[i][j]);
 putchar('\n');}
getche ();
return 0;
}


Если у кого возникнет желание мне помочь- буду очень признательна) smile 

Это сообщение отредактировал(а) JackYF - 18.5.2008, 22:53
PM MAIL   Вверх
JackYF
Дата 18.5.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Patchuley @  18.5.2008,  21:40 Найти цитируемый пост)
но оно не работает:

Не желаешь ли добавить кое-чего? smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Patchuley
Дата 19.5.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Не желаешь ли добавить кое-чего?


Эмм...чего?) скажешь-добавлю smile 

Это сообщение отредактировал(а) Patchuley - 19.5.2008, 19:43
PM MAIL   Вверх
JackYF
Дата 19.5.2008, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Patchuley @  19.5.2008,  18:35 Найти цитируемый пост)
чего?) скажешь-добавлю

Ну, исходи из предположения, что телепатов нынче мало и угадать, какие же ошибки произошли, сложно...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
EEEEEE
Дата 19.5.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Просчитать закономерность приращения по строкам и столбцам и увязать с индексами массива ( i и j).
PM MAIL   Вверх
Patchuley
Дата 19.5.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Просчитать закономерность приращения по строкам и столбцам и увязать с индексами массива ( i и j).


Воть...увязала с индексами(i,j)
Код

#include<conio.h>
#include<stdio.h>
int mas[9][9];
int main()
{
 clrscr();
 int i, j, chislo;
 int poch=8;
 mas[1][1]=1;
 j=1;
 i=1;
 poch=1;
 for (chislo=2; chislo<82; chislo++)
 {
 if (chislo<45)
 {
  if (j==1)
  {
   poch+=1;
   j=poch;
   i=1;
   mas[i][j]=chislo;
  }
  else mas[++i][--j]=chislo;
 }

 else
 {
  if (i==9)
  {
   poch+=1;
   i=poch;
   j=9;
   mas[i][j]=chislo;
  }
 else mas[++i][--j]=chislo;
 }
}

 for (i=1; i<10; i++)
 {
  for (j=1; j<10; j++)
  {
   printf("%3d", mas[i][j]);
  }
  printf("\n");
 }
 getch();
 return 0;
}

терь выдаеться пол матрицы, по диагонали... тоесть где то ошибка в этом цикле:
Код

else
 {
  if (i==9)
  {
   poch+=1;
   i=poch;
   j=9;
   mas[i][j]=chislo;
  }
 else mas[++i][--j]=chislo;
 }

сто раз проверяла...ума не приложу в чем дело....(((
PM MAIL   Вверх
Owen
Дата 19.5.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include "stdio.h"

#define size 3

int main()
{
   int matr[ size ][ size ];
   int counter = 0;
   for( int i = 0; i < size; i++ )
      for( int j = 0; j <= i; j++ )
      {
         matr[ j ][ i - j ] = ++counter;
         matr[ size - 1 - j ][ size - 1 - i + j ] = size * size + 1 - counter;
      }

   for( int i = 0; i < size; i++, printf( "\n" ) )
      for( int j = 0; j < size; j++ )
         printf( "%2d ", matr[i][j] );
   return 0;
}


это в случае, если можно сходу забивать последовательность в матрицу.  (судя по коду идущему выше -- это и надо)

Это сообщение отредактировал(а) Owen - 19.5.2008, 22:41
PM ICQ   Вверх
Owen
Дата 19.5.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1)
Код

...
int mas[9][9];
...
for (i=1; i<10; i++)
 {
  for (j=1; j<10; j++)
  {
   printf("%3d", mas[i][j]);
  }
  printf("\n");
 }


Ты создаешь массив int[9][9]. это значит, что элементы массива нумеруются от 0 до 8. ты же нумеруешь от 1 до 9

2) 
Код

else
 {
  if (i==9)
  {
   poch+=1;
   i=poch;
   j=9;
   mas[i][j]=chislo;
  }
 else mas[++i][--j]=chislo;
 }


когда ты первый раз сюда добираешься poch = 9; после ты его еще и увеличиваешь, как следствие уходишь еще дальше за пределы матрицы
PM ICQ   Вверх
mes
Дата 19.5.2008, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Patchuley @  18.5.2008,  22:40 Найти цитируемый пост)
Нужно заполнить матрицу 9х9 линейной последовательностью(это 1, 2, 3...! можно это как то сделать автоматически, а то я вручную ввожу склавы=))) 

вот пример заполнения матрицы 3х3 :
Код

int mas[3][3]={ 1,2,3
                          ,4,5,6
                          ,7,8,9
                          };



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


Шустрый
*


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

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



мда... вспомнилось что-то...
Код

#include "stdio.h"

#define size 5

int matr[size][size];

// определяем на какую диагональ нужно поставить элемент
int Diag( int id )
{
   int sum = 0;
   for( int i = 0; i < size; sum += ++i )
   {
      if( id <= sum )
         return i--;
   }
   sum = (size + 1)* size / 2;
   for( int i = size; i >= 0; sum += --i )
   {
      if( id <= sum )
         return size * 2 - i;
   }
}

// согласен: рекурсия -- некрасиво, но люблю я ее. когда цифры маленькие
// и производительность не особо прижимает.
int Work( int i, int j, int value = 3 )
{
   int val = matr[i][j];
   int a = Diag( val );
   int loc = 0;
   if( a > size )
   {
      loc = ( size + 1 ) * size / 2;
      loc += size * ( size - 1 ) / 2;
      int p = size * 2 - a;
      loc -= ( p + 1 ) * p / 2;

      int pos = val - loc;
      matr[i][j] = value;

      int x = 6 - pos;
      int y = pos;
      if( a - size + pos - 1 == i && size - pos == j )
         return val;
      return Work( a - size + pos - 1, size - pos, val );
   }
   else
   {
      loc = ( a - 1 ) * a / 2;
   
      int pos = val - loc;
      matr[i][j] = value;
      if( pos - 1 == i && a - pos == j )
         return val;
      return Work( pos - 1, a - pos, val );
   }
   //Work( a, size - a, matr[i][j] );

   return -1;
}

void Output( )
{
   for( int i = 0; i < size; i++, printf( "\n" ) )
      for( int j = 0; j < size; j++ )
         printf( "%2d ", matr[i][j] );
}

int main()
{
   for( int i = 0; i < size; i++ )
      for( int j = 0; j < size; j++ )
         matr[ i ][ j ] = ( i  ) * size + j + 1;
   Output( );
   printf( "\n\n" );

   // забили матрицу. теперь надо поменять элементы местами
   for( int i = 0; i < size; i++ )
      for( int j = 0; j < size; j++ )
         Work( i, j, matr[i][j] );

   Output( );
   return 0;
}



код не оптимален. просто что в голову взбрело. хотя можно было методом чайника забить матрицу по-новой. Тут разве что можно приплести аналогичную перестановку произвольных элементов в матрице. Это была бы на порядок более интересная задача.

Усе поразвлекался и хватит...

Это сообщение отредактировал(а) Owen - 20.5.2008, 02:16
PM ICQ   Вверх
Patchuley
Дата 20.5.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пасиб большое  Owen, smile ...Вы мне очень помогли smile 


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

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

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

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

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


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

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


 




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


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

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