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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
NBYF
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 10
#1

Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик - C++

15.11.2011, 07:36. Просмотров 1227. Ответов 4
Метки нет (Все метки)

1)Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.
2)Проверить, все ли строки матрицы содержат хотя бы один положительный элемент. Если да, то изменить знаки всех элементов матрицы на обратные.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2011, 07:36     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик
Посмотрите здесь:

Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик - C++
Привет...помогите пожалуйста..я не понимаю услови задачи... 18. Характеристикой столбца целочисленной матрицы назовем сумму...

Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик - C++
Задание такое: Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик (характеристикой столбца...

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

Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик - C++
Добрый вечер всем. #include <iostream.h> #include <math.h> using namespace std; } int main (){ int **mas, n, m, i, j,...

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик - C++
помогите вот задача вот пример надо доделать как в задаче написано....надо суммировать все положительные числа....а у меня просто суммирует...

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик - C++
Подскажите, пожалуйста, что делаю не так? //Характеристикой строки целочисленный матрицы назовем сумму ее положительных четных элементов....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.11.2011, 08:26     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик #2
По первой задаче:
1. Создать указатель (массив) указателей на столбцы.
1.5. Инициализировать/заполнить/вывести.
2. Создать функцию, которая принимает указатель на столбец и возвращает характеристику.
3. Используя любой подходящий метод сортировки, отсортировать указатели в первом пункте по возрастанию характеристики.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.11.2011, 09:25     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
По первой задаче, должно работать, но только при равентве размеров инта и указателя, является наглядным пособием, как делать не надо:
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
void (int **Data, unsigned int n, unsigned int m)
{
 int **p1;
 int *p2;
 int **Start;
 Data=new (int*) [n*m+n];
 if (Data)
 {
  Start=Data+n;
  for (p1=Start-1; p>=Data; --p)
  {
   *p1=Data+(p-Data)*m+n;
  }
  for (p2=*Data+n*m-1; p>=Start; --p)
  {
   *p2=rnd()%100-50;
  }
 }
}
int Norm(int *Data, unsigned int n)
{
 int *End;
 int *p;
 int r;
 r=0;
 if (Data)
 {
  End=Data+m-1;
  for (p=Data; p<=End; p+=2)
  {
   if ((*p) <0)
   {
    r-=*p;
   }
  }
 }
 return r;
}
void Sort (int **Data, unsigned int n, unsigned int m)
{
 int **i;
 int **j;
 int n1;
 int n2;
 int *p1;
 int *p2;
 int t;
 if (Data)
 {
  for (i=Data+n-1; i>Data; --i)
  {
   for (j=i-1; j>=Data; --j)
   {
    n1=Norm(*i, m);
    n2=Norm(*j, m);
    if (n1<n2)
    {
     for (p1=*i+m-1, p2=*j+m-1; p1>=*i; --p1, --p2)
     {
      t=*p1;
      *p1=*p2;
      *p2=t;
     }
    }
   }
  }
 }
}
Добавлено через 18 минут
А вот так делать надо:
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
97
98
99
100
101
102
103
104
105
106
107
void (int **Data, unsigned int n, unsigned int m)
{
 int **p1;
 int *p2;
 int **End;
 bool Flag;
 if (n*m>0)
 {
  Data=new int*[n];
  if (Data)
  {
   End=Data+n-1;
   Flag=false;
   for (p1=End; p>=Data; --p)
   {
    *p1=new int [m];
     if (p1)
     {
      for (p2=*p1+m-1; p2>=*p1; --m)
      {
       *p2=rnd()%100-50;
      }
     }
    else
    {
     Flag=true;
     break;
    }
   }
   if (Flag)
   {
    for (++p1; p1>=End; ++p1)
    {
     delete [] *p1;
    }
   delete [] Data;
   Data=NULL;
   }
  }
 }
 else
 {
  Data=NULL;
 }
}
int Norm(int *Data, unsigned int n)
{
 int *End;
 int *p;
 int r;
 r=0;
 if (Data)
 {
  End=Data+m-1;
  for (p=Data; p<=End; p+=2)
  {
   if ((*p) <0)
   {
    r-=*p;
   }
  }
 }
 return r;
}
void Sort (int **Data, unsigned int n, unsigned int m)
{
 int **i;
 int **j;
 int n1;
 int n2;
 int *p1;
 int *p2;
 int t;
 if (Data)
 {
  for (i=Data+n-1; i>Data; --i)
  {
   for (j=i-1; j>=Data; --j)
   {
    n1=Norm(*i, m);
    n2=Norm(*j, m);
    if (n1<n2)
    {
     for (p1=*i+m-1, p2=*j+m-1; p1>=*i; --p1, --p2)
     {
      t=*p1;
      *p1=*p2;
      *p2=t;
     }
    }
   }
  }
 }
}
void Free (int **Data, int n)
{
 int **p2;
 if (Data)
 {
  for (p=Data+n-1; p>=Data; --p1)
  {
   delete [] *p1;
  }
  delete [] Data;
 }
 Data=NULL:
}
Добавлено через 8 минут
В идеале всё надо спрятать в класс, функции - public, остальное - private, Init переписать в контруктор, Free - в дестурктор, размеры и **Data вынести из параметров в члены-данные, *Data чиать из **Data по индексу внутри функции Norm, добавить этот индекс в качетсве ещё одного параметра, соответственно поменять и синтаксис вызова Norm из Sort.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.11.2011, 11:37     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Реализация первой задачи на С.

Не по теме:

Может быть сложно на первый взгляд.


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
97
98
99
100
101
102
103
104
105
106
107
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
typedef int Value;
typedef Value *Column;
typedef Column *Matrix;
 
Value rowNegativeAbsoluteSum(Column column, size_t size) {
  Value result = 0;
  Value *i;
  for (i = column; i < column + size; ++i)
    if ((*i < 0) && (*i % 2)) result -= *i;
  return result;
}
 
void printCharacteristics(Matrix matrix, size_t height, size_t width,
  Value (*predicate)(Column, size_t)) {
  Value i;
  for (i = 0; i < width; ++i)
    printf("%5d", predicate(matrix[i], height));
  printf("\n\n");
}
 
void printMatrix(Matrix matrix, size_t height, size_t width) {
  size_t i, j;
  for (i = 0; i < height; ++i) {
    for (j = 0; j < width; ++j)
      printf("%5d", matrix[j][i]);
    printf("\n");
  }
}
 
void quickSortMatrixByPredicate(Matrix matrix, size_t height, size_t width,
  Value (*predicate)(Column, size_t), int low, int high) {
  int i = low;
  int j = high;
  Value middleValue = predicate(matrix[(low + (high-low)/2)], height);
  do {
    while (predicate(matrix[i], height) < middleValue) ++i;
    while (middleValue < predicate(matrix[j], height)) --j;
    if ( i <= j ) {
      if( i < j ) { 
        Column t = matrix[i];
        matrix[i] = matrix[j];
        matrix[j] = t;
      }
      ++i;
      --j;
    }    
  } while (i <= j);
  if (low < j)
    quickSortMatrixByPredicate(matrix, height, width, predicate, low, j);
  if (i < high)
    quickSortMatrixByPredicate(matrix, height, width, predicate, i, high);
}
 
void sortMatrixByPredicate(Matrix matrix, size_t height, size_t width,
  Value (*predicate)(Column, size_t)) {
  quickSortMatrixByPredicate(matrix, height, width, predicate, 0, width - 1);
}
 
int hasNegative(Column column, size_t height) {
  int i;
  for (i = 0; i < height; ++i)
    if (column[i] < 0) return 1;
  return 0;
}
 
Value sumWithAtLeastOneNegative(Column column, size_t height) {
  size_t i;
  if (!hasNegative(column, height))return 0;
  int result = 0;
  for (i = 0; i < height; ++i)
    result += column[i];
  return result;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
  size_t width = 5 + rand() % 4;
  size_t height = 10 + rand() % 4;
  
  Matrix matrix = (Matrix)malloc(sizeof(Column) * width);
  size_t i, j;
  for (i = 0; i < width; ++i) {
    matrix[i] = (Column)malloc(sizeof(Value) * height);
    for (j = 0; j < height; ++j)
      matrix[i][j] = rand() % 11 - 5;
  }
  
  printMatrix(matrix, height, width);
  printf("Sums of negative odds: \n");
  printCharacteristics(matrix, height, width, rowNegativeAbsoluteSum);
 
  sortMatrixByPredicate(matrix, height, width, rowNegativeAbsoluteSum);
 
  printf("Sorted by sum of negative odds: \n");
  printMatrix(matrix, height, width);
  printf("Sums of negative odds: \n");
  printCharacteristics(matrix, height, width, rowNegativeAbsoluteSum);
 
  printf("Sums for columns (0 if no negatives): \n");
  printCharacteristics(matrix, height, width, sumWithAtLeastOneNegative);
  
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 19:38     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик
Еще ссылки по теме:

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик - C++
Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы,...

Переставляя строки заданной матрицы, расположить их соответствии с ростом характеристик. - C++
помогите пожалуйста, очень надо. Переставляя строки заданной матрицы, расположить их соответствии с ростом характеристик. вот мой код ...

Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик - C++
Задание: Вариант 2 Дана целочисленная прямоугольная матрица. Переставляя строки заданной матрицы, расположить их в соответствии с...

Массив: Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. - C++
Дана целочисленная прямоугольная матрица. Определить количество столбцов, не содержащих ни одного нулевого элемента. Характеристикой строки...

Расположить столбцы заданной матрицы в соответствии с ростом характеристик - C++
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной...

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


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

Или воспользуйтесь поиском по форуму:
NBYF
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 10
15.11.2011, 19:38  [ТС]     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик #5
а можно попроще, а то препод не поверит.
Yandex
Объявления
15.11.2011, 19:38     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик
Ответ Создать тему
Опции темы

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