Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 03.06.2016
Сообщений: 8
1

Составить программу вычисления среднего арифметического положительных чисел

04.06.2016, 07:48. Показов 2587. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите сделать. Дан файл, содержащий действительные числа. Составить программу вычисления среднего арифметического положительных чисел;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2016, 07:48
Ответы с готовыми решениями:

Написать программу для вычисления среднего из 3 чисел
Написать программу для вычисления среднего из 3 чисел числа вводятся через 3 эдита среднее...

Создайте шаблон функции вычисления среднего арифметического значения
Создайте шаблон функции вычисления среднего арифметического значения положительных элементов...

Вычисление среднего арифметического чисел, находящихся в файле
Напишите программу, которая вычисляет среднее арифметическое чисел, находящихся в файле.В С++

вывести информацию о наибольшем, наименьшем и наименее удаленном от среднего арифметического члена последовательности вещественных чисел
вывести информацию о наибольшем, наименьшем и наименее удаленном от среднего арифметического члена...

11
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
04.06.2016, 17:31 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
#include <vcl.h>
#include <memory>
#include <StrUtils.hpp>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr<TStringList> list(new TStringList);
    list->LoadFromFile("123.txt");
    double c=0.0;
    int b=0;
    TStringDynArray arr(SplitString(list->Text, L" "));
    for (int i = 0; i < arr.Length; i++)
        {
          if(arr[i]>0)
          {
              c+=StrToInt(arr[i]);
              b++;
          }
        }
       ShowMessage("Среднее арифметическое положительных чисел равно: "+ FloatToStr(c/b));
 
 
}
//---------------------------------------------------------------------------
0
11 / 11 / 4
Регистрация: 15.04.2015
Сообщений: 67
05.06.2016, 12:04 3
Sasha, извините, а Вы уверены в правильности кода? Я бы написал бы так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      double SummNumbers = 0;
      int CountNumbers = 0;
      std::auto_ptr<TStringList> L(new TStringList);
      L->LoadFromFile("123.txt");
      L->DelimitedText=L->Text;
      for(int i = 0;i<L->Count;i++)
        if(StrToFloat(L->Strings[i]) > 0)
        {
            SummNumbers+=StrToFloat(L->Strings[i]);
            CountNumbers++;
        }
      if(CountNumbers > 0)
        ShowMessage("Среднее арифметическое положительных чисел равно: "+ FloatToStr(SummNumbers/CountNumbers));
      else
        ShowMessage("Чисел удовлетворяющих условиям программы не найдено");
}
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.06.2016, 12:25 4
Цитата Сообщение от SeaMonkey Посмотреть сообщение
Sasha, извините, а Вы уверены в правильности кода?
Уверен
0
11 / 11 / 4
Регистрация: 15.04.2015
Сообщений: 67
05.06.2016, 12:35 5
Цитата Сообщение от Sasha Посмотреть сообщение
Уверен
Sasha, и зря вообще-то. В условиях задачи дано
Цитата Сообщение от Влад Янусов Посмотреть сообщение
Дан файл, содержащий действительные числа
при добавки любого положительного действительного число StrToInt вылетит, а также если файл содержит только отрицательные числа, то программа тоже вылетит, из-за попытки деления на ноль. А вообще-то мне более интересно, в целесообразности вот этой строчки
C++
1
TStringDynArray arr(SplitString(list->Text, L" "));
зачем вводить новый массив, если можно спокойно работать с TStringList?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
05.06.2016, 12:38 6
Лучший ответ Сообщение было отмечено Влад Янусов как решение

Решение

Цитата Сообщение от Влад Янусов Посмотреть сообщение
Дан файл, содержащий действительные числа
Файл, содержащий действительные числа, может быть бинарным или текстовым. Если файл текстовый - то вышеприведенные решения могут и сработать. Хотя я бы использовал STL:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    std::ifstream file("d:\\test\\floats.txt");
    std::stringstream ss;
 
    if (file)
    {
        ss << file.rdbuf();
        file.close();
    }
    std::vector<double> v;
    double x;
 
    while (ss >> x)
        if (x > 0) v.push_back(x);
 
    double mean = std::accumulate(v.begin(), v.end(), 0.0) / v.size(); // можно проверить на v.size() > 0, если что
    ShowMessage(FloatToStr(mean));
Если же он бинарный - то способ решения задачи будет совсем иным.
3
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.06.2016, 12:53 7
SeaMonkey, да пожалуй Вы правы!!!!!!!!!! Нужно сделать дополнительно проверку перед делением.

Добавлено через 8 минут
Цитата Сообщение от volvo Посмотреть сообщение
Если же он бинарный - то способ решения задачи будет совсем иным.
volvo, а каким будет способ решения для бинарного файла?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
05.06.2016, 13:46 8
Лучший ответ Сообщение было отмечено Sasha как решение

Решение

Цитата Сообщение от Sasha Посмотреть сообщение
каким будет способ решения для бинарного файла?
Таким и будет:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    std::ifstream input("d:\\test\\floats.bin", std::ios::in | std::ios::binary);
    std::vector<double> v;
 
    input.seekg(0, std::ios::end);
    std::streampos sz = input.tellg();
    input.seekg(0, std::ios::beg);
 
    size_t buf_sz = sz / sizeof(double);
    double *buff = new double[buf_sz];
 
    input.read(reinterpret_cast<char*>(buff), sz);
    v.insert(v.end(), &buff[0], &buff[buf_sz]);
    v.erase( std::remove_if(std::begin(v), std::end(v), [](int v) {return v < 0;}), std::end(v) );
 
    free(buff);
 
    double mean = std::accumulate(v.begin(), v.end(), 0.0) / v.size();
    ShowMessage(FloatToStr(mean));
2
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.06.2016, 15:21 9
Цитата Сообщение от SeaMonkey Посмотреть сообщение
зачем вводить новый массив
Да Вы правы, всё можно сделать в одном массиве.
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
#include <vcl.h>
#include <StrUtils.hpp>
#include <System.IOUtils.hpp>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double c=0.0;
    int b=0;
    TStringDynArray arr(SplitString(TFile::ReadAllText(L"123.txt"), L" "));
    for (int i = 0; i < arr.Length; i++)
        {
          if(arr[i]>0)
          {
              c+=StrToInt(arr[i]);
              b++;
          }
        }
       (b > 0) ? ShowMessage("Среднее арифметическое положительных чисел равно: "+ FloatToStr(c/b)) : ShowMessage("Среднее арифметическое положительных чисел равно: "+ FloatToStr(b));
}
//---------------------------------------------------------------------------
0
11 / 11 / 4
Регистрация: 15.04.2015
Сообщений: 67
08.06.2016, 16:43 10
Sasha, опять же возвращаю Вас к вопросу о использовании
Цитата Сообщение от Sasha Посмотреть сообщение
C++
1
c+=StrToInt(arr[i]);
, разве при числе, например, 12.5 программа не вылетит? Хотя число 12.5 положительное и действительное, здесь надо использовать StrToFloat. Так же среднее арифметическое положительных чисел, в случае, когда этих чисел нет, не существует, а не равно 0.
0
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
08.06.2016, 22:45 11
Цитата Сообщение от SeaMonkey Посмотреть сообщение
Хотя число 12.5 положительное и действительное, здесь надо использовать StrToFloat
Предположительно в текстовый файл я вносил целочисленные значчения, надеюсь ТС тоже так думал
Цитата Сообщение от SeaMonkey Посмотреть сообщение
огда этих чисел нет, не существует, а не равно 0.
Равна 0 - это и означает, что их нет.
0
11 / 11 / 4
Регистрация: 15.04.2015
Сообщений: 67
09.06.2016, 09:18 12
Цитата Сообщение от Sasha Посмотреть сообщение
Предположительно в текстовый файл я вносил целочисленные значчения, надеюсь ТС тоже так думал
Вообще-то ТС думал не так, вроде бы. Так как в условии задачи, четко сказано
Цитата Сообщение от Влад Янусов Посмотреть сообщение
Дан файл, содержащий действительные числа.
Действительные и целые числа это не одно и тоже.
Цитата Сообщение от Sasha Посмотреть сообщение
Равна 0 - это и означает, что их нет.
Нет, не означает. Средне арифметическое -12 и +12 равно нулю, но не означает, что его не существует.
0
09.06.2016, 09:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2016, 09:18
Помогаю со студенческими работами здесь

Составить программу вычисления среднего арифметического положительных чисел
Дан файл, содержащий действительные числа. Составить программу вычисления среднего арифметического...

Составить программу вычисления среднего арифметического положительных элементов C[M], где (M≤15)
Как сделать ? Я недавно просто начал изучать c++, вот и проблемы в универе.Спасибо большое заранее

Составить программу вычисления среднего арифметического отрицательных значений и среднего геометрического положительных значений функции
Составить программу вычисления среднего арифметического отрицательных значений и среднего...

Составить программу определения среднего арифметического положительных чисел последовательности
Дана последовательность N вещественных чисел. Составить программу определения среднего...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru