Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 3
1

Определить максимальный элемент среди элементов, лежащих ниже главной диагонали (нужны комментарии)

26.10.2014, 15:16. Показов 2763. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите! есть задание и есть код, помогите разобраться со всем что сделано в коде. напишите комментарии, пожааалуйста!

Задание: Дан целочисленный массив А[N][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
52
53
54
55
56
57
58
59
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include "conio.h"
 
void main()
{
    setlocale (LC_CTYPE,"rus");//введение русских символов
    int **A, **B;//                                         
    int k, i, j, N, M; 
    
    printf("Введите количество строк массива: \n N = ");  
    scanf("%d", &N);                                        
    printf("Введите количество столбцов: \n M = ");
    scanf("%d", &M);                                       
  
    A = new int*[N];    //если не ошибаюсь, выделение динамической памяти    
    B = new int*[N];      
    for(i=0; i<N; i++)
    {
        *(A+i) = new int[M];
        *(B+i) = new int[M];
    }
    printf("Заполните массив A[N][M]:\n");                 
    for(i=0; i<N; i++)                                     
        for(j=0; j<M; j++)                                     
        {           
            printf("A[%d][%d] = ", i+1, j+1); 
            scanf("%d",  *(A+i)+j);                        
            }
 
    printf("Ваш массив:\n");
    for(i=0; i<N; i++, printf("\n"))  
        for(j=0; j<M; j++)  
            printf("%d\t ", *(*(A+i)+j));                   
 
    printf("Введите k, 0<k<M. k = ");
    scanf("%d", &k);                                       
    for(i=0;i<N; i++)  
        for(j=0; j<M; j++)
            *(*(B+i)+j) = (k+j<M) ? (*(*(A+i)+j+k)) : (*(*(A+i)+j+k-M));
 
    printf("Новый массив:\n");
    for(i=0; i<N; i++, printf("\n"))  
        for(j=0; j<M; j++)  
            printf("%d\t ", *(*(B+i)+j));                     
 
    
    for(i=0; i<N; i++)
    {
        delete []*(A+i);
        delete []*(B+i);        
    }
    delete []A;
    delete []B;
 
    getch();
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2014, 15:16
Ответы с готовыми решениями:

Найти максимальный элемент среди лежащих ниже главной диагонали
Привет, помогите пожалуйста решить 4 задачки под dev c++ , если можно с комментариями ) 1.Найти...

Динамическая матрица: найти максимальный элемент среди лежащих ниже главной диагонали
Нужна помощь. Я в Си слаб, дали задания, никак не могу его сделать, помогите пожалуйста( Массив...

Найти максимальный элемент матрицы среди элементов, лежащих ниже побочной диагонали
В матрице размером NxM найти максимальный среди элементов, лежащих ниже побочной диагонали

Найти max среди элементов, лежащих ниже побочной, и min среди элементов, лежащих выше главной диагонали
В матрице размером NхM найти максимальный среди элементов, лежащих ниже побочной диагонали, и...

4
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
26.10.2014, 19:07 2
Вы веткой форума ошиблись. Вам сюда.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
27.10.2014, 11:19 3
gru74ik, сказать нечего больше? Какой С, new/delete это что, Си? НА кой пользователя гонять из раздела в раздел?
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
27.10.2014, 13:45 4
UI, хедеры - типично сишные. Ввод-вывод - типично сишный. getch() в конце - тоже типично сишная тема, вроде как. Вот я и посоветовал в ветку чистого Си обратиться.
Операторы new и delete пропустил, не заметил, признаю - это из С++. Просто все эти принтфы, сканфы в глаза первым делом бросились.
Строго говоря, тут какая-то странная смесь Си и С++. Если хочется С++, но с сишным вводом-выводом, то хоть хедеры тогда плюсовые лучше сделать, наверное. И в конце плюсовый cin.get() вместо getch() зафигачить.

Добавлено через 1 час 43 минуты
Как-то так:
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
108
109
110
111
112
113
114
115
116
117
118
119
#include "stdafx.h" // заголовочный файл интегрированной среды разработки MS Visual Studio
// Подробнее здесь: [url]http://habrahabr.ru/company/pvs-studio/blog/227521/[/url]
 
#include <iostream> // в этой программе не нужен
/*
iostream — заголовочный файл с классами, функциями и переменными для организации
ввода-вывода в языке программирования C++. Он включён в стандартную библиотеку C++.
Название образовано от Input/Output Stream («поток ввода-вывода»). В языке C++ и
его предшественнике, языке программирования Си, нет встроенной поддержки ввода-вывода,
вместо этого используется библиотека функций. iostream управляет вводом-выводом,
как и stdio.h в Си. iostream использует объекты cin, cout, cerr и clog для передачи
информации в и из стандартных потоков ввода, вывода, ошибок (без буферизации) и ошибок
(с буферизацией) соответственно. Являясь частью стандартной библиотеки C++, эти
объекты также являются частью стандартного пространства имён — std.
*/
 
#include "stdio.h" // для функций printf() и scanf()
/*
stdio.h (от англ. standard input/output header — стандартный заголовочный файл
ввода-вывода) заголовочный файл стандартной библиотеки языка Си, содержащий
определения макросов, константы и объявления функций и типов, используемых для
различных операций стандартного ввода и вывода. Функциональность унаследована
от «портативного пакета ввода-вывода» («portable I/O package»), написанного
Майком Леском из Bell Labs в начале 1970-х.[1] C++ ради совместимости также
использует stdio.h наряду со схожим по функциональности заголовочным файлом cstdio.
*/
                    
#include "conio.h"  // для функции getch() 
/*
Сonio.h (от англ. console input-output — консольный ввод-вывод) — заголовочный файл,
используемый в старых компиляторах, работающих в операционных системах MS-DOS, для
создания текстового интерфейса пользователя. Тем не менее, он не является частью языка
программирования Си, стандартной библиотеки языка Си, ISO C или требуемой стандартом POSIX.
Этот заголовочный файл объявляет несколько библиотечных функций для работы с «консольным
вводом и выводом» программы. Большинство компиляторов языка Си, предназначенных для DOS,
Windows 3.x, Phar Lap, DOSX, OS/2 или Win32 имели этот файл и обеспечивали сопутствующие
библиотечные функции в библиотеке Си по умолчанию. Большинство компиляторов языка Си,
предназначенных для UNIX и Linux, не имеют этого файла и не обеспечивают сопутствующих
библиотечных функций.
*/
 
void main() // !!! Стандарт С++ рекомендует, чтобы функция main была типа int
{
    setlocale (LC_CTYPE,"rus"); //введение русских символов
    int **A, **B; // создание двух указтелей второго уровня (указатель на указатель на int)                                       
    int k, i, j, N, M; // создание целочисленных переменных
    
    // функция форматированного вывода printf выводит на экран приглашение пользователю:
    printf("Введите количество строк массива: \n N = ");
    
    // от пользователя ожидается ввод целого числа, которое записывается в переменную N:
    scanf("%d", &N);
    
    // функция форматированного вывода printf выводит на экран приглашение пользователю:                               
    printf("Введите количество столбцов: \n M = ");
    
    // от пользователя ожидается ввод целого числа, которое записывается в переменную M:
    scanf("%d", &M);
                                       
    // создание двух матриц размером N*M с динамическим выделением памяти:
    A = new int*[N];
    B = new int*[N];      
    for(i=0; i<N; i++)
    {
        *(A+i) = new int[M];
        *(B+i) = new int[M];
    }
    
    // Приглашение пользователю заполнить целочисленными значениями матрицу А:
    printf("Заполните массив A[N][M]:\n");                 
    for(i=0; i<N; i++)                                     
        for(j=0; j<M; j++)                                     
        {           
            printf("A[%d][%d] = ", i+1, j+1); // на экран выводится приглашение вида A[i][j] = 
            scanf("%d",  *(A+i)+j);           // ввод значения в очередной элемент матрицы                
        }
    
    // Вывод массива на экран:
    printf("Ваш массив:\n");
    for(i=0; i<N; i++, printf("\n"))  
        for(j=0; j<M; j++)  
            printf("%d\t ", *(*(A+i)+j));                   
    
    printf("Введите k, 0<k<M. k = ");
    scanf("%d", &k);                                       
    for(i=0;i<N; i++)  
        for(j=0; j<M; j++)
        // матрица B заполняется значениями по условию:
            *(*(B+i)+j) = (k+j<M) ? (*(*(A+i)+j+k)) : (*(*(A+i)+j+k-M));
/* Здесь используется условная операция ? :
Она означает:
Если условие (k+j<M) истинно, то присвоить элементу B[i][j] значение,
лежащее в A[i][j+k], а если ложно, то лежащее в A[i][j+k-M].
*/ 
    
    // Вывод на экран нового массива:
    printf("Новый массив:\n");
    for(i=0; i<N; i++, printf("\n"))  
        for(j=0; j<M; j++)  
            printf("%d\t ", *(*(B+i)+j));                     
 
    // Освобождение памяти:
    for(i=0; i<N; i++)
    {
        delete []*(A+i);
        delete []*(B+i);        
    }
    delete []A;
    delete []B;
    
    // Ожидание от пользователя нажатия любой клавиши (чтобы окно не закрылось
    // сразу после выполнения программы):
    getch();
/* 
Не рекомендуется использовать эту функцию POSIX. Используйте совместимую со
стандартом C++ функцию _getch.
Источник: [url]http://msdn.microsoft.com/ru-ru/library/ms235446.aspx[/url]
*/
}
1
0 / 0 / 0
Регистрация: 26.10.2014
Сообщений: 3
27.10.2014, 16:57  [ТС] 5
Спасибо большое!
0
27.10.2014, 16:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2014, 16:57
Помогаю со студенческими работами здесь

Найти максимальный элемент среди элементов лежащих на главной диагонали и его место положение
А)Найти максимальный элемент среди элементов лежащих на главной диагонали и его место положение ...

Найти max среди элементов матрицы, лежащих ниже побочной диагонали, и min среди элементов выше главной диагонали
2. В матрице n-го порядка найти максимальный среди элементов, лежащих ниже побочной диагонали, и...

Найти максимальный среди элементов, лежащих ниже побочной диагонали.
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace...

vc++ 6.0. Найти минимальный среди элементов, лежащих ниже главной диагонали
Ввести матрицу размером NxM. Память для массива выделить динамически. Выполнить в соответствии...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru