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

Дана матрица размером N*M - C++

Восстановить пароль Регистрация
 
staket
 Аватар для staket
0 / 0 / 0
Регистрация: 11.11.2011
Сообщений: 4
11.11.2011, 23:39     Дана матрица размером N*M #1
Начинающий - а тут еще и матрицы не могу решить данное чудо(

Задача
Дана матрица размером N*M, назовем особым элемент текущей строки, если он больше суммы элементов ему предшествующих в строке.
Определить строку с наибольшим кол-вом особых элементов.

за задачу заранее благодарен!
 Комментарий модератора 
Название темы должно отображать её суть. И неплохо было бы указать язык, Си или С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2011, 23:39     Дана матрица размером N*M
Посмотрите здесь:

C++ [C++] Дана матрица размером N x M. Найти в ней минимальный и максимальный элементы, определить их индексы.
C++ Дана действительная матрица размером nxm
C++ дана матрица размером 5 на 5, содержащая вещественные числа, значения которых вводятся с клавиатуры.
Дана действительная матрица размером n * m. Упорядочить (переставить) по возрастанию сумм элементов строк C++
C++ Дана целочисленная матрица А размером N х М. Составить функцию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DenCHS200
 Аватар для DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
12.11.2011, 00:29     Дана матрица размером N*M #2
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
#include <iostream>
#include<conio.h>
 
using namespace std;
 
void main()
{
 
    unsigned long N,M,i,j,k;
    long maximum,temp_summa;
    cout<<" Enter size of Array N*M"<<endl;
    cin>>N>>M;
 
    // создаём двумерый динамический массив
    long **massiv,*colvo;
    massiv=new  long*[M];
    for(i=0;i<M;i++)
        massiv[i]=new long [N];
    colvo= new long[M];// массив для подсчёта особых элементов
    
    for(i=0;i<N;i++)
        colvo[i]=0;//обнуляем массив, чтобы потом использовать, как счётчик
    //Выводим получившийся массив массив
    for(i=0;i<M;i++)
        {cout<<endl;
            for(j=0;j<N;j++)
    {       //cout<<endl<<"Input  "<<i<<"  " <<j<<" element of array "<<massiv;
            massiv[i][j]=rand()%400-150;
            cout<<" "<<massiv[i][j];
            }
    }
 
    //Теперь сам алгоритм подсчёта
    for(i=0;i<M;i++)
        for(j=1;j<N;j++){
        temp_summa=0;
        for(k=0;k<j;k++)
        temp_summa=temp_summa+massiv[i][k];
        if(temp_summa<massiv[i][j])// если сумма jого элемента больше суммы предшествующих, 
colvo[i]++;// то увеличиваем счётчик особых элементов в строке
        
        }
        maximum=colvo[0];k=0;// дальше выбираем строку, где больше всего элементов
        for(i=1;i<M;i++)
            if(colvo[i]>maximum){
                maximum=colvo[i];
            k=i;}
 
            cout<<endl;
            if(maximum==0)// если в сроках таких элементов нет, то выводим соответствующее сообщение
            cout<<"Array not have spetial elements!"<<endl;
        else cout<<"Maximum spetials elements in "<< k+1<< " string"<<endl<<"String have "<<maximum<< " special elements!";
 
    getch();
}
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
12.11.2011, 01:01     Дана матрица размером N*M #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
69
#include <vector>
#include <iostream>
#include <iomanip>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <cstdlib>
#include <ctime>
 
typedef std::vector< std::vector<int> > Matrix;
 
template <int min, int max>
struct RandomInteger {
  int operator()() {
    return rand() % (max - min + 1) + min;
  }
};
 
std::ostream &operator<<(std::ostream &stream,
  const std::vector<int> &array) {
  for (std::vector<int>::const_iterator i = array.begin();
    i != array.end(); ++i)
    stream << std::setw(4) << (*i) << " ";
  return stream;
}
 
std::ostream &operator<<(std::ostream &stream,
  const Matrix &matrix) {
  for (Matrix::const_iterator i = matrix.begin(); i != matrix.end(); ++i)
    stream << "Line " << std::setw(3) << i - matrix.begin() <<
      ":" << (*i) << "\n";
  return stream;
}
 
int getSpecialCount(const std::vector<int> &array) {
  int count = 0;
  int sum = array[0];
  for (std::vector<int>::const_iterator i = array.begin() + 1;
    i != array.end(); ++i) {
    if (*i > sum) count++;
    sum += *i;
  }
  return count;
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  size_t height = 10 + rand() % 5;
  size_t width = 10 + rand() % 5;
  Matrix matrix(height, std::vector<int>(width, 0));
 
  for (Matrix::iterator i = matrix.begin(); i != matrix.end(); ++i)
    std::generate(i->begin(), i->end(), RandomInteger<0, 99>());
 
  int max_id = 0;
  int max_count = getSpecialCount(matrix[0]);
  for (Matrix::iterator i = matrix.begin(); i != matrix.end(); ++i) {
    int count = getSpecialCount(*i);
    if (count >= max_count) {
      max_id = i - matrix.begin();
      max_count = count;
    }
  }
 
  std::cout << matrix << "Max specials of " << max_count <<
    " are on line " << max_id << std::endl;
 
  return 0;
}
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.11.2011, 01:53     Дана матрица размером N*M #4
DenCHS200, не забывайте освобождать выделенную память. Это очень важно. Вот смотрите, можно все организовать (я имею ввиду поиск нужной строки) сразу при инициализации массива, а потом просто выдать результат. Это я для вас писал. В программе первый элемент строки, не проверяется на условие потому что сумма именно с него и начинается, т.е. он первый элемент ряда.
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main()
{
    const int N = 6;
    int matrix[ N ][ N ], max = 0, count, sum = 0, num;
    srand(time(0));
 
    for (int i = 0; i < N; ++i){
 
        sum = 0; count = 0;
 
        for (int j = 0; j < N; ++j){
            matrix[ i ][ j ] = rand() % 100;
 
            if (j){
                if (matrix[ i ][ j ] > sum)
                    ++count;
            }
            sum += matrix[ i ][ j ];
        }
        if (count > max){
            max = count;
            num = i;
        }
 
    }
 
    puts("исходная матрица");
    for (int i = 0; i < N; ++i){
        puts("");
        for (int j = 0; j < N; ++j)
            printf("%3d ", matrix[ i ][ j ]);
    }
    if (max){
        puts("\nискомая строка");
        for (int i = 0; i < N; ++i)
            printf("%d ", matrix[ num ][ i ]);
        puts("");
    }
    else
        puts("\nусловие не выполнено");
 
    return 0;
}
DenCHS200
 Аватар для DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
12.11.2011, 10:05     Дана матрица размером N*M #5
Alkagolik , спасибо за совет, но насчёт освобождения памяти я не стал заморачиваться, так как подсчитал, что программа простая, и конфликтов из-за этого возникнуть не должно.А сумму, да, эт я неправильносо 2ого элемента считать начал, а не с 3его
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
12.11.2011, 12:04     Дана матрица размером N*M #6
Цитата Сообщение от DenCHS200 Посмотреть сообщение
но насчёт освобождения памяти я не стал заморачиваться, так как подсчитал
это напрасно. любое выделение памяти должно сопровождаться ее освобождением. Это аксиома, не требующая доказательств.
staket
 Аватар для staket
0 / 0 / 0
Регистрация: 11.11.2011
Сообщений: 4
14.11.2011, 19:31  [ТС]     Дана матрица размером N*M #7
Большое спасибо помогло

Добавлено через 3 минуты
Дано задание
Построить список , исключить первые и n элементы , расположенные после
1. первого отрицательного
2. после наибольшего

Добавлено через 3 часа 41 минуту
alkagolik, Пожалуйста проверьте кто понимает - чувствую что я не удовлетворил условию задачи ! покажите , где это может быть и как исправить!
DenCHS200
 Аватар для DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
16.11.2011, 23:50     Дана матрица размером N*M #8
staket, скажите пожалуйста, что подразумевается под списками?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2011, 00:17     Дана матрица размером N*M
Еще ссылки по теме:

дана матрица размером NxM .Упорядочить ее строки по возрастанию их первых элементо C++
C++ Дана матрица размером n*m инвертировать каждый столбец матрицы
C++ Дана матрица размером МхN. Сформировать из этой матрицы вектор по правилу

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
17.11.2011, 00:17     Дана матрица размером N*M #9
staket, скажите пожалуйста, что подразумевается под списками?
тырц
Yandex
Объявления
17.11.2011, 00:17     Дана матрица размером N*M
Ответ Создать тему
Опции темы

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