Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
fies
1 / 1 / 0
Регистрация: 03.08.2013
Сообщений: 26
#1

Доделать код. Тема массивы. Нужно использовать массив для хранения ответа

25.06.2014, 21:44. Просмотров 209. Ответов 1
Метки нет (Все метки)

Дана целочисленная прямоугольная матрица. Определить:
1. количество строк, содержащих хотя бы один нулевой элемент;
2. номер столбца, в котором находится самая длинная серия одинаковых элементов.

Допустим вводим.
Матрица :
0 1 2
1 1 2
3 1 2
Выводит:
Количество строк, содержащих хотя бы один нулевой элемент : 1

Номер столбца, в котором самая длинная серия одинаковых элементов: 2 (А ДОЛЖНО ВЫВОДИТЬ: 2 3)

Не как не могу додуматься как сделать. Все остальное работает верно.

Сам код:

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
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define newDBG_NEW
#endif
#endif
#include <iostream>
#include <limits>
 
using namespace std;
int kolichestvo(int **a, int n, int m);
int nomer(int **a, int n, int m, bool &prov);
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int n, i, m, j;
    bool prov;
    cout << "6 Лабораторная. Обработка числовых матриц. \n\n";
    cout << "Введите количество строк прямоугольной матрицы: ";
    cin >> n;
    cout << endl;
    while (cin.fail() || n <= 1)
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Ошибка! Попробуйте еще раз : ";
        cin >> n;
        cout << endl;
    }
    cout << "Введите количество столбцов прямоугольной матрицы: ";
    cin >> m;
    cout << endl;
    while (cin.fail() || n <= 1)
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Ошибка! Попробуйте еще раз : ";
        cin >> m;
        cout << endl;
    }
    while (cin.fail() || n==m )
    {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Введенны данные квадратной матрицы. Ошибка! Пожалуйста, введите данные прямоугольной матрицы : ";
        cin >> n;
        cin >> m;
        cout << endl;
    }
 
 
    int **a = new int *[n];
    for (i = 0; i < n; i++)
    {
        a[i] = new int[m];
        for (j = 0; j < m; j++)
        {
            cout << "Введите " << j + 1 << " элемент " << i + 1 << " строки матрицы: ";
            cin >> a[i][j];
            cout << endl;
            while (cin.fail())
            {
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(), '\n');
                cout << "Ошибка! Попробуйте еще раз : ";
                cin >> a[i][j];
                cout << endl;
            }
        }
    }
 
    cout << "Матрица : \n";
    for (i = 0; i < n; i++)
    {
        for (j = 0; j< m; j++)
            cout << "  " << a[i][j] << "     ";
        cout << endl;
    }
    cout << endl << endl;
    if (kolichestvo(a, n, m))
        cout << "Количество строк, содержащих хотя бы один нулевой элемент : "
        << kolichestvo(a, n, m) << endl << endl;
    else
        cout << "Нет строк,содержащих хотя бы один нулевой элемент\n\n";
    if (nomer(a, n, m, prov))
        cout << "Номер столбца, в котором самая длинная серия одинаковых элементов: "
        << nomer(a, n, m, prov) << endl << endl;
    else
        cout << "Нет столбца с серией одинаковых элементов \n\n";
    delete[] a;
 
    system("pause");
    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
    _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
    _CrtDumpMemoryLeaks();
    return 0;
}
 
 
int kolichestvo(int **a, int n, int m)
{
    int i, j, s = 0, Kol = 0;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j<m; j++)
        {
            if (a[i][j] == 0)
            {
                s++;
            }
        }
        if (s)
        {
            Kol++;
            s = 0;
        }
    }
    return Kol;
}
int nomer(int **a, int n, int m, bool &prov)
{
    prov = false;
    int i, j, s, p = 0, b = 0, d = 0;
    for (j = 0; j<m; j++)
    {
        s = a[0][j];
        for (i = 1; i<n; i++)
        {
            if (a[i][j] == a[i - 1][j])
            {
                b++;
            }
        }
        if (b>d)
        {
            prov = true;
            d = b;
            b = 0;
            p = j + 1;
        }
    }
    if (prov)
        return p;
    else
        return prov = false;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2014, 21:44
Ответы с готовыми решениями:

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

Создать класс, содержащий поля, которые можно использовать для хранения данных
Создать класс &lt;имя класса&gt; (имя класса задается в соответствии с выбранным...

Написать код с использованием двумерного и лополнительно использовать одномерный массивы
Для каждого ряда квадратного массива найти сумму тех двух элементов, которые...

Преобразуйте массив (Использовать динамические массивы.)
Использовать динамические массивы. Преобразуйте массив так, чтобы все...

Нужно доделать код! Исключить из дерева сортировки число "2"
// аисд7.cpp: определяет точку входа для консольного приложения. // ...

1
Хедин
74 / 69 / 55
Регистрация: 17.05.2014
Сообщений: 301
25.06.2014, 21:55 #2
fies, находите самую длинную серию, затем пробегаете по массиву и, если столбец подходит по эту длинную серию, выводите его номер
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2014, 21:55

Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и почтового ад
Реализуйте класс для хранения ФИО и номера телефона человека, класс для...

Массивы: исправить, доделать, добавить нахождение среднего рейтинга по каждому предмету для всех студентов
Исправьте ошибки. И еще надо добавить нахождение среднего рейтинга по каждому...

Какой массив использовать для хранения множества точек
В общем задача у меня такая: надо нарисовать персонажа из точек и прямых...


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

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

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