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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить из массива все максимальные элементы http://www.cyberforum.ru/cpp-beginners/thread1217102.html
II. Дана последовательность целых чисел. Удалить из массива все максимальные элементы.
C++ Класс-контейнер вектор Класс-контейнер вектор I. Дана последовательность целых чисел. Подсчитать количество четных элементов. http://www.cyberforum.ru/cpp-beginners/thread1217101.html
C++ Отсортировать каждый столбец матрицы по возрастанию элементов методом выбора
II. Дана матрица размерностью nхn, содержащая целые числа. Отсортировать каждый столбец матрицы по возрастанию элементов методом выбора;
Отсортировать файлы в алфавитном порядке C++
Сортировка: I. В файле input.txt содержатся сведения о группе студентов в формате: номер группы; запись о каждом студенте группы содержит следующие сведения: фамилия, имя, отчество, год рождения, оценки по пяти предметам. Переписать данные файла input.txt в файл output.txt, отсортировав их в алфавитном порядке по фамилии методом вставки;
C++ Найти две наиболее удаленных друг от друга точки http://www.cyberforum.ru/cpp-beginners/thread1217098.html
Структуры: I. Решить задачу, используя структуру point для хранения координат точки: Множество точек задано в пространстве. Найти две наиболее удаленных друг от друга точки.
C++ Поменять местами содержимое файлов II. Работа с текстовыми файлами. Даны два файла с числами. Поменять местами их содержимое (использовать вспомогательный файл). подробнее

Показать сообщение отдельно
fies
1 / 1 / 0
Регистрация: 03.08.2013
Сообщений: 26

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

25.06.2014, 21:44. Просмотров 189. Ответов 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;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru