Форум программистов, компьютерный форум CyberForum.ru

Сформировать последовательность из элементов матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
22.12.2011, 18:07     Сформировать последовательность из элементов матрицы #1
Cоставить программу заданной обработки матрицы целых чисел. В процессе обработки использовать перестановки элементов внутри массива, не создавая новых массивов. Заполнение исходного массива организовать с помощью генератора случайных чисел. Исходный и обработанный массив выводить на экран.
Во всех вариантах работать с ЗАДАНОЙ матрицей, не создавая дополнительных массивов и матриц (кроме случаев, где это предусмотрено вариантом задания).


1) Дана матрица A(n на n). Получить x1xn + x2xn-1 + ... + xnx1, где xk – наибольшее значение элементов k-го столбца данной матрицы.

Добавлено через 9 часов 21 минуту
HELP ME

Добавлено через 17 часов 50 минут
up......
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.12.2011, 18:25     Сформировать последовательность из элементов матрицы #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Ищет максимальный элемент в столбце c номером colN(начиная с нуля)
int maxInCol(int **m, int n, int colN)
{
  int max = m[0][colN];
  for (int i = 1; i < n; i++)
    if (max < m[i][colN])
      max = m[i][colN];  
  return max;
}
 
// Сама функция
int function(int **m, int n)
{
  int sum = 0;
  for (int i = 0; i < N / 2; i++)
    sum += maxInCol(m, i) * maxInCol(m, N - i - 1) * 2;
  if (N % 2 == 1)
  {
    int tmp = maxInCol(N / 2 + 1);
    sum += tmp * tmp;
  }
}
Я вточности не уверен, что это работает корректно. Если требуется - могу объяснить принцип.
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 11:57  [ТС]     Сформировать последовательность из элементов матрицы #3
помогите с полной программой
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 12:05     Сформировать последовательность из элементов матрицы #4
Как должна выглядеть программа? Матрица - она определенного размер или размер вводится с клавиатуры? Матрица тоже заполняется с клавиатуры?
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 12:36  [ТС]     Сформировать последовательность из элементов матрицы #5
НУ вот все задание


Задание: составить программу заданной обработки матрицы целых чисел. В процессе обработки использовать перестановки элементов внутри массива, не создавая новых массивов. Заполнение исходного массива организовать с помощью генератора случайных чисел. Исходный и обработанный массив выводить на экран.
Во всех вариантах работать с ЗАДАНОЙ матрицей, не создавая дополнительных массивов и матриц (кроме случаев, где это предусмотрено вариантом задания).

Теоретический материал
Матрица, по сути, является двумерным массивом элементов, поэтому для работы с матрицей будем использовать двумерный массив. Правила создания, обработки двумерных массивов, в общем, остаются такими же, как и для одномерных массивов. Отличие состоит в количестве индексов.
Для организации доступа последовательно ко всем элементам матрицы организуются два цикла, причем порядок «вложения» циклов определяется тем, как осуществляется перебор элементов: по столбцам или по строкам. Чаще используется проход по матрице по строкам, т. е. сначала в первой строке перебираются элементы всех столбцов, затем – во второй строке и т. д. В этом случае «внешним» будет цикл по строкам (т. е. по индексу i), а вложенным – цикл по столбцам (т. е. по j). Ниже представлен пример заполнения матрицы значениями, вводимыми с клавиатуры, причем элементы строк матрицы могут вводиться в строчку через пробел, а для ввода значений новой строки надо нажать клавишу <Enter>.
C++
1
2
3
4
5
6
for (i=1; 5; i++)
{
   for (j=1;10; j++)
       cin>>a[i][j];
   cin<<
}
Обработка и вывод матрицы осуществляется аналогично.


1. Дана матрица A(n*n). Получить x1xn + x2xn-1 + ... + xnx1, где xk – наибольшее значение элементов k-го столбца данной матрицы.
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 13:04     Сформировать последовательность из элементов матрицы #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Получилось примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <stdlib.h>
// Размер матрицы 
#define N 2 
using namespace std;
 
// Ищет максимальный элемент в столбце c номером colN(начиная с нуля)
int maxInCol(int m[N][N], int colN)
{
  int max = m[0][colN];
  for (int i = 1; i < N; i++)
    if (max < m[i][colN])
      max = m[i][colN];  
  return max;
}
 
// Сама функция
int function(int m[N][N])
{
  int sum = 0;
  for (int i = 0; i < N / 2; i++)
    sum += maxInCol(m, i) * maxInCol(m, N - i - 1) * 2;
  if (N % 2 == 1)
  {
    int tmp = maxInCol(m, N / 2 + 1);
    sum += tmp * tmp;
  }
 
  return sum;
}
 
void main( void )
{
  int m[N][N];
  int i, j;
 
  // Заполняем случайными значениями и одновременно выводим
  for (i = 0; i < N; i++)
  {
    for (j = 0; j < N; j++)
    {
      m[i][j] = rand() % 201 - 100;
      cout << m[i][j] << ' ';
    }
    cout << '\n';
  }
 
  cout << "Result: " << function(m) << '\n';
  system("pause");
}
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 13:44  [ТС]     Сформировать последовательность из элементов матрицы #7
Спасибо, но нужно сделать чтобы вводилось и т д,что-то наподобие этой программы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdafx.h>
#include <stdio.h>
#include <iostream>
#include <ctime> 
#include <conio.h>
using namespace std;
int main()
{
cout << "Vvedite kolichestvo elementov :"<<endl;
int *iptr;                                   // указатель на массив
int *jptr;                                   // указатель на конечный массив 
int *lastptr;
int *min;                                    // указатель на мин. элемент массива
int n,i;
cin >> n;                                   // вводим количество элементов массива
int* a = new int[n];
 
for ( iptr = a, i=0; iptr < a+n; iptr++,i++) 
{                 // цикл ввода элементов массива
 
cout << "Vvedite " << i << " element = ";
cin >> *iptr;                                // вводим элементы массива
}
cout <<endl;
cout << "Zadaniu massiv"<<endl; 
cout <<endl;
min = a;                                  //указатель min равен указателю первого элемента
//нахождение минимального элемента массива-------------------
for (iptr = a+1; iptr < a+n; iptr++)                   
{   if (*iptr < *min) 
       {
         min = iptr;
         *min = *iptr;
       }
    cout << "Element: "<<*iptr << " "<<endl;         //заданный массив
  //  cout << "Nomer: " << iptr     << " "<<endl;  //номер элемента массива
}                                           
cout << "Min element: " << *min <<endl;
//-----------------------------------------------------------
cout <<endl;
//----удаляем положительные элементы массива, имеющие четный порядковый номер---
iptr=a+n;
i = n;
lastptr = a+n;                        //указатель на последний элемент массива
while (iptr > min)
  {               
         if( (*iptr >= 0) && (i % 2 == 0) )
         {    
             for ( jptr = iptr; jptr < lastptr-1; jptr++)
             {
                  *jptr = *(jptr+1);                  
             }
             lastptr--;
         }
         iptr--;
         i--;
        
  } 
//--------вывод массива--------------------------------------------------------
cout << "Konechniy massiv "<<endl;
for ( iptr = a; iptr < lastptr; iptr++) 
{
  cout << *iptr << " ";
}
 _getch() ;
 
 
}
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 13:58     Сформировать последовательность из элементов матрицы #8
Т.е. дожен вводиться размер матрицы, а потом ее содержимое?
hally
 Аватар для hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 14:04  [ТС]     Сформировать последовательность из элементов матрицы #9
ну да ну или можно вроде просто вводить порядок матрицы и что-бы потом выводилось
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 14:20     Сформировать последовательность из элементов матрицы
Еще ссылки по теме:

C++ Сформировать суммы элементов строк матрицы и суммы элементов столбцов матрицы
Построить последовательность из элементов матрицы C++
Из элементов матрицы сформировать вектор средних арифметических парных элементов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
darkknight2008
 Аватар для darkknight2008
61 / 61 / 6
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 14:20     Сформировать последовательность из элементов матрицы #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Сейчас набросаю...

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
// Ищет максимальный элемент в столбце c номером colN(начиная с нуля)
int maxInCol(int **m, int N, int colN)
{
  int max = m[0][colN];
  for (int i = 1; i < N; i++)
    if (max < m[i][colN])
      max = m[i][colN];  
  return max;
}
 
// Сама считаем то что требуется в матрице
int function(int **m, int N)
{
  int sum = 0;
  for (int i = 0; i < N / 2; i++)
    sum += maxInCol(m, N, i) * maxInCol(m, N, N - i - 1) * 2;
  if (N % 2 == 1)
  {
    int tmp = maxInCol(m, N, N / 2 + 1);
    sum += tmp * tmp;
  }
 
  return sum;
}
 
// Функция создания матрицы
int ** newMatr( int N )
{
  int **m = new int *[N];
 
  for (int i = 0; i < N; i++)
    m[i] = new int[N];
  return m;
}
 
// Функция удаляет матрицу
void delMatr( int **m, int N )
{
  for (int i = 0; i < N; i++)
    delete[] m[i];
  delete m;
}
 
// Функция печатает матрицу
void printMatr( int **m, int N )
{
  int i, j;
  for (i = 0; i < N; i++)
  {
    for (j = 0; j < N; j++)
      cout << m[i][j] << ' ';
    cout << '\n';
  }
}
 
// Функция вводит матрицу
void inputMatr( int **m, int N )
{
  int i, j;
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
    {
      cout << "a[" << i << "][" << j << "] = ";
      cin >> m[i][j];
    }
}
 
void main( void )
{
  int **m; // Указатель на матрицу
  int N; // Размер матрцы
 
  system("cls"); // Очищает экран
  cout << "Insert matrix size: ";
  cin >> N;
  if (N <= 0)
  {
    cout << "Incorrect matrix size!\n";
    system("pause");
    return;
  }
  m = newMatr(N); // Заводим матрицу
  cout << "Insert matrix:\n";
  inputMatr(m, N); // Вводим матрицу
  system("cls");
  cout << "Matrix: \n";
  printMatr(m, N);
  cout << "Result: " << function(m, N) << '\n';
  delMatr(m, N);
  system("pause");
}
Yandex
Объявления
25.12.2011, 14:20     Сформировать последовательность из элементов матрицы
Ответ Создать тему
Опции темы

Текущее время: 08:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru