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

При повторении элементов в новом массиве, оставлять только первый из них - C++

Восстановить пароль Регистрация
 
Anwer
 Аватар для Anwer
0 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 49
24.01.2014, 11:27     При повторении элементов в новом массиве, оставлять только первый из них #1
Условие: Даны натуральные числа n и m и целочисленный массив размера mn. Найти сумму наибольших значений элементов его строк. Сформировать новый массив из суммировавшихся значений. При повторении элементов в новом массиве, оставлять только первый из них. Воспользоваться динамическими массивами и продемонстрировать работу с указателями.
Решение:
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
#include <iostream>
 
using namespace std;
 
int max(int *pm, int n)
{
int max, i;
 
max=*pm;
for(i=1;i<n;i++)
if(*(pm+i)>max)
max=*(pm+i);
return max;
}
int uniq_count(int *pm, int n)
{
int i, j, f, k, count;
 
count=0;
for(i=0;i<n-1;i++)
{
f=0;
for(j=i+1;j<n;j++)
if(*(pm+i)==*(pm+j))
f=1;
if(f==0)
count++;
}
 
return count;
}
 
void uniq_array(int *pm,int n,int *pun)
{
int i, j, f, k;
k=0;
for(i=0;i<n-1;i++)
{
f=0;
for(j=i+1;j<n;j++)
if(*(pm+i)==*(pm+j))
f=1;
if(f==0)
*(pun+k++)=*(pm+i);
}
}
 
int main()
{
setlocale(LC_ALL, "Russian"); 
int m, n, **pmt, *pm, *pun, i, j, k, sum;
cout << "Введите количество строк:" << endl;
cin >> m;
cout << "Введите количество столбцов:" << endl;
cin >> n;
 
pmt = new int *[m];
for(i = 0; i < m; i++)
pmt[i] = new int [n];
 
pm = new int [m];
 
cout << "Введите " << m*n << " елемента матрицы:" << endl;
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
cin >> pmt[i][j];
 
cout<<"Сформирированая матрица:"<<endl;
for(i = 0; i < m; i++)
{
for(j=0;j<n;j++)
cout<<"\t"<<pmt[i][j];
cout<<endl;
}
 
for(i=0;i<m;i++)
pm[i]=max(pmt[i],n);
 
cout << "Максимальные элементы в строках:" << endl;
for(i = 0; i < m; i++)
cout << "\t" << pm[i];
cout << endl;
 
sum = 0;
for(i = 0; i < m; i++)
sum+=pm[i];
 
cout << "Сумма максимальных элементов: "<< sum << endl;
 
k = uniq_count(pm,n);
pun = new int [k];
uniq_array(pm,n,pun);
 
cout << "Массив уникальных максимумов строк" << endl;
for(i = 0; i < k; i++)
cout << "\t" << pun[i];
cout << endl;
 
for(i = 0; i < m; i++)
delete [n] pmt[i];
delete [m] pmt;
 
delete [m] pm;
 
delete [k] pun;
 
system("pause");
return 0;
}
Вопрос правильно реализована задача или нет? Да и что скажете о коде, есть какие небудь оплошности?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2014, 11:27     При повторении элементов в новом массиве, оставлять только первый из них
Посмотрите здесь:

Массив: В массиве из 20 элементов расставить по возрастанию только четные C++
Определить, есть ли в данном двумерном массиве строка (столбец), состоящая только из элементов, принадлежащих промежутку от А до В. C++
C++ Определить есть ли в массиве строка, состоящая только из отрицательных элементов.
C++ Все элементы заданной матрицы, попадающие в интервал [2, 9] переписать в новый массив. Подсчитать количество элементов в новом массиве
Как запретить добавление данных в массив при повторении? С++ C++
В двумерном массиве L (M, N) первый элемент поменять с последним и найти сумму отрицательных элементов C++
C++ Даны два слова. Напечатать только те буквы слов, которые есть только в одном из них
C++ Из группы подряд идущих элементов массива с одинаковыми значениями оставить только первый

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 21:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru