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

Одномерный массив - C++

Восстановить пароль Регистрация
 
_pw
0 / 0 / 0
Регистрация: 29.12.2009
Сообщений: 7
29.12.2009, 16:33     Одномерный массив #1
Приветствую всех, товарищи программисты, сессия на носу, не могу получить допуск к экзамену из-за одной оставшейся лабораторной работы. Пытался решить (попытки будут ниже), но так и не довел до ума.
основная проблема в том, что наш преподаватель помешан на оптимизации кода.
Собственно само задание:
В массиве X определить количество элементов меньших среднего арифметического значения всех элементов массива. Не упорядочивая массив удалить из него элементы , расположенные между максимальным и минимальным.
Это моя попытка начать что-либо сделать с этой задачей. Понимаю, что может быть бред полнейший тут.
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
// Task7
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <iomanip>
#include <ctime>
using namespace std;
#define n 100
int main()
{
    int summ,min,max;
    long a[n];
    int i,k=0, count=0;
    srand(time(0));
    for (i=0; i<n; i++)
    {
        a[i]=rand()-rand();
    }
        for (i=0;i<n;i++)
        {
            summ+=a[i];
            
        }
    sr_zna4=summ/n;
    for (i=0;i<n;i++)
    {
        if (a[i]<sr_zna4) count++;
    }
    cout<<"Kolichestvo men'she srednego is "<<count<<"\n";
    min=a[0];
    max=a[0];
    for (i=0;i<n;i++)
    {
        if (a[i]<min)
            min=a[i];
    }
    for (i=0;i<n;i++)
    {
        if (a[i]>max)
            max=a[i];
    }
Надеюсь на вашу помощь
Среда программирования - Visual Studio C++ Express Edition
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2009, 16:33     Одномерный массив
Посмотрите здесь:

C++ Дан одномерный массив, состоящий из N вещественных элементов. 4.1. Заполнить массив случайными числами. 4.2. Найти минимальный положительный элемент.
Дан двумерный массив размерностью Н. сформировать одномерный массив из элементов заданного массива расположенных над главной диагональю. C++
Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. C++
Массив: Построить из динамического одномерный массив,каждый элемент, которого равен сумме элементов одной строки исходной матрицы. C++
C++ Двумерный массив. Сформировать одномерный массив, каждый элемент которого равен первому четному элементу соответствующего столбца
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
breeve
 Аватар для breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
29.12.2009, 17:20     Одномерный массив #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
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
#include <iostream>
#include <cstdlib>
using namespace std;
#define n 100
int main()
{
        int summ = 0, a[n];
        int count=0;
        srand(time(0));
        for (int i=0; i<n; i++)
        {
            a[i]=(rand()%100)-(rand()%100);
            summ+=a[i];          
        }
        int sr=summ/n;
        cout << "sr: " <<sr<<endl;
        
        for (int i=0;i<n;i++)
        {
                if (a[i]<sr) count++;
        }
        
        cout<<"Kolichestvo men'she srednego is "<<count<<"\n";
        int min=0, max=0;
        
        int save_min = 0;
        int save_max = 0;
        for (int i=0;i<n;i++)
        {
             cout << a[i] << " ";
              if (min>a[i])
                {
                        min=a[i];
                        save_min = i;
                }
                if (max<a[i]){
                        save_max = i;
                        max=a[i];
                    }
            if((i+1)%10 == 0)
             cout << endl;
        }     
        cout <<endl <<endl;
        
 
        cout <<endl <<endl;
        
        if(save_min < save_max){
        for(int i = save_min+1; i < save_max; i++)
        a[i] = 0;
        }
        else{
        for(int i = save_max+1; i < save_min; i++)
        a[i] = 0;
        }
        
        
        for (int i=0;i<n;i++)
        {
            cout << a[i] << " ";
            if((i+1)%10 == 0)
             cout << endl;
        }
        
        
        return 0;
}
Не знаю как насчет оптимизации, но работает вроде нормально..
_pw
0 / 0 / 0
Регистрация: 29.12.2009
Сообщений: 7
29.12.2009, 17:34  [ТС]     Одномерный массив #3
Спасибо, однако, видимо, или я плохо объяснил (не уточнил), или.. В общем надо лишь количество элементов меньше среднего вывести. Сами эти элементы не нужны )
http://foto.golden.ru//data/users/54...403cd2a9.1.jpg
всё, доперло Затормозил поначалу.
Только вот.. Тут просто происходил обнуление элементов между максимальынм и минимальным, а надо создать новый массив, в котором будут все элементы, кроме тех, которые были в изначальном массиве между минимальным и максимальным (извиняюсь, что до этого не уточнил)
breeve
 Аватар для breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
29.12.2009, 18:49     Одномерный массив #4
Ну так во второй массив просто пишешь элементы из первого которые не равны нулю)
_pw
0 / 0 / 0
Регистрация: 29.12.2009
Сообщений: 7
29.12.2009, 18:50  [ТС]     Одномерный массив #5
Цитата Сообщение от breeve Посмотреть сообщение
Ну так во второй массив просто пишешь элементы из первого которые не равны нулю)
Идея понятна, как осуществить? Или в коде есть? Просто что-то не вижу..
breeve
 Аватар для breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
29.12.2009, 19:06     Одномерный массив #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
#include <iostream>
#include <cstdlib>
using namespace std;
#define n 100
int main()
{
        int summ = 0, a[n];
        int count=0;
        srand(time(0));
        for (int i=0; i<n; i++)
        {
            a[i]=(rand()%100)-(rand()%100);
            summ+=a[i];          
        }
        int sr=summ/n;
        cout << "sr: " <<sr<<endl;
        
        for (int i=0;i<n;i++)
        {
                if (a[i]<sr) count++;
        }
        
        cout<<"Kolichestvo men'she srednego is "<<count<<"\n";
        int min=0, max=0;
        
        int save_min = 0;
        int save_max = 0;
        for (int i=0;i<n;i++)
        {
              if (min>a[i])
                {
                        min=a[i];
                        save_min = i;
                }
                if (max<a[i]){
                        save_max = i;
                        max=a[i];
                    }
        }     
        count = 0;
        
        if(save_min < save_max){
        for(int i = save_min+1; i < save_max; i++)
        a[i] = 0;
        count++;
        }
        else{
        for(int i = save_max+1; i < save_min; i++)
        a[i] = 0;
        count++;
        }
        
        int *b;
        int size = 40 - count;
        b = new int[size];
        for(int i = 0; i < size;i++)
        {
            if(a[i] != 0)
             b[i] = a[i];
            else i--;     
        }
        return 0;
}
_pw
0 / 0 / 0
Регистрация: 29.12.2009
Сообщений: 7
29.12.2009, 20:47  [ТС]     Одномерный массив #7
int size = 40 - count;
можно узнать, откуда взялась цифра 40?
breeve
 Аватар для breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
30.12.2009, 12:23     Одномерный массив #8
Цитата Сообщение от _pw Посмотреть сообщение
можно узнать, откуда взялась цифра 40?
Прошу прощения.. сам не знаю откуда эти 40 взялись.. Я там не один раз ошибся поэтому,
вот доработанный код пока
с выводом:
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
#include <iostream>
#include <cstdlib>
using namespace std;
#define n 100
int main()
{
        int summ = 0, a[n];
        int count=0;
        srand(time(0));
        for (int i=0; i<n; i++)
        {
            a[i]=(rand()%100)-(rand()%100);
            summ+=a[i];          
        }
        int sr=summ/n;
        cout << "sr: " <<sr<<endl;
        
        for (int i=0;i<n;i++)
        {
                if (a[i]<sr) count++;
        }
        
        cout<<"Kolichestvo men'she srednego is "<<count<<"\n";
        int min=0, max=0;
        
        int save_min = 0;
        int save_max = 0;
        for (int i=0;i<n;i++)
        {
             cout << a[i] << " ";
              if (min>a[i])
                {
                        min=a[i];
                        save_min = i;
                }
                if (max<a[i]){
                        save_max = i;
                        max=a[i];
                    }
            if((i+1)%10 == 0)
             cout << endl;
        }     
        count = 0;
        
        if(save_min < save_max)
{
        for(int i = save_min+1; i < save_max; i++)
    {
        a[i] = -150;
        count++;
    }
}
        else
{
        for(int i = save_max+1; i < save_min; i++)
    {
        a[i] = -150;
        count++;
    }
}
        int *b;
        int size = n - count;
        b = new int[size];
 
        for(int i=0, j=0; i < n;i++,j++)
        {
            if(a[i] != -150)
             b[j] = a[i];     
            else j--;
        }
        
        cout << endl <<endl;
        for (int i=0;i<size;i++)
        {
            cout << b[i] << " ";
            if((i+1)%10 == 0)
             cout << endl;
        }
        
        
        return 0;
}

Почему я приравниваю к -150 спросите вы. Поскольку в числах может быть 0 потому надо приравнивать к любому числу вне диапазона чисел в массиве..
Вот тоже самое
без вывода
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
#include <iostream>
#include <cstdlib>
using namespace std;
#define n 100
int main()
{
        int summ = 0, a[n];
        int count=0;
        srand(time(0));
        for (int i=0; i<n; i++)
        {
            a[i]=(rand()%100)-(rand()%100);
            summ+=a[i];          
        }
        int sr=summ/n;
        
        for (int i=0;i<n;i++)
        {
                if (a[i]<sr) count++;
        }
        
        cout<<"Kolichestvo men'she srednego is "<<count<<"\n";
        int min=0, max=0;
        
        int save_min = 0;
        int save_max = 0;
        for (int i=0;i<n;i++)
        {
              if (min>a[i])
                {
                        min=a[i];
                        save_min = i;
                }
                if (max<a[i]){
                        save_max = i;
                        max=a[i];
                    }
        }     
        count = 0;
        
        if(save_min < save_max)
{
        for(int i = save_min+1; i < save_max; i++)
    {
        a[i] = -150;
        count++;
    }
}
        else
{
        for(int i = save_max+1; i < save_min; i++)
    {
        a[i] = -150;
        count++;
    }
}
        int *b;
        int size = n - count;
        b = new int[size];
 
        for(int i=0, j=0; i < n;i++,j++)
        {
            if(a[i] != -150)
             b[j] = a[i];     
            else j--;
        } 
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2009, 13:04     Одномерный массив
Еще ссылки по теме:

Сформировать одномерный массив, удалить первый элемент с заданным значением, сдвинуть массив циклически C++
Как сложить массив чтоб получился одномерный массив? C++
C++ Дан двухмерный целочисленный массив . Составить одномерный массив В номеров строк этого массива

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

Или воспользуйтесь поиском по форуму:
_pw
0 / 0 / 0
Регистрация: 29.12.2009
Сообщений: 7
30.12.2009, 13:04  [ТС]     Одномерный массив #9
Спасибо, я два часа назад уже получил зачет, предварительно переделав)
Yandex
Объявления
30.12.2009, 13:04     Одномерный массив
Ответ Создать тему
Опции темы

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