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

Удалить из матрицы строки и стольбцы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подскажите как реализовать задачу в коде. С циклом http://www.cyberforum.ru/cpp-beginners/thread376606.html
Я хочу сделать цикл, который откидывает старшую цифру с введённого числа. Если мне память не изменяет то старшая цифра числа 5783 это 5. Надо найти по циклу. то получает надо брать последнюю цифру возьмём например n = 5783 в x будем делать число 783. Решаем берём и откидываем последнюю цифру пока не дойдём до старшой цифры с n будем откусывать по 1 цифре последней (n%10)пока не дойдём до...
C++ задача по одномерным массивам 1) Условие задачи: В массиве A определить среднюю длину непрерывных участков отрицательных значений элементов 2) Если у кого-то будет желание, то можете решить такую задачу: Найти сумму элементов заштрихованной области таблицы А размера N*N http://www.cyberforum.ru/cpp-beginners/thread376597.html
C++ чтение определенного элемента массива из файла
добрый день! суть такова - есть массив целых, который я записываю в файл. выглядит это так: int Mass; //собственно массив int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int) { //--------------- заполняем массив
C++ Помогите перевести программу обработки одномерного массива с переменных на указатели
В одномерном массиве вычислить: 1) Количество элементов массива равных 0. 2)Сумму элементов массива расположенных после минимального элемента. 3)Упорядочить массив по возрастанию. Написал программу используя знания прошлого курса... #include <stdio.h> int main(){ int i, j, i2, k=0, min, imin, mas={2,3,4,-5,0,6,1,2,5,0};
C++ найти значение суммы по выражению http://www.cyberforum.ru/cpp-beginners/thread376566.html
определить минимальное значение n>0, для которого очередное слагаемое по модулю не превышает eps>0 при нахождении результата согласно формуле(смотри ниже) вот код программы, что я смог "сделать". буду очень признателен, если вы укажите мне на конкретное место, в котором ошибка и как ее исправить.:scratch: # include <iostream> # include <math.h> # include <iomanip> # include <strstream> #...
C++ Вычисление среднего арифметического значения поледовательности дробных чисел Написать программу для вычисления среднего арифметического значения поледовательности дробных чисел вводимых с клавиатуры.количество чисел должно задаваться во время работы.использовать инструкцию While Плизз зашла со своего парня подробнее

Показать сообщение отдельно
I2um1
Злой няш
 Аватар для I2um1
1333 / 1031 / 114
Регистрация: 05.04.2010
Сообщений: 1,808
02.11.2011, 18:33     Удалить из матрицы строки и стольбцы
C1keu, вот алгоритм, который предложил OstapBender:
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
    // Определение границ матрицы
    size_t n, m;
    _tprintf(_T("Количество строк = "));
    _tscanf(_T("%d"), &n);
    _tprintf(_T("Количество столбцов = "));
    _tscanf(_T("%d"), &m);
 
    // Заполнение матрицы
    size_t *matrix = new size_t[n * m];
    for (size_t i = 0; i < n; ++i)
        for (size_t j = 0; j < m; ++j)
        {
            _tprintf(_T("Матрица[%d][%d] = "), i, j);
            _tscanf(_T("%d"), &matrix[i * m + j]);
        }
 
    // Определяем то, что надо уплотнить
    size_t *row = new size_t[n], *column = new size_t[m];
    memset(row, 0, n * sizeof(size_t));
    memset(column, 0, m * sizeof(size_t));
    size_t count_row = 0, count_column = 0;
    for (size_t i = 0; i < n; ++i)
    {
        bool flag = true;
        for (size_t j = 0; j < m; ++j)
            if (matrix[i * m + j])
            {
                flag = false;
                break;
            }
        row[i] = flag ? 1 : 0;
        count_row += flag ? 1 : 0;
    }
    for (size_t i = 0; i < m; ++i)
    {
        bool flag = true;
        for (size_t j = 0; j < n; ++j)
            if (matrix[j * m + i])
            {
                flag = false;
                break;
            }
        column[i] = flag ? 1 : 0;
        count_column += flag ? 1 : 0;
    }
 
    // Уплотнение матрицы
    size_t rn = n - count_row, rm = m - count_column;
    size_t *result = new size_t[rn * rm];
    for (size_t i = 0, ri = 0; i < n; ++i)
        for (size_t j = 0, rj = 0; j < m; ++j)
            if (!row[i] && !column[j])
            {
                result[ri * rm + rj] = matrix[i * m + j];
                rj++;
                if (rj >= rm)
                {
                    rj = 0;
                    ri++;
                }
            }
 
    // Вывод результата
    for (size_t i = 0; i < rn; ++i)
    {
        for (size_t j = 0; j < rm; ++j)
            _tprintf(_T("%d "), result[i * rm + j]);
        _tprintf(_T("\n"));
    }
 
    // Очистка памяти
    delete[] result;
    delete[] column;
    delete[] row;
    delete[] matrix;
P.S. Возможны незначительные ошибки - проверял всего на пару входных данных.
P.S.S. Реализацию немного упростил - в оригинале было не так.
 
Текущее время: 20:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru