Студент первого курса CS пытается понять функции? - PullRequest
0 голосов
/ 21 ноября 2018

Я студент первого курса CS, пытаюсь понять функции, но я застрял в этой проблеме, где я должен использовать функцию в другой функции.Мне нужно создать программу, которая проверяет все числа от 0 до 100 и находит все числа, которые делятся равномерно делителем.Мне разрешено иметь только три функции с именами getDivisor, findNumbers и calcSquare.Выходными данными должны быть каждое найденное число (от 0 до 100) и квадрат этого числа.Я написал программу (как показано ниже), которая запускает и отвечает на первый вопрос о том, что такое делитель, но она остается открытой только в течение нескольких секунд, а затем закрывается при попытке вычислить, какие числа делятся делителем.Я не уверен, что именно я сделал неправильно, но я хотел бы знать, чтобы я мог учиться на своей ошибке!Пожалуйста, не обращайте внимания на стиль, он очень небрежный, я обычно возвращаюсь и убираю его после завершения программы.

#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;

int getDivisor();
void findNumbers(int divisor, int lower, int upper, double &lowerSquared);
double calcSquare(int lower);


int main()
{
    int divisor;
    int lower = 0;
    int upper = 100;
    double lowerSquared;


    divisor = getDivisor();

    cout << "Here are the numbers, from 0 to 100, that are evenly divisble by " 
        << divisor << ", and their squares:\n";
    findNumbers(divisor, lower, upper, lowerSquared);


    system("pause");
    return 0;
}



int getDivisor()
{
    int divisor;

    cout << "Enter a divisor: ";
    cin >> divisor;

    return divisor;
}



void findNumbers(int divisor, int lower, int upper, double &lowerSquared)
{
    while (lower < upper)
    {
        if (((lower / divisor) % 2) == 0)
        {
            lowerSquared = calcSquare(lower);
            cout << setprecision(0) << fixed << setw(4) << lower << setw(8)<< lowerSquared << endl;
            lower++;
        }
        else
        {
            lower++;
        }
    }
}



double calcSquare(int lower)
{
    double lowerSquared;
    lowerSquared = pow(lower, 2);
    return lowerSquared;
}

Вывод должен быть (если пользователь вводит 15).Вывод должен быть в виде списка с числом слева и квадратом справа от него, но я не знаю, как правильно отформатировать здесь ... извините:

Введите делитель: 15

Вот числа от 0 до 100, которые делятся поровну на 9, и их квадраты:

0           0

15 115

30 900

45 2025

60 3600

75 5625

90 8100

Я ценю любую помощь!

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018
/*Description:
This program is homework assignment to practice what I
learned from lecture #7a. It illustrates how to use
functions properly, specifically how to use functions
within other functions. The user is prompted to input
a divisor that once entered goes thru a function to
see if it is evenly divisble by every number from 0-100.*/

#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;

int getDivisor();
void findNumbers(int divisor, int lower, int upper, double &lowerSquared);
double calcSquare(int lower);
//====================== main ===========================
//
//=======================================================
int main()
{
    int divisor;
    int lower = 0;
    int upper = 100;
    double lowerSquared;

    //Gets the divisor and assigns it to this variable.
    divisor = getDivisor();

    cout << "Here are the numbers, from 0 to 100, that are evenly divisble by " 
        << divisor << ", and their squares:\n";
    //Finds the numbers that are divisible by divisor,
    //displays and shows their squares.
    findNumbers(divisor, lower, upper, lowerSquared);

    system("pause");
    return 0;
}


/*===================== getDivisor ==========================
This function gets the divisor from the user so it can
assign it to the divisor variable to use in a later
function to check and see if it is divisible from 0-100.

Input:
    Divisor
Output:
    Divisor being assigned to divisor variable.*/
int getDivisor()
{
    int divisor;

    cout << "Enter a divisor: ";
    cin >> divisor;

    return divisor;
}



/*===================== findNumbers ==========================
This function runs a loop from 0 to 100 to check and see
if the divisor the user inputted is evenly divisble by 
every number from 0 to 100. It also displays the numbers
that are evenly divisble and their squares with the help
of the calcSquare function.

Input:
    There is no user input, other than the divisor from
    the getDivisor function.
Output:
    Numbers between 0 and 100 that are divisible by the
    divisor and their squares.*/
void findNumbers(int divisor, int lower, int upper, double &lowerSquared)
{
    while (lower <= upper)
    {
        if (lower % divisor == 0)
        {
            lowerSquared = calcSquare(lower);
            cout << setprecision(0) << fixed << setw(4) << lower << setw(8) <<
                lowerSquared << endl;
            lower++;
        }
        else
        {
            lower++;
        }
    }
}



/*===================== calcSquare ==========================
This function squares the number from 0 to 100 (whatever
number that might be in the loop) that is divisible by the
user entered divisor, so that it may assign it to the 
lowersquared variable in the findNumbers function to be 
used in the output.

Input:
    Number from 0 to 100 that is divisible by user entered
    divisor
Output:
    Number from 0 to 100 squared.*/
double calcSquare(int lower)
{
    double lowerSquared;
    lowerSquared = pow(lower, 2);
    return lowerSquared;
}

//==========================================================
/*OUTPUT:
Enter a divisor: 15
Here are the numbers, from 0 to 100, that are evenly divisble by 15, and their
squares:
   0       0
  15     225
  30     900
  45    2025
  60    3600
  75    5625
  90    8100
Press any key to continue . . .
*/
//==========================================================
0 голосов
/ 21 ноября 2018

Вы получаете какую-либо ошибку?потому что при запуске вашего кода я получаю и исключение.

Floating point exception(core dumped)

Это исключение происходит из-за того, что вы пытаетесь выполнить некоторую недопустимую операцию с плавающей запятой, например, делением на 0 в вашем операторе if

, чтобы исправить это, просто назначив меньшее число 1, чтобы начался отсчетот 1 до 0.

int lower = 1; 

Также вы можете проверить логику в операторе if, потому что в его нынешнем виде это не даст желаемого результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...