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

Функция для нахождения среднего значения - C++

Восстановить пароль Регистрация
 
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 13:25     Функция для нахождения среднего значения #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
#include <iostream.h>
#include <conio.h>
float func(float *a[], int k)
{
    float min=a[0];
    float max=a[0];
    for(int i=0;i<k;i++)
    {
 
        if a[i]<min
        min=a[i];
 
        if a[i]>max
        max=a[i];
    }
    int k1=0;
    int k2=0;
    float sum1=0;
    float sum2=0;
    for(int i=0;i<k;i++)
    {
        if min==a[i]
        {
            k1=k1+1;
            sum1=sum1+a[i];
        }
        if max==a[i]
        {
            k2=k2+1;
            sum2=sum2+a[i];
        }
    }
    float srz;
    srz=(sum1+sum2)/(k1+k2);
    for(int i=0;i<k;i++)
    {
        if a[i]==max
        a[i]=srz;
    }
    return 0;
}
void main ()
{
    float mas[]={1.2, 2.6, 1.8, 4.7, 3.9, 6.6, 4.5, 8.3, 0.4, 9.3};
    int i;
    clrscr ();
    for (i=0;i<10;i++)
    {
        func(mas[i],10);
        cout<<mas[i]<<" ";
        }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 13:39     Функция для нахождения среднего значения #2
C++
1
2
3
4
5
for (i=0;i<10;i++)
        {
                func(mas[i],10);
                cout<<mas[i]<<" ";
        }
Вот это для чего? У тебя же функция работает со всем массивом, а ты передаешь ей только 1 элемент. Нужно так:
C++
1
func(mas,10);
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 13:43  [ТС]     Функция для нахождения среднего значения #3
Ну хорошо, это понятно... вот только ошибки у меня в функции, там полный бред как я понял, и справить сам не знаю как.
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 13:45     Функция для нахождения среднего значения #4
покажи ошибки
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 13:49  [ТС]     Функция для нахождения среднего значения #5
Compiling 1\LAB_4_1.CPP:
Error 1\LAB_4_1.CPP 5: Cannot convert 'float *' to 'float'
Error 1\LAB_4_1.CPP 6: Cannot convert 'float *' to 'float'
Error 1\LAB_4_1.CPP 10: Illegal use of floating point
Error 1\LAB_4_1.CPP 11: Illegal use of floating point
Error 1\LAB_4_1.CPP 13: Illegal use of floating point
Error 1\LAB_4_1.CPP 14: Illegal use of floating point
Error 1\LAB_4_1.CPP 20: Multiple declaration for 'i'
Error 1\LAB_4_1.CPP 22: If statement missing (
Error 1\LAB_4_1.CPP 37: If statement missing (
Warning 1\LAB_4_1.CPP 41: 'srz' is assigned a value that is never used
Error 1\LAB_4_1.CPP 43: Declaration syntax error
Error 1\LAB_4_1.CPP 54: Declaration missing ;
Error 1\LAB_4_1.CPP 54: Compound statement missing }
Warning 1\LAB_4_1.CPP 54: Function should return a value
Warning 1\LAB_4_1.CPP 54: 'max' is assigned a value that is never used
Warning 1\LAB_4_1.CPP 54: 'min' is assigned a value that is never used
Warning 1\LAB_4_1.CPP 54: Parameter 'a' is never used

Добавлено через 33 секунды
Со скобками понятно, а вот остально я не понимаю.
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 13:53     Функция для нахождения среднего значения #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
#include <iostream>
 
float func(float a[], int k)
{
        float min=a[0];
        float max=a[0];
        for(int i=0;i<k;i++)
        {
 
                if (a[i]<min)
                min=a[i];
 
                if (a[i]>max)
                max=a[i];
        }
        int k1=0;
        int k2=0;
        float sum1=0;
        float sum2=0;
        for(int i=0;i<k;i++)
        {
                if (min==a[i])
                {
                        k1=k1+1;
                        sum1=sum1+a[i];
                }
                if (max==a[i])
                {
                        k2=k2+1;
                        sum2=sum2+a[i];
                }
        }
        float srz;
        srz=(sum1+sum2)/(k1+k2);
        for(int i=0;i<k;i++)
        {
                if (a[i]==max)
                a[i]=srz;
        }
        return 0;
}
int main ()
{
        float mas[]={1.2, 2.6, 1.8, 4.7, 3.9, 6.6, 4.5, 8.3, 0.4, 9.3};
        func(mas,10);
        for (int i = 0; i < 10; i++)
            std::cout << mas[i] << " ";
}
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 13:54  [ТС]     Функция для нахождения среднего значения #7
Цитата Сообщение от to4kin Посмотреть сообщение
std::cout << mas[i] << " ";
что такое std?
Dobro10
 Аватар для Dobro10
1 / 1 / 0
Регистрация: 07.03.2010
Сообщений: 7
07.03.2010, 13:58     Функция для нахождения среднего значения #8
Цитата Сообщение от qxiton Посмотреть сообщение
что такое std?
изучаешь С++ и не знаешь что такое std? ну это вроде директива пространство имен, если я не ошибаюсь..
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 14:01     Функция для нахождения среднего значения #9
верно, можно было и так:

C++
1
2
3
using namespace std:
.....
cout << mas[i] << " ";
но можно и так

C++
1
std::cout << mas[i] << " ";
И небольшие замечания по коду:
1) нужно писать #include <iostream>, а не #include <iostream.h>
2) привыкай сразу давать переменным разумные имена
3) и почему функция типа float, когда она возвращает только int?
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
#include <iostream>
 
int func(float a[], int count)
{
    float min = a[0], max = a[0], sumMin = 0, sumMax = 0;
    int countMin = 0, countMax = 0;
 
    for(int i = 0; i < count; i++)
    {
        if (a[i] < min)
            min = a[i];
 
        if (a[i] > max)
            max=a[i];
    }
 
    for(int i = 0; i < count; i++)
    {
        if (min == a[i])
        {
            countMin++;
            sumMin += a[i];
        }
 
        if (max == a[i])
        {
            countMax++;
            sumMax += a[i];
        }
    }
 
    for(int i = 0; i < count; i++)
    {
        if (a[i] == max)
            a[i] = (sumMin + sumMax)/(countMin + countMax);
    }
 
    return 0;
}
int main ()
{
        float mas[] = {1.2, 2.6, 1.8, 4.7, 3.9, 6.6, 4.5, 8.3, 0.4, 9.3};
 
        func(mas,10);
 
        for (int i = 0; i < 10; i++)
            std::cout << mas[i] << " ";
}
Dobro10
 Аватар для Dobro10
1 / 1 / 0
Регистрация: 07.03.2010
Сообщений: 7
07.03.2010, 14:03     Функция для нахождения среднего значения #10
Цитата Сообщение от to4kin Посмотреть сообщение
верно, можно было и так:

C++
1
2
3
using namespace std:
.....
cout << mas[i] << " ";
но можно и так

C++
1
std::cout << mas[i] << " ";
Про второй вариант не знал надо запомнить.
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 14:09  [ТС]     Функция для нахождения среднего значения #11
У меня продолжает выдавать ошибки
Error 1\LAB_4_1.CPP 20: Multiple declaration for 'i'
Error 1\LAB_4_1.CPP 35: Multiple declaration for 'i'
Error 1\LAB_4_1.CPP 47: Type qualifier 'std' must be a struct or class name
Error 1\LAB_4_1.CPP 47: Statement missing ;
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 14:12     Функция для нахождения среднего значения #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
#include <iostream>
 
using namespace std;
 
int func(float a[], int count)
{
    float min = a[0], max = a[0], sumMin = 0, sumMax = 0;
    int countMin = 0, countMax = 0;
 
    for (int i = 0; i < count; i++)
    {
        if (a[i] < min)
            min = a[i];
 
        if (a[i] > max)
            max = a[i];
    }
 
    for (int i = 0; i < count; i++)
    {
        if (min == a[i])
        {
            countMin++;
            sumMin += a[i];
        }
 
        if (max == a[i])
        {
            countMax++;
            sumMax += a[i];
        }
    }
 
    for (int i = 0; i < count; i++)
    {
        if (a[i] == max)
            a[i] = (sumMin + sumMax)/(countMin + countMax);
    }
 
    return 0;
}
int main ()
{
        float mas[] = {1.2, 2.6, 1.8, 4.7, 3.9, 6.6, 4.5, 8.3, 0.4, 9.3};
 
        func(mas,10);
 
        for (int i = 0; i < 10; i++)
            cout << mas[i] << " ";
}
скомпилируй этот код. и еще вопрос в какой среде собираешь проект?
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 14:16  [ТС]     Функция для нахождения среднего значения #13
Borland C++ v3.1

Error 1\LAB_4_1.CPP 3: Declaration syntax error
указывает на using namespace std;
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 14:20     Функция для нахождения среднего значения #14
Ну первый совет - это использовать более новую среду. И по всей видимости в этой среде нету такого пространства имен, закомментируй строку using namespace std; И еще, раз нету пространства std, то нужно писать как писал ты #include <iostream.h>
qxiton
0 / 0 / 0
Регистрация: 24.05.2009
Сообщений: 19
07.03.2010, 14:23  [ТС]     Функция для нахождения среднего значения #15
Сделал - заработала. Все нормально, много чего понял, спасибо!
Darky
Быдлокодер
 Аватар для Darky
507 / 294 / 45
Регистрация: 22.11.2009
Сообщений: 892
Завершенные тесты: 1
07.03.2010, 19:19     Функция для нахождения среднего значения #16
to4kin, Не все компиляторы требуют указания пространства имен.
1) нужно писать #include <iostream>, а не #include <iostream.h>
Это кто сказал?
2) привыкай сразу давать переменным разумные имена
Сразу вспоминается beznalichnii_rashet_buhgalteram_blin_dlinnaya. Да ладно, соглашусь.

Чего умничать? У каждого свой стиль программирования
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2010, 19:44     Функция для нахождения среднего значения
Еще ссылки по теме:

C++ Математическая функция для которой нужно решить задачу нахождения максимального (минимального) значения
C++ Разработайте перегруженные функции нахождения среднего арифметического и среднего геометрического трех целых и вещественных чисел
C++ Функция вычисления среднего значения возвращает странное значение

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

Или воспользуйтесь поиском по форуму:
to4kin
14 / 14 / 2
Регистрация: 04.09.2009
Сообщений: 46
07.03.2010, 19:44     Функция для нахождения среднего значения #17
Не все компиляторы требуют указания пространства имен.
Согласен, просто привык, что многие начинающие пишут в VS, потому и указал.
Это кто сказал?
Помоему здесь нельзя давать ссылки, потому:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <fstream.h>
 
bool MilkshapeModel::loadModelData( const char *filename )
{
    ifstream inputFile( filename, ios::in | ios::binary | ios::nocreate );
    if ( inputFile.fail())
        return false;   // "Couldn't open the model file."
 
    inputFile.seekg( 0, ios::end );
    long fileSize = inputFile.tellg();
    inputFile.seekg( 0, ios::beg );
 
    byte *pBuffer = new byte[fileSize];
    inputFile.read( pBuffer, fileSize );
    inputFile.close();
 
    // and so on
Сравни с:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <fstream>
#include <vector>
#include <iterator>
 
bool MilkshapeModel::loadModelData( const char *filename )
{
    using namespace std;
 
    ifstream inputFile( filename, ios::in | ios::binary );
    if ( inputFile.fail())
        return false;   // "Couldn't open the model file."
 
    std::istreambuf_iterator<char> start(inputFile);
    std::istreambuf_iterator<char> end;
    std::vector<char> buffer(start, end);
 
    inputFile.close();
 
    // and so on
я думаю комментарии излишни. Нужна будет ссылка на источник - напиши в ЛС.
Сразу вспоминается beznalichnii_rashet_buhgalteram_blin_dlinnaya. Да ладно, соглашусь.
Разумные != длинные.
Чего умничать? У каждого свой стиль программирования
Я не пытался умничать, а лишь указал человеку на некоторые ошибки. Если Вы так негативно относитесь к критике, то простите - не хотел никого задеть.
Yandex
Объявления
07.03.2010, 19:44     Функция для нахождения среднего значения
Ответ Создать тему
Опции темы

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