Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.04.2018
Сообщений: 57

Вводится последовательность из N вещественных чисел

01.10.2018, 22:27. Показов 2950. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. 2 курс университета, задание следующее: написать в MS Visual Studio 2010 на с++ прогу: Вводится последовательность из N вещественных чисел. Найти частное средних арифметических значений элементов с нечетными и четными индексами.
Так как до этого вообще никогда не работал с с++, в нем не шарю абсолютно, но тем не менее накатал следующую шнягу:
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 <iostream>
#include "ctime"
#include <iomanip>
#include <string>
#include "conio.h"
 
using namespace std;
int main()
{
    int n;
    string nt;
    setlocale(LC_ALL,"Russian");
        cout<<"Введите количество чисел: "<<endl;
        cin>>nt;
/////////////////////////////////////////////
 
         for(int i = 0; i < nt.length(); i++) {
        unsigned char ch = nt.c_str()[i];// считываем очередной символ из принятой стр
        while ( ((ch>='а' && ch<='я') && (ch>='А'&&ch<='Я')) || (!isdigit(ch)) ) {
          // если он не цифра
            cout << " \n Ошибка! Вводите только цифры!" << endl; // печатаем ошибку
            getch();
            system("cls");
         cout << "Введите заново размер массива:"<<endl;  // Ввожу количесто элементов в масииве
        cin >> nt;
         for(int i = 0; i < nt.length(); i++) {
         ch = nt.c_str()[i];
 // выходим из программы. не важно 1 или 0 для вас
    }
        }
    }// конвертируем строку в число
    n = atoi(nt.c_str());
    
    // конвертируем строку в число
    double xsum=0, ysum=0;
    char *x=new char [n];
    for (int i=0; i<n; i++) 
 
        {
            cout<<"Введите элементы массива чисел["<<i<<"]: ";
            cin>>x[i];
 
////////////////////////////////////////////////////////////////
        int str = char (x);
 while (!(cin >> str))
    {
 
        cout << "ENTER ERROR !!! Repeat please...\n";
        cin.clear();
        cout << "Введите еще раз: \n\r";
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // сброс остатка строки при ошибке
    }
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); // сброс остатка строки при правильном вводе
}   
    double xs=0, ys=0;
    for (int i=0; i<n; i++)     
    if(i % 2 == 0)
{
        xsum+=x[i];
        xs++;
}
    else
{
        ysum+=x[i];
        ys++;
}
        cout<<"Результат = "<<ysum/ys/(xsum/xs)<<endl;
        system("pause");
        return 0;
}

Прогу писал сам и она работала нормально, но препод заставил сделать "защиту от дурака", то есть от ввода любых символов, кроме цифр. С количеством вводимых элементов все получилось, а с самими элементами массива уже началась какая-то дичь и я вообще не втупляю что можно с этим сделать. Еще бы неплохо сделать, чтобы в массиве было как минимум 2 элемента, но это уже детали, плиз хелп
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2018, 22:27
Ответы с готовыми решениями:

Вводится последовательность из N вещественных чисел. Определить, является ли последовательность знакочередующе
Вводится последовательность из N вещественных чисел. Определить, является ли последовательность знакочередующейся. не пойму как сделать,...

Вводится последовательность из N вещественных чисел
C++, без массива.

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

3
3 / 2 / 1
Регистрация: 17.08.2018
Сообщений: 81
01.10.2018, 22:50
lolkekcheburec, isdigit().
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int val;
 
    char str;
    
    while (true)
    {
        cin >> str;
 
        if (!(isdigit(str)))
        {
            cout << "Invalid val" << endl;
        }
    }
0
0 / 0 / 0
Регистрация: 22.04.2018
Сообщений: 57
06.10.2018, 22:32  [ТС]
Еще вопрос такой, все сделал по заданию, все работает, но препод прикопался, что необходимо, чтобы программа работала идеально и в строке с вводом количества элементов нельзя было вводить число меньшее 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
68
69
#include "stdafx.h"
#include <iostream>
#include "ctime"
#include <iomanip>
#include <string>
#include "conio.h"
 
using namespace std;
int main()
{
    int n;
    string nt;
    setlocale(LC_ALL,"Russian");
        cout<<"Введите количество чисел: ";
        cin>>nt;
/////////////////////////////////////////////
         for(int i = 0; i < nt.length(); i++) {
        unsigned char ch = nt.c_str()[i];// считываем очередной символ из принятой стр
        while ( (!isdigit(ch))){
          // если он не цифра
            cout << "Проверьте правильность введенных значений (введенное значение должно быть числом/введенное число должно быть больше либо равно 2)" << endl; // печатаем ошибку
            getch();
            system("cls");
         cout << "Введите заново количество чисел: ";  // Ввожу количесто элементов в масииве
        cin >> nt;
         for(int i = 0; i < nt.length(); i++) {
         ch = nt.c_str()[i];
 // выходим из программы. не важно 1 или 0 для вас
        
         }
 
// конвертируем строку в число
 
        }
         }
    n = atoi(nt.c_str());
    
    // конвертируем строку в число
    double xsum=0, ysum=0;
    double *x=new double [n];
    for (int i=0; i<n; i++) 
 
        {
            cout<<"Введите элементы массива чисел["<<i<<"]: ";
        while(!(cin >> x[i]) || cin.peek() != '\n')
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "Извините, вы где-то допустили ошибку, пожалуйста, попробуйте еще раз " << endl;
            cout << "ввести " << i << "-ый элемент: ";
        }
    }
  
    double xs=0, ys=0;
    for (int i=0; i<n; i++)     
    if(i % 2 == 0)
{
        xsum+=x[i];
        xs++;
}
    else
{
        ysum+=x[i];
        ys++;
}
        cout<<"Результат = "<<ysum/ys/(xsum/xs)<<endl;
        system("pause");
        return 0;
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
07.10.2018, 14:47
Лучший ответ Сообщение было отмечено lolkekcheburec как решение

Решение

lolkekcheburec, при N<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
#include <iostream>
using namespace std; 
 
int main()
{
    int N, count_odd=0; 
    double a, sum_odd=0.0, sum_even=0.0;
    
    do
    {
    cout <<"N="; cin >>N;  
    if (N<2) cout <<"N>=2 !!! Repeat please...\n";
    }
    while (N<2);
    
    cout <<"Enter "<<N<<" elements:\n";    
    for (int i=1; i<=N; i++)
    {  
        cin>>a;              
        if (i%2==1) {count_odd++;sum_odd+=a;}
        else sum_even+=a;
    }   
 
    cout <<(sum_odd/count_odd)/(sum_even/(N-count_odd))<<endl;;   
    
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2018, 14:47
Помогаю со студенческими работами здесь

Вводится последовательность из N вещественных чисел. Определить наименьшее число, среди чисел больших 20.
Вводится последовательность из N вещественных чисел. Определить наименьшее число, среди чисел больших 20.

Вводится последовательность из N вещественных чисел. Определить наименьшее число, среди чисел больших 20
Вводится последовательность из N вещественных чисел. Определить наименьшее число, среди чисел больших 20. Добавлено через 53 секунды...

0.Вводится последовательность из N вещественных чисел. Определить среднее арифметическое среди кратных 7 элементов последовательности
c помощью include &lt;iostream&gt; и include&lt;math.t&gt;

Вводится последовательность из N вещественных чисел. Определить среднее арифметическое среди кратных 7 элементов последовательности
с помощью библиотек &lt;iostream&gt; и &lt;math.h&gt;

Дана последовательность из вещественных чисел, которые вводится по одному. За последним числом водится нуль. Найти сумму
Дана последовательность из вещественных чисел, которые вводится по одному. За последним числом водится нуль. Найти сумму среди...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3, Box2D, FreeType и SDL3_ttf из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru