22 svar
109 visningar
alex är nöjd med hjälpen!
alex 222
Postad: 17 sep 2019

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

alex 222
Postad: 17 sep 2019

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;

??

Affe Jkpg 5032
Postad: 17 sep 2019 Redigerad: 17 sep 2019

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

alex 222
Postad: 18 sep 2019

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?

alex 222
Postad: 18 sep 2019

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

Affe Jkpg 5032
Postad: 18 sep 2019

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

alex 222
Postad: 18 sep 2019

nej, jag tror inte.

alex 222
Postad: 20 sep 2019
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

Laguna Online 6037
Postad: 20 sep 2019
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?

alex 222
Postad: 20 sep 2019

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

Affe Jkpg 5032
Postad: 20 sep 2019

double temp = (double)fahr; // Högerledet kallas "casting", då en "int" omvandlas till en "double"

Affe Jkpg 5032
Postad: 20 sep 2019

Att en amerikanare i uppgiften ska skriva in fahrenheit-temperatur som decimaltal tycks inte vara rimligt.

alex 222
Postad: 20 sep 2019
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.

Affe Jkpg 5032
Postad: 20 sep 2019

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

alex 222
Postad: 20 sep 2019

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?

Affe Jkpg 5032
Postad: 20 sep 2019 Redigerad: 20 sep 2019
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.

alex 222
Postad: 20 sep 2019 Redigerad: 20 sep 2019

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?

Laguna Online 6037
Postad: 20 sep 2019

Hur kan det gå bra utan

     double temp = (double)fahr;

? Då är ju inte 'temp' definierad. 

alex 222
Postad: 20 sep 2019

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

Affe Jkpg 5032
Postad: 20 sep 2019

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 222
Postad: 20 sep 2019
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.

Laguna Online 6037
Postad: 20 sep 2019
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?

Affe Jkpg 5032
Postad: 20 sep 2019
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;
         }

Svara Avbryt
Close