С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
1

Проверка условий позволющих выполнить соответствующие пункты задания

18.11.2019, 08:14. Показов 1320. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго дня!

Прошу помочь с исправлением кода.
Изначально задание было такое:
В одномерном массиве, состоящем из n целых элементов, вычислить:
А) количество пар x[i] и x[i + 1], таких, что x[i] > x[i + 1];
Б) сумму элементов массива, расположенных после минимального элемента массива;
В) произведение элементов массива, расположенных до первого элемента массива, кратного 5.

Написал код:
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
#include <limits>
#include <iostream>
int main()
 
{  
setlocale (0, "rus");
int x[10]= {5, 8, 6, 1, 3, 9, 2, 7, 4, 0};
int i, min=INT_MAX, mini, q=0, sum=0, p=1;
for (i=0; i<10; i++)
{  
if (x[i]<min)
{   
min=x[i];
mini=i;
}
}
for (i=mini+1; i<10; i++)
sum+=x[i];
for (i=0; i<9; i++)
if (x[i]>x[i+1])
q++;
for (i=0; x[i]%5!=0; i++)
p*=x[i];
for (i=0; i<10; i++)
std::cout<<x[i]<<" ";    
std::cout<<"\nколичество пар, в которых x[i]>x[i+1]=" << q <<std::endl;
std::cout<<"суммa элементов массива расположенных после минимального элемента массива=" << sum <<std::endl;
std::cout<<"произведение элементов массива, расположенных до первого элемента массива, кратного 5="<<p<<std::endl;
system("PAUSE"); 
return 0;
}
Преподаватель прислал рецензию:
Внесите корректировки в код. Измените алгоритм решения заданий Б) и В) таким образом, чтобы отслеживались ситуации: минимальный элемент – последний; элемент, кратный пяти – первый. В этом случае невозможно найти ни сумму, ни произведение.

Не могу понять - что нужно сделать?

Помогите, пжл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2019, 08:14
Ответы с готовыми решениями:

Составить программу, проверяющую истинность условий и выводящую на экран соответствующие сообщения
Лабораторная работа № 5. ОПЕРАЦИИ ЯЗЫКА С++ Задание: Составить программу, проверяющую...

Задания условий в фильтрации Excel 2016
Здравствуйте. Мне нужно выполнить следущие задания: 1. С помощью фильтра создать список отличников...

Проверка наличия задания и назначение задания
Вопрос как зделать так чтоби ето задания после повторно запуска *.bat проверяло существует ли даное...

Как создать несвязную форму для задания условий отбора данных в отчет?
Как создать несвязную форму для задания условий отбора данных в отчет? На что нужно нажать. Access...

20
516 / 408 / 188
Регистрация: 08.04.2013
Сообщений: 1,743
18.11.2019, 08:19 2
вывести сообщение что первый элемент кратен 5 и результата не будет , то же самое с мин элементом
к парам есть вопрос 8, 6, 1 это будет странно если здесь 2 пары, 6 в первой паре, а может быть во второй?
0
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
18.11.2019, 08:24  [ТС] 3
не совсем понял.
Можете подробнее?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.11.2019, 08:57 4
Цитата Сообщение от ilna Посмотреть сообщение
Внесите корректировки в код. Измените алгоритм решения заданий Б) и В) таким образом, чтобы отслеживались ситуации: минимальный элемент – последний; элемент, кратный пяти – первый. В этом случае невозможно найти ни сумму, ни произведение.
Ога, и невозможно вычислить три в степени ноль, так как получается ноль сомножителей. А произведение нуля сомножителей не бывает!

Правильным курсом решения задачи мне видится смена преподавателя, несущего какую-то дичь.
0
516 / 408 / 188
Регистрация: 08.04.2013
Сообщений: 1,743
18.11.2019, 09:18 5
Цитата Сообщение от ilna Посмотреть сообщение
В) произведение элементов массива, расположенных до первого элемента массива, кратного 5.
Будут Элементы для произведения в массиве , если первый элемент кратен 5 , это вопрос вам и как вы ответите? Как поняли так и отвечайте
0
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
18.11.2019, 09:30  [ТС] 6
Это я понял, что если он первый, я тот последний - ничего не будет.
Как в коде это реализовать?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
18.11.2019, 09:33 7
Цитата Сообщение от marat_miaki Посмотреть сообщение
Будут Элементы для произведения в массиве , если первый элемент кратен 5
С чего они вообще быть должны то?

Задача: Вася должен купить банку яги, которая стоит сто рублей. У него есть N купонов на скидку, каждый купон умножает итоговую цену на K[n]. Сколько должен заплатить Вася, если он использует все имеющиеся у него купоны?
Преподаватель: а ежели у Васи ноль купонов, то умножать нечего. Значит, Вася яги купить не может, даже если у него в кармане миллион!

У Васи не было ни рубля, но он развел N лохов на бабки. С каждого лоха он получил K[n] рублей. Сколько денег у Васи?
Преподаватель: да говорю же вам, если N равно нулю, то складывать нечего! А значит даже участковый не может сказать сколько денег у Васи!
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.11.2019, 02:49 8
ilna, всё по теме говорит Ваш преподаватель - если есть
Цитата Сообщение от ilna Посмотреть сообщение
ситуации: минимальный элемент – последний; элемент, кратный пяти – первый
не нужно ничего считать, а просто выдать соответствующее сообщение. учёл эти замечания и внёс небольшие корректировки ( размер массива лучше задавать с клавиатуры, поэтому применил динамический массив, min по условию задачи находить не требуется, интересует только его индекс, произведение растёт быстро - лучше тип long long)
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 main() 
{     
    int n, imin=0, count=0, index=-1;
    long long sum=0LL, mult=1LL;
    
    cout << "n="; cin >> n;
 
    int*a = new int[n];
 
    cout << "Enter " << n << " integer elements:\n";
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];       
        if (a[i]<a[imin]) imin=i;
    }    
        
    for (int i = 0; i < n-1; i++)
    if (a[i]>a[i+1]) count++;   
    cout << "count pair = " << count << "\n";    
    
    if (imin!=n-1)
    {
        for (int i = imin+1; i < n; i++)
        sum+=a[i];
    cout << "local sum = " << sum << "\n";
    }
    else cout << "min element last\n";
    
    if (a[0]%5!=0)
    {
        for (int i = 0; i < n; i++) 
        if (a[i]%5==0) {index=i;break;}
        
        if (index==-1) cout << "multiple of 5 are absent\n"; 
        else
        {
        for (int i = 0; i < index; i++)
        mult*=a[i];
        cout << "local mult = " << mult << "\n";
        }
    }    
    else cout << "multiple of 5 first\n";
    
    delete[]a;
system("pause"); 
return 0;
}
Добавлено через 2 минуты
вот так наверное делать не следует
Цитата Сообщение от ilna Посмотреть сообщение
for (i=0; x[i]%5!=0; i++)
а если кратных 5 в массиве нет ?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
19.11.2019, 04:38 9
Цитата Сообщение от Yetty Посмотреть сообщение
а если кратных 5 в массиве нет ?
Значит, нет элементов массива расположенных перед элементом кратным пяти.
Значит, мы должны найти произведение вырожденного числового ряда состоящего из нуля элементов.

Для начала умножим искомое произведение на произведение двух единиц=1*1*(произведение).
У нас теперь получается произведение числового ряда из нуля элементов и еще двух единичек сверху. Согласны?
Нуль элементов плюс две единички это две единички и есть. Согласны?
Единичка на единичку это единичка. Согласны?
И так, 1*1*(произведение)=1

Стоп. Нам же надо было произведение без единичек. Окей, делите левую и правую части равенства на единичку в квадрате.
Произведение=1/(1*1)=1.
И так, задача решена. Произведение вырожденного ряда из нуля элементов равно единице!

Достаточно разжевал?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.11.2019, 05:14 10
Renji, Ваши рассуждения мягко говоря несколько непонятны. Вы считаете, что если по условию нужно найти элементы перед элементом назовём его K, а элемента K в массиве нет, нужно что-то находить ? мне кажется логичным другое решение - если такого элемента нет, нужно выдать сообщение, что его нет. произвести какие-либо расчёты перед несуществующим элементом невозможно.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
19.11.2019, 05:33 11
Цитата Сообщение от Yetty Посмотреть сообщение
Renji, Ваши рассуждения мягко говоря несколько непонятны. Вы считаете, что если по условию нужно найти элементы перед элементом назовём его K, а элемента K в массиве нет, нужно что-то находить ?
Конечно. Если от вас требуют посчитать крылья от слона, вы должны ответить что крыльев ровно ноль штук. А не отмазываться что у слонов крыльев не бывает. Согласны?

В теории множеств таким нулем является пустое множество. Если нужно найти элементы перед K, а никакого K у нас нет, значит ответом будет пустое множество. Если вам нужно что-то от этих элементов посчитать, вам нужна функция заданная для пустого множества. И вот только если такой функции нет, начинаем чесать репку.
0
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
19.11.2019, 08:42  [ТС] 12
Добрый день!

Не совсем понял, как происходит расчет?
- Выводит, что введено 5 элементов
- выводит, что кратных 5 нет
- странно считает сумму.

Может я что-то не так ввожу?
Миниатюры
Проверка условий позволющих выполнить соответствующие пункты задания  
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
19.11.2019, 08:47 13
Цитата Сообщение от ilna Посмотреть сообщение
Может я что-то не так ввожу?
Через пробел попробуйте.
0
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
19.11.2019, 08:49  [ТС] 14
то же самое, только сумму изменил
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
19.11.2019, 09:11 15
Ну, попробуйте так (особо не тестировал):
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 <iostream>
#include<climits>
 
int main()
{
    int n,value;
    int prevValue=INT_MIN,minValue=INT_MAX,afterMinValue=0,beforeFive=1;
    bool hasMultipleOfFive=false;
    std::cin>>n;
    int count=0;
    for(int i=0;i<n;++i)
    {
        std::cin>>value;
        //вопрос А
        if(prevValue>value)
            ++count;
        prevValue=value;
 
        //вопрос Б
        if(value<minValue)
        {
            minValue=value;
            afterMinValue=0;
        }else
            afterMinValue+=value;
 
        //вопрос В
        hasMultipleOfFive|=value%5==0;
        if(!hasMultipleOfFive)
            beforeFive*=value;
    }
    std::cout<<"Счетчик пар: "<<count<<std::endl;
    std::cout<<"Сумма элементов после минимального: "<<afterMinValue<<std::endl;
    std::cout<<"Произведение элементов перед первым кратным пяти: "<<(hasMultipleOfFive?beforeFive:1)<<std::endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
19.11.2019, 09:17  [ТС] 16
после введения элементов через пробел или запятую консоль просто закрывается
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
19.11.2019, 09:18 17
Три раза std::cin.get() в конец программы.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.11.2019, 13:12 18
Цитата Сообщение от ilna Посмотреть сообщение
Может я что-то не так ввожу?
конечно не так. там же приглашения к вводу есть. сначала предлагается ввести размер массива n - это может быть любое число ( набрать например 10 нажать <Enter> ). затем предлагается ввести 10 элементов массива (после каждого элемента нажимать <Enter> или набрать все элементы через пробел и нажать <Enter>)
10
5 4 3 2 1 9 8 7 6 0
count pair = 8
min element last
multiple of 5 first
1
0 / 0 / 0
Регистрация: 13.01.2019
Сообщений: 50
19.11.2019, 13:41  [ТС] 19
а local sum что считает?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
19.11.2019, 13:55 20
Цитата Сообщение от ilna Посмотреть сообщение
local sum что считает?
то что требуется по условию
Цитата Сообщение от ilna Посмотреть сообщение
сумму элементов массива, расположенных после минимального элемента массива
в Вашем коде кстати точно такой цикл
1
19.11.2019, 13:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2019, 13:55
Помогаю со студенческими работами здесь

Если выполнено несколько условий, выполнить одно действие
Обычно, с тем чем имел дело выглядело так: (Одно условие и целый блок действий) If %a% gtr...

Проверка условий
Задача тривиальна. Скрипт принимает данные и что-то с ними делает, если они не пустые. А вот одна...

Проверка условий
Здравствуйте, подскажите,пожалуйста, как прописать условия проверки. Мне нужно: если вводится...

Проверка условий
Доброго времени суток, уважаемые форумчане) столкнулся с проблемой проверки условий в базе данных,...


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

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