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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Матрица, из одномерного массива в матрицу 
:(
    Опции темы
Denzel666
Дата 24.12.2006, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пожалуйста...ПРошу помочь с задачей...



Дан одномерный массив целых чисел А размерностью 64. Получить квадратную матрицу порядка 8 

,элементами которой являются числа массива А, расположенные в ней по схемам, приведенным на 

рис


__  _   __
  / /  / /  /  /|
 / /  / /  /  / | 
/ /  / /  /  / /
|/  / /  /  / /
   / /  /  / /  /|  
  / /  /  / /  / |
 / /  /  / /  / /
|/   /_/ /_/ /_->  в о бщем то же самое почти только стрелка внизу и начинается не так 

маленько...

ПРимер на эту же тему:
   _   _   __
| / / / /  /  /  /|     
|/ / / /  /  /  / |       
  / / /  /  /  /  /   
 / / /  /  /  /  /         
| / /  /  /  /  /               
|/ /  /  /  /  /  /|             
  /  /  /  /  /  / |     
 /  /  /  /  /  /  |      
|_/  /_/  /_/  \|/     
                     | 
 Дан одномерный массив целых чисел Р размерностью 64. Получить квадратную матрицу порядка 8 

,элементами которой являются числа массива Р, расположенные в ней по схеме, приведенной на 

рисунке. Эта задача решается с помощью одного основного цикла, в котором организуется 

управление изменением индексов в зависимости от условий размещения элементов. Для 

отслеживания направления движения по диагонали вводится вспомогательная переменная l. Ее 

значение равно 0 при движении вниз по диагонали и 1 при движении вверх.


Код

#include <stdio.h>
#include <math.h>
#include <conio.h>
main()
  {
  clrscr();
  float p[64];
  float a[8][8];
  int n=8,i=0,j=0,k,l=0;
  for (k=0;k<n*n;k++)
    p[k]=k;
  for (k=0;k<n*n;k++)
    {
    a[i][j]=p[k];
    if(j==0 && i<n-1 && l==0 )
      {
      i++;
      l=1;
      }
    else if(i==0 && j<n-1 && l==1 )
      {
      j++;
      l=0;
      }
    else if( j==n-1 && l==1)
      {
      i++;
      l=0;
      }
    else if(i==n-1 && l==0)
      {
      j++;
      l=1;
      }
    else if(l==0)
      {
      i++;
      j--;
      }
    else
      {
      i--;
      j++;
      }
    }
  for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
      printf("%3.0f ",a[i][j]);
    printf ("\n");
    }
  }


Добавлено @ 01:56 
Блин опять забыл язык добавить в тему...Надо что то сделать чтоб это перед глазами всегда висело....(К модераторам относится)..


[Это язык Си]
PM MAIL   Вверх
Denzel666
Дата 24.12.2006, 02:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



яЗЫК Си
PM MAIL   Вверх
apook
Дата 24.12.2006, 04:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я че то не понял на счет этих схем 

Вот как просто из одномерного в двумерный
Код

#include "stdio.h"

void main()
{
int quick_matrix[8][8], i, j, q, c, start_array[64];

for( i=0; i <64; i++ ) start_array[i] =i;
for( i=0; i <8; i++ ) for( j=0; j <8; j++ ) quick_matrix[i][j] =0;


for( i=0, q=0, c=0; i <64; i++, q++ )
{
    quick_matrix[c][q] =start_array[i];

    if( q==8 )
    {
        c++;  
        q=0;
        }
    }

for( i=0; i <64; i++ ) printf( "%d ", start_array[i] );
puts( "\n" );
for( i=0; i <8; i++ )
{
    for( j=0; j <8; j++ )
        printf( "%2d ", quick_matrix[i][j] );
puts( "" );
}

return;
}



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Anikmar
Дата 24.12.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(apook @  24.12.2006,  04:20 Найти цитируемый пост)
if( q==8 )

Мне кажется, что там нужно не 8, а 7 ставить
PM MAIL ICQ   Вверх
GIK
Дата 24.12.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Цитата(Denzel666)

Дан одномерный массив целых чисел А размерностью 64. Получить квадратную матрицу порядка 8 

,элементами которой являются числа массива А, расположенные в ней по схемам, приведенным на 

рис

Не понятна схема, понятна только твоя похожая задача. Она работает корректно. 
Линейное передвижение: 
вниз -->  вверх по диагонали --> влево --> вниз по диагонали. 
Все видно когда прочитаеш код, я расписал шаги и немно логики. Скажи конкретно задачу, опиши ее правильно, тогда уже можно над чем то думать.
Код

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

main()
  {
  clrscr();
  float p[64];
  float a[8][8];
  int n=8,i=0,j=0,k,l=0;
  for (k=0;k<n*n;k++)
    p[k]=k;
  for (k=0;k<n*n;k++)
    {
    a[i][j]=p[k];    
 
               //направляем вниз (далее по диаганали вверх), Обязательное условие i<n-1, т.е. это не нижний край матрицы
    if(j==0 && i<n-1 && l==0)   
      {
       i++;
       l=1;
      }      //направляем вправо (далее по диаганали вниз), Обязательное условие j<n-1, т.е. это не левый край матрицы 
     else if(i==0 && j<n-1 && l==1) 
      {
       j++;
       l=0;
      }
    else if( j==n-1 && l==1) //направление вниз когда дошли до левого края матрицы
      {
       i++;
       l=0;
      }
    else if(i==n-1 && l==0) //направление вправо, когда дошли до нижнего края матрицы
      {
       j++;
       l=1;
      }
    else if(l==0) //когда не края матрицы (переменные i и J не = 0 равны краям матрицы), и передвижение по диагонали ВНИЗ
      {
       i++;
       j--;
      }
    else  //когда не края матрицы (переменные i и J не = 0 и не равны краям матрицы), и передвижение по диагонали ВВЕРХ 
      {
       i--;
       j++;
      }
    }


  for(i=0;i<n;i++)
    {
    for(j=0;j<n;j++)
      printf("%3.0f ",a[i][j]);
    printf ("\n");
    }
 char ch;
 std::cin>>ch;
  }


PS. Из какого курса задачка?


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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