Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
#1

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

22.12.2011, 18:07. Просмотров 1482. Ответов 9
Метки нет (Все метки)

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


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

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

Добавлено через 17 часов 50 минут
up......
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 18:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сформировать последовательность из элементов матрицы (C++):

Сформировать массив из элементов исходных массивов, образующих возрастающую последовательность
Задача: Заданы массивы целых положительных чисел X(n), Y (k), Z(m)....

Даны три квадратные матрицы. Сформировать вектор, состоящий из минимальных элементов каждой матрицы, отличных от нуля
Даны три квадратные матрицы. Сформировать вектор, состоящий из минимальных...

Из элементов матрицы сформировать вектор средних арифметических парных элементов
Это что вообще сделать надо. Не надо писать код, просто объясните суть..

Сформировать одномерный массив из элементов, стоящих над главной диагональю матрицы K(m,m). Найти сумму элементов этого массива.
Сформировать одномерный массив из элементов, стоящих над главной диагональю...

Сформировать суммы элементов строк матрицы и суммы элементов столбцов матрицы
Добрый день господа программисты, я к вам с небольшим вопросом. Мне необходимо...

9
darkknight2008
62 / 62 / 11
Регистрация: 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;
  }
}
Я вточности не уверен, что это работает корректно. Если требуется - могу объяснить принцип.
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 11:57  [ТС] #3
помогите с полной программой
0
darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 12:05 #4
Как должна выглядеть программа? Матрица - она определенного размер или размер вводится с клавиатуры? Матрица тоже заполняется с клавиатуры?
0
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-го столбца данной матрицы.
0
darkknight2008
62 / 62 / 11
Регистрация: 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");
}
2
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() ;
 
 
}
0
darkknight2008
62 / 62 / 11
Регистрация: 16.10.2011
Сообщений: 200
25.12.2011, 13:58 #8
Т.е. дожен вводиться размер матрицы, а потом ее содержимое?
0
hally
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
25.12.2011, 14:04  [ТС] #9
ну да ну или можно вроде просто вводить порядок матрицы и что-бы потом выводилось
0
darkknight2008
62 / 62 / 11
Регистрация: 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");
}
0
25.12.2011, 14:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 14:20
Привет! Вот еще темы с решениями:

Построить последовательность из элементов матрицы
Знакомый попросил помочь, мол &quot;Тыжпрограммист&quot;, а я в C++ не рублю. Задачи-то...

Сформировать массив из элементов матрицы
Из заданного массива А получить массив В попарно переставив первый и последний...

Сформировать массив из элементов матрицы
задача следующая: дана матрица A(NxN). сформировать ономерный массив по...

Сформировать массив из элементов матрицы
Дан двумерный массив. Сформировать одномерный массив,каждый элемент которого...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru