• 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

    • Weekend PC Game Deals: Automation fests, Civilization for free, charity specials, and more by Pulasthi Ariyasinghe Weekend PC Game Deals is where the hottest gaming deals from all over the internet are gathered into one place every week for your consumption. So kick back, relax, and hold on to your wallets. The Epic Games Store unlocked a big strategy game giveaway earlier this week: Civilization VI: Platinum Edition. Coming in from Firaxis Games, the turn-based 4X experience has you starting world-conquering campaigns to explore, expand, exploit, and exterminate everything in your empire's reach. PvP and co-op multiplayer are also options if the various forms of AI prove to be too easy or even too troublesome. The Sid Meier’s Civilization VI: Platinum Edition giveaway is live until July 24, and it comes with two massive expansions as well as six DLC packs with extra scenarios, leaders, and more. Next week, tower defense title Legion TD 2 will become the latest freebie on the Epic Games Store. The Humble Store brought a new bundle for action game fans this weekend, and it's all about the Devil May Cry franchise. The Devil Trigger Collection begins with DmC: Devil May Cry and Devil May Cry HD Collection for $10. If you want to complete the bundle, it will set you back $20, which gets you Devil May Cry 4 Special Edition as well as the most recent entry, Devil May Cry 5, as well as its Vergil DLC. This bundle has two weeks left on its counter before it goes away. Big Deals Most publishers are returning to their usual weekend specials after the massive summer sales, so there are plenty of discounts to go around. There's even a special Make a Wish charity sale running on Steam with some discounted viral hits. With all those and more, here's our hand-picked big deals list for the weekend: Satisfactory – $27.99 on Steam Captain of Industry – $24.49 on Steam No Man's Sky – $23.99 on Steam Persona 5 Royal – $23.99 on Steam No More Room in Hell 2 – $22.49 on Steam FOUNDRY – $20.99 on Steam Banishers: Ghosts of New Eden – $19.99 on Steam SULFUR – $19.99 on Steam Assassin's Creed Mirage – $19.99 on Steam Alan Wake 2 – $19.99 on Epic Store Grand Theft Auto V Enhanced – $19.79 on Steam Norland – $19.49 on Steam Stray – $17.99 on Steam V Rising – $17.49 on Steam Dyson Sphere Program – $15.99 on Steam The Outlast Trials – $15.99 on Steam Warhammer 40,000: Darktide – $15.99 on Steam The Outlast Trials – $15.99 on Steam Red Dead Redemption 2 – $14.99 on Steam Turing Complete – $13.99 on Steam Eden Crafters – $13.99 on Steam Core Keeper – $13.99 on Steam Thank Goodness You're Here! – $12.99 on Steam Opus Magnum – $9.99 on Steam Autonauts – $9.99 on Steam EXAPUNKS – $9.99 on Steam DRAGON BALL XENOVERSE 2 – $9.99 on Steam Superliminal – $9.99 on Steam Heaven's Vault – $9.99 on Steam RAILGRADE – $9.89 on Steam Goat Simulator 3 – $9.89 on Steam Tchia – $9.89 on Steam ACE COMBAT 7: SKIES UNKNOWN – $9.59 on Steam PAYDAY 3 – $8.99 on Steam Assassin's Creed Origins – $8.99 on Steam Viewfinder – $8.74 on Steam Escape Academy – $7.99 on Steam Pit People – $7.99 on Steam Skull and Bones – $7.99 on Steam Immortals Fenyx Rising – $7.99 on Steam Imperator: Rome – $7.59 on Steam SHENZHEN I/O – $7.49 on Steam Tom Clancy’s The Division 2 – $7.49 on Steam Bassmaster Fishing – $7.49 on Steam Let's Build a Zoo – $6.99 on Steam The Forgotten City – $6.24 on Steam Control Ultimate Edition – $5.99 on Steam Bramble: The Mountain King – $5.99 on Steam Assassin’s Creed Rogue – $5.99 on Steam RoboCop: Rogue City – $4.99 on Steam Kingdom Two Crowns – $4.99 on Steam Scott Pilgrim vs. The World: The Game – $4.94 on Steam Castle Crashers – $4.49 on Steam BattleBlock Theater – $4.49 on Steam TOEM: A Photo Adventure – $3.99 on Steam Supraland – $3.99 on Steam Vampire Survivors – $3.99 on Steam Darkwood – $3.74 on Steam Valiant Hearts: The Great War – $3.74 on Steam TIS-100 – $3.49 on Steam PAYDAY 2 – $3.29 on Steam Cake Bash – $2.99 on Steam Ragnarock – $1.99 on Steam Alan Wake – $1.49 on Steam Civilization VI Platinum Edition – $0 on Epic Store DRM-free Specials Lastly, here are some highlights from the DRM-free discounts available on the GOG store this weekend: Age of Wonders 4 - $29.99 on GOG Pathfinder: Wrath of the Righteous - Game of the Year Edition - $19.99 on GOG Tomb Raider IV-VI Remastered - $19.49 on GOG The Thaumaturge - $19.24 on GOG Chained Echoes - $13.74 on GOG Tyranny - Gold Edition - $12.49 on GOG Tomb Raider I-III Remastered Starring Lara Croft - $11.99 on GOG Baldur's Gate: Enhanced Edition - $9.99 on GOG Baldur's Gate II: Enhanced Edition - $9.99 on GOG Neverwinter Nights: Enhanced Edition - $9.99 on GOG Old World - $9.99 on GOG Icewind Dale: Enhanced Edition - $9.99 on GOG Neverwinter Nights: Doom of Icewind Dale - $7.99 on GOG Kingdom Come: Deliverance - $5.99 on GOG Might and Magic 6-pack Limited Edition - $4.99 on GOG Heroes of Might and Magic 3: Complete - $4.99 on GOG Blood Omen: Legacy of Kain - $3.49 on GOG Might and Magic 8: Day of the Destroyer™ - $2.99 on GOG Worms Armageddon - $2.99 on GOG ATOM RPG: Post-apocalyptic indie game - $2.99 on GOG Keep in mind that availability and pricing for some deals could vary depending on the region. That's it for our pick of this weekend's PC game deals, and hopefully, some of you have enough self-restraint not to keep adding to your ever-growing backlogs. As always, there are an enormous number of other deals ready and waiting all over the interwebs, as well as on services you may already subscribe to if you comb through them, so keep your eyes open for those, and have a great weekend.
    • Wild that this was even allowed from the jump
    • Microsoft stops using China-based engineers to support US defense clients by Hamid Ganji Microsoft announced on Friday that its China-based engineers can no longer provide technical support to the US military and other defence clients using the company's cloud services. Frank Shaw, Microsoft's Chief Communications Officer, wrote on X, "In response to concerns raised earlier this week about US-supervised foreign engineers, Microsoft has made changes to our support for US Government customers to assure that no China-based engineering teams are providing technical assistance for DoD Government cloud and related services." The issue came into the spotlight after a report by ProPublica detailed how Microsoft's Azure engineers in China are providing technical support to the US defense clients. Microsoft had apparently told ProPublica that its engineers and contractors complied with US government laws. These China-based engineers are reportedly supervised through so-called "digital escorts" in the US, who are allegedly less technically qualified than the engineers and can not determine whether the Chinese engineers under their supervision pose a cyber threat to the United States. On Friday, Senator Tom Cotton sent a letter to Defense Secretary Pete Hegseth, demanding explanations about how these "digital escorts" are trained to detect threats, as well as the list of contractors that use Chinese personnel. "The US government recognizes that China's cyber capabilities pose one of the most aggressive and dangerous threats to the United States, as evidenced by infiltration of our critical infrastructure, telecommunications networks, and supply chains," Cotton wrote. In a video posted on X, Hegseth said this is "obviously unacceptable" and that he's issuing a two-week review of Pentagon cloud deals to ensure that "China will no longer have any involvement whatsoever in our cloud services, effective immediately." The US Defense Secretary also said the current controversy is due to "A legacy system created over a decade ago, during the Obama administration." Microsoft, Amazon, Google, and Oracle jointly received a $9 billion Department of Defense cloud services contract in 2022.
    • This morning down to 17% after 8 days.
    • Cutcon 4.0 by Razvan Serea Cutcon is a free, open-source desktop app for cutting, converting, and previewing video, audio, and image files. Built with Kotlin and powered by FFmpeg, it's fast, lightweight, and easy to use. Ideal for content creators, editors, and developers, Cutcon supports a wide range of media formats and offers a clean user interface. Originally forked from the Clipper project, it enhances performance and usability while remaining fully cross-platform. Whether trimming videos or converting audio formats, Cutcon streamlines your workflow without compromising quality. Perfect for those seeking a simple yet powerful media processing tool. Cutcon offers three core functions that make working with media files fast and simple: Cut – Remove unwanted sections from video, audio, or image files without re-encoding. Keep only what you need. Convert – Change files from one format to another using FFmpeg. Supports a wide range of formats for video, audio, and images. Preview – Play media directly inside the app before cutting or converting. Quickly verify content without opening another program. Cutcon 4 release notes: This release rebases Cutcon on Clipper v1.20.0 bringing support for Linux and macOS and updating the app branding. Also, there is now only one variant of the app with support for most common media types. New features Add support for Linux operating system (common distros) Add support for macOS operating system (experimental) Add support for playing FLAC audio format Add support for playing Opus audio format Improvements Update app brand (logo, colors) Improve media player to hugely boost its performance Use a fake file for the app initial input source Make theme colors change with animation Update the app error window layout Misc Change log file directory to user home Several improvements in app code Download: Cutcon 4.0 | 89.8 MB (Open Source) View: Cutcon Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
  • Recent Achievements

    • First Post
      artistro08 earned a badge
      First Post
    • First Post
      paul29 earned a badge
      First Post
    • Dedicated
      Homeless Vagrant earned a badge
      Dedicated
    • One Month Later
      Coolray5432 earned a badge
      One Month Later
    • Week One Done
      Coolray5432 earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      498
    2. 2
      ATLien_0
      223
    3. 3
      Michael Scrip
      196
    4. 4
      Xenon
      161
    5. 5
      +FloatingFatMan
      138
  • Tell a friend

    Love Neowin? Tell a friend!