-2

I got the following problem, i can't figure out how to compare the two arrays and display the difference between the two or show that it is a tie. Please help with this exercise. The code that I currently have does not allow me to find the difference of each car. I'm not sure what i have to do.

There are eight cars in each team called Chevy and Ford. One car from each team races its opponent on the drag strip. Read in the racing times for the eight Chevy cars and then read in the times for the eight Ford cars. Store the times into arrays called Chevy[ ] and Ford[ ]. Then list the winner of each pair, giving the number of seconds the winner won by. At the end declare which team won based on which team had the most wins. Below is a sample match.

Enter the times for the Chevy cars: 5.4 7.2 4.0 9.1 5.8 3.9 6.2 8.1 Enter the times for the corresponding Ford cars: 5.8 6.9 3.9 9.2 5.8 3.8 6.0 8.5 And the winners are: Chevy by 0.4 sec Ford by 0.3 sec Ford by 0.1 sec Chevy by 0.1 sec Tie ! Ford by 0.1 sec Ford by 0.2 sec Chevy by 0.4 sec And the winning team is: F O R D !

• Accept the racing times for each of the Chevy cars into the array Chevy[ ].
• Accept the racing times for each of the Ford cars into the array Ford[ ].
• Then declare the wining car for each race, giving the winning time in seconds. • If the times are identical, then declare the race was a tie. • Finally, declare which team won the match, assuming a tie is possible.

and here is my code

    {

        //declare varibles
        double[] chevy = new double[8];
        double[] ford = new double[8];
        int x, y;
        double ctotal = 0, chevyaverage = 0;
        double ftotal = 0, fordaverage = 0;
        double cwin= 0, fwin = 0;
        //calculations

        //input
        for (x = 0; x < 8; x++)
        {
            Console.Write("Enter time for chevy car " + (x + 1) + ":");
            chevy[x] = double.Parse(Console.ReadLine());
        }
        for (y = 0; y < 8; y++)
        {
            Console.Write("Enter time for ford car " + (y + 1) + ":");
            ford[y] = double.Parse(Console.ReadLine());
        }
                         //this is not working, it keeps coming up as 1
        if (chevy[x] < ford[y])
        {
            cwin = chevy[x] - ford[y];
            Console.WriteLine("Chevy won by: " + cwin);
        }
        else if (ford[y] < chevy[x])
        {
            fwin = ford[y] - chevy[x];
            Console.WriteLine("Ford won by: " + fwin);
        }
        else
        {
            Console.WriteLine("Tie!");
        }

        //output


        Console.ReadLine();

   }
}

3 Answers3

1

Ok the first part collecting the data it would work for the exercise.

What you would need to tweek is the logic to find the winner. I will start after you collect the times for each of the teams.

What I would suggest to do is:

  1. Iterate from 0..N-1 (N = 8 which is the array length) (I didn't saw that loop in your code, I hope I am not missing it)
  2. While iterating do the comparison as following:

    int chevyWins = 0, fordWins = 0;
    for (int i = 0; i < 8; i++)
    {
        if (chevy[i] < ford[i])
        {
            //Note the difference with your code, your are doing 
            //the subtraction chevy[i] - ford[i] that will give you negative numbers.
            chevyWins++;
            Console.WriteLine(String.Format("Chevy won by {0}", (ford[i] - chevy[i])));
        }
        else if (chevy[i] > ford[i])
        {
            fordWins++;
            Console.WriteLine(String.Format("Ford won by {0}", (chevy[i] - ford[i])));
        }
        else
        {
            Console.WriteLine("Tie!");
        }
    }
    
    if (chevyWins > fordWins)
    {
        Console.WriteLine("Chevy Wins the competition!");
    }
    else if (chevyWins < fordWins)
    {
        Console.WriteLine("Ford Wins the competition!");
    }
    else
    {
        Console.WriteLine("The competition was tie!");
    }
    

    I think the issue with your code was that you were not iterating to compare each of the scenarios. And the second was how you were calculating the difference between each competition.

Here is the fiddle.

I hope this works for you! Regards.

Andrés Soto
  • 954
  • 1
  • 10
  • 20
  • okay, so what does string.format do? we haven't learned anything about that yet. – Justin Scott Aug 29 '15 at 03:43
  • From the documentation: "Converts the value of objects to strings based on the formats specified and inserts them into another string." Basically let you concatenate strings. You can replace it by using "Chevy won by" + (ford[i] -chevy[i]); and will give you the same result. – Andrés Soto Aug 29 '15 at 03:46
  • I see two things I did wrong, first I put x and y for the arrays when i was supposed to put i, and like you said was with how i was calculating the difference between the two. Thanks. That helped me learn some more, – Justin Scott Aug 29 '15 at 03:51
0

Try this, You have already have written for the major part of the question and you add variables cn and fn the count of winning cars of companies and compare them atlast

{

    //declare varibles
    double[] chevy = new double[8];
    double[] ford = new double[8];
    int x, y;
    double ctotal = 0, chevyaverage = 0;
    double ftotal = 0, fordaverage = 0;
    double cwin= 0, fwin = 0;
    //calculations

    //input
    for (x = 0; x < 8; x++)
    {
        Console.Write("Enter time for chevy car " + (x + 1) + ":");
        chevy[x] = double.Parse(Console.ReadLine());
    }
    for (y = 0; y < 8; y++)
    {
        Console.Write("Enter time for ford car " + (y + 1) + ":");
        ford[y] = double.Parse(Console.ReadLine());
    }
    int cn=0,fn=0; //count of chevy wins and ford wins
    for(int x=0,int y=0;x<8;x++,y++)
    {

      if (chevy[x] < ford[y])
      {
        cn++;//chevy wins soo increment this
        cwin = chevy[x] - ford[y];
        Console.WriteLine("Chevy won by: " + cwin);
      }
      else if (ford[y] < chevy[x])
      {
        fn++;// ford wins
        fwin = ford[y] - chevy[x];
        Console.WriteLine("Ford won by: " + fwin);
      }
      else
      {
        Console.WriteLine("Tie!");// In tie no one wins so need not include this.
      }

    //output

    for (x = 0; x < 8; x++)
    {
        ctotal = ctotal + chevy[x];
    }
    chevyaverage = ctotal / 8;

    for (y = 0; y < 8; y++)
    {
        ftotal = ftotal + ford[y];
    }
    fordaverage = ftotal / 8;

    if(cn>fn)//checking the number of wins for each team
    {
        Console.WriteLine("Chevy wins");
    }
    else
        Console.writeLine("Ford wins");
    Console.WriteLine("The average time in seconds for each chevy car is: " + chevyaverage);
    Console.WriteLine("The average time in seconds for each ford car is: " + fordaverage);

    Console.ReadLine();

 }
}
Aditya Kiran
  • 251
  • 1
  • 4
  • 12
  • "Try this" is not useful explanation of the problem. If you feel copy/paste of original wall of code is necessary please make sure to carefully mark/comment each change you presumably made and add consider separate textual explanation too. – Alexei Levenkov Aug 29 '15 at 01:45
  • "Try this" is not all the poster wrote, Alexei. And while the post could benefit from constructive criticism, I think the nastiness is not necessary. – WDS Aug 29 '15 at 01:53
  • it threw up a bunch of errors so that code won't work – Justin Scott Aug 29 '15 at 02:42
  • any other ideas? i tried to google it but it kept trying to give me something else – Justin Scott Aug 29 '15 at 03:14
  • @JustinScott take it more like a pseudocode rather than just copy pasting this. – Aditya Kiran Aug 29 '15 at 03:30
  • 1
    okay, I looked more into it and with someones help I figured out that the way i was trying to do the difference and the arrays were wrong. Thank you though – Justin Scott Aug 29 '15 at 03:54
0

This is done in LinqPad so you would take out the ".Dump()" but you can use .Zip to do what you are trying to do by comparing both arrays. I have shortened the code for example purpose but you would do your loops and push the items into the arrays then .Zip them to do your comparison.

using System.Linq;

void Main()
{
    double[] chevy = { 1, 2, 1, 1 };
    double[] ford = { 2, 1, 1, 2 };

    var results = chevy.Zip(ford, (c, f) => 
    {
        if(c < f)
        {
            return "Chevy Won";
        }
        else if(f < c)
        {
            return "Ford Won";
        }
        else
        {
            return "It was a tie";
        }
    });

    results.Dump();
}

//output
    Chevy Won 
    Ford Won 
    It was a tie 
    Chevy Won 
Stephen Brickner
  • 2,584
  • 1
  • 11
  • 19