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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите решить проблемку http://www.cyberforum.ru/cpp-beginners/thread384195.html
Дано натуральное число. Определить оно простое. Число называется простым, если оно не имеет других делителей, кроме 1 и самого себя. Как написать кодик: или писать через for то как помогите плиз! int y; cout<<"Vedit` proste chislo: "; cin>>y; if (y < 0 || y/1 == y && y/y == 1 )
C++ for поднисение к степени Всем доброго дня суток. помогите решить задачу Как вывести 2 в 9 степени? Что-то тут я не догоняю const int // тут что-то должно бить и как дописать for (int i = 2; i < 9; i*=2) { cout<< i <<"\n"; http://www.cyberforum.ru/cpp-beginners/thread384181.html
C++ Исправить программу
привет ,не могу понять что за проблема с этой программой)) помогите плиз понять ошибки,буду признательна!! #include <iostream> using namespace std; int ArrayRead (double Array,int limit); void ArrayPrint (const double Array,int limit); void ArrayChange (double Array,int,float); int main()
C++ typedef непонятно чего
Есть вот такой код typedef private void (T::*TimedFunction)(void); По сути это должна быть ссылка на функцию класса Т с возвращаемым значением void, но как разбираются такие выражения я не знаю, можете помочь? Добавлено через 15 минут http://www.newty.de/fpt/index.html - хороший ман по этому поводу
C++ Работа с файлами, помогите найти ошибку. http://www.cyberforum.ru/cpp-beginners/thread384149.html
Нужно написать программу которая будет выписывать в файл значения синуса от 0 до 2Pi с шагом Pi/11 в два столбика-в первом угол, во втором значения синуса. Вот что я написал, но почему то не работает, когда открываю файл он просто зависает. Помогите пожалуйста. #include<iostream> #include<cmath> #define PI 3,14 using namespace std; int main() { FILE *F; F = fopen("out.txt","w"); if...
C++ Не понимаю сообщение компилятора При компиляции компилятор выдает предупреждение "no newline at end of file". Среда C-Free Professional 5.0. Компилятор Mingw. Заранее спасибо. подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
15.11.2011, 11:37     Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик
Реализация первой задачи на С.

Не по теме:

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


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;
}
 
Текущее время: 03:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru