en temperatur för ett bastuaggregat
Hej! Jag är ny inom programmering 1 och skulle bli jätte glad om jag kunde få lite hjälp av någon lite mer erfaren än mig!
Min uppgift:
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
Här är länk till uppgiften : https://www.docdroid.net/33sbaWy/amerikanen-i-bastun.pdf
Min fråga är i C, varför det står att formeln kommer inte att fungera då fahr är ett
heltal.
double temp = (fahr - 32) * 5
/ 9;
??
Jag formulerar om frågan.
Varför det står att formeln inte kommer att fungera om fahr är ett tecken-heltal.
Exempel:
fahr = 32;
Högerledet blir då inte 5 / 9 = 0.555555, för att decimalerna faller bort (trunkeras) och man får:
temp = 0.0;
Avrundar man däremot
temp = 0.555555
så förväntar man sig
temp = 1.0
och så här fixar man
double x = 0,55555;
int a;
a = (int)x;
men här ta bara heltal. går det bra?
Kod ska vara ungefär såsom i bilden
Metod FahrToCels ska konverterar från F till C, men vad betyder den meningen som har en pil??.
där om man avrundar temperatur i Celsius till närmaste heltal varför ska Celsius har decimaltal??
tack
Det tycks vara meningen att du ska komma på något som liknar:
public …..(int fahr)
{
double temp = (double)fahr;
temp = (temp - 32.0) * 5.0 / 9.0;
return temp;
}
nej, jag tror inte.
Affe Jkpg skrev:Det tycks vara meningen att du ska komma på något som liknar:
public …..(int fahr)
{
double temp = (double)fahr;
temp = (temp - 32.0) * 5.0 / 9.0;
return temp;
}
vad betyder den kod ??
den funkar inte när man skriver ett tal med decimaler
alex skrev:Affe Jkpg skrev:Det tycks vara meningen att du ska komma på något som liknar:
public …..(int fahr)
{
double temp = (double)fahr;
temp = (temp - 32.0) * 5.0 / 9.0;
return temp;
}vad betyder den kod ??
den funkar inte när man skriver ett tal med decimaler
Skriv aldrig bara "funkar inte" när du beskriver ett problem. På vilket sätt funkar det inte? Vad händer?
Försök skriva in ett tal med decimaler t.ex 134,3 i den här koden så dyker upp ett felmeddelande,
jag vet att det beror på att man skriver tal med decimaler i int vilket funkar inte, men så är det de behöver att det skrivna värdet (Farenheit) ska AVRUNDAS innan det slutliga värdet (Celsius) beräknas.
public static double FahrToCels (int fahr)
{
double temp = (double)fahr;
temp = (temp - 32.0) * 5.0 / 9.0;
return temp;
}
public static void Main(string[] args)
{
int Fahrenheit = Convert.ToInt32(Console.ReadLine());
double Celsius = FahrToCels(Fahrenheit);
Console.WriteLine(Celsius);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
double temp = (double)fahr; // Högerledet kallas "casting", då en "int" omvandlas till en "double"
Att en amerikanare i uppgiften ska skriva in fahrenheit-temperatur som decimaltal tycks inte vara rimligt.
Affe Jkpg skrev:double temp = (double)fahr; // Högerledet kallas "casting", då en "int" omvandlas till en "double"
Men vi kan fortfarande inte skriva in decimaltal utan vi måste
public static double FahrToCels (double fahr)
istället.
Ja, du har rätt det är inte rimlig.
Jo det bör gå utmärkt att skriva...
public static double FahrToCels (int fahr)
...och lösa uppgiften på det sätt som jag tidigare beskrivit
Hej
Jag kör koden med en gång med
double temp = (double)fahr;
och den andra utan den, jag märkte att det finns ingen skillnad alltså de både går lika bra
public …..(int fahr)
{
double temp = (double)fahr;
temp = (temp - 32.0) * 5.0 / 9.0;
return temp;
}
varför?
alex skrev:Hej
Jag kör koden med en gång med
double temp = (double)fahr;
och den andra utan den, jag märkte att det finns ingen skillnad alltså de både går lika bra
public …..(int fahr)
{
double temp = (double)fahr;
temp = (temp - 32.0) * 5.0 / 9.0;
return temp;}
varför?
Vet du hur du ska testa för att avgöra om "de går lika bra"?
Jag har gett dig ett testfall du kan "leka" med...32 grader Fahrenheit.
inte säker, hur?
Om F är 32
så det kommer att vara 0 C
Och om F är 33
så det kommer att vara 0,55555 = 1,0 C
ingen skillnad, vad?
Hur kan det gå bra utan
double temp = (double)fahr;
? Då är ju inte 'temp' definierad.
Du får testa
public static double FahrToCels (int fahr)
{
//double temp = (double)fahr;
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;
}
public static void Main(string[]args)
{
int far = Convert.ToInt32(Console.ReadLine());
double cel=FahrToCels(far);
Console.WriteLine(cel);
Console.ReadKey();
}
Jag vet inte vad du jämför, men här kommer två exempel:
{
double temp = (double)fahr;
temp = (temp-32.0)*5.0/9.0;
return temp;
}
{
double temp = (fahr-32)*5/9;
return temp;
}
alex skrev:Du får testa
public static double FahrToCels (int fahr)
{
//double temp = (double)fahr;
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
public static void Main(string[]args)
{
int far = Convert.ToInt32(Console.ReadLine());
double cel=FahrToCels(far);
Console.WriteLine(cel);
Console.ReadKey();
}
Här jämför jag mellan
public static double FahrToCels (int fahr)
{
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;
}
och
public static double FahrToCels (int fahr)
{
double temp = (double)fahr;
temp = ((fahr-32.0)*5.0)/9.0;
return temp;
}
och ser att det finns ingen skillnad, har jag fel?
Tack för hjälpen.
alex skrev:alex skrev:Du får testa
public static double FahrToCels (int fahr)
{
//double temp = (double)fahr;
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
public static void Main(string[]args)
{
int far = Convert.ToInt32(Console.ReadLine());
double cel=FahrToCels(far);
Console.WriteLine(cel);
Console.ReadKey();
}Här jämför jag mellan
public static double FahrToCels (int fahr)
{
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
och
public static double FahrToCels (int fahr)
{
double temp = (double)fahr;
temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
och ser att det finns ingen skillnad, har jag fel?
Tack för hjälpen.
I det andra fallet tilldelar du 'temp' någonting, men sedan tilldelar du den något annat, nämligen samma som i första fallet.
Vad är frågan egentligen?
alex skrev:alex skrev:Du får testa
public static double FahrToCels (int fahr)
{
//double temp = (double)fahr;
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
public static void Main(string[]args)
{
int far = Convert.ToInt32(Console.ReadLine());
double cel=FahrToCels(far);
Console.WriteLine(cel);
Console.ReadKey();
}Här jämför jag mellan
public static double FahrToCels (int fahr)
{
double temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
och
public static double FahrToCels (int fahr)
{
double temp = (double)fahr;
temp = ((fahr-32.0)*5.0)/9.0;
return temp;}
och ser att det finns ingen skillnad, har jag fel?
Tack för hjälpen.
public static double FahrToCels (int fahr)
{
// double temp = ((fahr-32.0)*5.0)/9.0; Din "konstiga" rad
double temp = ((fahr-32)*5)/9; // Rättad rad med bara heltal (int) i högerledet...trunkering
return temp;
}
public static double FahrToCels (int fahr)
{
double temp = (double)fahr; // Casting i högerledet
// temp = ((fahr-32.0)*5.0)/9.0; Din felaktiga rad, "fahr" ska vara "temp"
temp = ((temp-32.0)*5.0)/9.0; // Rättad rad med bl.a. bara decimaltal (double) i högerledet
return temp;
}