• 0

C#, Parallel Arrays- Passing Array by Reference


Question

I am working on an Assignment that asks me to do this:

Develop a C# console application that implements two parallel arrays in Main, one to hold double values called item_price and the other to hold strings called item_name. Each array will hold 5 values. Use an initializer to fill the item_price array with the values 15.50, 50.99, 25.00, 115.49, 75.25. Use an initializer to fill the item_name array with the values "Widget", "Thingy", "Ratchet", "Clanger", "Fracker". This application will use a method to change the corresponding prices for items based on a price point and a multiplier which will require double value types. The inputs for the price and multiplier are input from the console.

 

Create two static methods, one called changePrices and one called printit. When the changePrices method is called from Main you should pass the item_price array by reference, the price point and price difference values input from the console to it. The changePrices method should loop through the item price array and check the price point to determine the increase in price for each price array element. The basic computation is:

if the current price is less than the price point then set the price equal to the current price plus the current price times the price multiplier

In the printit method print the item name and the corresponding item price to the console as shown in the output example below.

The price for item Widget is $15.50
The price for item Thingy is $50.99
The price for item Ratchet is $25.00
The price for item Clanger is $115.49
The price for item Fracker is $75.25

Enter the price cutoff point (eg $15.00) $60.00
Enter the percentage price change (eg 0.25) 0.15

The price for item Widget is $17.83
The price for item Thingy is $58.64
The price for item Ratchet is $28.75
The price for item Clanger is $115.49
The price for item Fracker is $75.25

Press any key to continue . . .

As shown in the sample output, your program will first use the printit method to print the parallel arrays as they are, next take inputs for the price point and the price change multiplier and then after the changePrices method has been executed run the printit method once again to show any changed prices.

 

I keep getting an error stating, "Cannot implicitly convert type 'double' to 'int'. An explicit conversion exist (are you missing a cast?) on
Line 32  Console.WriteLine("The price for item " + (item_name[x]) + "is " + item_price[x]);

as well  as several more errors. How can I fix this?

Here is my code:

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Assignment_9
{
    class Program
    {
        double ppoint = 0;
        double multi = 0;
        
        static void Main(string[] args)
        {
            //two arrays
            double[] item_price = { 15.50, 50.99, 25.00, 115.49, 75.25 };
            string[] item_name = { "Widget", "Thingy", "Ratchet", "Clanger", "Fracker" };


            Console.WriteLine();
            printit(item_name, item_price);
            Console.WriteLine();
            changePrices(item_price);
            Console.WriteLine();
            printit(item_name, item_price);
        }


       static void printit(string[] item_name, double[] item_price)
        {
            for (double x = 0; x < item_price.Length; x++)
            {
                Console.WriteLine("The price for item " + (item_name[x]) + "is " + item_price[x]);
            }
        }


        static void changePrices(double[] passed)
        {
            Console.WriteLine("Enter the price cutoff point (eg $15.00) $");
            ppoint = Convert.ToDouble(Console.ReadLine());


            Console.WriteLine("Enter the percentage price change (eg 0.25)");
            multi = Convert.ToDouble(Console.ReadLine());


            for (double x = 0; x < item_price.Length; x++)
            {
                if (x < ppoint)
                {
                    Console.WriteLine(x = (x + (x * multi)));
                }
            }
        }


    }
}

Link to comment
Share on other sites

19 answers to this question

Recommended Posts

  • 0

 

I am working on an Assignment that asks me to do this:

Develop a C# console application that implements two parallel arrays in Main, one to hold double values called item_price and the other to hold strings called item_name. Each array will hold 5 values. Use an initializer to fill the item_price array with the values 15.50, 50.99, 25.00, 115.49, 75.25. Use an initializer to fill the item_name array with the values "Widget", "Thingy", "Ratchet", "Clanger", "Fracker". This application will use a method to change the corresponding prices for items based on a price point and a multiplier which will require double value types. The inputs for the price and multiplier are input from the console.

 

Create two static methods, one called changePrices and one called printit. When the changePrices method is called from Main you should pass the item_price array by reference, the price point and price difference values input from the console to it. The changePrices method should loop through the item price array and check the price point to determine the increase in price for each price array element. The basic computation is:

if the current price is less than the price point then set the price equal to the current price plus the current price times the price multiplier

In the printit method print the item name and the corresponding item price to the console as shown in the output example below.

The price for item Widget is $15.50

The price for item Thingy is $50.99

The price for item Ratchet is $25.00

The price for item Clanger is $115.49

The price for item Fracker is $75.25

Enter the price cutoff point (eg $15.00) $60.00

Enter the percentage price change (eg 0.25) 0.15

The price for item Widget is $17.83

The price for item Thingy is $58.64

The price for item Ratchet is $28.75

The price for item Clanger is $115.49

The price for item Fracker is $75.25

Press any key to continue . . .

As shown in the sample output, your program will first use the printit method to print the parallel arrays as they are, next take inputs for the price point and the price change multiplier and then after the changePrices method has been executed run the printit method once again to show any changed prices.

 

I keep getting an error stating, "Cannot implicitly convert type 'double' to 'int'. An explicit conversion exist (are you missing a cast?) on

Line 32  Console.WriteLine("The price for item " + (item_name[x]) + "is " + item_price[x]);

as well  as several more errors. How can I fix this?

Here is my code:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Assignment_9
{
    class Program
    {
        double ppoint = 0;
        double multi = 0;
        
        static void Main(string[] args)
        {
            //two arrays
            double[] item_price = { 15.50, 50.99, 25.00, 115.49, 75.25 };
            string[] item_name = { "Widget", "Thingy", "Ratchet", "Clanger", "Fracker" };
 
            Console.WriteLine();
            printit(item_name, item_price);
            Console.WriteLine();
            changePrices(item_price);
            Console.WriteLine();
            printit(item_name, item_price);
        }
 
       static void printit(string[] item_name, double[] item_price)
        {
            for (double x = 0; x < item_price.Length; x++)
            {
                Console.WriteLine("The price for item " + (item_name[x]) + "is " + item_price[x]);
            }
        }
 
        static void changePrices(double[] passed)
        {
            Console.WriteLine("Enter the price cutoff point (eg $15.00) $");
            ppoint = Convert.ToDouble(Console.ReadLine());
 
            Console.WriteLine("Enter the percentage price change (eg 0.25)");
            multi = Convert.ToDouble(Console.ReadLine());
 
            for (double x = 0; x < item_price.Length; x++)
            {
                if (x < ppoint)
                {
                    Console.WriteLine(x = (x + (x * multi)));
                }
            }
        }
 
    }
}
 

 

i'm half drunk right now...

 

but how does the new values in "static void changePrices(double[] passed)" supposed to get back to the main program ?

Link to comment
Share on other sites

  • 0

I didn't read most of that, but the error you're getting is because you're using a double for your for loop. Try:

 

   for (int x = 0; x < item_price.Length; x++)
Link to comment
Share on other sites

  • 0

I thought it was supposed to get called by the second printit method in main. Is it not written correctly?

Link to comment
Share on other sites

  • 0

I thought it was supposed to get called by the second printit method in main. Is it not written correctly?

 

When the changePrices method is called from Main you should pass the item_price array by reference

 

that basically sends it as a pointer.. you're sending it by value right now so you're sending a copy of the data.. when you leave the scope of the function you are losing the new values.

Link to comment
Share on other sites

  • 0

 

I didn't read most of that, but the error you're getting is because you're using a double for your for loop. Try:

   for (int x = 0; x < item_price.Length; x++)

 

Thanks, I made that change and moved down the variable to the changePrices method and get the same error for this line:

                    Console.WriteLine(x = (x + (x * multi)));
 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Assignment_9_Homma
{
    class Program
    {
        
        static void Main(string[] args)
        {
            //two arrays
            double[] item_price = { 15.50, 50.99, 25.00, 115.49, 75.25 };
            string[] item_name = { "Widget", "Thingy", "Ratchet", "Clanger", "Fracker" };
 
            Console.WriteLine();
            printit(item_name, item_price);
            Console.WriteLine();
            changePrices(item_price);
            Console.WriteLine();
            printit(item_name, item_price);
        }
 
       static void printit(string[] item_name, double[] passed)
        {
            for (int x = 0; x < passed.Length; x++)
            {
                Console.WriteLine("The price for item " + (x + 1) + "is " + passed[x]);
            }
        }
 
        static void changePrices(double[] passed)
        {
            double ppoint = 0;
            double multi = 0;
        
            Console.WriteLine("Enter the price cutoff point (eg $15.00) $");
            ppoint = Convert.ToDouble(Console.ReadLine());
 
            Console.WriteLine("Enter the percentage price change (eg 0.25)");
            multi = Convert.ToDouble(Console.ReadLine());
 
            for (int x = 0; x < passed.Length; x++)
            {
                if (x < ppoint)
                {
                    Console.WriteLine(x = (x + (x * multi)));
                }
            }
        }
 
    }
}
Link to comment
Share on other sites

  • 0

 

Thanks, I made that change and moved down the variable to the changePrices method and get the same error for this line:

                    Console.WriteLine(x = (x + (x * multi)));
 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Assignment_9_Homma
{
    class Program
    {
        
        static void Main(string[] args)
        {
            //two arrays
            double[] item_price = { 15.50, 50.99, 25.00, 115.49, 75.25 };
            string[] item_name = { "Widget", "Thingy", "Ratchet", "Clanger", "Fracker" };
 
            Console.WriteLine();
            printit(item_name, item_price);
            Console.WriteLine();
            changePrices(item_price);
            Console.WriteLine();
            printit(item_name, item_price);
        }
 
       static void printit(string[] item_name, double[] passed)
        {
            for (int x = 0; x < passed.Length; x++)
            {
                Console.WriteLine("The price for item " + (x + 1) + "is " + passed[x]);
            }
        }
 
        static void changePrices(double[] passed)
        {
            double ppoint = 0;
            double multi = 0;
        
            Console.WriteLine("Enter the price cutoff point (eg $15.00) $");
            ppoint = Convert.ToDouble(Console.ReadLine());
 
            Console.WriteLine("Enter the percentage price change (eg 0.25)");
            multi = Convert.ToDouble(Console.ReadLine());
 
            for (int x = 0; x < passed.Length; x++)
            {
                if (x < ppoint)
                {
                    Console.WriteLine(x = (x + (x * multi)));
                }
            }
        }
 
    }
}

 

          Console.WriteLine(x + (x * multi));

 

and you're still not passing by reference(the point of this assignment). you will continually get the old values and never the new changed ones.

 

work harder or reconsider major

Link to comment
Share on other sites

  • 0

When the changePrices method is called from Main you should pass the item_price array by reference

 

that basically sends it as a pointer.. you're sending it by value right now so you're sending a copy of the data.. when you leave the scope of the function you are losing the new values.

 

So should this:

 

printit(item_name, item_price)

 

Look like this instead:

 

printit(item_name, item_price[x])

Link to comment
Share on other sites

  • 0

  static void changePrices(ref double[] passed)

changePrices(ref item_price);

 

did you read your textbook?

 

https://msdn.microsoft.com/en-us/library/szasx730.aspx

Regarding arrays, the array reference is passed by value, but the array contents is not. If you're just changing the contents of the array it is not necessary pass by reference. It's only necessary if you're creating a new array and want to pass it back. 

Link to comment
Share on other sites

  • 0

So how can I make this line properly pass by reference:

 

Console.WriteLine(x = (x + (x * multi)));

 

your not passing ANYTHING in that statement except to the "WriteLine" function.

 

also you're trying to assign a value in that statement. you can't do that.

never mind that last part. apparently you can. i'd never done it before.. i'd still consider it bad form but whatever.

Link to comment
Share on other sites

  • 0

we can't do your homework for you.

Clearly, I'm not asking that with all this code. What I'm asking is what next?

Link to comment
Share on other sites

  • 0

So what should I do instead?

 

You're not using x correctly, x contains the current index of the for loop, but not the value you want to work with. You need to read a value from the array and write it back to the array using x.

       for (int x = 0; x < passed.Length; x++)
            {
                if (passed[x] < ppoint)
                {
                    passed[x] = (passed[x] + (passed[x] * multi)));
                }
Link to comment
Share on other sites

  • 0

 

You're not using x correctly, x contains the current index of the for loop, but not the value you want to work with. You need to read a value from the array and write it back to the array using x.

       for (int x = 0; x < passed.Length; x++)
            {
                if (passed[x] < ppoint)
                {
                    passed[x] = (passed[x] + (passed[x] * multi)));
                }

 

Thank you, I had tried a form of that but had too much info in each area where you have passed, which made more errors. I appreciate it greatly!!!!!

Link to comment
Share on other sites

  • 0

Thank you, I had tried a form of that but had too much info in each area where you have passed, which made more errors. I appreciate it greatly!!!!!

 

And thank you for the explanation.

Link to comment
Share on other sites

  • 0

To clarify, you don't need to pass anything by reference in this example, unless you wanted a function that did:

static void changePrices(ref double[] passed)
{
    passed = new double[passed.Length];
    ....other stuff....
}
Link to comment
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.