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

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

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

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

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

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

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

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

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

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

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

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

4
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.11.2011, 08:26 #2
По первой задаче:
1. Создать указатель (массив) указателей на столбцы.
1.5. Инициализировать/заполнить/вывести.
2. Создать функцию, которая принимает указатель на столбец и возвращает характеристику.
3. Используя любой подходящий метод сортировки, отсортировать указатели в первом пункте по возрастанию характеристики.
0
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.
0
lemegeton
2925 / 1354 / 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;
}
0
NBYF
0 / 0 / 0
Регистрация: 25.10.2011
Сообщений: 10
15.11.2011, 19:38  [ТС] #5
а можно попроще, а то препод не поверит.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2011, 19:38
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
15.11.2011, 19:38
Ответ Создать тему
Опции темы

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