Trädvy Permalänk
Medlem
Registrerad
Aug 2020

Programmering 1

Hej jag pluggar programmering 1 på distans och jag behöver lite hjälp med en uppgift jag håller på med här kommer uppgift beskrivningen:

Denna uppgift går ut på att en amerikanare ska skriva in en temperatur för ett bastuaggregat tills man skriver in
en temperatur som anses lagom. För att kontrollera detta ska vi ha en temperatur som anger den lägsta
godtagbara temperaturen och en som anger den högsta godtagbara temperaturen.
Tyvärr förstår vår kära bastubesökare enbart Fahrenheit medan
bastuaggregatet enbart förstår Celsius. Därför har du fått skriva ett program
som konverterar det som skrivs in från Fahrenheit till Celsius.
Den optimala temperaturen för bastun är 75 grader men den godtagbara
temperaturen är från 73 till 77 grader. Detta ska styras hela i villkorssatsen i
loopen.
Om talet är mindre än den minsta godtagbara temperaturen ska programmet
skriva att det är för kallt och man får skruva upp lite. Därefter får
bastubesökaren ställa in ett nytt värde på bastuaggregatet och loopen
upprepas.
I denna uppgift ska ni hantera följande:
1. Undantagshantering
2. Metoder
3. Villkor

Jag vill fortfarande att det tal användaren skriver in lagras i en int först eftersom man med stor sannolikhet bara
skriver in heltal. Det innebär att metoden ska se ut så här:
public static double FahrToCels(int fahr)
{
//Typomvandla fahr till flyttal
//Gör uträkning med decimaler i svaret
return temp;

Mitt problem är att att jag vet inte hur jag ska convertera int fahrIn i metoden till double.
Väldigt tacksam ifall någon kan hjälpa mig
MVH

public static double FahrenheitToCelcius(int fahrIn) { double fahrOut = Convert.ToDouble(fahrIn); double celcius = (fahrOut - 32) * 5 / 9; Console.WriteLine(celcius); return celcius; } public static void Main(string[] args) { Console.WriteLine("Write in how many degrees you want in fahrenheit"); double fahrenheit = 0; while (!double.TryParse(Console.ReadLine(), out fahrenheit)) { Console.WriteLine("WRONG! You can only use number!"); } do { if (fahrenheit > 171) { double celcius = FahrenheitToCelcius(fahrenheit); Console.WriteLine("Its to hot turn the value down! Fahrnheit: " + fahrenheit + " Celcius: " + celcius); try { double fahr1 = double.Parse(Console.ReadLine()); fahrenheit = fahr1; } catch { Console.WriteLine("WRONG! You can only use number!"); } } else if (fahrenheit < 163) { double celcius = FahrenheitToCelcius(fahrenheit); Console.WriteLine("Its to cold turn the value up! Fahrnheit: " + fahrenheit + " Celcius: " + celcius); try { double fahr2 = double.Parse(Console.ReadLine()); fahrenheit = fahr2; } catch { Console.WriteLine("WRONG! You can only use number!"); } } } while (fahrenheit < 163 || fahrenheit > 171); if (fahrenheit == 167) { double celcius = FahrenheitToCelcius(fahrenheit); Console.WriteLine("Temperature is perfect! Fahrnheit: " + fahrenheit + " Celcius: " + celcius); } else { double celcius = FahrenheitToCelcius(fahrenheit); Console.WriteLine("The temperature is good! Fahrnheit: " + fahrenheit + " Celcius: " + celcius); }

Trädvy Permalänk
Medlem
Registrerad
Aug 2002

Till att börja med så lagrar du ju det användaren skriver in i en double, så förstår inte:
"Jag vill fortfarande att det tal användaren skriver in lagras i en int först eftersom man med stor sannolikhet bara skriver in heltal. "

Nästa problem är ju att hela logiken i programmet vad jag ser är fel, eftersom du hela tiden använder farenheit i flödet när uppgiften säger:

"Tyvärr förstår vår kära bastubesökare enbart Fahrenheit medan
bastuaggregatet enbart förstår Celsius. Därför har du fått skriva ett program
som konverterar det som skrivs in från Fahrenheit till Celsius.
Den optimala temperaturen för bastun är 75 grader men den godtagbara
temperaturen är från 73 till 77 grader. Detta ska styras hela i villkorssatsen i
loopen."

Det tolkar jag som att det i din logik först ska konverteras till celcius och sen jämföras med det, du har ju själv översatt 73&77 grader till motsvarighet i F och köttar på efter det....

Här har du några andra som frågat på samma uppgift:
https://www.sweclockers.com/forum/sok?searchid=8381e6f6-6c7f-...

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

Du har även gjort det väldigt vanliga felet att göra koden betydligt mer komplicerad än den behöver vara. Du behöver enbart ett enda anrop till Console.ReadLine och FahrenheitToCelcius i hela programmet, just nu har du 3 respektive 4 anrop till de funktionerna.

Det kanske skulle vara enklare om du glömmer allt med bastu att göra och först skriver ett program som bara konverterar fahrenheit-värden som användaren skriver in till celsius. När du väl har fått till den delen så kan du bygga vidare och lägga till resten.