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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.78
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
#1

Вычислить произведение последних 3-х чисел не кратных 5 в диапазоне от 20 до 50 - C++

03.10.2010, 13:50. Просмотров 2881. Ответов 18
Метки нет (Все метки)

Всем привет! Мне дана задача, но я незнаю как в С++ обозначать диапазоны и через какой цикл писать. У меня 2 варианта, но я склоняюсь ко 2 варианту.
Вычислить произведение последних 3-х чисел не кратных 5 в диапазоне от 20 до 50.

Вариант 1

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "stdafx.h"
#include <iostream>
using namespace
 
int _tmain(int argc, _TCHAR* argv[])
{
    int Pr=0, x; //В Pr будет накапливатся произведение и хранится в х
    cin>>x;
    while (x!=5)
    {
        Pr*=x;   // Умножаем очередное введенное число с произведением
        cin>>x;  // Ввод следующего числа
    }
    cout<<Pr;
    return 0;
}
Вариант 2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <math.h>
  #include <iostream.h>
  int main()
{
 int x, Pr;
 cin >> x;      //вводим первое число  
 for (Pr = 0; x!=5; )
 { 
      Pr * = x;   //Умножаем очередное введенное число с произведением
      cin >> x;   //ввод следующего числа
 }
cout << Sum;    //вывод посчитанного произведения
return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2010, 13:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить произведение последних 3-х чисел не кратных 5 в диапазоне от 20 до 50 (C++):

вычислить произведение последних трех чисел не кратных пяти в диапазоне от n1 до n2 - C++
Помогите, пожалуйста с решением. Не могу понять как делать вычислить произведение последних трех чисел не кратных пяти в диапазоне от n1...

Вычислить среднее арифметическое четных чисел, не кратных четырем в диапазоне от 1 до 200 - C++
Задача2. .Вычислить среднее арифметическое четных чисел, некратных четырем в диапазоне от 1 до 200

Вычислить произведение кратных 3 чисел массива - C++
Составить программу для обработки массива согласно индивидуальному заданию : Вычислить произведение кратных 3 чисел массива. Помогите...

Вычислить произведение не кратных трем чисел массива - C++
вычислить произведение не кратных 3 чисел массива

Вычислить произведение чисел кратных 7 на промежутке от 1 до 100. - C++
Вычислить произведение чисел кратных 7 на промежутке от 1 до 100.

Вычислить среднее арифметическое и среднее геометрическое нечетных чисел, кратных 7 в диапазоне от M1 до M2 - C++
Вычислить среднее арифметическое и среднее геометрическое нечетных чисел, кратных 7 в диапазоне от M1 до M2

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.10.2010, 14:33 #2
Селявкина Мария, хотелось бы уточнить задачу. Пользователь вводит последовательность чисел, нужно найти произведение последних трех, которые лежать в диапазоне от 20 до 50 и не кратны 5?
0
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
03.10.2010, 14:36  [ТС] #3
Вычислить произведение последних трех чисел не кратных 5 в диапазоне
от 20 до 50.
Ну я думаю, что пользователь должен вводить числа.
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.10.2010, 14:50 #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
#include <iostream>
#include <vector>
 
int main()
{
 
    int start = 20;
    int end = 50;
    int p = 1;
    std::vector<int> arr;
    int k =0;
 
    for ( int i = start; i <= end; ++i )
        if (  (i % 10) != 0  || ( (i%10) != 5) )
            arr.push_back(i);
     
    if ( arr.size() >= 3)
        for ( int i = arr.size()-1; i > arr.size()-(3+1); --i )
            p *= arr[i];
 
 
 
    std::cout<<"Mult of last three  number = " << p;
 
 
    return 0;
}
1
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.10.2010, 14:58 #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
32
33
#include <iostream>
 
bool isCorrect(int i)
{
    return (i <= 50) && (i >= 20) && (i % 5);
}
 
int calcProduct(int first, int second, int third)
{
    int number;
    std::cout << "> ";
    if(std::cin >> number)
    {
        if(isCorrect(number))
            return calcProduct(number, first, second);
        else
            return calcProduct(first, second, third);
    }
    std::cout << std::endl;
    return first * second * third;
}   
 
int main()
{
    std::cout << "Введите числа. Для окончания ввода нажмите Ctrl+Z (или Ctrl+D)"
        << std::endl;
    int product = calcProduct(0, 0, 0);
    if(product)
        std::cout << "Произведение равно " << product << std::endl;
    else
        std::cout << "Недостаточно чисел, удовлетворяющих условию" << std::endl;
    return 0;
}
Если сильно хочется, то рекурсию можно переписать на цикл
1
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
03.10.2010, 15:02  [ТС] #6
Уважаемый PointsEqual не могли бы прокоментировать свой код.Просто я новичек в С++ и мне не все команды понятны.
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.10.2010, 15:04 #7
Nameless One, ваш код определенно лучше)
0
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
03.10.2010, 15:07  [ТС] #8
Я не Ваш PointsEqual и не Nameless One код не совсем поняла.Кто-нибудь прокоментируйте свой код,пожалуйста.
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
03.10.2010, 15:07 #9
Цитата Сообщение от Селявкина Мария Посмотреть сообщение
не могли бы прокоментировать свой код
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
#include <iostream>
#include <vector>
 
int main()
{
 
    int start = 20;
    int end = 50;
    int p = 1;
    std::vector<int> arr; //создаем массив
    int k =0;
 
    for ( int i = start; i <= end; ++i ) //от 20 до 50 ищем числа не кратные 5
        if (  (i % 10) != 0  || ( (i%10) != 5) ) //если число не кратно 5 то
            arr.push_back(i); //заносим его в массив
     
    if ( arr.size() >= 3) //проверям есть ли в массиве хотябы 3 числа
        for ( int i = arr.size()-1; i > arr.size()-(3+1); --i ) //считаем произведение последних 3 елементов
            p *= arr[i];
 
 
 
    std::cout<<"Mult of last three  number = " << p;
 
 
    return 0;
}
1
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
03.10.2010, 15:41 #10
С комментариями:
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
#include <iostream>
 
/*
 * Функция проверяет, удовлетворяет ли число i условию задачи
 * т.е. лежит ли оно в отрезке [20, 50] и не является кратным 5.
 * Возвращает true, если i удовлетворяет условию, и false в противном случае
 */
bool isCorrect(int i)
{
    return (i <= 50) && (i >= 20) && (i % 5);
}
 
/*
 * Рекурсивная функция возвращает произведение последних трех введенных
 * пользователем чисел, которые удовлетворяют условию задачи.
 * В каждом вызове происходит ввод одного числа. Условие остановки рекурсивных 
 * вызовов - если пользователь нажал Ctrl+Z (или Ctrl+D в Linux).
 * Параметры функции - последние 3 "правильных" числа
 */
int calcProduct(int first, int second, int third)
{
    int number; // Здесь хранится текущее введенное число
    std::cout << "> "; // Приглашение к вводу
    // Условие выполняется, если пользователь не ввел Ctrl+Z (Ctrl+D):
    if(std::cin >> number)
    {
        if(isCorrect(number)) // если число - "правильное"
        /* ... оно "запоминается" как последнее "правильное
         * а предпредпоследнее - "забывается"
         */
            return calcProduct(number, first, second);
        else // В противном случае вызов происходит с теми же параметрами
            return calcProduct(first, second, third);
    }
    std::cout << std::endl;
    return first * second * third; // Вычисляется и возвращается произведение
}       
 
int main()
{
    std::cout << "Введите числа. Для окончания ввода нажмите Ctrl+Z (или Ctrl+D)"
    << std::endl;
    /*
     * Первоначальный вызов calcProduct происходит с нулевыми значениями
     * аргументов. Это нужно для того, чтобы отслеживать минимальное
     * количество введенных "правильных" чисел. Если оно меньше 3, то
     * хотя бы один из аргументов функции - first, second, third - будет
     * равен нулю, а значит, и произведение будет равно нулю
     */
    int product = calcProduct(0, 0, 0);
    if(product) // Аналогично if(product != 0)
        std::cout << "Произведение равно " << product << std::endl;
    else
        std::cout << "Недостаточно чисел, удовлетворяющих условию" << std::endl;
    return 0;
}
1
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
10.10.2010, 16:17  [ТС] #11
А есть еще варианты решени данной задачи. Так как мне требуется решить эту задачу через цикл,т.к. массивы мы на занятиях еще не проходили.
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.10.2010, 16:32 #12
Если я правильно понял задание, числа вводить не надо, тем более что массивы не изучались - как вводить числа? Просто наверное просмотреть числа от 20 до 50 и найти произведение 3-х последних, которые не кратны 5. Т.е. 49*48*47. Но тогда это тупость получается.
0
Селявкина Мария
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
10.10.2010, 16:37  [ТС] #13
Вот я тоже так думаю.Спрашвала у преподовтеля как делать,а он сама не знает.
0
Nameless One
Эксперт С++
5773 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
10.10.2010, 16:39 #14
Цитата Сообщение от Селявкина Мария Посмотреть сообщение
Вот я тоже так думаю.Спрашвала у преподовтеля как делать,а он сама не знает
Хехе... "Поиди туда, не знаю куда, сделай то, не знаю что..." Как тогда он (она) может от вас что-то требовать, если не способен (-на) четко поставить задачу?
0
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
10.10.2010, 16:45 #15
Раз не знает, так можно ему за это лапшу на уши вешать Например:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream.h>
 
int main()
{
    cout<<47*48*49;
 
    cout<<endl;
    system("pause");
    return 0;
}
Ну или более близкое к правде:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    int i, res=1, count=0;
 
    for(i=50; i>=20, count<3; i--)
    {
        if(i%5!=0)
        {
           res*=i;
           count++;
        }
    }
 
    cout<<"Result = "<<res;
    cout<<endl;
    system("pause");
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2010, 16:45
Привет! Вот еще темы с ответами:

Найти произведение количества чисел не кратных 5 на количество чисел не кратных 7 - C++
задача через stdio.h С клавиатуры вводится последовательность ЦЕЛЫХ чисел. Количество чисел заранее не известно, но может быть очень...

Вычислить произведение трёх элементов массива, кратных 3-ем и не кратных 2-ум - C++
HELP!! Господа программеры. В программировании вобще 0. Нужно вычислить произведение трёх элементов массива А, что кратны 3 и не кратны...

Вычислить количество чисел, кратных 3, и среднее арифметическое чисел, кратных 7 - C++
Задача 1. Использование инструкций для организации циклов (обработка целочисленных значений) Написать программу, в которой с...

Вычислить сумму членов последовательности натуральных чисел, кратных и не кратных заданному числу - C++
Дана последовательность натуральных чилел А. Вычислить сумму членов последовательности, кратных и не кратных d. Значения членов...


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

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

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