Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Dec 2009

Behöver hjälp med C#

Hej, jag har precis börjat programmering 1 i C# på konvux...

Jag fick en uppgift i förrgår om att jag skulle göra en slags omvandlare som går ut på att programmet frågar användaren om ett decimaltal och sedan hur många decimaler användaren vill ha.

Jag håller på att bli galen och tanken om att avsluta kursen har slagit mig många gånger.

Det här är det jag åstadkommit, vad gör jag för fel? jag fattar inget...

class Program
{
static void Main(string[] args)

{
Console.Write("Skriv ett tal med decimaler här:");
string deciTal1 = Console.ReadLine();
decimal tal1 = Convert.ToDecimal(deciTal1);

Console.Write("Hur många decimaler vill du ha?:");
string deciTal2 = Console.ReadLine();
decimal tal2 = Convert.To(deciTal2);

Math.Round(tal1,tal2 );

Console.WriteLine(tal1);

Console.ReadKey();
}
}
}

Iam Epic

Trädvy Permalänk
Medlem
Plats
Bästkusten
Registrerad
Jun 2009

Vad får du för fel?

Lägg in koden i CODE-taggar så ser det bättre ut i dina inlägg.

|| Intel 8700K || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & OCZ Agility 3 120GB & Samsung 960 EVO 250GB & Crucial V4 256GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Trädvy Permalänk
Medlem
Plats
Piteå
Registrerad
Okt 2004

kanske spelar mindre roll men du har 2st { och 3st }

CPU: AMD Ryzen 1700x @ 3.8GHz || Mem: 16GB Corsair LPX 3000mhz || Mobo: Asus x370 Prime || GPU: EVGA Geforce GTX1070 SC || SSD: WD black 500GB m2 || OS: Linux Mint/Win 10 || Monitor: Dell 43" 4K P4317Q

Citera om du vill ha svar :)

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006

Du kan inte avrunda decimal, använd double istället.
Dessutom måste du avrunda med ett heltal, dvs int.

Jag städade dessutom koden lite åt dig

Console.WriteLine("Skriv ett tal med decimaler här:"); string read = Console.ReadLine(); double decimalNbr = double.Parse(read); Console.WriteLine("Hur många decimaler vill du ha?:"); read = Console.ReadLine(); int paces = int.Parse(read); var roundedNbr = Math.Round(decimalNbr, paces); Console.WriteLine($"Avrundat: {roundedNbr}"); Console.Read();

Kompilatorn berättade direkt allt som var fel, använd tipsen du får av visual studio.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Dec 2009

Tack skall du ha, men jag blir inget smartare. @Killbom:

Iam Epic

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

Metoden Math.Round(dec,int) vill ha en int som andra parameter. Du ger den en decimal.
Ett annat fel kan vara att du matar in decimaltalet med kommatecken (1,34) istället för med punkt (1.34).
Ett tredje är att du måste lägga det nya talet i en variabel: decimal tal3 = math.round(tal1,tal2); och sedan använda tal3 för att visa

Det går utmärkt att avrunda decimaltal; https://msdn.microsoft.com/en-us/library/system.math.round(v=...

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

HJÄLP! Nybörjare C# lånar tråd

Hej!
Lyckades inte skapa en ny tråd så nu lånar jag den här C# tråden haha...
Är en nybörjade i C# som håller på att skapa ett projekt där vi ska räkna ut Alkohol per krona samt spara detta till ett objekt i en vektor som därefter ska sparas till fil. Vårt problem är att ingenting sparas i filen men lyckas inte se vad felet är. Ni får ha överseende med att koden inte på något sett är perfekt men utöver att ingenting sparas i txt-filen så har det ändå fungerat...
Någon som vill rädda vår dag(och betyg....) och se om den kan se vad som är tokigt?
Observera att koden inte är fullständig ännu och vissa av valen saknar funktion och ex bubblesort...

HÄR BÖRJAR KODEN:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ConsoleApplication20;

namespace ConsoleApplication20
{
class Program
{
public static Dryck[] drycker = new Dryck[0];
private static string namn;

public static void Main()
{
Ladda();
{

int i = 0; // gör det möjligt att återgå till huvudmeny samt att få upp menyn igen efter felaktigt tangentval
while (i < 1)
{
Console.WriteLine("ANGE ETT VAL:\n" + // Meny, gör att valen blir på olika rader

"\n1 : Uträkning av APK| " +
"\n--------------------|" +
"\n2 : Summering |" +
"\n--------------------|" +
"\n3 : Information |" +
"\n--------------------|" +
"\n4 : Avslut |" +
"\n--------------------|" );

String s1 = null; // kolla upp vad detta är, går dock ej vara utan
s1 = Console.ReadLine().ToString();
switch (s1)
{
case "1":

Dryck nyDryck = new Dryck();
Console.WriteLine(" (Observera att samtliga värden anges i siffror, samt alkoholhalt anges ex 0,12 för 12% ) \n");
i++;
Console.WriteLine("Ange namn på drycken");
namn= Console.ReadLine();
nyDryck.namn = namn;

Console.WriteLine("Ange mängd i milliliter");
double mängd = 0;
while (!double.TryParse(Console.ReadLine(), out mängd)) // om det skrivs i bokstäver så kommer feltext upp
{ Console.WriteLine("försök igen i enbart siffror"); }
nyDryck.mängd = mängd;

double pris = 0;
Console.WriteLine("Ange pris i kr"); // måste tillägga fler felkontroller på samtliga val
while (!double.TryParse(Console.ReadLine(), out pris)) // om det skrivs i bokstäver så kommer feltext upp
{ Console.WriteLine("försök igen i enbart siffror"); }
nyDryck.pris = pris;

double alkoholhalt = 0;
Console.WriteLine("Ange alkoholhalt");
while (!double.TryParse(Console.ReadLine(), out alkoholhalt)) // om det skrivs i bokstäver så kommer feltext upp, hur ändra så ex 0.12 går skriva?
{ Console.WriteLine("försök igen, använd , istället för ."); }
nyDryck.alkoholhalt = alkoholhalt;

double alkoholperkrona = 0;
alkoholperkrona = mängd * alkoholhalt / pris; // uträkning, fungerar ej helt ännu
Console.WriteLine(alkoholperkrona + "liter alkohol/kr");
nyDryck.alkoholperkrona = alkoholperkrona;

if (alkoholperkrona < 0.1)
{
Console.WriteLine("Dyrt!!");
}
else if (alkoholperkrona > 1)
{
Console.WriteLine("Helt ok!");
}
else if (alkoholperkrona > 1.15)
{
Console.WriteLine("Bra!");
}
else if (alkoholperkrona > 1.5)
{
Console.WriteLine("Mycket bra!");
}
else if (alkoholperkrona > 1.9)
{
Console.WriteLine("Fantastiskt!");

}
else
{
Console.WriteLine("WOW!");
}

//anropa metod som lägger till i vektor
UtökaVektor(nyDryck);

Console.WriteLine("Tryck på valfri tangent för att återgå till huvudmenyn");
Console.ReadKey(); // läser av valfri tangent
Console.Clear(); // tömmer skärmen
i = 0; // visar huvudmenyn på nytt
break;

case "2":
i++;
Console.WriteLine("Här ser du en summering av tidigare uträkningar");
Console.WriteLine("\nTryck på valfri tangent för att återgå till huvudmenyn");
Console.ReadKey(); // läser av valfri tangent
Console.Clear(); // tömmer skärmen
i = 0; // visar huvudmenyn på nytt
break;
case "3":
i++;
Console.WriteLine("information om hur APK fungerar");

Console.WriteLine("\nAlkohol per krona (APK) är ett mått för hur många milliliter ren alkohol ");
Console.WriteLine("man får för en krona, vid köp av alkoholhaltig dryck. APK stiger ");
Console.WriteLine("då dryckens pris sjunker eller alkoholhalten stiger");
Console.WriteLine("vilket innebär att ett lägre värde ger en dyrare berusning.");
Console.WriteLine("Varmt välkommen att klicka dig runt i de olika kategorierna");
Console.WriteLine("och spana in APK-värdet för just din favoritdryck!");

Console.WriteLine("\nTryck på valfri tangent för att återgå till huvudmenyn");
Console.ReadKey(); // läser av valfri tangent
Console.Clear(); // tömmer skärmen
i = 0; // visar huvudmenyn på nytt

break;
case "4":
i++;
break;

case "5":
Spara();
break;
default:
int val = 0;
Console.WriteLine("felaktigt val, testa igen"); // default innebär att när användaren anger annat än menyvalen så dyker denna feltext upp
i = 0;
while (!int.TryParse(Console.ReadLine(), out val))
{ Console.WriteLine("försök igen i enbart siffror"); } // om val görs i annat än siffror
break;

}
}
}
Spara();
}
public static void BubbleSort(int[] nyVektor)
{
bool osorterad = true;
int end = nyVektor.Length - 1;
while (osorterad)
{
osorterad = false;
for (int j = 0; j < end; j++)
{
if (nyVektor[j] > nyVektor[j + 1])
{
Swap(nyVektor, j, j + 1);
osorterad = true;
}
}
end--;
}
}
public static void Swap(int[] nyVektor, int a, int b)
{
int r = nyVektor[a];
nyVektor[a] = nyVektor[b];
nyVektor[b] = r;
}

public static void UtökaVektor(Dryck nytt)
{
Dryck[] nyVektor = new Dryck[drycker.Length + 1];
for (int i = 0; i < drycker.Length; i++)
{
nyVektor[i] = drycker[i];
}
nyVektor[drycker.Length] = nytt;

drycker = nyVektor;

}

public static void Ladda()
{
StreamReader infil = new StreamReader("drycker.txt");
string rad;
while ((rad = infil.ReadLine()) != null)
{
Dryck m = new Dryck();
string[] fält = rad.Split('\t');
m.namn = (fält[0]);
m.mängd = double.Parse(fält[1]);
m.pris = double.Parse(fält[2]);
m.alkoholhalt = double.Parse(fält[3]);
m.alkoholperkrona = double.Parse(fält[4]);

UtökaVektor(m);

}
infil.Close();
}

public static void Spara()
{
StreamWriter utfil = new StreamWriter("drycker.txt");
for (int i = 0; i < drycker.Length; i++)
{
Dryck m = drycker[i];
utfil.Write("{0}\t{1}\t{2}\t{3}\t{4}\t",m,namn, m.mängd, m.pris, m.alkoholhalt, m.alkoholperkrona);
}
utfil.Close();
}
}
}

(KLASS)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication20
{
public class Dryck
{
public string namn = null;
public double mängd = 0; // deklarering av lokala variabler
public double pris = 0;
public double alkoholhalt = 0;
public int val = 0;
public double apk = 0;
public double alkoholperkrona = 0;

public override string ToString()
{
return mängd + " " + pris + ", " + alkoholhalt + " (" + alkoholperkrona + ")";
}

}
}

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

skriva tal med decimaler i c#

Hej har liknande problem! Är glad vid snabba svar!

Uppgiften går ut på att du ska be användaren skriva in ett tal med decimaler.
Därefter ska ni be användaren skriva in hur många decimaler användaren vill ha.
Din kod ska avrunda talet enligt ovan, men också med ett på förbestämt antal decimaler (exempelvis tre).
Exempel:
Användaren skriver in talet 1,3457322 och 5 för antal decimaler. Talet redovisas dels med så många decimaler som användaren valt (1,34573), samt även med tre decimaler (1,346)

Så här långt har jag kommit:

class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Skriv ett tal med sex (6) antal decimaler.:");
string read = Console.ReadLine();
double decimalNbr = double.Parse(read);

Console.WriteLine("Hur många decimaler ska talet ha?:");
read = Console.ReadLine();
int paces = int.Parse(read);

var roundedNbr = Math.Round(decimalNbr, paces);
Console.WriteLine("Avrundat: {roundedNbr}");

Console.Read();

Hur gör jag för att komma vidare? Jag är fast!
Allt är till hjälp!

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

@Kalebsson: Console.WriteLine("Avrundat: {0}", roundedNbr);

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

@civilrealist: Spara() ligger utanför while() så den blir aldrig körd, flytta upp den till precis efter switchen.
Även ett stavfel i Spara(): det är ett kommatecken vid namn. 'm,namn' ska vara 'm.namn'

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

@kundun: Tack så mycket, det räddade min vecka och mitt arbete, tack

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

behöver ha lite hjälp till! Känner mig så kokad.

Så här långt har jag kommit:
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Skriv ett tal med sex (6) antal decimaler.:");
string read = Console.ReadLine();
double decimalNbr = double.Parse(read);

Console.WriteLine("Hur många decimaler ska talet ha?:");
read = Console.ReadLine();
int paces = int.Parse(read);

var roundedNbr = Math.Round(decimalNbr, paces);
Console.WriteLine("Avrundat: {0}",roundedNbr);

Console.Read();
{

double test = 3.445;

double res = Math.Round(test, 2); //3.44
double res1 = Math.Round(test, 2, MidpointRounding.ToEven); //3.44
double res2 = Math.Round(test, 2, MidpointRounding.AwayFromZero); //3.45

Console.ReadLine();

}

Allt fungerar bra men vad ska jag lägga till /göra för att få det skriva med ett förbestämt antal decimaler (exempelvis tre) också

Tack på förhand

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av Kalebsson:

behöver ha lite hjälp till! Känner mig så kokad.

Så här långt har jag kommit:
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Skriv ett tal med sex (6) antal decimaler.:");
string read = Console.ReadLine();
double decimalNbr = double.Parse(read);

Console.WriteLine("Hur många decimaler ska talet ha?:");
read = Console.ReadLine();
int paces = int.Parse(read);

var roundedNbr = Math.Round(decimalNbr, paces);
Console.WriteLine("Avrundat: {0}",roundedNbr);

Console.Read();
{

double test = 3.445;

double res = Math.Round(test, 2); //3.44
double res1 = Math.Round(test, 2, MidpointRounding.ToEven); //3.44
double res2 = Math.Round(test, 2, MidpointRounding.AwayFromZero); //3.45

Console.ReadLine();

}

Allt fungerar bra men vad ska jag lägga till /göra för att få det skriva med ett förbestämt antal decimaler (exempelvis tre) också

Tack på förhand

Jag förstår inte hur du lyckats skriva koden om du inte kan förstå hur du löser ditt problem.

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

@Kalebsson: Som technocide skriver så får du nog kolla igenom koden och försöka förstå vad den gör. Förstår du det så vet du också svaret.

Tips: Vad tror du dessa raderna gör?:

Console.WriteLine("Hur många decimaler ska talet ha?:"); read = Console.ReadLine(); int paces = int.Parse(read);

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

Jag har lyckats få till allt i min kod nu utom IF-satsen där jag verkar ha någon tanke-miss. Kan någon se var jag tänkt fel? Antar att det är något enkelt men tycker att jag har testat vända och vrida på "mindre än" och "mer än" men tycker inte det gör någon större skillnad. Får upp "Helt ok!" nästan oavsett vad..

if (alkoholperkrona < 1)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("\n Dyrt!!");
Console.ResetColor(); // Tar bort färg

}
else if (alkoholperkrona > 1)
{
Console.ForegroundColor= ConsoleColor.Blue;

Console.WriteLine("\n Helt ok!");
Console.ResetColor();
}
else if (alkoholperkrona < 1.5)
{
Console.ForegroundColor= ConsoleColor.Yellow;

Console.WriteLine("\n Bra!");
Console.ResetColor();

}

else if (alkoholperkrona > 1.5)
{
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("\n Mycket bra!");
Console.ResetColor();
}
else if (alkoholperkrona > 2)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("\n Fantastiskt!");
Console.ResetColor();

}
else
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("\n APK-värdet för efterfrågad dryck verkar inte stämma!");
Console.ResetColor();
}

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004

Tankefel.
Tänk på att du måste avgränsa varje villkor, dvs du måste ha två kontroller av värdet på varje if.
Säg att du får ett värde på 1.7, kolla i din kod var du hamnar!

Tips: använd && för att lägga till fler villkor i en if()

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2010

Som kundun säger så stämmer inte dina villkor i IF-satserna. Alla möjliga värden är ju antingen < 1 eller > 1 (förutom exakt 1 då, vilket du också borde ta hänsyn till).

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

Super!
La till fler villkor i if-satsen med hjälp av &&, tusen tack kundun och snajk!

Trädvy Permalänk
Medlem
Plats
Västra Frölunda
Registrerad
Maj 2004

att tänka sig skalan som en tallinje kan underlätta i sådana här fall också, om man tar fallen i tur och ordning och inte lägger kontrollerna i "oordning".

Ex:

var x = GetOutsideTemperature(); if (x < -20) { Console.WriteLine("Kallt som faäen!"); } else if (x < -10) { Console.WriteLine("Svalt..."); } else if (x < 0) { Console.WriteLine("Snart är det vår!"); } else if (x < 10) { Console.WriteLine("Shortsväder"); } else if (x < 20) { Console.WriteLine("Nakenväder"); } else if (x < 30) { Console.WriteLine("Pust och pes!"); } else { Console.WriteLine("Det är så varmt att man måste tända en brasa för att svalka sig!"); }

Sätter man upp sina kontroller av värdet på det här sättet, så kommer man "aldrig" att hamna i situationen att man får "fel" svar.
Om x är 15 tex, så är ju x inte mindre än -20, -10, 0 eller 10. Däremot är det mindre än 20, så då kommer den if-en att fånga upp talet.
En else på slutet fångar upp de tal som inte fångas upp på vägen, tex x = 1337.

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Plats
skåne
Registrerad
Jun 2004
Skrivet av jovnas:

att tänka sig skalan som en tallinje kan underlätta i sådana här fall också, om man tar fallen i tur och ordning och inte lägger kontrollerna i "oordning".

Ex:

var x = GetOutsideTemperature(); if (x < -20) { Console.WriteLine("Kallt som faäen!"); } else if (x < -10) { Console.WriteLine("Svalt..."); } else if (x < 0) { Console.WriteLine("Snart är det vår!"); } else if (x < 10) { Console.WriteLine("Shortsväder"); } else if (x < 20) { Console.WriteLine("Nakenväder"); } else if (x < 30) { Console.WriteLine("Pust och pes!"); } else { Console.WriteLine("Det är så varmt att man måste tända en brasa för att svalka sig!"); }

Sätter man upp sina kontroller av värdet på det här sättet, så kommer man "aldrig" att hamna i situationen att man får "fel" svar.
Om x är 15 tex, så är ju x inte mindre än -20, -10, 0 eller 10. Däremot är det mindre än 20, så då kommer den if-en att fånga upp talet.
En else på slutet fångar upp de tal som inte fångas upp på vägen, tex x = 1337.

Bra tips!

Skickades från m.sweclockers.com

Oldschool [å:ldsku:l] adj. Användandet av datorprodukter som är äldre än 3 månader.

Trädvy Permalänk
Medlem
Registrerad
Jan 2009
Skrivet av jovnas:

Console.WriteLine("Det är så varmt att man måste tända en brasa för att svalka sig!");

Haha tror jag dog lite