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

Матрица - C++

Восстановить пароль Регистрация
 
Elena0602
2 / 2 / 0
Регистрация: 04.03.2010
Сообщений: 57
28.03.2011, 14:56     Матрица #1
Помогите пожалуйста с программой, даже не знаю как это сделать (((
Программу нужно написать на С с использованием функций.
Задание: Сформировать матрицу M на N. Задать прямоугольник, который будит передвигаться по матрице слева на право. Следует пересчитывать сумму элементов, попадающих в прямоугольник и когда она будит максимальной, удалить элементы.

Пример:
Вводим n=9 m=4

2 3 4 5 6 7 3 2 1
9 3 2 8 3 2 3 5 6
2 3 7 8 9 0 1 2 6
3 4 5 7 8 0 1 0 0


Прямоугольник: k=3
Результат после удаления:

2 3 7 3 2 1
9 3 2 3 5 6
2 3 0 1 2 6
3 4 0 1 0 0

Помогите очень прошу!!!!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2011, 14:56     Матрица
Посмотрите здесь:

матрица C++
матрица C++
C++ матрица
C++ Матрица
C++ Матрица
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
28.03.2011, 16:00     Матрица #2
Матрица: строк m=4, столбцов n=9
Прямоугольник: строк m=4, столбцов k = 3.

Я правильно понимаю?
Elena0602
2 / 2 / 0
Регистрация: 04.03.2010
Сообщений: 57
29.03.2011, 12:34  [ТС]     Матрица #3
Ага))) А вообще сами задаем! )))

Добавлено через 46 минут
Размерность может быть любая )))

Добавлено через 18 часов 21 минуту
Помогите!!!!!!
IrineK
Заблокирован
29.03.2011, 14:28     Матрица #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
#include <iostream>
using namespace std;
 
void setArray(int** mass,int rows,int cols)
{   cout<<"Input array elements\n";
    for (int i=0; i<rows; i++)
        for (int j=0; j<cols; j++)
                cin>>mass[i][j];
}
 
int sumWithin(int** mass,int rows,int colStart, int colEnd)
{   int i,j,s=0;
    for(i=0;i<rows;i++)
        for(j=colStart;j<colEnd;j++)
            s+=mass[i][j];
    return s;
}
 
void getResult(int**res,int** mass,int rows,int cols, int colStart, int width)
{   int i,j,k;
    for(i=0;i<rows;i++)
        for(j=0,k=0;j<cols;j++)
            if(j<colStart || j>colStart+width-1)
            { res[i][k]=mass[i][j];
                k++;
            }
}
 
void showArray(int** mass,int rows,int cols)
{   for (int i=0; i<rows; i++)
    {   for (int j=0; j<cols; j++)
                cout<<mass[i][j];
        cout<<"\n";
    }
}
 
int main()
{   int m,n,k,i,s,cur;
    cout<<"m = ";
    cin>>m;
    cout<<"n = ";
    cin>>n;
    do
    {   cout<<"(k<n)  k = ";
        cin>>k;
    }while(k>=n);
 
    int** matrix = new int*[m];
        for (i=0; i<m; i++)
               matrix[i] = new int [n];
    setArray(matrix,m,n);
 
    int max=INT_MIN, maxPos;
    for(s=0;s<n-k+1;s++)
    {   cur = sumWithin(matrix,m,s,k+s);
        if(cur>max) 
        {   max = cur;
            maxPos = s;
        }
    }
 
    int** result = new int*[m];
        for (i=0; i<m; i++)
               result[i] = new int [n-k];
    getResult(result,matrix,m,n,maxPos,k);
 
    cout<<"\n\nThe initial array:\n";
    showArray(matrix,m,n);
 
    cout<<"The maximum sum: "<<max<<" from column "<<maxPos<<" to "<<maxPos+k-1<<"\n";
    cout<<"\n\nThe result array:\n";
    showArray(result,m,n-k);
 
    delete []matrix;
    delete []result;
 
    cin.sync();cin.get();
    return 0;
}
Результат выполнения:
Миниатюры
Матрица  
Elena0602
2 / 2 / 0
Регистрация: 04.03.2010
Сообщений: 57
29.03.2011, 17:03  [ТС]     Матрица #5
Огромное вам спасибо. Только не могли бы вы немного объяснить, я хочу разобраться.

Добавлено через 10 минут
Чет у меня не работает. Что может быть не так???
IrineK
Заблокирован
29.03.2011, 17:30     Матрица #6
Что может быть не так???
Другие заголовочные файлы и вместо cin/cout scanf/printf.

Сбросьте какую-нибудь ма-аленькую программку, которая у вас работает. Или скажите, если знаете, какой у вас компилятор.
Elena0602
2 / 2 / 0
Регистрация: 04.03.2010
Сообщений: 57
29.03.2011, 17:39  [ТС]     Матрица #7
У меня Dev C++
IrineK
Заблокирован
29.03.2011, 17:44     Матрица #8
У меня MSVS - работает.
И у вас должно.

Аккуратно нажимайте кнопочки ^C / ^V.
Elena0602
2 / 2 / 0
Регистрация: 04.03.2010
Сообщений: 57
29.03.2011, 18:11  [ТС]     Матрица #9
Не получается. Вот программа, которая у меня работает
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
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
        int i, nmax2, nmax;
        int max2, max, s, n;
        int mas1[n];
        time_t t;
        srand((unsigned) time(&t));
        printf("\n Vvedite n ");
    scanf("%d",&n);
        printf("\n -------------------------------------------------- ");
        printf("\n V E K T O R\n");
        printf("\n --------------------------------------------------\n ");
        for (i=0; i<n ;i++)
        {
                mas1[i]=rand()%20-10;
            printf(" %3d",mas1[i]);
            if ((i+1)%n==0)printf("\n");
        }
        max=-30;
        max2=-30;
        for (i=0; i<n ;i++)
        {
                
                if (mas1[i]>max)
                {
                        max=mas1[i];
                    nmax=i;
        }
        }
        {
                mas1[nmax]=-40;
                }
        
        for (i=0; i<n ;i++)
        {
            if (mas1[i]>max2)
        {
                        max2=mas1[i];
                    nmax2=i;
        }
        }
        printf("\n --------------------------------------------------\n ");
        printf("\n max=%2d\t        nmax=%2d\n",max,nmax);
        printf("\n max2=%2d\tnmax2=%2d\n",max2,nmax2);
        printf("\n -------------------------------------------------- ");
        s=max+max2;
        printf("\n smax=%2d\n",s);
        printf("\n --------------------------------------------------\n ");
         printf("\n");
        system("PAUSE"); 
        return EXIT_SUCCESS;
}
IrineK
Заблокирован
30.03.2011, 01:44     Матрица #10
Elena0602,
возможно для вас это будет новостью, но вы программируете на Си, а не на С++.
Это - на будущее. Когда будете задачки заказывать, указывайте: мне на Си.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2011, 14:50     Матрица
Еще ссылки по теме:

С++ матрица C++
C++ матрица...
C++ матрица

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

Или воспользуйтесь поиском по форуму:
Elena0602
2 / 2 / 0
Регистрация: 04.03.2010
Сообщений: 57
30.03.2011, 14:50  [ТС]     Матрица #11
Так я же в задании писала
Программу нужно написать на С с использованием функций.
Yandex
Объявления
30.03.2011, 14:50     Матрица
Ответ Создать тему
Опции темы

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