• 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)));
                }
            }
        }


    }
}

19 answers to this question

Recommended Posts

  • 0
  On 11/05/2015 at 03:03, thehappygoldenlady said:

 

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 ?

  • 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++)
  • 0
  On 11/05/2015 at 03:43, thehappygoldenlady said:

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.

  • 0
  On 11/05/2015 at 03:30, virtorio said:

 

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)));
                }
            }
        }
 
    }
}
  • 0
  On 11/05/2015 at 03:51, thehappygoldenlady said:

 

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

  • 0
  On 11/05/2015 at 03:45, seta-san said:

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])

  • 0
  On 11/05/2015 at 03:58, thehappygoldenlady said:

So should this:

 

printit(item_name, item_price)

 

Look like this instead:

 

printit(item_name, item_price[x])

  static void changePrices(ref double[] passed)

changePrices(ref item_price);

 

did you read your textbook?

 

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

  • 0
  On 11/05/2015 at 04:01, seta-san said:

  static void changePrices(ref double[] passed)

changePrices(ref item_price);

 

did you read your textbook?

 

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

 

Yes, I did, but I am honestly drawing a blank on how to make this work right. That's why I came here. I really appreciate any the assistance you are able to provide.

  • 0
  On 11/05/2015 at 04:01, seta-san said:

  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. 

  • 0
  On 11/05/2015 at 04:43, thehappygoldenlady said:

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.

  • 0
  On 11/05/2015 at 04:54, thehappygoldenlady said:

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)));
                }
  • 0
  On 11/05/2015 at 04:59, virtorio said:

 

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!!!!!

  • 0
  On 11/05/2015 at 05:03, thehappygoldenlady said:

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.

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

    • No registered users viewing this page.
  • Posts

    • lol See... one is only 100% when it's by itself. I live for exceptions to the rule... our talk point was in reference in comparing Vista (not SP1/2) release vs. 7. Any OS will run stable once enough work has been put into it... hell, even Windows 95 had six versions before she was finally complete(d)... just about, what, six or seven months before 98 became available?
    • 3uTools 3.26.007 by Razvan Serea 3uTools is a powerful iOS management tool that allows users to efficiently handle their iPhone or iPad without relying on iTunes. It offers seamless data transfer, one-click backup and restore, firmware updates, and a built-in file explorer for easy access to system files. Users can also manage apps, contacts, and media, including photos, videos, and ringtones, all within a simple and intuitive interface. For optimization and maintenance, 3uTools provides battery health monitoring, real-time device information, and system cleanup tools. It also includes features like screen recording, video conversion, and iCloud backup management, making it an essential tool for iOS users looking for greater control over their devices. Key features of 3uTools: iOS device management App installation and removal Firmware downloads and updates Backup and restore functions Data transfer between iOS and PC Ringtone creation Custom wallpaper management Device flashing File system explorer Battery health monitoring Screen capture and recording Video and photo management iCloud backup support Flashing and restoring iOS without data loss 3uTools 3.26.007 changelog: Easy Flash supports iOS 26.0 flashing. Optimized Virtual Location. Fixed some known bugs. Download: 3uTools 3.26.007 | 186.0 MB (Freeware) Download: 3uTools 32-bit | 192.0 MB View: 3uTools Home Page | macOS | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • The development time of this Operating System will have competition with the development time of Star Citizen 😂
    • I saw the 300 in the image and thought it was the number of cores! 🤣
    • Threads is getting a feature Reddit has had for nearly a decade by David Uzondu Back in January, reverse engineer Alessandro Paluzzi (@alex193a) first uncovered that Threads was working on spoiler tags. Now, Meta CEO Mark Zuckerberg (@zuck) has made it official: the feature is in testing. It is a straightforward tool for hiding content, especially text, behind a block that you have to click to reveal, perfect for discussing the ending of your favorite show without ruining the experience for others. It is also, notably, a feature that Reddit has had since January 2017. https://www.threads.com/@zuck/post/DK-BydcJHkF For a platform aiming to be a town square for public discourse, not having a native way to handle spoilers is a small but noticeable handicap for communities focused on pop culture. In a press release, Meta told TechCrunch that popular shows like The Last of Us trended heavily on the app, which the company frames as a sign of a "growing community of entertainment and pop culture enthusiasts." The new feature also supports images so that you can hide shocking visuals or text-filled screenshots. From the images Meta shared, it seems to work just as Paluzzi uncovered months ago. Users with access to the test can highlight text in the composer, and a "mark spoiler" option will appear in a small menu. This method is purely button-based, unlike on Reddit, where users have the option of either using a similar editor button or manually typing out the markdown command >!like this!< to hide their text. This update does not exist in a vacuum. After several months of feeling incomplete, the platform has been getting features that users have actually been asking for. We have seen this with the recent DMs feature, also in testing, which finally gives people a way to have private chats without jumping over to other platforms like Instagram.
  • Recent Achievements

    • Explorer
      treker_ed went up a rank
      Explorer
    • Apprentice
      CHUNWEI went up a rank
      Apprentice
    • Veteran
      1337ish went up a rank
      Veteran
    • Rookie
      john.al went up a rank
      Rookie
    • Week One Done
      patrickft456 earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      659
    2. 2
      ATLien_0
      271
    3. 3
      +FloatingFatMan
      176
    4. 4
      Michael Scrip
      157
    5. 5
      Steven P.
      136
  • Tell a friend

    Love Neowin? Tell a friend!