0

@ sarnold ok here is my update tried to follow the guide that you gave me I tried removing the mains moving prototypes to the type and only having one of each I narrowed it down to one int main containing declarations for each individual functions and used voids instead of int for each function hopefully that was the right move.

#include <iostream>
#include <cmath>
#include <stdio.h>
#include <string>

using namespace std;


void function1()
{
    //Enter Variables
    int number;
    cout << "Enter Variable a: ";
    cin >> number;
    int a = number;


    cout << "Enter Variable b: ";
    cin >> number;
    int b = number;
    cout << "Enter Variable c: ";
    cin >> number;
    int c = number;
    if (a > b && a > c);
    return a;
    cout << "This is your highest number(" << a << ")";
    if (b > a && b > c);
    return b;
    cout << "This is your highest number(" << b << ")";
    if (c > a && c > B);
    return c;
    cout << "This is your highest number(" << c << ")";

}

void function2()
{
    // Prompt User for Integer

    int number;
    cout << "Enter integer 1: ";
    cin >> number;
    int a = number;

    cout << "Enter integer 2: ";
    cin >> number;
    int b = number;

    if (a != B)
        cout << "Continue";

    else
        cout << "Number 1 or 2 is the same!";

    cout << "Enter integer 3: ";
    cin >> number;
    int c = number;

    if ((a != B) != c)
        cout << "Continue";
    else
        cout << "Number 3 is the same as number 1 or 2!";
    cout << "Enter integer 4: ";
    cin >> number;
    int d = number;

    if (((a != B) != c) != d)
        cout << "numbers are all different";
    else
        cout << "Number 3 is the same as number 1, 2, or 3!";
    cout << "Thank you enter another number?\n\n";
    cin >> number;
    return 0;
}

std::string numerals = "VXLCDM";
void function3()
{
    char roman_Numeral;
    int arabic_Numeral = 0;
    cout << "Enter the Roman Numeral in Capital letters (e.g. CCXIX) : ";
    while(cin.get(roman_Numeral))
    {
        if(roman_Numeral == 'M')
            arabic_Numeral = arabic_Numeral + 1000;
        else if(roman_Numeral == 'D')
        {
            roman_Numeral = cin.peek();
            if(numerals.find(roman_Numeral, 5) != std::string::npos)
            {
                arabic_Numeral = arabic_Numeral - 500;
                continue;
            }
            else
            {
                arabic_Numeral = arabic_Numeral + 500;
                continue;
            }
        }
        else if(roman_Numeral == 'C')
        {
            roman_Numeral = cin.peek();
            if(numerals.find(roman_Numeral, 4) != std::string::npos)
            {
                arabic_Numeral = arabic_Numeral - 100;
                continue;
            }
            else
            {
                arabic_Numeral = arabic_Numeral + 100;
                continue;
            }
        }
        else if(roman_Numeral == 'L')
        {
            roman_Numeral = cin.peek();
            if(numerals.find(roman_Numeral, 3) != std::string::npos)
            {
                arabic_Numeral = arabic_Numeral - 50;
                continue;
            }
            else
            {
                arabic_Numeral = arabic_Numeral + 50;
                continue;
            }
        }
        else if(roman_Numeral == 'X')
        {
            roman_Numeral = cin.peek();
            if(numerals.find(roman_Numeral, 2) != std::string::npos)
            {
                arabic_Numeral = arabic_Numeral - 10;
                continue;
            }
            else
            {
                arabic_Numeral = arabic_Numeral + 10;
                continue;
            }
        }
        else if(roman_Numeral == 'V')
        {
            roman_Numeral = cin.peek();
            if(numerals.find(roman_Numeral, 1) != std::string::npos)
            {
                arabic_Numeral = arabic_Numeral - 5;
                continue;
            }
            else
            {
                arabic_Numeral = arabic_Numeral + 5;
                continue;
            }
        }
        else if(roman_Numeral == 'I')
        {
            roman_Numeral = cin.peek();
            if(numerals.find(roman_Numeral) != std::string::npos)
            {
                arabic_Numeral = arabic_Numeral - 1;
                continue;
            }
            else
            {
                arabic_Numeral = arabic_Numeral + 1;
                continue;
            }
        }
        else
            break;
    }
    cout << arabic_Numeral << endl;
    return 0;
}
void input (double &);
void convert (double radius, int & feet, double & total);
void output (int, double, double);
void function4()
{
    double total, radius;
    int feet;
    char yn;
    do
    {
        input (radius);
        convert (radius, feet, total);
        output (feet, total, radius);
        cout << "Enter a Different radius? (y or n)\n";
        cin >> yn;
        cout << "\n\n";
    }
    while (yn == 'y'  || yn == 'Y');
    system("pause");
    return 0;
}
void input(double & radius)
{
    cout << "---------------------------Re Enter Radius-------------------------\n\n";
    cout << "Enter Radius:\n";
    cin >> radius;
    cout << "\n";
}
void convert(double radius, int & feet, double & total)
{
    //=======================================================
    total = 3.14 * radius * radius * radius * 4 / 3;
}
//========================================================
void output(int feet, double total, double radius)
{
    cout << "---------------------------Re Enter Radius-------------------------\n\n";
    cout << "The volume is: " << total << " \n\n";
    cout << "---------------------------   Equation    -------------------------\n\n";
    cout << "The Equation with (" << radius << ") being:\n\n";
    cout << "4/3 * 3.14 * (" << radius << ")^3 = " << total << "\n\n";
    cout << "---------------------------     Again?    -------------------------\n\n";
}
void swap( int &x, int &y )
    int number;

void function5()

{

    cout << "x is ";
    cin >> number;
    int x = number;

    cout << "y is ";
    cin >> number;
    int y = number;
    swap(x, y);
    cout << "Swapped the first number is now(" << x << ")and the second is now (" << y >> ")";

    return 0;
}
int leap (int year);
void function6 (void){
    int month,day,year,dm,dn,leap;

    printf("enter the month:");
    scanf("%d",&month);

    printf("enter the day:");
    scanf("%d",&day);

    printf("enter the year:");
    scanf("%d",&year);

    if (leap==0)
    {   if(month==1)
        dm=0;
        if(month==2)
            dm=31;
        if(month==3)
            dm=59;
        if(month==4)
            dm=90;
        if(month==5)
            dm=120;
        if(month==6)
            dm=151;
        if(month==7)
            dm=181;
        if(month==8)
            dm=212;
        if(month==9)
            dm=243;
        if(month==10)
            dm=273;
        if(month==11)
            dm=304;
        if(month==12)
            dm=334;}

    else
    {    if(month==1)
        dm=0;
        if(month==2)
            dm=31;

        if(month==3)
            dm=60;
        if(month==4)
            dm=91;
        if(month==5)
            dm=121;
        if(month==6)
            dm=152;
        if(month==7)
            dm=182;
        if(month==8)
            dm=213;
        if(month==9)
            dm=244;
        if(month==10)
            dm=274;
        if(month==11)
            dm=304;
        if(month==12)
            dm=335;}

        dn=dm+day;

        printf("the day number is :%d",dn);

        return 0;
}

int leap (int year){
    if((year%100== 0 && year%400==0)||  (year%4==0))

        return 1;
    else
        return 0;}

int main(int argc, char *argv[], int year, int leap, int number, int arabic_Numeral)

{
    function1();
    function2();
    function3();
    function4();
    function5();
    function6();
    return 0;
}
10
  • what exactly is the problem when you try to merge them into one main ? Commented Apr 23, 2012 at 2:03
  • What do you mean by "to run each simultaneously"? I see no reason for these functions to be in the same file. I'd start by naming the functions to describe their behaviour rather than calling them main(). Commented Apr 23, 2012 at 2:07
  • 1
    @Johnsyweb I think he means these were all separate homeworks and for his final project he needs to bring them all together... Commented Apr 23, 2012 at 2:11
  • professor wants them all in one .cpp file :/ gave me a 55% even though they all work seperately Commented Apr 23, 2012 at 3:56
  • 3
    I think the main reason you got 55% is that most of those programs don't work great individually. Commented Apr 23, 2012 at 5:41

2 Answers 2

2

Well for one you have int main() defined three times. You need to give each one a different name.

Also, you won't need to duplicate #include and using statements, just have them once at the beginning.

I would recommend moving your prototypes to the beginning of the class too, just for readability.

Sign up to request clarification or add additional context in comments.

Comments

1
if (a > b && a > c);
return a;
cout << "This is your highest number(" << a << ")";

These three lines summarize many of the problems in your code:

  • Your if conditions are useless:

    if (foo);
    

    only executes the foo test; the semicolon brackets the end of the code to execute if the foo is true:

    if (foo)
        /* then code */ ;
    
  • Your return a statement prevents execution of the rest of the code, including the cout line immediately following.

Some of these little problems would be more immediately obvious if you use a text editor, such as vim, that can do syntax-aware indenting for you. The editors aren't always as good as a compiler, but they can help save you some time if you pay attention to how they layout your code.

Furthermore, at least the code-after-return should have been reported to you by your compiler. If it didn't, turn up the warnings. (On gcc, -Wall -Wextra is nice.)


Update

To put each of these into a single file and call them each in turn, you'll need to re-format them slightly. Each program is currently self-contained and almost entirely run from within the main() routine. This is fine in toy programs but complicates your efforts to call them all from within a single executable.

Currently, in pseudo-code you've got a few files like this:

prog 1:

main() {
    /* ask for input */
    /* run the routine */
    /* maybe call functions */
    /* output results */
    /* quit */
}

prog 2:

main() {
    /* ask for input */
    /* run the routine */
    /* maybe call functions */
    /* output results */
    /* quit */
}

You'll need to re-arrange your program like this:

program:

void run_routine_one(); /* I think C++ forbids a (void) prototype here */
void run_routine_two();

main() {
    run_routine_one();
    run_routine_two();
    /* quit */
}

void run_routine_one() {
    /* ask for input */
    /* run the routine */
    /* maybe call functions */
    /* output results */
}

void run_routine_two() {
    /* ask for input */
    /* run the routine */
    /* maybe call functions */
    /* output results */
}

You can nearly copy-and-paste things together given this kind of template; in fact, you may wish to do so, though the global variables will complicate matters. (One more reason to discourage global storage without a good reason.)

If you have time before the project is due, I strongly recommend taking a little further step back and refactoring the code significantly -- your routines are currently mixing input, calculation, and output, and code is usually far easier to test and maintain if you split apart the input and output from the calculation. Your input and output would be easier if you provide some helper functions. A quick sketch of what this might look like:

int prompt_for_int(string)
{
    int ret;
    cout << string;
    cin >> ret;
    return ret;
}

int days_in_month(int month, int year)
{
    int leap = is_leap_year(year);
    /*                   J   F   M   A   M   J   J   A   S   O   N   D */
    int days[2][12] = { {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                        {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
    if (month < 0 || month > 11 || year < 1753)
        return -1;

    return days[leap][month];
}

void program_one()
{
    int month, year, days;

    month = prompt_for_int("Enter month, 1 for January, 2 for February...\n");
    month -= 1; /* zero-indexed month */

    year = prompt_for_int("Enter year, not before 1754...\n");

    days = days_in_month(month, year);
    cout << "There are " << days << " in " << month + 1
        << " " << year << nl;
    /* I'm no C++ expert -- perhaps >> nl isn't idiomatic or even functional */
}

int main(int argc, char *argv[])
{
    program_one();
    program_two();
    /* maybe given them better names */
    return 0;
}

I hope you can see the legibility gains from breaking a program into smaller pieces and having each function do as little as possible. You'll probably come across large functions that really do make sense to keep as large functions but try to get into the habit of breaking functions into as small pieces as you can. The smaller the tasks, the more likely you are to find that some fair simple re-writing can lead to far simpler code. (Check out that days_in_month() routine -- it uses arrays to store the number of days and picks which array to use based on the result of the is_leap_year() function. I learned this from The Elements of Programming Style (page 54) -- which, despite being written for FORTRAN and PL/1, is still an excellent book. Anyway, that little routine is very easy to test with a small program because it doesn't do any input and output itself.)

3 Comments

OK I understand where you are coming from slightly if I wanted to compile these together however how would I call them (despite how bad the code is) :) and thank you again
@KC: Okay, I added a few more examples and some more advice on merging your programs together. I hope this helps! Happy programming.
You probably shouldn't be changing the question much after you've asked it -- SO is a question and answer site, not really set up to handle iterating tasks. I'm glad your new code is working though, looks like you've done a good job doing the integrating.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.