#include
#include
#include
#define n 3
#define m 5
int main()
{
setlocale(LC_ALL, "rus");
int mas[n][m], i, j, max, maxj;
for (i = 0; i < n; i++)
{
printf("Введите элементы %d строки\n", i + 1);
for (j = 0; j < m; j++)
scanf_s("%d", &mas[i][j]);
}
max = mas[0][0];
maxj = 0;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (max < mas[i][j])
{
max = mas[i][j];
maxj = j;
}
for (j = maxj; j < m - 1; j++)
for (i = 0; i < n; i++)
mas[i][j] = mas[i][j + 1];
_getch();
}
У этой задачи условие : Составьте программу удаления столбца, содержащего максимальный элемент матрицы A (N, N).
А нужно: Составьте программу удаления строки и столбца, содержащего максимальный элемент матрицы A (N, N).
C/C++
Помогите пожалуйста доделать задачу на языке СИ!!!
Делайте проще!
http://all-ht.ru/inf/prog/c/func/memmove.html — описание функции memmove().
У функции memmove() всего 3 параметра: указатель на цель, указатель на источник, количество переносимых байт.
Пусть у Вас массив int mas[n][m], нужно удалить столбец col (0 ≤ col < m). Лучше всего объявить указатель int * pm = mas + col.
int mbs = (m - col - 1) * sizeof(int); // mbs — число байт справа от столбца col в любой строке матрицы
for (i = 0; i < n; ++i) {
memmove(pm, pm + 1, mbs); // перенос части строки матрицы справа от позиции col и до конца строки на один элемент влево
pm += m; // перестановка указателя на целую строку вперёд
}
Ещё проще удалить целую строку матрицы. Пусть у Вас тот же массив, нужно удалить строку row (0 ≤ row < n). Вот как это делается:
int * pm = mas + m * row;
memmove(pm, pm + m, sizeof(int) * m * (n - 1 - row));
Адрес mas + m * row указывает на начало строки row.
sizeof(int) * m * (n - 1 - row) — число байт занимаемых частью матрицы ниже строки row до конца матрицы.
http://all-ht.ru/inf/prog/c/func/memmove.html — описание функции memmove().
У функции memmove() всего 3 параметра: указатель на цель, указатель на источник, количество переносимых байт.
Пусть у Вас массив int mas[n][m], нужно удалить столбец col (0 ≤ col < m). Лучше всего объявить указатель int * pm = mas + col.
int mbs = (m - col - 1) * sizeof(int); // mbs — число байт справа от столбца col в любой строке матрицы
for (i = 0; i < n; ++i) {
memmove(pm, pm + 1, mbs); // перенос части строки матрицы справа от позиции col и до конца строки на один элемент влево
pm += m; // перестановка указателя на целую строку вперёд
}
Ещё проще удалить целую строку матрицы. Пусть у Вас тот же массив, нужно удалить строку row (0 ≤ row < n). Вот как это делается:
int * pm = mas + m * row;
memmove(pm, pm + m, sizeof(int) * m * (n - 1 - row));
Адрес mas + m * row указывает на начало строки row.
sizeof(int) * m * (n - 1 - row) — число байт занимаемых частью матрицы ниже строки row до конца матрицы.
Вот ссылка на вырезку из библиотеки с матрицами. Тим пара методов для работы с ними.
Она не ограничивается типом или размерами и выполнена на чистом Си.
Так же есть и main с примером использования (Минор - этом матрица без i сроки и j столбца, как тебе и нужно).
https://pastebin.com/gK3qVaPi
Она не ограничивается типом или размерами и выполнена на чистом Си.
Так же есть и main с примером использования (Минор - этом матрица без i сроки и j столбца, как тебе и нужно).
https://pastebin.com/gK3qVaPi
Евгений Михайлов
U.D.P
Библиотеку писал сам, в основном для себя, и это начальная версия. просьба не кидаться помидорами из-за кривого кода. Гуру сишников приветствую в помощи по исправлению го.. нокода)
Библиотеку писал сам, в основном для себя, и это начальная версия. просьба не кидаться помидорами из-за кривого кода. Гуру сишников приветствую в помощи по исправлению го.. нокода)
Похожие вопросы
- Помогите пожалуйста решить задачу на языке СИ или С# !!!
- Помогите с решением задачи на языке СИ
- Помогите с 4 задачей на языке си
- Помогите пожалуйста решить задачу на языке С#.
- Помогите пожалуйста решить программу на языке СИ!!!
- Помогите, пожалуйста, написать программу на языке Си.
- Помогите с задачей на языке СИ
- Решить задачу на языке СИ
- Помогите пожалуйста решить задачу на Си
- Помогите решить задачу, пожалуйста. Сам не понимаю. (Язык Си)
И не забудьте уменьшить длину строки m.
int * maxPtr = mas;
int * scnPtr = mas + 1;
for (i = 1; i < n * m; ++i, scnPtr++) if ((*maxPtr) < (*scnPtr)) maxPtr = scnPtr;
int Offs = maxPtr - mas;
/* Offs / m — строка, Offs % m — столбец */
| 5 | 6 | 7 | 8 | 9 |
|10|11|12|13|14|
|15|16|17|18|19|
|20|21|22|23|24|