Programmering 1
Hej,
Jag pluggar programmering 1 på Hermods och har kört fast helt och hållet.
Uppgiften är enligt följande:
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
Då amerikanaren kan skriva in i Fahrenheit så innebär det ett värde på 167 grader (=75 grader) men det vet ju
inte han eller hon då det är deras första bastubesök någonsin.
Lös uppgiften och att värdet Celsius sparas som ett flyttal
med decimaler.
För att en beräkning ska fungera med decimaltal måste
alla tal i formeln vara av flyttalstyp.
Denna formel kommer inte att fungera då fahr är ett
heltal.
double temp = (fahr - 32) * 5
/ 9;
Här behöver man alltså omvandla fahr till samma double (eller float om ni jobbar med det). Ett sätt att göra detta
på är att ”typomvandla” fahr i formeln ovan så det behandlas som en double i formeln.
För att lösa detta kan man jobba med så kallad explicit typomvandling som beskrivs på MSDNs hemsida med ett
enkelt exempel på följande länk:
https://msdn.microsoft.com/en-us/library/ms173105.aspx#Anchor...
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;
}
Utöver detta fungerar programmet på ett liknande sätt förutom att det är ett decimaltal som testas mot en
lämplig temperatur
Jag vill inte be om ett facit utan enbart hjälp att förstå hur jag ska tänka och var jag gör fel. Vill verkligen lära mig.
Nu omvandlas graderna felaktigt när jag kör programmet. När jag tex. slår in 123 fahrenheit så blir svaret att det motsvarar 0 grader celsius, medan om jag slår in 100 blir svaret 50.56, också felaktigt.
Det jag behöver hjälp med är att jag vill veta vad jag gör för fel i decimalomvandlingen?
Tar jag bort mina valda 2 decimaler helt från koden så blir svaret korrekt men med för många decimaler.
Vore tacksam om någon ville förklara
// METOD: FahrToInt, konverterar Fahrenheit till Celsius
// Här följer metoddefinitionen:
public static double FahrToCels(int fahr)
{
double temp = (double)fahr;// casting i högerled - tilldela fahr till double
temp = (fahr - 32) * 5 / 9.0; // konverta fahr till celsius & rfeturnera
return temp;
}
//METOD: Main, Startar programmet.
public static void Main(string[] args)
{
int fahr = 0;
double temp = 0;
double tvåDecimaler = 2;
Console.WriteLine("Welcome to the Sauna!\n" +
"Please set a temperature in fahrenheit: "); //Metodanrop
do
{
try
{
fahr = int.Parse(Console.ReadLine()); //Konvertera grader fahr till heltal
tvåDecimaler = Math.Round(temp,2);
}
catch
{
Console.WriteLine("invalid number");
continue; //denna kod gör att koden börjar om vid DO och kör om loopen på nyttWel
}
temp = FahrToCels(fahr);
Console.WriteLine($"{fahr} degrees fahrenheit is {tvåDecimaler} degrees Celsius.");
//metoden har anropats och värdet för celsius har decimaltal
// programmet följer här med villkor och dylikt
if (temp < 73.0)
{
Console.WriteLine("it's too cold in the sauna. please raise the temperature:");
}
else if (temp > 77.0)
{
Console.WriteLine("It's too hot in the sauna, please lower the temperature: ");
}
else if (temp == 75.0)
{
Console.WriteLine("This temperature is perfect, enjoy the sauna!");
}
else
{
Console.WriteLine("This temperature is almost perfect, enjoy the sauna!");
}
} while (temp <= 73.0 || temp >= 77.0);
Console.ReadKey();