0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116
1

Как проверить матрицу на одинаковые элементы

16.03.2018, 17:52. Показов 4746. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа работает с динамической матрицей. Есть вопрос: как при вводе пользователем с клавиатуры эл-тов массива контролировать на "разные элементы" (то есть чтобы нельзя было ввести эл-нт если он уже был введен раньше) и тоже самое с генератором псевдослуч. чисел? Заранее спасибо.
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*Программа ищет в каждой строке матрицы действительных чисел минимальный элемент,
затем из всех минимальных программа ищет максимальный с его индексами*/
#include <iostream>
#include <iomanip>
#include<string>
#include<cstdlib>
#include<conio.h>
#include <time.h>
using namespace std;
#pragma warning(disable:4996);
//Прототипы функций:
inline void proverka();
void introduction_matrix(double **arr, int rows, int cols);
void random(double **a, int n, int m);
void display_matrix(double **a, int n, int m);
int size_matrix(string str);
bool allocation_memory(double **&a, int n, int m);
void free_memory(double **a, int n);
void poisk(double **a, int n, int m);
//////////////////////////////////////////////
int main()
{
    setlocale(LC_ALL, "rus");
    int n, m, reg;
    n = size_matrix("строк");
    m = size_matrix("столбцов");
    double **a;
    if (allocation_memory(a, n, m)) //если память под матрицу успешно выделена
    {
        do {
            cout << "\n1 -> Заполнить матрицу вручную;\n2 -> Заполнить случ.числами.\nВаш выбор: ";
            while (!(cin >> reg) || (cin.peek() != '\n')) 
                proverka(); 
        } while (reg <= 0 || reg >= 3);
        if (reg == 1)
            introduction_matrix(a, n, m); //заполнить с клавиатуры
        if (reg == 2)
            random(a, n, m); //заполнить генератором псевдослуч. чисел
        cout << "Матрица: " << endl;
        display_matrix(a, n, m); //показать матрицу
        poisk(a, n, m); //обработать матрицу
        free_memory(a, n); //освободить память
    }
    _getch();
    return 0;
}
/*Функция-фильтр ввода значений пользователем
с клавиатуры (встроенная)*/
inline void proverka()
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "Ошибка! Поворите попытку: ";
}
/*Функция заполнения матрицы значениями, которые пользователь
вводит вручную с клавиатуры
Вход: arr - матрица типа double,
rows - количество строк,
cols - количество столбцов*/
void introduction_matrix(double **arr, int rows, int cols)
{
    for (int i = 0; i < rows; i++)
        for (int j = 0; j < cols; j++)
        {
            cout << "Введите [" << i + 1 << "][" << j + 1 << "] элемент матрицы => ";
            while (!(cin >> arr[i][j]) || (cin.peek() != '\n'))
                proverka();
        }
}
/*Функция заполнения матрицы с помощью генератора псевдослучаных
чисел в заданном диапазоне действительных чисел
Вход: a - матрица типа double,
n - количество строк,
m - количество столбцов*/
void random(double **a, int n, int m)
{
    int c, v; //диапазоны значений
    cout << "\nЗадайте диапазон случайных чисел \nот: ";
    while (!(cin >> c) || (cin.peek() != '\n'))
        proverka();
    cout << "до: ";
    while (!(cin >> v) || (cin.peek() != '\n'))
        proverka();
    cout << endl;
    srand((unsigned)time(NULL));
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            a[i][j] = (double)rand() / RAND_MAX * (v - c) + c;
        }
}
/*Функция вывода матрицы на консоль
Вход: a - матрица типа double,
n - количество строк,
m - количество столбцов*/
void display_matrix(double **a, int n, int m)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << showpoint << fixed << setw(8) << setprecision(2) << a[i][j];
        }
        cout << endl;
    }
}
/*Вспомогательная функция для заполнения матрицы
Функция возвращает значение количества строк или столбов матрицы
Вход: строка str - "рядков" или "столбцов"*/
int size_matrix(string str)
{
    string str1;
    int tmp = 0;
    cout << "Укажите количество " << str << " в матрице => ";
    cin >> str1;
    for (int i = 0; i < str1.length(); i++)
    {
        if (((int)str1[i]) < 47 || ((int)str1[i]>57) || (int)str1[0] == 48)
        {
            cout << "Ошибка! Поворите попытку! \n";
            tmp = size_matrix(str); //рекурсивный вызов функции
            return tmp;
        }
    }
    tmp = stoi(str1);
    return tmp;
}
/*Функция выделения памяти из кучи под матрицу
Возвращает true - выделение ДП для матрицы успешно, иначе - false
Вход: a - матрица типа double,
n - количество строк,
m - количество столбцов*/
bool allocation_memory(double **&a, int n, int m)
{
    a = new double*[n];
    if (a == NULL)
    {
        cout << "\nОшибка выделения ДП под массив указателей!\n";
        return false;
    }
    for (int i = 0; i < n; i++)
    {
        a[i] = new double[m];
        if (a[i] == NULL)
        {
            cout << "\nОшибка выделения ДП под строку матрицы!\n";
            for (int j = 0; j < i; j++)
                delete[] a[i];
            delete[]a;
            return false;
        }
    }
    return true;
}
/*Функция "освобождения памяти" из-под матрицы
Вход: a - матрица типа double,
n - количество строк*/
void free_memory(double **a, int n)
{
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
}
/*Функция обработки матрицы
Вход: a - матрица типа double,
n - количество строк,
m - количество столбцов*/
void poisk(double **a, int n, int m)
{
    int ind_i = 0, ind_j = 0, ind_max_i = 0, ind_max_j;
    double MAX = INT_MIN;
    for (int i = 0; i < n; i++)
    {
        double minelrow = INT_MAX; //минимальный эл-нт рядка
        for (int j = 0; j < m; j++)
        {
            if (minelrow > a[i][j])
            {
                minelrow = a[i][j];
                ind_i = i;
                ind_j = j;
            }
        }
        cout << "\nМинимальный эл-нт " << i + 1 << " строки: " << "a[" << ind_i + 1 << "][" << ind_j + 1 << "] = " << minelrow << endl;
        if (MAX < minelrow)
        {
            MAX = minelrow;
            ind_max_i = ind_i;
            ind_max_j = ind_j;
        }
    }
    cout << "\nМаксимальный из минимальных : " << "a[" << ind_max_i + 1 << "][" << ind_max_j + 1 << "] = " << MAX << "\n\n";
}
0
16.03.2018, 17:52
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2018, 17:52
Ответы с готовыми решениями:

Составить программу для проверки, есть ли в массиве одинаковые элементы. Проверить на наличие одинаковых элементов линейные таблицы А [10] и В [12]. И
Составить программу для проверки, есть ли в массиве одинаковые элементы. Проверить на наличие одинаковых элементов линейные таблицы А и В...

Как проверить есть ли в двумерном массиве одинаковые элементы?
Дан массив .Как проверить есть ли в нём одинаковые элементы?

Как проверить все ли элементы лежат одинаковые в файле или один из них не равен другому?
Как проверить все ли элементы лежат одинаковые в файле или один из них не равен другому на C# ?

2
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
16.03.2018, 18:11 2
Цитата Сообщение от nenahov Посмотреть сообщение
inline void proverka()
оптимистично думать что компилятор вставит цикл как inline.

по поводу задания, самый простой способ проходится по матрице и проверять введенное пользователем число на соответствие с уже имеющимися, можно через set ещё
0
0 / 0 / 2
Регистрация: 11.10.2016
Сообщений: 116
16.03.2018, 18:16  [ТС] 3
Azazel-San, а что не так с inline? работает корректно
0
16.03.2018, 18:16
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.03.2018, 18:16
Помогаю со студенческими работами здесь

Проверить есть ли в массивах одинаковые элементы
1. Проверить есть ли в массивах A и B одинаковые элементы. 2. Суммировать те элементы массива A , для которых сумма индексов нечетна.

Проверить, есть ли в одномерных массивах одинаковые элементы
помогите задачи решить срочно надо!!!ПЛИЗ!!! 1. составить программу проверяющую есть ли в одномерных массивах A(n)b(n) одинаковые...

С помощью LINQ проверить, есть ли в коллекции одинаковые элементы
Есть массив int mass3 = new int { 9, 9, 8, 5, 13, 3, 2, 6, 4, 0 };, не знаю, как с помощью LINQ проверить, есть ли в нем одинаковые...

Найти одинаковые элементы первой строки, максимум соответствующих элементов второй строки, сократив матрицу
Здравствуйте! Есть матрица,в которой нужно найти одинаковые элементы первой строки,после найти максимум соответствующих элементов...

Проверить, есть ли в одномерном массиве X, A(n) и B(n) одинаковые элементы, если есть, то найти среди них наибольший
Проверить, есть ли в одномерном массиве X, A(n) и B(n) одинаковые элементы, если есть, то найти среди них наибольший. Нужно...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией и Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru