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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
#1

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

07.11.2011, 18:44. Просмотров 1132. Ответов 19
Метки нет (Все метки)

Заполнить случайными числами от -5 до 5.
В одномерном массиве, состоящем из 10 целых элементов вычислить:
а)максимальный по модулю элемент массива;
б)сумму элементов массива расположенных между первым и вторым положительными элементами.

Преобразовать массив так чтобы все элементы равные 0 распологались после всех остальных


под буквой а, более или менее получилось сделать, но вот остальные два даже в голову не приходит, как должна выглядеть программа.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2011, 18:44     Вычислить максимальный по модулю элемент массива
Посмотрите здесь:

C++ Вычислить максимальный по модулю элемент массива
C++ Вычислить максимальный по модулю элемент массива
C++ Максимальный по модулю элемент массива
C++ Вычислить максимальный по модулю элемент массива
C++ Вычислить максимальный по модулю элемент массива
Вычислить максимальный по модулю элемент массива C++
Шаблоны. В одномерном массиве вычислить максимальный по модулю элемент массива. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.11.2011, 19:44     Вычислить максимальный по модулю элемент массива #2
Цитата Сообщение от dlinniy_miron Посмотреть сообщение
под буквой а, более или менее получилось сделать, но вот остальные два даже в голову не приходит, как должна выглядеть программа.
ну Вы покажите что получилось под буквой а, остальное Вам может быть помогут.
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
07.11.2011, 19:49  [ТС]     Вычислить максимальный по модулю элемент массива #3
ну на экране появлялся массив и ниже строка "nomer elementa = (и тут было число максимального по модулю элемента массива)"
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
07.11.2011, 19:51     Вычислить максимальный по модулю элемент массива #4
Цитата Сообщение от dlinniy_miron Посмотреть сообщение
б)сумму элементов массива расположенных между первым и вторым положительными элементами.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main()
{
    int mas[10], i, sum = 0, count = 0;
    for(i = 0; i < 10; i++) {
        cout << "mas[" << i << "] = ";
        cin >> mas[i];
    }
    for(i = 0; i < 10; i++) {
        if (mas[i] >= 0) 
            i++;
            while (mas[i] < 0) {
                sum += mas[i];
                i++;
            }
 
    }
        cout << "sum = " << sum << endl;
    return 0;
}
вроде работает.Не проверял все случаи, при каком-то не вычислилась сумма, хотя может глюк.
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.11.2011, 19:51     Вычислить максимальный по модулю элемент массива #5
dlinniy_miron, а код покажете?
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
07.11.2011, 20:09     Вычислить максимальный по модулю элемент массива #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
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    short int first=7,second=7,max,temp,i, array1[10];
    for(i=0;i<10;i++)//Заполняем массив элементами
        array1[i]=rand()%10-5;
    for(i=0;i<10;i++)
        cout<<endl<<array1[i];
 
//Ищем максимальный элемент по модулю
    if(array1[0]>0)
    max=array1[0];
    else max=-array1[0];
 
 
 
    for(i=1;i<10;i++)
    {
    if(array1[i]>=0)
        temp=array1[i];
    else
        temp=-array1[i];
    
    if(max<temp)
        max=temp;
 
    
    }
    cout<<endl<<"Maximum ABS element : "<<max;
    i=-1;   
    //Пункт Б : ищем 2 положительные числа
    //ищем первый положительный элемент
    do{i++;
    if(array1[i]>0)
    first=i;// Заносим номер первого положительного элемента
    }while((array1[i]<=0)&&(i<10));//проверяем, не все ли значения массива перебрали?
    
    do{
        i++;
    if(array1[i]>0)
    second=i;// Заносим номер второго положительного элемента
    }while((array1[i]<=0)&&(i<10));//проверяем, не все ли значения массива перебрали?
    
    if((second==7)||(first==7) )//Если исходные значения чисел first и second не изменились,
        // (а мы их проинициализировали вначале , как 7)то выводим сообщение, что нет двух положительных элементов
    cout<<"We not have two positive elements"<<endl;
    else{
        
    //в противном случае, считаем сумму между двумя этими числами и сохраняем её в переменную max
        max=0;
        for(i=first;i<=second;i++)
        max=max+array1[i];
    cout<<endl<<"SUMMA "<<max;
    
    }
    
    cin>>i;//Вводим любое число и жмём ENTER , чтобы закрыть прогу
    return 0;
}
Добавлено через 14 минут
Извени, забыл про последний пункт, кстати, rand()% всегда одни и те же числа выдаёт, если что, то введи свои
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
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    short int first=7,second=7,max,temp,i, array1[10];
    for(i=0;i<10;i++)//Заполняем массив элементами
        array1[i]=rand()%10-5;
    for(i=0;i<10;i++)
        cout<<endl<<array1[i];
 
//Ищем максимальный элемент по модулю
    if(array1[0]>0)
    max=array1[0];
    else max=-array1[0];
 
 
 
    for(i=1;i<10;i++)
    {
    if(array1[i]>=0)
        temp=array1[i];
    else
        temp=-array1[i];
    
    if(max<temp)
        max=temp;
 
    
    }
    cout<<endl<<"Maximum ABS element : "<<max;
    i=-1;   
    //Пункт Б : ищем 2 положительные числа
    //ищем первый положительный элемент
    do{i++;
    if(array1[i]>0)
    first=i;// Заносим номер первого положительного элемента
    }while((array1[i]<=0)&&(i<10));//проверяем, не все ли значения массива перебрали?
    
    do{
        i++;
    if(array1[i]>0)
    second=i;// Заносим номер второго положительного элемента
    }while((array1[i]<=0)&&(i<10));//проверяем, не все ли значения массива перебрали?
    
    if((second==7)||(first==7) )//Если исходные значения чисел first и second не изменились,
        // (а мы их проинициализировали вначале , как 7)то выводим сообщение, что нет двух положительных элементов
    cout<<"We not have two positive elements"<<endl;
    else{
        
    //в противном случае, считаем сумму между двумя этими числами и сохраняем её в переменную max
        max=0;
        for(i=first;i<=second;i++)
        max=max+array1[i];
    cout<<endl<<"SUMMA "<<max;
    
    }
 
    max=10;//если встретится 0 , то его выводить в массиве начинать с этого элемента
    //затем упорядочиваем так, чтобы нули были последними элементами
    for(i=0;i<10;i++){
    if(array1[i]==0)
    {// просто обмениваем с последними элементами элементами, 
    temp=array1[i];
    array1[i]=array1[max];
    array1[max]=temp;
    max--;// для следующего элемента, который будет иметь на -1 индекс массива ,если встретится ноль
    
    }
    
    }
    // и выводим получившийся массив
    for(i=0;i<10;i++)
        cout<<endl<<array1[i];
 
    
    cin>>i;//Вводим любое число и жмём ENTER , чтобы закрыть прогу
    return 0;
}
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
07.11.2011, 20:11  [ТС]     Вычислить максимальный по модулю элемент массива #7
Цитата Сообщение от DenCHS200 Посмотреть сообщение
Такая прога сойдёт?
парочка вопросов, если можно))
1. _TCHAR* - это просто переменную ввели я так понимаю?
2. first=7,second=7 - для чего мы устанавливаем эти константы?

Добавлено через 1 минуту
Цитата Сообщение от valeriikozlov Посмотреть сообщение
dlinniy_miron, а код покажете?
код к сожалению на другом компьютере
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
07.11.2011, 20:16     Вычислить максимальный по модулю элемент массива #8
dlinniy_miron, тогда обрати на мой пример внимание, он попроще.
_TCHAR* это тип для переменной
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
07.11.2011, 20:20     Вычислить максимальный по модулю элемент массива #9
1) вместо int _tmain(int argc, _TCHAR* argv[]) можешь просто написать int main(), это С++ у меня по-умолчанию пишет, можно стереть 2)а first=7 и second=7 это я написал, чтобы когда мы проверяли , ввели ли мы другие номера массива в эти переменные, вот только 7 испрвавь на числа больше 9 или меньше 0, эот моя ошибка(Просто такие числа (меньше 0 или больше 9)не будут присвоены из цикла do{} while, так как у нас массив из 10 элементов от 0 до 9, а если число в диапазоне от 0 до 9 будет переменным first и second присвоено, то значит в цикле было найдено положительное число)

Добавлено через 4 минуты
Вот полностью рабочая прога, я в первой забыл про последний пункт, где нули вконце выводить в массиве

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
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    short int first=-1,second=-1,max,temp,i, array1[10];
    for(i=0;i<10;i++)//Заполняем массив элементами
        array1[i]=rand()%10-5;
    for(i=0;i<10;i++)
        cout<<endl<<array1[i];
 
//Ищем максимальный элемент по модулю
    if(array1[0]>0)
    max=array1[0];
    else max=-array1[0];
 
 
 
    for(i=1;i<10;i++)
    {
    if(array1[i]>=0)
        temp=array1[i];
    else
        temp=-array1[i];
    
    if(max<temp)
        max=temp;
 
    
    }
    cout<<endl<<"Maximum ABS element : "<<max;
    i=-1;   
    //Пункт Б : ищем 2 положительные числа
    //ищем первый положительный элемент
    do{i++;
    if(array1[i]>0)
    first=i;// Заносим номер первого положительного элемента
    }while((array1[i]<=0)&&(i<10));//проверяем, не все ли значения массива перебрали?
    
    do{
        i++;
    if(array1[i]>0)
    second=i;// Заносим номер второго положительного элемента
    }while((array1[i]<=0)&&(i<10));//проверяем, не все ли значения массива перебрали?
    
    if((second==7)||(first==7) )//Если исходные значения чисел first и second не изменились,
        // (а мы их проинициализировали вначале , как 7)то выводим сообщение, что нет двух положительных элементов
    cout<<"We not have two positive elements"<<endl;
    else{
        
    //в противном случае, считаем сумму между двумя этими числами и сохраняем её в переменную max
        max=0;
        for(i=first;i<=second;i++)
        max=max+array1[i];
    cout<<endl<<"SUMMA "<<max;
    
    }
 
    max=10;
    //затем упорядочиваем так, чтобы нули были последними элементами
    for(i=0;i<10;i++){
    if(array1[i]==0)
    {// просто обмениваем с последними элементами элементами, 
    temp=array1[i];
    array1[i]=array1[max];
    array1[max]=temp;
    max--;// для следующего элемента, который будет иметь на -1 индекс массива ,если встретится ноль
    
    }
    
    }
    // и выводим получившийся массив
    for(i=0;i<10;i++)
        cout<<endl<<array1[i];
 
    
    cin>>i;//Вводим любое число и жмём ENTER , чтобы закрыть прогу
    return 0;
}
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
07.11.2011, 20:23  [ТС]     Вычислить максимальный по модулю элемент массива #10
Цитата Сообщение от LostCoast Посмотреть сообщение
dlinniy_miron, тогда обрати на мой пример внимание, он попроще.
_TCHAR* это тип для переменной
я заметил что попроще, но интересно count = 0; зачем? Ведь в дальнейшем ты не используешь вроде нигде.


Извиняюсь за свои вопросы, просто программируем в досовском си)
LostCoast
82 / 82 / 5
Регистрация: 30.09.2011
Сообщений: 404
Записей в блоге: 6
07.11.2011, 20:25     Вычислить максимальный по модулю элемент массива #11
Цитата Сообщение от dlinniy_miron Посмотреть сообщение
но интересно count = 0; зачем?
сорри))) остался с прошлого варианта, можешь удалить)
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
07.11.2011, 20:27  [ТС]     Вычислить максимальный по модулю элемент массива #12
Цитата Сообщение от DenCHS200 Посмотреть сообщение
1) вместо int _tmain(int argc, _TCHAR* argv[]) можешь просто написать int main(), это С++ у меня по-умолчанию пишет, можно стереть 2)а first=7 и second=7 это я написал, чтобы когда мы проверяли , ввели ли мы другие номера массива в эти переменные, вот только 7 испрвавь на числа больше 9 или меньше 0, эот моя ошибка(Просто такие числа (меньше 0 или больше 9)не будут присвоены из цикла do{} while, так как у нас массив из 10 элементов от 0 до 9, а если число в диапазоне от 0 до 9 будет переменным first и second присвоено, то значит в цикле было найдено положительное число)
спасибо за помощь и за объяснение каждого пункта, под досовский я думаю легко отредактировать, так что сейчас попробую)

Добавлено через 1 минуту
Цитата Сообщение от LostCoast Посмотреть сообщение
сорри))) остался с прошлого варианта, можешь удалить)
хорошо=))
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
07.11.2011, 20:31     Вычислить максимальный по модулю элемент массива #13
Просто сохранить весь этот листинг в срр файл и в ДОсовском С++ запустить можно, чтоб не маяться
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
07.11.2011, 20:32  [ТС]     Вычислить максимальный по модулю элемент массива #14
Цитата Сообщение от DenCHS200 Посмотреть сообщение
Просто сохранить весь этот листинг в срр файл и в ДОсовском С++ запустить можно, чтоб не маяться
и что запустится? Мне кажется ошибку выдаст наверно
DenCHS200
32 / 32 / 1
Регистрация: 07.10.2011
Сообщений: 117
07.11.2011, 20:43     Вычислить максимальный по модулю элемент массива #15
Если синтаксис такой же, то не должен
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
07.11.2011, 20:48  [ТС]     Вычислить максимальный по модулю элемент массива #16
Цитата Сообщение от DenCHS200 Посмотреть сообщение
Если синтаксис такой же, то не должен
понятно)Спасибо)
Nursik77
273 / 233 / 21
Регистрация: 05.04.2011
Сообщений: 645
07.11.2011, 21:16     Вычислить максимальный по модулю элемент массива #17
Мой вариант:
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 <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 10
 
int main() {
    int i, first, second, sum, max, num1, num2;
    int a[N];
    srand(time(NULL));
    printf("Array: ");
    for(i = 0; i < N; i++) {
    a[i] = rand()%11-5;
    printf("%i ",a[i]);
    }
    /*---ГЌГ*õîæäåГ*ГЁГҐ ïåðâîãî ïîëîæèòåëüГ*îãî ýëåìåГ*ГІГ*---*/
    first = 0;
    for(i = 0; i < N; i++) 
    if(a[i] >= 0) {
    first = i;
    num1 = a[i]; break; }
    printf("\nIndex of 1-st positive element = %i", first+1);
    printf("\nThe value of 1-st pos. element = %i", num1);
    /*------------------------------------------------*/
    
    /*---ГЌГ*õîæäåГ*ГЁГҐ âòîðîãî ïîëîæèòåëüГ*îãî ýëåìåГ*ГІГ*---*/
    second = 0;
    for(i = first+1; i < N; i++) 
    if(a[i] >= 0) {
    second = i;
    num2 = a[i]; break; }
    printf("\nIndex of 2-nd positive element = %i", second+1);
    printf("\nThe value of 2-nd pos. element = %i", num2);
    /*------------------------------------------------*/
    
    /*----ÑóììГ* ìåæäó 1-ûì ГЁ 2-ûì ïîë. ýëåìåГ*ГІГ*ìè-----*/
    sum = 0;
    for( i = first; i <= second; i++)
    sum = sum + a[i];
    printf("\nSum of array between 1-st and 2-nd positive el-ts = %i", sum);
    
    /*--------ГЌГ*õîæäåГ*ГЁГҐ Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*îãî ГЇГ® ìîäóëüþ-----*/
    
    max = abs(a[i]);
    for(i = 0; i < N; i++)
    if(abs(a[i]) > max)
    max = abs(a[i]);
    printf("\n Max abs element = %i", max);
system("pause");
}
Ну и
другой вариант
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
#include <stdlib.h>
#include <stdio.h>
#define N 10
 
int main() {
    int i, first, second, sum;
    int a[N]={-1,-2,-3,4,-5,-5,4,-3,-2,-1};
    printf("Array: ");
    for(i = 0; i < N; i++)
    printf("%i ",a[i]);
 
    /*---ГЌГ*õîæäåГ*ГЁГҐ ïåðâîãî ïîëîæèòåëüГ*îãî ýëåìåГ*ГІГ*---*/
    first = 0;
    for(i = 0; i < N; i++) 
    if(a[i] > 0) {
    first = i; break; }
    printf("\n1-st positive element = %i", first);
    /*------------------------------------------------*/
    
    /*---ГЌГ*õîæäåГ*ГЁГҐ âòîðîãî ïîëîæèòåëüГ*îãî ýëåìåГ*ГІГ*---*/
    second = 0;
    for(i = first+1; i < N; i++) 
    if(a[i] > 0) {
    second = i; break; }
    printf("\n2-nd positive element = %i", second);
    /*------------------------------------------------*/
    
    /*----ÑóììГ* ìåæäó 1-ûì ГЁ 2-ûì ïîë. ýëåìåГ*ГІГ*ìè-----*/
    sum = 0;
    for( i = first; i <= second; i++)
    sum = sum + a[i];
    printf("\nSum of array between 1-st and 2-nd positive el-ts = %i", sum);
system("pause");
}
в котором массив заполнен ручками, для ясности.
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
07.11.2011, 21:25     Вычислить максимальный по модулю элемент массива #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
STL:
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
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional>
#include <numeric>
#include <cstdlib>
#include <ctime>
 
template <int min, int max>
struct RandomInteger {
  int operator()() {
    return rand() % (max - min + 1) + min;
  }
};
 
std::ostream &operator<<(std::ostream &stream,
  const std::vector<int> &array) {
  for (std::vector<int>::const_iterator i = array.begin();
    i != array.end(); ++i)
    stream << (*i) << (((i + 1) != array.end()) ? ", " : "");
  return stream;
}
 
struct CompareByAbs {
  template <class ValueType>
  bool operator()(ValueType a, ValueType b) {
    return (abs(a) < abs(b));
  }
};
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
 
  size_t arraySize = 18 + rand() % 5;
  std::vector<int> array(arraySize);
 
  std::generate(array.begin(), array.end(), RandomInteger<-5, 5>());
 
  std::cout << array << std::endl;
 
  std::cout << "Maximum by abs value is " << *(std::max_element(array.begin(),
    array.end(), CompareByAbs())) << std::endl;
 
  std::vector<int>::iterator firstPositive = std::find_if(array.begin(),
    array.end(), std::bind2nd(std::greater<int>(), 0));
 
  if (firstPositive != array.end()) {
    std::vector<int>::iterator secondPositive = std::find_if(firstPositive + 1,
      array.end(), std::bind2nd(std::greater<int>(), 0));
    if (secondPositive != array.end()) {
      int sum = std::accumulate(firstPositive + 1, secondPositive, 0);
      std::cout << "Sum between two first positive elements [" <<
        *firstPositive << ":" << *secondPositive << "] is " <<
        sum << std::endl;
    } else {
      std::cout << "No second positive in array." << std::endl;
    }
  } else {
    std::cout << "No positives in array." << std::endl;
  }
 
  std::partition(array.begin(), array.end(), 
    std::not1(std::bind2nd(std::equal_to<int>(), 0)));
 
  std::cout << "Zeroes last: " << std::endl << array << std::endl;
 
  return 0;
}
dlinniy_miron
0 / 0 / 0
Регистрация: 07.11.2011
Сообщений: 8
08.11.2011, 04:45  [ТС]     Вычислить максимальный по модулю элемент массива #19
если честно, то как то тяжело
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2011, 02:06     Вычислить максимальный по модулю элемент массива
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
10.11.2011, 02:06     Вычислить максимальный по модулю элемент массива #20
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Так легче?
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>
#include <cstdlib>
#include <ctime>
 
void fillRandom(int *begin, int *end, int min, int max) {
  while (begin != end)
    *begin++ = rand() % (max - min + 1) + min;
}
 
void printArray(int *begin, int *end) {
  for (; begin != end; ++begin)
    std::cout << (*begin) << ((begin + 1 != end)? ", " : "");
  std::cout << std::endl;
}
 
int *getMaxAbs(int *begin, int *end) {
  int *max = begin;
  for (; begin != end; ++begin)
    if (abs(*begin) > abs(*max))
      max = begin;
  return max;
}
 
int *getFirstPositive(int *begin, int *end) {
  while (begin != end && *begin <= 0)
    ++begin;
  return begin;
}
 
int getSum(int *begin, int *end) {
  int result = 0;
  while (begin != end)
    result += *begin++;
  return result;
}
 
void moveZeroesToEnd(int *begin, int *end) {
  while (true) {
    while (begin != end && *begin != 0) ++begin;
    if (begin == end--) break;
    while (begin != end && *end == 0) --end;
    if (begin == end) break;
    std::swap(*begin++, *end);
  }
}
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  size_t arraySize = 10;
  int *array = new int[arraySize];
  fillRandom(array, array + arraySize, -5, 5);
  printArray(array, array + arraySize);
  
  int *maximum = getMaxAbs(array, array + arraySize);
  std::cout << "First max by abs: " << *maximum << " at index " <<
    maximum - array << "." << std::endl;
 
  int *firstPositive = getFirstPositive(array, array + arraySize);
  if (firstPositive != array + arraySize) {
    int *secondPositive = getFirstPositive(firstPositive + 1, array + arraySize);
    if (secondPositive != array + arraySize) {
      std::cout << "Fist positive: " << *firstPositive << std::endl <<
        "Second positive: " << *secondPositive << std::endl <<
        "Sum between " << getSum(firstPositive + 1, secondPositive) <<
        std::endl;
    } else {
      std::cout << "No second positive value in array." << std::endl;
    }
  } else {
    std::cout << "No positive values in array." << std::endl;
  }
 
  std::cout << "Zeroes last:" << std::endl;
  moveZeroesToEnd(array, array + arraySize);
  printArray(array, array + arraySize);
  return 0;
}
Yandex
Объявления
10.11.2011, 02:06     Вычислить максимальный по модулю элемент массива
Ответ Создать тему
Опции темы

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