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

Найти максимальный по модулю элемент массива - C++

Восстановить пароль Регистрация
 
Lexa777
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 84
26.06.2013, 12:41     Найти максимальный по модулю элемент массива #1
Помогите доделать третье задание...не получается....

С одномерным массивом, состоящим из n вещественных элементов, произвести следующие операции:

1) найти максимальный по модулю элемент массива;

2) вычислить сумму элементов массива, расположенных между первым и вторым положительными элементами;

3) преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.

Примечание: Размеры массивов задаются именованными константами. Все операции над массивами выполняются отдельными функциями в том порядке, в котором они описаны в задании. Элементы массивов задаются одним из двух способов: генерация случайным образом или ввод с клавиатуры. Способ заполнения массива выбирается пользователем (необходимо предусмотреть соответствующий запрос). При составлении программ, максимальное количество элементов в массиве задается с помощью макроопределения #define. Однако программа должна спрашивать у пользователя реальную размерность массива (в диапазоне от единицы до константы в макроопределении). Для программ этого раздела, использовать глобальные массивы запрещается. Выход индекса за пределы массива считается грубейшей ошибкой.

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
#include <iostream>
using namespace std;
int main()
{
    int i=0,n=0;
    cout << "Pazm : ";
    cin >> n;
    int *mas = new int[n];
    cout << "BBedite macciv is "<<n<<" 4elb|x 4icel :"<<endl;
    for (i=0;i<n;i++)
        cin >> mas[i];
        
    //--------------------------MAX
    
    int r=0;
    int maxi = 0;
    for (int i=0;i<n;i++)
    {
        if (mas[i]<0)
        {
            r = mas[i]*(-1);
                if(r>maxi)
                    maxi = r;
        }
        if (mas[i]>=0)
        {
            if (mas[i]>maxi)
                maxi = mas[i];
        }
    }
    cout <<"MAX = " << maxi << endl;
    
    //------------- Êîëè÷åñòâî ïîñëå 1 ïîëîæ
    
    int pos = 0;
    for (i=0;i<n;i++)
    {
        if (mas[i]>0)
        {
            pos = i;
            break;
        }
    }
    int cymm = 0;
    for (i=pos;i<n;i++)
        cymm = cymm + mas[i];
    cout << "Cymm pocle 1 pol = "<<cymm<<endl;
return 0;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igoroff-d
17 / 17 / 1
Регистрация: 31.10.2012
Сообщений: 26
26.06.2013, 13:04     Найти максимальный по модулю элемент массива #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
using namespace std;
const int N=10;
 
void main()
{
    int buffer[N]={1,2,3,0,0,4,5,0,1,2}, temp[N], k=0;
 
    for (int i=0; i<N; i++)
    {
        if (buffer[i]!=0)
            temp[k++]=buffer[i];
    }
    
    for (int i=0; i<=k-1; i++)
    {
        buffer[i]=temp[i];
    }
 
    for (int i=k; i<N; i++)
    {
        buffer[i]=0;
    }
 
    for (int i=0; i<N; i++)
        cout<<buffer[i]<<" ";
}
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
26.06.2013, 13:09     Найти максимальный по модулю элемент массива #3
держи бро

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstring>
 
void reorganize(int a[], int size)
{
    int *b = new int[size];
    memcpy(b, a, sizeof(int)*size);
    
    int c = 0;
    for(int i = 0; i < size; ++i) 
        if(b[i])
            a[c++] = b[i];
            
    memset((a+c), 0, (size - c) * sizeof(int));
    delete[] b;
}
Добавлено через 3 минуты
@igoroff-d, сравнение с 0 лучше проводить просто !buffer[i], либо просто buffer[i], число отличное от 0 воспринимается как true, а 0 соответственно false. А != 0 просто лишний оператор, всё равно что if(A == true)
Lexa777
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 84
26.06.2013, 13:24  [ТС]     Найти максимальный по модулю элемент массива #4
Ребят, мне эту процедуру нужно поместить в ту программу что у меня есть...
помогите начинающему...пожалуйста)
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
26.06.2013, 13:33     Найти максимальный по модулю элемент массива #5
@Lexa777, ну так а в чём проблема, копируй код к себе, вызывай в main, я процедуру написал, можешь часть кода пользователя igoroff-d взять, и вставить в свой main, только имена переменных поменяй на свои и всё будет работать.

Добавлено через 1 минуту
@Lexa777, у тебя есть представления о том как работают приведённые примеры? Ты пытался их понять?
Lexa777
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 84
26.06.2013, 13:33  [ТС]     Найти максимальный по модулю элемент массива #6
Так правильно???

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
#include <iostream>
using namespace std;
int main()
{
    int i=0,n=0,temp[n], k=0;
    cout << "Pazm : ";
    cin >> n;
    int *mas = new int[n];
    cout << "BBedite macciv is "<<n<<" 4elb|x 4icel :"<<endl;
    for (i=0;i<n;i++)
        cin >> mas[i];
        
    //--------------------------MAX
    
    int r=0;
    int maxi = 0;
    for (int i=0;i<n;i++)
    {
        if (mas[i]<0)
        {
            r = mas[i]*(-1);
                if(r>maxi)
                    maxi = r;
        }
        if (mas[i]>=0)
        {
            if (mas[i]>maxi)
                maxi = mas[i];
        }
    }
    cout <<"MAX = " << maxi << endl;
    
    //------------- Количество после 1 полож
    
    int pos = 0;
    for (i=0;i<n;i++)
    {
        if (mas[i]>0)
        {
            pos = i;
            break;
        }
    }
    int cymm = 0;
    for (i=pos;i<n;i++)
        cymm = cymm + mas[i];
    cout << "Cymm pocle 1 pol = "<<cymm<<endl;
    
     //------------- Упорядоченный массив
     
   for (int i=0; i<n; i++)
    {
        if (mas[i]!=0)
            temp[k++]=mas[i];
    }
    
    for (int i=0; i<=k-1; i++)
    {
        mas[i]=temp[i];
    }
 
    for (int i=k; i<n; i++)
    {
        mas[i]=0;
    }
 
    for (int i=0; i<n; i++)
        cout<<mas[i]<<" ";
 
return 0;
}
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
26.06.2013, 13:36     Найти максимальный по модулю элемент массива #7
компилил ? работает ?
Lexa777
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 84
26.06.2013, 15:13  [ТС]     Найти максимальный по модулю элемент массива #8
Ну да, вроде бы норм...
А эта процедура выполняет только сортировку нулей в конец строки??
Просто, у меня нули уходят в конец, а все остальные числа остаются на своих местах...
Так и должно быть?

Добавлено через 1 час 26 минут
Помогите еще пожалуйста сделать так что бы можно было вводить размер матрицы....
Я попытался сделать, оно то спрашивает о размере матрицы, но матрица получается какой то не правильной...



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
#include <iostream>
 using namespace std;
int main()
{
    setlocale(0,""); 
     int n=0; 
    int matr [n][n];
    float matrs[n][n],sum,p; 
    int i,j,k,l,kol_vo;  
// Ввод элементов массива 
 cout << "Введите размер квадратной матрицы: ";
         std::cin >> n;
    for (i=0;i<n;i++)
        for (j=0;j<n;j++) 
        {
        cout<<"Введите элемент матрицы "<<i+1<<", "<<j+1<<" : "; 
        cin>>matr[i][j];
        }
    cout<<"Введена матрица"<<endl;
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            { 
            cout<<""<<matr[i][j]<<" | ";
            }
        cout<<endl;
    }
    for (i=0;i<n;i++)
        for (j=0;j<n;j++)
            {   matrs[i][j]=0;
                kol_vo=0;
                for (k=i-1;k<=i+1;k++)
                    {
                      if ((k>-1)&(k<n))
                        { 
                            for (l=j-1;l<=j+1;l++)
                            { if ((l>-1)&(l<n))
                                { 
                                    if ((k!=i)|(l!=j))
                                    { 
                                matrs[i][j]=matrs[i][j]+matr[k][l];
                                kol_vo++;
                                    }
                                }
                            }
                        }
                    }
                matrs[i][j]=matrs[i][j]/kol_vo;
            }
    cout<<"Сглаженная матрица:"<<endl;   
    for (i=0;i<n;i++)
    {
        for (j=0;j<n;j++)
            { 
            cout<<""<<matrs[i][j]<<" | ";
            }
        cout<<endl;
    }
        sum=0;
    for (i=1;i<n;i++)
        for (j=0;j<n-(n-i);j++)
        { if ((matrs[i][j])<0)
            {
            p=matrs[i][j];
            matrs[i][j]=matrs[i][j]*(-1);
            sum+=matrs[i][j];
            matrs[i][j]=p;
            }
          else
            {
              sum+=matrs[i][j];
            }
        }
            
        cout<<"Сумма моделей элементов главной диагональной сглаженной матрицы  : "<<""<<sum<<endl;
            
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2013, 15:55     Найти максимальный по модулю элемент массива
Еще ссылки по теме:

C++ Найти максимальный по модулю элемент массива
C++ Найти максимальный элемент в каждой строке двумерного массива по модулю, и сложить их
C++ Вычислить максимальный по модулю элемент массива

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

Или воспользуйтесь поиском по форуму:
el_gato_de_Ch
35 / 35 / 1
Регистрация: 28.04.2013
Сообщений: 110
26.06.2013, 15:55     Найти максимальный по модулю элемент массива #9
Цитата Сообщение от Lexa777 Посмотреть сообщение
Ну да, вроде бы норм...
А эта процедура выполняет только сортировку нулей в конец строки??
Просто, у меня нули уходят в конец, а все остальные числа остаются на своих местах...
Так и должно быть?
Твоё ТЗ
3) преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.

про сортировку в задании речи вообще нет, сортировка - это упорядочение элементов согласно установленному правилу, а тебе надо просто все нули перекинуть в конец строки ... что тебе собственно и сделали

Добавлено через 14 минут

C++
1
int matr [n][n];
нельзя так массивы объявлять !
конечно он будет ругаться, компилятор сколько для него памяти должен выделить ??? n ? А чему твоё n равно ?

Если тебе нужна динамическая матрица, чтобы ты сам мог задавать её размерность с клавиатуры, то будь добр делать это так

C++
1
2
3
4
5
6
7
int n;
cin >> n;
    
int **a; 
a = new int* [n]; 
for(int i = 0; i < n; ++i)
    a[i] = new int[n];
а когда закончишь работу с матрицей, тебе необходимо очистить память

C++
1
2
3
4
for(int i = 0; i < n; ++i)
    delete[] a[i];
 
delete[] a;
Yandex
Объявления
26.06.2013, 15:55     Найти максимальный по модулю элемент массива
Ответ Создать тему
Опции темы

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