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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
VGM
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 6
#1

Определите максимум (М1) и минимум (М2) в массиве - C++

26.06.2014, 10:20. Просмотров 1165. Ответов 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
64
65
66
67
#include<iostream>
#include<conio.h>
#include<string>
#include<stdio.h>
#include<fstream>
#include<stdlib.h>
#include<math.h>
using namespace std;
string s; double *mas; int razm;
void udalenie()
{
    int min = 0;
    for (int i = 0; i < razm; i++)
    {
        if (s[i] != ' ')
            min++;
    }
    razm = razm - min + 1;
}
int proverka()
{
    int t = 0;
    for (int i = 0; i < razm; i++)
    if (s[i] == ' ' || (s[i] <= 57 && s[i] >= 48) || s[i] == '-'); else t++;
    return t;
}
void preobr()
{
    int t = 0, j = 0;
    for (int i = 0; i < razm; i++)
    {
        mas[j] = atof(&s[t]);
        if (s[i] == ' ' && ((s[i + 1] >= 48 && s[i + 1] <= 57) || s[i + 1] == '-')){ t = i; j++; };
    }
    udalenie();
}
double sr_geom()
{
    double m1 = mas[0], m2 = mas[0]; int im1 = 0, im2 = 0;
    for (int i = 1; i < razm; i++){ if (mas[i] >= m1){ m1 = mas[i]; im1 = i; }; if (mas[i] <= m2){ m2 = mas[i]; im2 = i; } }
    double sr = 1;
    if (im1>im2)for (int i = im2 + 1; i < im1; i++)sr = sr*(mas[i]); else for (int i = im1 + 1; i < im2; i++)sr = sr*(mas[i]);
    return sqrt(sr);
}
 
void main()
{
    setlocale(0, "");
    string name;
    cout << "Введите имя файла,из которого прочитать массив" << endl;
    cin >> name;
    ifstream fcin(name);
    while (fcin){ getline(fcin, s); }
    razm = s.size(); mas = new double[razm];
    for (int i = 0; i < razm; i++) mas[i] = 1;
    if (proverka() == 0)cout << "Файл из целых чисел" << endl;
    else cout << "Файл не из целых чисел" << endl;
    preobr();
    double y = sr_geom();
    string nameout;
    cout << "Введите имя файла,в который записать результат" << endl;
    cin >> nameout;
    ofstream fout(nameout);
    fout << "Среднее геометрическое: " << endl;
    fout << y;
    _getch();
}
Ребят, помогите пожалуйста с программой.
Условие:Определите максимум (М1) и минимум (М2) в массиве. Выведите в файл среднее геометрическое положительных четных чисел, расположенных в массиве между М1 и М2.
Помогите изменить программу так, чтоб выводило "среднее геометрическое положительных четных чисел" в массиве между М1 и М2,а не просто всех чисел от М1 к М2(как сейчас).
Заранее спасибо!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2014, 10:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определите максимум (М1) и минимум (М2) в массиве (C++):

Минимум и максимум в двумерном массиве - C++
Написать программу, которая находит минимум и максимум в двумерном массиве. Помогите пожалуйста!

Найти минимум и максимум в массиве - C++
Доброго времени суток) Совсем не давно начали изучать С++ поэтому простите мои глупые ошибки Возникла проблема с функцией После...

Как найти минимум и максимум в массиве? - C++
Найти минимум и максимум в двух массивах мой код #pragma hdrstop #pragma argsused #ifdef _WIN32 #include &lt;tchar.h&gt; #else ...

Найти максимум и минимум в двумерном массиве - C++
где ошибка Спрашивает, как заполнить двум массив, ищет max и min #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace...

Найти максимум и минимум в массиве и поменять их местами - C++
Привет всем, помогите разобраться в программе #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; using namespace std; ...

Как найти глобальные минимум и максимум в массиве? - C++
Привет, напишите, пожалуйста, код, отвечающий за поиск глобального минимума и максимума (экстремумов) в одномерном массиве.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
26.06.2014, 12:37 #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
int maxPos(double* arr, int sz)
{
max = arr[0]; // В качестве начального значения берем первый элемент массива
pos = 0;
for (int i = 1; i < sz; ++i) // Цикл по всем элементам, кроме первого, про который нам и так все известно
 if (arr[i] > max)
  {
  max = arr[i];
  pos = i;
  }
return pos;
}
// Аналогично minPos
double geomMid(double* arr, int sz)
{
int M1Pos = maxPos(arr, sz); // Позиция максимального элемента
int M2Pos = minPos(arr, sz); // Позиция минимального элемента
int start = std::min(M1Pos, M2Pos); // Начало - минимум из этих значений (можно также посчитать с помощью if/else или тернарного оператора "?:" )
int finish = std::max(M1Pos, M2Pos); // Конец - максимум
double prod = 1; // Произведение всех нужных чисел
for (int i = start + 1; i < finish; ++i) // Цикл по всем элементам, лежащими между start и finish (не включительно)
 if (arr[i] > 0 && arr[i] % 2 == 0) // Если элемент положительный и остаток от деления на 2 равен 0 (четный)
  prod *= arr[i]; // Умножаем произведение на него
double power = 1.0 / (finish - start - 1); // Корень n-й степени - это число в степени 1/n
return pow(prod, power); // Корень степени "число элементов между стартом и финишем не включительно"
}
VGM
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 6
26.06.2014, 15:04  [ТС] #3
Гром, можете подсказать, что делать в таком случае, когда в
Цитата Сообщение от Гром Посмотреть сообщение
if (arr[i] > 0 && arr[i] % 2 == 0)
выскакивает ошибка:Выражение должно относиться к целочисленному типу или типу перечисления без области видимости?
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
26.06.2014, 15:52 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
VGM, ах да, там же берется остаток от деления, значит это должно быть целое число. Для вещественных чисел вообще нельзя сказать, четные ли они. Тип элементов массива нужно поменять на int, а с типом double оставить только prod.
VGM
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 6
26.06.2014, 17:12  [ТС] #5
Гром,большое спасибо, а еще вопрос: что засылать в ф-ю geomMid фактическими параметрами в main?
Гром
210 / 129 / 11
Регистрация: 20.03.2009
Сообщений: 1,103
Записей в блоге: 16
Завершенные тесты: 1
26.06.2014, 18:59 #6
VGM, в ваших обозначениях - mas и razm. Я бы вообще сделал их локальными переменными в функции main и передавал бы в качестве аргументов всем функциями, в которых они используются.

Кстати, не проще ли читать из файла данные так:
C++
1
2
3
4
fcin >> razm;
mas = new int[razm];
for (int i = 0; i < razm; ++i)
 fcin >> mas[i];
предполагая, что файл имеет структуру такого типа:
Код
5
1 2 3 4 5
Т.е. вначале (для читабельности - первой строкой, хотя программе это не важно) идет количество элементов, потом они по порядку.
VGM
0 / 0 / 0
Регистрация: 25.06.2014
Сообщений: 6
26.06.2014, 21:06  [ТС] #7
Гром, Извиняюсь, название заголовка было изменено модератором, В условии еще сказано, что массив считывается с файла и его размер заранее неизвестен, так что
Цитата Сообщение от Гром Посмотреть сообщение
fcin >> razm;
mas = new int[razm];
for (int i = 0; i < razm; ++i)
*fcin >> mas[i];
использовать нельзя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2014, 21:06
Привет! Вот еще темы с ответами:

Найти максимум и минимум в массиве, отсортировать массив - C++
Ввести массив А. В массив В перенести все элементы массива А, имеющие значение меньше чем (min+max)/3, где min -...

В одномерном массиве найти максимум/минимум, среднее арифметическое - C++
Вообще ничего не понимаю, помогите пожалуйста:( Числовой массив B целочисленный, содержит k элементов. Элементы массива вводится с...

Найти в двухмерном массиве максимум и минимум, и поменять их местами - C++
Нужно найти в двухмерном массиве максимум и минимум, и поменять их местами. Как осуществить?

В одномерном массиве целых чисел заменить минимум на максимум - C++
в одномерном массиве целых чисел заменить минимум на максимум. не могу поменять их местами..а остальное работает #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.06.2014, 21:06
Ответ Создать тему
Опции темы

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