22 svar
1858 visningar
alex är nöjd med hjälpen
alex 269 – Fd. Medlem
Postad: 17 sep 2019 14:23

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 269 – Fd. Medlem
Postad: 17 sep 2019 16:20

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 6630
Postad: 17 sep 2019 17:55 Redigerad: 17 sep 2019 17:56

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 269 – Fd. Medlem
Postad: 18 sep 2019 15:49

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 269 – Fd. Medlem
Postad: 18 sep 2019 17:12

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 6630
Postad: 18 sep 2019 19:31

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 269 – Fd. Medlem
Postad: 18 sep 2019 20:16

nej, jag tror inte.

alex 269 – Fd. Medlem
Postad: 20 sep 2019 11:31
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 28587
Postad: 20 sep 2019 11:48
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 269 – Fd. Medlem
Postad: 20 sep 2019 11:59

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 6630
Postad: 20 sep 2019 12:22

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

Affe Jkpg 6630
Postad: 20 sep 2019 12:28

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

alex 269 – Fd. Medlem
Postad: 20 sep 2019 12:50
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 6630
Postad: 20 sep 2019 12:53

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 269 – Fd. Medlem
Postad: 20 sep 2019 15:11

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 6630
Postad: 20 sep 2019 15:30 Redigerad: 20 sep 2019 15:42
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 269 – Fd. Medlem
Postad: 20 sep 2019 15:43 Redigerad: 20 sep 2019 16:06

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 28587
Postad: 20 sep 2019 16:11

Hur kan det gå bra utan

     double temp = (double)fahr;

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

alex 269 – Fd. Medlem
Postad: 20 sep 2019 16:29

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 6630
Postad: 20 sep 2019 18:01

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 269 – Fd. Medlem
Postad: 20 sep 2019 19:14
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 28587
Postad: 20 sep 2019 20:20
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 6630
Postad: 21 sep 2019 00:07
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