13 svar
382 visningar
mai2020 är nöjd med hjälpen!
mai2020 31
Postad: 1 feb 2020

nybörjare behöver hjälp!!!

Hej!

Jag är nybörjare i programmering. Nu håller jag på att fixa en uppgift som nedan.

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.

OCH

Min kod som nedan. Kan någon kolla om vad är det för problem för att när jag anger olika siffror visas det samma svar !

 class Program
    {
        public static double FahrToCels(int fahr)
        {
            double temp = (double)fahr; // Casting i högerledet
            temp = ((temp - 32.0) * 5.0) / 9.0; // Rättad rad med bl.a. bara decimaltal (double) i högerledet
            return temp;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Welcome! Please enter the desired temperature in Fahrenheit! "); //användaren anger grader
            int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
            double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius

            do
            {
                    if ( celsius < 73.0)//villkoret är att temperaturen är lägre än 73
                    {
                        Console.WriteLine("Temperaturen är {0}℃ now!Please increase the temperature a bit, it is too cold!", celsius);//visa till användaren
                        Console.ReadLine();//användaren anger temperaturen
                    }

                    else if ( celsius > 77.0 )//villkoret är att temperaturen är högre än 77
                    {
                        Console.WriteLine("The temperature is {0}℃ now! Please lower the temperature a bit, it is too warm!", celsius );//visa till användaren
                        Console.ReadLine();//användaren anger temperaturen
                    }

                    else
                   {
                        Console.WriteLine("The temperature is {0}℃ now! It is suitaible for sauna ! Enjoy! ", celsius );//visa till användaren
                        Console.ReadLine();//användaren anger temperaturen
                    }

                } while ( celsius != 75.0);//villkoret för att slingan körs

                    Console.WriteLine("The temperature is {0} ℃! Best temperature! Enjoy your sauna!", celsius );//visa till användaren

                    Console.ReadKey();

Taaaaack!!!!!

postitlapp 70
Postad: 1 feb 2020

Du uppdaterar aldrig celcius-variabeln inuti loopen. Det första du matar in kommer gå in i samma if-sats varje gång.

mai2020 31
Postad: 1 feb 2020

Ja,precis. Jag blockerar här. Det går inte ange celsius++ för att Celsius är double.

Hur kan jag lösa det? Kan du hjälpa mig?

mai2020 31
Postad: 1 feb 2020
postitlapp skrev:

Du uppdaterar aldrig celcius-variabeln inuti loopen. Det första du matar in kommer gå in i samma if-sats varje gång.

Ja,precis. Jag blockerar här. Det går inte ange celsius++ för att Celsius är double.

Hur kan jag lösa det? Kan du hjälpa mig?

postitlapp 70
Postad: 1 feb 2020 Redigerad: 1 feb 2020

Celcius++?

Det är väl den här funktionaliteten du vill anropa igen?

 int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
 double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius

Edit: Problemet är att du anropar bara Console.ReadLine(), men du gör aldrig något med input:en så nästa varv är celcius oförändrad

mai2020 31
Postad: 1 feb 2020
Tack för svaret! Du är jättesnäll!! Jag förstår problem, men jag vet inte hur jag löser det. Kan du förklara mer?
postitlapp skrev:

Celcius++?

Det är väl den här funktionaliteten du vill anropa igen?

 int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
 double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius

Edit: Problemet är att du anropar bara Console.ReadLine(), men du gör aldrig något med input:en så nästa varv är celcius oförändrad

Det är som postitlapp skrev, du behöver upprepa den kod som frågar efter temperaturinställning.

Du har på två ställen skrivit:

Console.ReadLine();//användaren anger temperaturen.

Där behöver det istället vara:

fahrenheit = int.Parse(Console.ReadLine());
celsius = FahrToCels(fahrenheit);

Villkoret för att upprepa slingan bör vara:

while ( celsius < 73.0 || Celsius > 77.0 );

Det finns inte heller någon undantagshantering. Använd try och catch.

Euclid 232
Postad: 2 feb 2020
Det finns inte heller någon undantagshantering. Använd try och catch.

Det finns väl inga fel som kan hanteras i det programmet så varför ska hen fånga dem?

Laguna 10959
Postad: 2 feb 2020
Euclid skrev:
Det finns inte heller någon undantagshantering. Använd try och catch.

Det finns väl inga fel som kan hanteras i det programmet så varför ska hen fånga dem?

int.Parse kan misslyckas. Man ska i alla fall bestämma vad som ska hända om den gör det.

Euclid 232
Postad: 2 feb 2020
Laguna skrev:
Euclid skrev:
Det finns inte heller någon undantagshantering. Använd try och catch.

Det finns väl inga fel som kan hanteras i det programmet så varför ska hen fånga dem?

int.Parse kan misslyckas. Man ska i alla fall bestämma vad som ska hända om den gör det.

Tja, det där med felhantering är ett allmänt missförstånd bland många programmerare som trycker in try-catch block utan mening. Använda det om felet går att hantera, annars så se till att interna fel inte läcker ut externt från ditt program eller din tjänst. Int.Parse kan gå fel, men man utför inte i princip en funktion på något utan att först ha validerat input.

Jag menar inte att man ska trycka in try och catch överallt. Det är dock en del av just denna uppgift.

Laguna 10959
Postad: 2 feb 2020
Euclid skrev:
Laguna skrev:
Euclid skrev:
Det finns inte heller någon undantagshantering. Använd try och catch.

Det finns väl inga fel som kan hanteras i det programmet så varför ska hen fånga dem?

int.Parse kan misslyckas. Man ska i alla fall bestämma vad som ska hända om den gör det.

Tja, det där med felhantering är ett allmänt missförstånd bland många programmerare som trycker in try-catch block utan mening. Använda det om felet går att hantera, annars så se till att interna fel inte läcker ut externt från ditt program eller din tjänst. Int.Parse kan gå fel, men man utför inte i princip en funktion på något utan att först ha validerat input.

Varför skrev du att det inte finns några fel som behöver hanteras? 

mai2020 31
Postad: 2 feb 2020

Jag har uppdatera min kod,trycker ni att det finns problem?

 

class Program
{
public static double FahrToCels(int fahr)
{
double temp = (double)fahr; // tilldela fahr till double
temp = ((fahr - 32.0) * 5.0) / 9.0; // beräkna fahrenheit till celsius
return temp;//returnera värdet
}

static void Main(string[] args)
{
Console.WriteLine("Welcome! Please enter the desired temperature in Fahrenheit! "); //användaren anger grader
int fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
double celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius

do
{

if (celsius < 73.0)//villkoret är att temperaturen är lägre än 73
{
Console.WriteLine("Please increase the temperature a bit, it is too cold!");//visa till användaren
}

else if (celsius > 77.0)//villkoret är att temperaturen är högre än 77
{
Console.WriteLine(" Please lower the temperature a bit, it is too warm!");//visa till användaren

}

else
{
Console.WriteLine(" It is suitaible for sauna ! Enjoy! ");//visa till användaren
}

try//kolla att om användaren anger en siffran
{
fahrenheit = int.Parse(Console.ReadLine()); //konvertera grader som användaren angett till heltal
celsius = FahrToCels(fahrenheit);//konvertera fahrenheit till celsius

}

catch//om användaren inte anger siffran då körs innehållet nedan
{
Console.WriteLine("Please enter in a number!");//visa att användaren behöver ange en siffra
Console.ReadLine();//läs in siffran som användaren angett
}

} while (celsius < 73.0 || celsius > 77.0 );//villkoret för att slingan körs

Console.WriteLine(" It is suitaible for sauna ! Enjoy! ");//visa till användaren

Console.ReadKey();

FreeCodeParty 33
Postad: 2 feb 2020 Redigerad: 2 feb 2020

Ser bra ut, du skulle kunna låta inmatningen ske inuti loopen, så slipper du har samma kod på flera olika ställen.

edit: keyword:et `continue` gör så att den hoppar upp till `do` och kör om loopen på nytt

using System;

class Program
{
public static double FahrToCels(int fahr)
{
return ((fahr - 32.0) * 5.0) / 9.0;
}

public static void Main(string[] args)
{
double temp = 0;
int cels = 0;

do
{
try
{
cels = int.Parse(Console.ReadLine());
}
catch (Exception e)
{
Console.WriteLine("invalid number");
continue;
}

temp = FahrToCels(cels);

if (temp < 73)
{
Console.WriteLine("Too cold, heat it up a bit");
} else if (temp > 77)
{
Console.WriteLine("Too warm, only finnish people can sauna this hot");
}

} while (temp < 73 || temp > 77);

Console.WriteLine($"Ahhh, {temp} Celsius, lovely tempature");
}
}

Svara Avbryt
Close