Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
1

Матрица!!! Курсовое задание!!!

28.04.2010, 09:09. Просмотров 993. Ответов 7
Метки нет (Все метки)

Задача: Дана действительная квадратная матрица порядка n. Найти наибольшее из значений элементов, расположенных в заштрихованной области матрицы и наименьшее из значений элементов, расположенных вне заштрихованной области матрицы.

Кто-нибудь сможет это решить???? До вечера четверга нужно срочно!!! Буду благодарен!!!!
0
Изображения
 
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2010, 09:09
Ответы с готовыми решениями:

курсовое проектирование на с++
21. В цехе находятся 8 станков. Каждый станок имеет свое время обработки заготовки и свое...

привязка базы данных курсовое проектирование
уважаемые форумчане, прошу вас помочь мне по курсовому проектированию мне дали задание сделать...

задание матрица
помогите задание матрица из n*n элементов сформировать новую матрицу, повернув исходную на 180* ...

матрица и задание
идет экзамен помогите написать программы: 1) Подсчитать к - количество цифр в десятичной записи...

7
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
28.04.2010, 09:56  [ТС] 2
Т.к. я не нашел во всемирной сети подобной задачи, а так же на этом форуме прошу помощи...
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
28.04.2010, 14:08 3
не понятно, как делит элементы диагональ... и что должно быть, если n нечетное
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
#include <iostream>
#include <time.h>
const int N=20;
using namespace std;
int main()
{
    srand (time(NULL));
    int matr[N][N];
    int i, j, n, m;
    cout<<"Vvedite n: ";
    cin>>n;
 
    cout<<"Matrica: "<<endl;
    for(i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            matr[i][j]=1+rand()%15;
    for(i = 0; i < n; ++i)
    {
        for(j = 0; j < n; ++j)
            cout<<matr[i][j]<<"\t";
        cout<<endl;
    }
    //минимальый элемент найден через два цикла
    int p=n, z=n;
    int min=matr[0][0];
    for (j=0; j<n/2; j++,z--)
        for (i=0; i<z; i++ )
            if (matr[i][j]<min)
                min=matr[i][j];
    for (j=n/2; j<n; j++,z++)
        for (i=n; i<z; i++ )
            if (matr[i][j]<min)
                min=matr[i][j];
    cout<<"Min= "<<min<<endl;
 
//максимальный элемент найден через один общий цикл
    int max=matr[n-1][1], k;
    z=n/2;
    int t=n/2;
    for (j=n/2+1, k=n/2-1; j<n, k>0; j++,k--, z--, t--)
        for (i=0, p=n-1; i<z, p>t;i++, p--)
        {
            if (matr[i][j]>max)
                max=matr[i][j];
            if (matr[p][k]>max)
                max=matr[p][k];
        }
    cout<<"Max= "<<max<<endl;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
28.04.2010, 18:30  [ТС] 4
Вот что-то вроде должно быть понятно по условию задачи и из примера прикрепил ввиде ворда.
0
Вложения
Тип файла: doc курсач.doc (54.5 Кб, 32 просмотров)
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
28.04.2010, 22:48 5
Вот программа, советую протестировать... как она работает, поймете, запустив ее несколько раз))
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
#include <iostream>
#include <time.h>
const int N=20;
using namespace std;
int main()
{
    srand (time(NULL));
    int matr[N][N];
    int i, j, n, k, p, z, t, y,r;
    cout<<"Vvedite n: ";
    cin>>n;
//формируем матрицу случайных чисел
    cout<<"Matrica: "<<endl;
    for(i = 0; i < n; ++i)
        for(j = 0; j < n; ++j)
            matr[i][j]=1+rand()%15;
//печать матрицы
    for(i = 0; i < n; ++i)
    {
        for(j = 0; j < n; ++j)
            cout<<matr[i][j]<<"\t";
        cout<<endl;
    }
    //минимальый элемент 
    int min=matr[0][0];//минимальному элементу присваивается 1-й элемент матрицы
    z=n/2+1; //до какой троки идет двиг
    t=n/2-1;//до какой троки идет двиг
    if (n%2!=0) //если n нечетное
        r=n/2+1; //первая позиция цикла
    else //иначе
        r=n/2; //первая позиция цикла
    for (j=n/2-1, k=r; j>=0, k<n; j--, k++,  z++, t--) //обход матрицы по столбцам
        for (int i=0, p=n-1; i<z, p>t; i++, p--) //обход матрицы по строкам
            {
                //здесь, думаю, все понятно
                cout<<" "<<matr[i][j]<<" "<<matr[p][k]<<" ";
                if (matr[i][j]<min)
                    min=matr[i][j];
                if (matr[p][k]<min)
                    min=matr[p][k];
            }
    cout<<"\nMin= "<<min<<endl;
 
//максимальный элемент найден через один общий цикл
    int max=matr[0][n-1];
    if (n%2!=0) //если n нечетное
    {
        z=n/2+1;
        y=n/2;
        t=n/2;
        max=matr[t][t];
        cout<<max;
    }
    else //иначе
    {
        z=n/2;
        t=n/2-1;
        y=n/2-1;
    }
    for (j=n/2, k=y; (j<n)&&(k>=0); j++, k--, z--, t--)
        for (i=0, p=n-1; (i<z)&&(p>t); i++, p--)
        {
            cout<<" "<<matr[i][j]<<" "<<matr[p][k]<<" ";
            if (matr[i][j]>max)
                max=matr[i][j];
            if (matr[p][k]>max)
                max=matr[p][k];
        }
    cout<<"\nMax= "<<max<<endl;
 
    return 0;
}
Комментировать все просто лень)...
1
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
28.04.2010, 22:59  [ТС] 6
Первая программа работала не правильно, ща затестим вторую)))

ПРОГА РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! КАК ТЕБЯ ОТБЛАГОДАРИТЬ?
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
29.04.2010, 10:06 7
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
#include <iostream>
#include <time.h>
const int N=20; //константный размер матрицы (можно менять)
using namespace std;
int main()
{
        srand (time(NULL)); //для использования датчика случайных чисел
    int matr[N][N]; //объявление матрицы
    int i, j, n, k, p, z, t, y,r; //объявление переменных
        cout<<"Vvedite n: ";
    cin>>n; //принимаем в переменную n введенное с клавиатуры число
//формируем матрицу случайных чисел
        cout<<"Matrica: "<<endl;
    for(i = 0; i < n; ++i) //обход по строкам (от 0 до n-1)
                for(j = 0; j < n; ++j) //обход по столбцам (от 0 до n-1)
                        matr[i][j]=1+rand()%15; //элементу матрицы присваивеется значение, полученное рандомом (от 1 до 15)
//печать матрицы
        for(i = 0; i < n; ++i)  //обход по строкам (от 0 до n-1)
        {
                for(j = 0; j < n; ++j) //обход по столбцам (от 0 до n-1)
                        cout<<matr[i][j]<<"\t"; //печать элемента матрицы через табулятор
                cout<<endl; //переход на следующую строку
        }
        //минимальый элемент 
        int min=matr[0][0];//минимальному элементу присваивается 1-й элемент матрицы
        z=n/2; //до какой строки идет двиг !исправь
        t=n/2-1;//до какой строки идет двиг
/*в твоем задании, если n нечетное, то мы начинаем обход со столбца n/2+1,
 напр. 5/2+1=2+1=3 и со столбца n/2-1, т.е не берем средний столбец (см. свой рисунок) */
        if (n%2!=0) //если n нечетное
                r=n/2+1; //первая позиция цикла
/*если n четное, то со солбца n/2+1 и столбца n/2, т.е 6/3=3 
(из рисунка это все видно)*/
        else //иначе
                r=n/2; //первая позиция цикла
/* строки мы берем соответственно 0 и n-1 (последнюю). т.к. мы на центральных столбцах, начинаем выбирать
 элементы до строк z=n/2+1 и t=n/2+1 (тоже центральные строки) но по ходу цикла они меняются, в зависимости от того,
 больше надо элементов считать или меньше. Напр, мы на столбце j=n/2-1 (для 6х6 это 2-й столбец (столбцы и строки 
считаются с 0)), ма просматриваем все элменты от 0-й строки до строки z=n/2 (не включительно), т.е до строки 2 
включительно, это 3 элемента. внутренний цикл прошел три элемента, внешний увеличил z на 1 и передвинул j на 1 влево 
(уменьшил на 1), => внетренний цикл теперь пройдет по столбцу 1 уже 4 элемента, снова внешний цикл уменьшил j на 1 и
 z увеличил на 1, => мо нулевому столбцу цикл пройдет 5 элементов. Анлогично для второго куска */
        for (j=n/2-1, k=r; j>=0, k<n; j--, k++,  z++, t--) //обход матрицы по столбцам
                for (int i=0, p=n-1; i<z, p>t; i++, p--) //обход матрицы по строкам
                        {
                                //здесь, думаю, все понятно
                                cout<<" "<<matr[i][j]<<" "<<matr[p][k]<<" "; //печать элементов из обоих кусков
                                if (matr[i][j]<min) //эсли элемент из первого куска больше мин
                                        min=matr[i][j]; //мин = этот элемент
                                if (matr[p][k]<min) //если элемент из второго куска больше мин
                                        min=matr[p][k]; //мин = этот элемент
                        }
        cout<<"\nMin= "<<min<<endl; //печать минимума
 
//максимальный элемент найден через один общий цикл
        int max=matr[0][n-1];
        if (n%2!=0) //если n нечетное
{
                z=n/2+1;
                y=n/2;
                t=n/2;
                max=matr[t][t];//мах присваиваем серединный элемент, т.к. в цикле мы его проходить не будем
                cout<<max; //печатаем этот элемент
        }
        else //иначе
        {
                z=n/2;
                t=n/2-1;
                y=n/2-1;
        }
/*цикл почти такой же. напр, для четной (6х6) столбцу j присваиваем n/2=3, строке 0. считываем элементы до z (не включительно),
 а изначально z=n/2=3, т.е считываем 3 элемента. внешний цикл уменьшает z на 1, увеличивает столбец j на 1, 
т.е в столбце 4 мы прсматриваем 2 элемента, в столбце 5 1элемент, аналогично для второго куска. 
просто проследи сам по циклу, что делает программа для четной и нечетной матрицы*/
        for (j=n/2, k=y; (j<n)&&(k>=0); j++, k--, z--, t--)
                for (i=0, p=n-1; (i<z)&&(p>t); i++, p--)
                {
                        cout<<" "<<matr[i][j]<<" "<<matr[p][k]<<" ";
                        if (matr[i][j]>max)
                                max=matr[i][j];
                        if (matr[p][k]>max)
                                max=matr[p][k];
                }
        cout<<"\nMax= "<<max<<endl;
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 28.04.2010
Сообщений: 5
29.04.2010, 11:52  [ТС] 8
Алгоритм к программе. Не уверен на 100% что правильный. Но основные моменты включены. Алгоритм нарисован в прогамме Diagram Designer 1.22
Легкий путь к созданию блок-схем: Diagram Designer
0
Вложения
Тип файла: rar алгоритм.rar (2.1 Кб, 19 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2010, 11:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Тестовое задание матрица M*N
Здравствуйте форумчане получил вчера вечером такое тестовое задание! В жизни с таким не...

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

Матрица 3х3. Задание в топике
Надо в каждой строке матрицы размера 3х3 найти максимальный элемент среди отрицательных, а если...

C# Задание на матрицы.умножение, сложение, вычитание, нахождение определителя и обратная матрица.
Написать программу, осуществляющую ввод и обработку целочисленных квадратных матриц по заданной...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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