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

Удалить элементы из массива - C++

Восстановить пароль Регистрация
 
Alexey M
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 15
07.12.2013, 16:49     Удалить элементы из массива #1
Задание: Из массива удалить элементы, стоящие после максимального и имеющие значение меньше среднего арифметического всех элементов массива. Пример: из массива A[5]: 8 6 9 4 5 должен получиться массив A[3]: 8 6 9 (среднее арифметическое четных элементов =(8+6+9+4+5)/5=6.4)

Написал код, но выдаёт какие-то непонятные мне ошибки:
error LNK2001: неразрешенный внешний символ ""int * a" (?a@@3PAHA)"
fatal error LNK1120: 1 неразрешенных внешних элементов

Может кто то помочь исправить? также ещё не совсем уверен в полной правильности составления программы, особенно с выводом массива на экран.

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 "stdafx.h"
 
int const n=8;
int a[];
int mesto_max;
int srednee_arifm;
    void entermassive(int a[], int n);
    void find_max_elem(int a[], int n);
    void find_srendee_arifm(int a[], int n);
    void del_elem(int a[], int n);
    void printmassive(int a[], int n);
 
    void entermassive(int a[], int n)
    {
        int i;
        printf("enter a:\n");
        for(i=0;i<n;i++)
            scanf_s("%d",&a[i]);
    }
    void find_max_elem(int a[], int n)
    {
        int i;
        int max;
        max=a[0];
        for(i=0;i<n;i++)
        {
            if(a[i]>max)
                max=a[i];
                mesto_max=i;
        }
    }
    void find_srendee_arifm(int a[], int n)
    {
        int i;
        int sum;
        for(i=0;i<n;i++)
        sum+=a[i];
        srednee_arifm=sum/n;
    }
    void del_elem(int a[], int n)
    {
        int i;
        for(i=0;i<n;i++)
            {
                if(i<mesto_max)
                a[i]=a[i];
                else
                {
                    if(a[i]<srednee_arifm)
                        a[i]=a[i+1];
                }
            }
    }
        void printmassive(int a[], int n)
        {
            int i;
            for(i=0;i<n;i++)
                printf("%d",a[i]);
        }
 
int main()
{ 
    entermassive(a,n);
    find_max_elem(a,n);
    find_srendee_arifm(a,n);
    del_elem(a,n);
    printmassive(a,n);
}
Добавлено через 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
#include "stdafx.h"
 
int const n=8;
int a[n];
int mesto_max;
int srednee_arifm;
    void entermassive(int a[], int n);
    void find_max_elem(int a[], int n);
    void find_srednee_arifm(int a[], int n);
    void del_elem(int a[], int n);
    void printmassive(int a[], int n);
 
    void entermassive(int a[], int n)
    {
        int i;
        printf("enter a:\n");
        for(i=0;i<n;i++)
            scanf_s("%d",&a[i]);
    }
    void find_max_elem(int a[], int n)
    {
        int i;
        int max;
        max=a[0];
        for(i=0;i<n;i++)
        {
            if(a[i]>max)
                max=a[i];
                mesto_max=i;
        }
    }
    void find_srednee_arifm(int a[], int n)
    {
        int i;
        int sum;
        for(i=0;i<n;i++)
        sum+=a[i];
        srednee_arifm=sum/n;
    }
    void del_elem(int a[], int n)
    {
        int i;
        for(i=0;i<n;i++)
            {
                if(i<mesto_max)
                a[i]=a[i];
                else
                {
                    if(a[i]<srednee_arifm)
                        a[i]=a[i+1];
                }
            }
    }
        void printmassive(int a[], int n)
        {
            int i;
            for(i=0;i<n;i++)
                printf("%d",a[i]);
        }
 
int main()
{ 
    entermassive(a,n);
    find_max_elem(a,n);
    find_srednee_arifm(a,n);
    del_elem(a,n);
    printmassive(a,n);
}
избавился от этих ошибок, теперь выскакивает Run time. может кто то на ошибку указать?(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2013, 16:49     Удалить элементы из массива
Посмотрите здесь:

C++ Удалить из массива все элементы встречающиеся менее 3-х раз и вывести размер полученного массива и его содержимое.
C++ если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален
Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными номерами, во второ C++
C++ Удалить из массива все элементы, которые меньше среднеарифметического значения всех элементов исходного массива
1. Написать функцию проверяющую есть ли отрицательные элементы в указанной строке двумерного массива. Удалить из массива все строки с отрицательными э C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
07.12.2013, 17:52     Удалить элементы из массива #2
Я вообще не понимаю смысла этой строки:
C++
1
a[i]=a[i];
???
Alexey M
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 15
07.12.2013, 18:20  [ТС]     Удалить элементы из массива #3
Цитата Сообщение от katsidelin Посмотреть сообщение
Я вообще не понимаю смысла этой строки:
C++
1
a[i]=a[i];
???
все элементы массива сохраняют значения пока не дойдут до максимального. просто не знаю как это сделать по другому, с синтаксисом проблемы
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
07.12.2013, 18:28     Удалить элементы из массива #4
если значения сохраняются, то шаг
Цитата Сообщение от Alexey M Посмотреть сообщение
a[i]=a[i];
надо пропустить.
В смысле, оставить пустую строку и двигать дальше.
Alexey M
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 15
07.12.2013, 18:39  [ТС]     Удалить элементы из массива #5
Цитата Сообщение от katsidelin Посмотреть сообщение
если значения сохраняются, то шаг надо пропустить.
В смысле, оставить пустую строку и двигать дальше.
здесь переделал этот цикл, но теперь у меня вообще там каша. помимо этого цикла у меня ещё и функции вроде значения не передают.

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 "stdafx.h"
#include <math.h>
 
int const n=8;
int a[n];
int mesto_max;
float srednee_arifm;
int k=n;
    int entermassive(int a[], int n);
    void find_max_elem(int a[], int n);
    void find_srednee_arifm(int a[], int n);
    int del_elem(int a[], int n);
    void printmassive(int a[], int k);
 
    int entermassive(int a[], int n)
    {
        int i;
        printf("enter a:\n");
        for(i=0;i<n;i++)
            scanf_s("%d",&a[i]);
    }
    void find_max_elem(int a[], int n)
    {
        int i;
        int max;
        max=a[0];
        for(i=0;i<n;i++)
        {
            if(a[i]>max)
                max=a[i];
                mesto_max=i;
        }
    }
    void find_srednee_arifm(int a[], int n)
    {
        int i;
        int sum=0;
        for(i=0;i<n;i++)
        sum+=a[i];
        srednee_arifm=sum/n;
    }
    int del_elem(int a[], int n)
    {
        int i;
        for(i=0;i<n;i++)
            {
                if(i>=mesto_max)
                {
                    if(a[i]<srednee_arifm)
                        a[i]=a[i+1];
                    k=k--;
                }
            }
        return(a,k);
    }
        void printmassive(int a[], int k)
        {
            int i;
            for(i=0;i<k;i++)
                printf("%d",a[i]);
        }
 
int main()
{ 
    entermassive(a,n);
    find_max_elem(a,n);
    find_srednee_arifm(a,n);
    del_elem(a,n);
    printmassive(a,k);
    return(0);
}
среднее арифметическое не передаётся потому что функция типа int, а переменная float. как это исправить я не представляю
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
07.12.2013, 18:54     Удалить элементы из массива #6
float sum=0.0;

Если не поможет, то в добавок

float a[n];

И вообще, может мне кажется, но в прототипах функций лучше использовать ссылки (&)....
У меня не хватает либ в компиляторе, и Ваш код не полностью поддерживается, и не компилируется....
Alexey M
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 15
07.12.2013, 19:00  [ТС]     Удалить элементы из массива #7
Цитата Сообщение от katsidelin Посмотреть сообщение
float sum=0.0;

Если не поможет, то в добавок

float a[n];

И вообще, может мне кажется, но в прототипах функций лучше использовать ссылки (&)....
У меня не хватает либ в компиляторе, и Ваш код не полностью поддерживается, и не компилируется....
выскакивает ошибка компиляции когда делаю ссылку, возможно я что то не так делаю.
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
07.12.2013, 19:25     Удалить элементы из массива #8
Фиг с ссылками.
Ваш компилятор явно не gcc, который не любит глобальные переменные.

Программа работает?
Если нет, то вывод из консоли сюда:
Для Виндовс (Дос, ОС/2, Реактос): .\proga.exe > 1.txt
Для всего остального: ./proga > 1.txt
Alexey M
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 15
07.12.2013, 20:08  [ТС]     Удалить элементы из массива #9
если я вас правильно понял, то вот
Вложения
Тип файла: rar Лаба 3 С4.rar (8.0 Кб, 7 просмотров)
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
07.12.2013, 20:43     Удалить элементы из массива #10
Не. У меня Linux.
В wine (эмуляторе) не хватает либ.
Ваша программа запускается с ошибками.
Вывод с консоли - это копия того, что программа выводит на экран командной строки (программы cmd.exe).
Его можно перенаправить с помощью оператора > в файл. А сам файл открыть, выделить данные, скопировать и выложить код вывода консоли сюда.
Alexey M
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 15
07.12.2013, 20:54  [ТС]     Удалить элементы из массива #11
Цитата Сообщение от katsidelin Посмотреть сообщение
Не. У меня Linux.
В wine (эмуляторе) не хватает либ.
Ваша программа запускается с ошибками.
Вывод с консоли - это копия того, что программа выводит на экран командной строки (программы cmd.exe).
Его можно перенаправить с помощью оператора > в файл. А сам файл открыть, выделить данные, скопировать и выложить код вывода консоли сюда.
попробую переписать код программы полностью используя ссылки. Никак теорию на практике применить не могу, постоянно какие то ошибки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 04:08     Удалить элементы из массива
Еще ссылки по теме:

C++ Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции
C++ Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы
C++ Удалить из массива все элементы, расположенные перед максимальным элементом массива

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

Или воспользуйтесь поиском по форуму:
katsidelin
 Аватар для katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
08.12.2013, 04:08     Удалить элементы из массива #12
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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1031918.html[/url]
 
#include <iostream>
 
using namespace std;
 
// **********************************
 
int main(void);
float fnSrAr(float, const int, int []);
void fn_ShowOldArray(const int, int []);
float fn_FindMax(int, int [], float, int&);
 
// **********************************
 
int main(void)
{
    const int ASize = 6;  // Длина массива.
    int A[ASize] = {8,1,6,9,4,5}; // Исходный массив.
    int *B = new int;   // Результат.
    int szCount=0;  // Счётчик числа элементов нового массива.
 
    float SrAr = 0.0;   // Переменная для среднеарифметического значения в старом массиве.
    float OldMax = 0.0; // Переменная для поиска максимального значения в старом массиве.
    int nMax = 0;       // Номер максимального элемента в старом массиве.
 
    cout << "Старый массив: ";
    fn_ShowOldArray(ASize, A);
    cout << endl;
 
    SrAr = fnSrAr(SrAr, ASize, A);
    cout << "Средняя арифметическая старого массива = " << SrAr << endl;   // Для отладки.
 
    OldMax = fn_FindMax(ASize, A, OldMax, nMax);
    cout << "Максимальное значение старого массива = " << OldMax << endl;
    cout << "Номер в массиве - " << nMax << endl;
 
    cout << "Новый массив: ";
    for ( int x = 0; x < ASize; x++)
    {
        if (x<nMax)     // До максимального значения.
        {
 //           cout << "до максимального элемента "; // для отладки.
            B[szCount] = A[x];
            cout << B[szCount] << ' '; // Выводим на экран новый массив.
            szCount++;
        }
        else if ( A[x] > SrAr )
        {
 //           cout << "после максимального элемента "; // для отладки.
            B[szCount] = A[x];  // Надо сравнить со среднеарифметическим число из старого массива.
 
            cout << B[szCount] << ' '; // Выводим на экран новый массив.
 
            szCount++;  // Приращаем значение индекса искомого массива.
        };
    };
    cout << endl;
 
    return 0;
}
 
// **********************************
 
float fnSrAr(float SrAr, const int ASize, int A[])
{
    for (int x = 0; x <= (ASize-1); x++)
    {
        SrAr += A[x];
//        cout << "fnSrAr(): SrAr = " << SrAr << endl;    // Для отладки.
    };
    SrAr /= ASize;
 
    return SrAr;
}
 
// **********************************
 
void fn_ShowOldArray(const int ASize, int A[])
{
    for ( int x = 0; x <= (ASize - 1); x++ )
    {
        cout << A[x] << ' ';
    }
}
 
// **********************************
 
float fn_FindMax(int szA, int A[], float Max, int &n)
{
    for (int x = 0; x <= (szA - 1); x++)
    {
        if ( A[x] > Max )
        {
            Max = A[x]; // поиск максимального значения.
            n=x; // номер максимального элемента.
        };
//        cout << "fn_FindMax(): Max = "<< Max << '\t'; // Для отладки.
    };
 
    return Max;
}
Добавлено через 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
 // [url]http://www.cyberforum.ru/cpp-beginners/thread1031918.html[/url]
 
#include <iostream>
 
using namespace std;
 
// **********************************
 
int main(void);
float fnSrAr(float, const int, int []);
void fn_ShowOldArray(const int, int []);
float fn_FindMax(int, int [], float, int&);
 
// **********************************
 
int main(void)
{
    const int ASize = 7;  // Длина массива.
    int A[ASize] = {8,1,6,9,4,5,13}; // Исходный массив.
    int *B = new int;   // Результат.
    int szCount=0;  // Счётчик числа элементов нового массива.
 
    float SrAr = 0.0;   // Переменная для среднеарифметического значения в старом массиве.
    float OldMax = 0.0; // Переменная для поиска максимального значения в старом массиве.
    int nMax = 0;       // Номер максимального элемента в старом массиве.
 
    cout << "Старый массив: ";
    fn_ShowOldArray(ASize, A);
    cout << endl;
 
    SrAr = fnSrAr(SrAr, ASize, A);
    cout << "Средняя арифметическая старого массива = " << SrAr << endl;   // Для отладки.
 
    OldMax = fn_FindMax(ASize, A, OldMax, nMax);
    cout << "Максимальное значение старого массива = " << OldMax << endl;
    cout << "Номер в массиве - " << nMax << endl;
 
    cout << "Новый массив: ";
    for ( int x = 0; x < ASize; x++)
    {
        if (x<nMax)     // До максимального значения.
        {
 //           cout << "до максимального элемента "; // для отладки.
            B[szCount] = A[x];
            cout << B[szCount] << ' '; // Выводим на экран новый массив.
            szCount++;
        }
        else if ( A[x] > SrAr )
        {
 //           cout << "после максимального элемента "; // для отладки.
            B[szCount] = A[x];  // Надо сравнить со среднеарифметическим число из старого массива.
 
            cout << B[szCount] << ' '; // Выводим на экран новый массив.
 
            szCount++;  // Приращаем значение индекса искомого массива.
        };
    };
    cout << endl;
 
    return 0;
}
 
// **********************************
 
float fnSrAr(float SrAr, const int ASize, int A[])
{
    for (int x = 0; x <= (ASize-1); x++)
    {
        SrAr += A[x];
//        cout << "fnSrAr(): SrAr = " << SrAr << endl;    // Для отладки.
    };
    SrAr /= ASize;
 
    return SrAr;
}
 
// **********************************
 
void fn_ShowOldArray(const int ASize, int A[])
{
    for ( int x = 0; x <= (ASize - 1); x++ )
    {
        cout << A[x] << ' ';
    }
}
 
// **********************************
 
float fn_FindMax(int szA, int A[], float Max, int &n)
{
    for (int x = 0; x <= (szA - 1); x++)
    {
        if ( A[x] > Max )
        {
            Max = A[x]; // поиск максимального значения.
            n=x; // номер максимального элемента.
        };
//        cout << "fn_FindMax(): Max = "<< Max << '\t'; // Для отладки.
    };
 
    return Max;
}
Yandex
Объявления
08.12.2013, 04:08     Удалить элементы из массива
Ответ Создать тему
Опции темы

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