• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

Sweden-GAF |OT| I'd Say It's Pretty Lagom

Och jag missade ändå slut på parantes och semikolon i min kod, börjar komma ihåg varför jag slutade leka med programmering, blev ett helvete att leta parenteser när man hade ett par hundra rader kod... Men dagens kompilerare verkar ju rejält vettiga i alla fall. På min tid så...

Behöver inte leta parenteser :) Bara att dubbelklicka på errorkoden så skickas man till felet.
 

Paganmoon

Member
Behöver inte leta parenteser :) Bara att dubbelklicka på errorkoden så skickas man till felet.

Som sagt... på min tid så... då programmerade man i notepad om man hade tur! Annars var det kollegieblocket som gällde...

Dagens ungdom är bortskämd :)

Fan, du har fått mig att installera en compiler, första gången på över 13 år som jag har en compiler på min dator, sitter och försöker göra den andra delen av din uppgift nu haha, hjärncellerna jobbar hårt nu, väcker delar av hjärnan som inte jobbat på år o dar haha. kul :)
 
Som sagt... på min tid så... då programmerade man i notepad om man hade tur! Annars var det kollegieblocket som gällde...

Dagens ungdom är bortskämd :)

Fan, du har fått mig att installera en compiler, första gången på över 13 år som jag har en compiler på min dator, sitter och försöker göra den andra delen av din uppgift nu haha, hjärncellerna jobbar hårt nu, väcker delar av hjärnan som inte jobbat på år o dar haha. kul :)

Andra delen? Men första är ju inte ens löst. Jag håller på och försöker lista ut hur jag ska fixa min output.
 

Paganmoon

Member
Andra delen? Men första är ju inte ens löst. Jag håller på och försöker lista ut hur jag ska fixa min output.

ska jag fortsätta spamma här? ja varför inte:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Console.WriteLine("Vad är dagens datum");
            // string idag = Convert.ToString(Console.ReadLine());
            // DateTime dagensDT = DateTime.ParseExact(idag, "yyMMdd", CultureInfo.InvariantCulture);
            Console.WriteLine("Ge de sex första siffrorna i ditt personnummer:");
            string personnummer = Convert.ToString(Console.ReadLine());
            DateTime personDT = DateTime.ParseExact(personnummer, "yyMMdd", CultureInfo.InvariantCulture);
            String fodelseDag = personDT.ToString("d MMM"); // Gör om personDT till sträng med formatet "xx Månad"
            String veckoDag= personDT.ToString("dddddd"); // Gör om personDT till en sträng, där den hämtar veckodagen som personDT inträffade på 
            Console.WriteLine("Du fyller år " + fodelseDag);
            Console.WriteLine("Du är född på en " + veckoDag);
            Console.ReadLine();

        }
    }
}

String veckoDag och "Du är född på en" + veckoDag är bara bonus
 
Okej, du får lite respekt då. Du kan ju! Jag ändrade

Code:
String fodelseDag = personDT.ToString("d MMM");

till

Code:
string fodelsedag = person.ToString("d MMMMMMMMMMMMMMM");

för att den ska skriva ut hela månadens namn enligt mallen.

Men det här var ju bra. Jag måste undersöka koden lite till och se lite mer hur det fungerar. Sen är det väl bara det där med ålder. Eftersom den vill att man ska läsa in dagens datum så antar jag att den räknar ut ålder genom att göra typ (dagens datum - personnummer) eller något sånt.
 
Eller ja, man ska nog göra en ny version av programmet som gör det tror jag, inte fylla på den nuvarande versionen.

Also, off-topic, det här är ända tråden där jag vågar dubbelposta på GAF :p Har till och med trippelpostat här en gång.
 

Paganmoon

Member
Okej, du får lite respekt då. Du kan ju! Jag ändrade

Code:
String [B]fodelseDag [/B]= [B]personDT[/B].ToString("d MMM");

till

Code:
string [B]fodelsedag [/B]= [B]person[/B].ToString("d MMMMMMMMMMMMMMM");

för att den ska skriva ut hela månadens namn enligt mallen.

Men det här var ju bra. Jag måste undersöka koden lite till och se lite mer hur det fungerar. Sen är det väl bara det där med ålder. Eftersom den vill att man ska läsa in dagens datum så antar jag att den räknar ut ålder genom att göra typ (dagens datum - personnummer) eller något sånt.

Så mina variabler duger inte alltså? for shame...

För att inte göra det för lätt så säger jag följande:
Japp, du får göra dagensdatum - personnummer, (deras DateTime-värden dvs), och spara detta i en Timespan variabel. Hojta till så kan jag visa lite mer. :)
 
Så mina variabler duger inte alltså? for shame...

För att inte göra det för lätt så säger jag följande:
Japp, du får göra dagensdatum - personnummer, (deras DateTime-värden dvs), och spara detta i en Timespan variabel. Hojta till så kan jag visa lite mer. :)

:p Kod är personlig. Vill använda variabler jag är van vid.

Så här tänkte jag ungefär:

Code:
            Console.WriteLine("Ge de sex första siffrorna i ditt personnummer:");
            string personnummer = Convert.ToString(Console.ReadLine());
            DateTime person = DateTime.ParseExact(personnummer, "yyMMdd", CultureInfo.InvariantCulture);
            DateTime today = DateTime.Now;
            DateTime today1 = DateTime.ParseExact(today, "yyMMdd", CultureInfo.InvariantCulture);
            int x = Convert.ToInt32(today);
            int y = Convert.ToInt32(personnummer);
            int z = x - y;

            Console.WriteLine("Du är" + z + "år gammal.");
            Console.ReadLine();

Fast utan en massa felmeddelanden då. Jag kan inte konvertera Date.Time till en integer, men jag kan ju inte räkna med en sträng. För en sträng är ju ett tal bara random siffror utan betydelse.

"DateTime today1" funkar inte alls.
 

Paganmoon

Member
:p Kod är personlig. Vill använda variabler jag är van vid.

Så här tänkte jag ungefär:

Code:
            Console.WriteLine("Ge de sex första siffrorna i ditt personnummer:");
            string personnummer = Convert.ToString(Console.ReadLine());
            DateTime person = DateTime.ParseExact(personnummer, "yyMMdd", CultureInfo.InvariantCulture);
            DateTime today = DateTime.Now;
            DateTime today1 = DateTime.ParseExact(today, "yyMMdd", CultureInfo.InvariantCulture);
            int x = Convert.ToInt32(today);
            int y = Convert.ToInt32(personnummer);
            int z = x - y;

            Console.WriteLine("Du är" + z + "år gammal.");
            Console.ReadLine();

Fast utan en massa felmeddelanden då. Jag kan inte konvertera Date.Time till en integer, men jag kan ju inte räkna med en sträng. För en sträng är ju ett tal bara random siffror utan betydelse.

"DateTime today1" funkar inte alls.

Code:
DateTime today = DateTime.Now;
[s]DateTime today1 = DateTime.ParseExact(today, "yyMMdd", CultureInfo.InvariantCulture);[/s]
Du behöver inte parse:a Today, den är redan i helt korrekt DateTime format (eftersom den skapades av DateTime), anledningen att vi använde ParseExact var för att vi skrev in datumet i yyMMdd format, och var tvungen att "förklara" för programmet hur den skulle tolka det.

Sen tror jag inte du kan konvertera DateTime direkt till en int. Måste nog göras till en TimeSpan (antal dagar) först.
Men du kan göra konverteringen direkt i samband med att du subtraherar dagens datum med födelsedagen:
Code:
TimeSpan dagar = Today - person;
Då får du antalet dagar (timmar, minuter m.m.) i variabeln dagar. och kan vidare använda den variabeln, för att räkna ut hur många år gammal personen är.
 

Paganmoon

Member
Men

Code:
DateTime today = DateTime.Now;
Console.WriteLine(today);

är

Code:
2013-11-06 23:05:47

Jag vill ha det i "yyMMdd". Annars blir svaret heltokigt. Men jag kanske kan byta ut Now till något lämpligare.

När du gör:
Code:
DateTime person = DateTime.ParseExact(personnummer, "yyMMdd", CultureInfo.InvariantCulture);

Så konverterar du datumet till:
Code:
xxx-xx-xx 00:00:00

Prova följande, på den förra koden (den som fungerade dvs), lägg till följande rad innan String fodelsedag.
Code:
Console.WriteLine(person)

Alltså, om du hade en sträng med följande datum "550511", så gör den raden, ParseExact om den till DateTime format:
1955-05-11 00:00:00 (eftersom yyMMdd inte innehåller klockslag så sätts den som default 00:00:00).

Sen när du kör:
Code:
TimeSpan dagar = Today - person;

Så hanterar DateTime och C# interna logik subrationen, den gör alltså automatiskt om DateTime till antal dagar, och sen subtraherar antal dagar i person-variabeln från Today-variabeln.

Då får du ett antal tusen dagar i dagar variabeln, som du använder för att räkna ut år, dvs dagar-variabeln / 365.2425

Skriver koden i spoiler, så du kan testa lite innan du kollar:

double deciAlder = dagar.Days / 365.2425;

Du får en hel del decimaler där dock, så nu gör du om den nya variabeln till int.
 

Paganmoon

Member
Gör som dig då och multipostar :)

Hett tips, när du är fundersam på hur en variabel som du jobbar med ser ut, kan du alltid skriva
Code:
Console.WriteLine(variabelnamnet);
ok kör programmet
Så vet du exakt vad du har att jobba med.
 
Whoa. Damn. Denna kurs blev avancerad väldigt fort. Koden fungerar utmärkt.

Vart får du 365.2425 ifrån? Och i din spoiler, varför skriver man ".Days"? Och om du har lust; vad använder man egentligen TimeSpan till? Är det bara för att räkna ut tiden som finns mellan två datum/klockslag?

Gör som dig då och multipostar :)

Hett tips, när du är fundersam på hur en variabel som du jobbar med ser ut, kan du alltid skriva
Code:
Console.WriteLine(variabelnamnet);
ok kör programmet
Så vet du exakt vad du har att jobba med.

Oh ja. I Visual Studio kan man också använda debuggern. Om man klickar i vänster i menyn, under "program.cs" (typ på den lilla raden under "pr"-delen) hamnar det en röd prick. När man sedan kör programmet stannar den vid pricken. Då kan man gå vidare med F11, och hela tiden får man se hur värdena ändras! Håller man då musen över koden ser man hur den ändras varje gång man trycker F11. Svårt att förklara. Du kanske redan kände till det men du sa att det var länge sedan du kodade så jag vet inte om en sådan funktion fanns då.
 
Whoa. Damn. Denna kurs blev avancerad väldigt fort. Koden fungerar utmärkt.

Vart får du 365.2425 ifrån? Och i din spoiler, varför skriver man ".Days"? Och om du har lust; vad använder man egentligen TimeSpan till? Är det bara för att räkna ut tiden som finns mellan två datum/klockslag?



Oh ja. I Visual Studio kan man också använda debuggern. Om man klickar i vänster i menyn, under "program.cs" (typ på den lilla raden under "pr"-delen) hamnar det en röd prick. När man sedan kör programmet stannar den vid pricken. Då kan man gå vidare med F11, och hela tiden får man se hur värdena ändras! Håller man då musen över koden ser man hur den ändras varje gång man trycker F11. Svårt att förklara. Du kanske redan kände till det men du sa att det var länge sedan du kodade så jag vet inte om en sådan funktion fanns då.

Är som sagt ingen kodare men 365.2425 är väl årets längd, med tanke på att skottår bara är tillför att göra det lättare att räkna år.
 
Är som sagt ingen kodare men 365.2425 är väl årets längd, med tanke på att skottår bara är tillför att göra det lättare att räkna år.

Jo, jag antog att 365 var årets dagar, men .2425 då? Och varför delar man ens? Hur fungerar det där egentligen? Kanske låter korkat att fråga varför man ska dela men i mitt begränsade matematiska förstånd känns det inte som om en division är nödvändig, men det är det ju uppenbarligen för annars blir svaret helt fel.
 
Jo, jag antog att 365 var årets dagar, men .2425 då? Och varför delar man ens? Hur fungerar det där egentligen? Kanske låter korkat att fråga varför man ska dela men i mitt begränsade matematiska förstånd känns det inte som om en division är nödvändig, men det är det ju uppenbarligen för annars blir svaret helt fel.

För att räkna på skottår antar jag. Skottår infaller som vi alla vet var fjärde år, men egentligen är inte det året i sig längre. Ett år är roughly 365.25 dagar men istället för att hålla på att krångla dumpar man över alla dom där extra fjärdedelsdagarna på ett år istället. Jag antar att det i kod inte riktigt funkar så, så därför får man skriva ut ett års korrekta längd istället.
 

Paganmoon

Member
Oh ja. I Visual Studio kan man också använda debuggern. Om man klickar i vänster i menyn, under "program.cs" (typ på den lilla raden under "pr"-delen) hamnar det en röd prick. När man sedan kör programmet stannar den vid pricken. Då kan man gå vidare med F11, och hela tiden får man se hur värdena ändras! Håller man då musen över koden ser man hur den ändras varje gång man trycker F11. Svårt att förklara. Du kanske redan kände till det men du sa att det var länge sedan du kodade så jag vet inte om en sådan funktion fanns då.

Hade ingen aning om, aldrig använt Visual Studio innan, tack för tipset :)


Whoa. Damn. Denna kurs blev avancerad väldigt fort. Koden fungerar utmärkt.

Vart får du 365.2425 ifrån? Och i din spoiler, varför skriver man ".Days"? Och om du har lust; vad använder man egentligen TimeSpan till? Är det bara för att räkna ut tiden som finns mellan två datum/klockslag?

Har absolut ingen aning om detta är sättet att göra det på enligt din kurs, men det funkar i alla fall :)

365.2425 är som Grässklipparen nämner årets exakta längd, nu spelar det väl inte nån roll då den inte kommer räkna fel om man använder 365, men skadar inte att vara exakt :)

Nu är jag absolut ingen expert på C# (jag började lära mig det för en c:a 3-4 timmar sen), men vad jag förstått, är det en typ av variabel som kan innehålla antal dagar, som i sin tur kan användas för att räkna ut tiden mellan datum/klockslag, men variabeln i säg är för hålla antal dagar, på samma sätt som string är för t.ex. text, och int är till för att hålla heltal (och double är för flyt-tal (tal med decimaler)), DateTime är för att hålla datum osv.
TimeSpan skapar variabler i formatet (dagar.timmar:minuter:sekunder) så i koden:
Code:
TimeSpan dagar = Today - person;
Om Today är 2013-11-05 00:02:26 och person är 1980-11-05 00:00:00
så blir variabeln "dagar" = 12055.00:02:26
Dvs 12055 dagar 0 timmar 2 minuter och 26 sekunder.

När man skriver dagar.Days så hämtar man ut endast antalet dagar (12055), och ignorerar timmar, minuter och sekunder, mest för att slippa konvertera dessa till bråkdel av dagar, här var jag helt enkelt för lat för att vara så exakt :)

Jo, jag antog att 365 var årets dagar, men .2425 då? Och varför delar man ens? Hur fungerar det där egentligen? Kanske låter korkat att fråga varför man ska dela men i mitt begränsade matematiska förstånd känns det inte som om en division är nödvändig, men det är det ju uppenbarligen för annars blir svaret helt fel.

Vi delar för att dagar.Days är 12055
12055/365 = 33 (år), vilket är vad som efterfrågades.

Hela proceduren är alltså:
1. Be användaren om dess personnummer (6 siffror)
2. Konvertera till DateTime format (DateTime.ParseExact)
3. Hämta dagens datum (DateTime.now).
4. Få ut antalet dagar som skiljer dagens datum med personnummer (TimeSpan dagar = Today - person;)
5. räkna ut hur många år dagar.Days blir.

Jaja, hoppas jag inte gjort dig mer förvirrad istället, jag är inte vidare pedagogisk av mig, nörd som jag är.

Blir nog att däcka här med,

Hej då macken, Vi ses imorrn.
 
Hade ingen aning om, aldrig använt Visual Studio innan, tack för tipset :)

Hoppas du förstod! Min beskrivning var ganska kass men det är svårt att förklara. Testa på en enkel kod som:

Code:
Console.WriteLine("Ge ett tal:");
int x = Convert.ToInt16(Console.ReadLine());
Console.WriteLine("Ge ett tal:");
int y = Convert.ToInt16(Console.ReadLine());
int summa = x + y;
int differens = x - y;
int produkt = x * y;
int kvot = x / y;
int z = 10;
z = 5;
z = 7;

Console.WriteLine("Summan av talen = " + summa + ". Differensen av talen = " + differens + ". Produkten av talen = " + produkt + ". Kvoten av talen = " + kvot + ".");

och se hur den förändras. Sätt en röd prick bredvid summa, starta programmet, fyll i x och y och sedan trycker du bara F11. Håller du då musen över summa så får du se värdet den får! Detta är riktigt bra när man ska undersöka logiska fel eller if-, while- och for-loopar.

Vilken Visual Studio kör du förresten? På Uppsala Universitet har vi fått typ alla versioner som finns via en plattform (DreamSpark). Jag har 2010, 2012 Ultimate och 2013 RC, men jag kör bara 2012 Ultimate; tycker den är bäst. Om du kör någon äldre gratisversion kan jag fixa en key till en nyare version om du vill. Jag kan bara använda en key till varje program (så till exempel skulle jag inte kunna ge dig 2012 Ultimate för den har jag redan förbrukat), men 2012 Pro är ju nästan samma sak till exempel, så vill du ha är det bara att säga till så tror jag att det borde gå att ordna.

Har absolut ingen aning om detta är sättet att göra det på enligt din kurs, men det funkar i alla fall :)

365.2425 är som Grässklipparen nämner årets exakta längd, nu spelar det väl inte nån roll då den inte kommer räkna fel om man använder 365, men skadar inte att vara exakt :)

TimeSpan skapar variabler i formatet (dagar.timmar:minuter:sekunder) så i koden:
Code:
TimeSpan dagar = Today - person;
Om Today är 2013-11-05 och person är 1980-11-05
så blir variabeln "dagar" = 12055.00:02:26
Dvs 12055 dagar 0 timmar 2 minuter och 26 sekunder.

När man skriver dagar.Days så hämtar man ut endast antalet dagar (12055), och ignorerar timmar, minuter och sekunder, mest för att slippa konvertera dessa till bråkdel av dagar, här var jag helt enkelt för lat för att vara så exakt :)

Hmm. Men TimeSpan kan alltså bara behandla TimeData variabler då? Och vadå, kan jag inte få fram typ (år.månader.veckor.dagar) eller något sånt på något sätt?

Det förklarar det i alla fall. Jag trodde att den helt enkelt (som med dina exempeldatum) skulle räkna: 2013-1980; 11-11; 05-05; eller bara (20131105-19801105).

Tack för hjälpen :)
 
Ahhhh, det funkar ju inte riktigt!

Om man skriver te.x. 901011 så får man samma ålder som 901211; men en person som fyller i december har inte fyllt år ännu. Programmet utgår från att alla fyller år första januari. Aja, det får försöka fixas imorgon.
 

Paganmoon

Member
Ahhhh, det funkar ju inte riktigt!

Om man skriver te.x. 901011 så får man samma ålder som 901211; men en person som fyller i december har inte fyllt år ännu. Programmet utgår från att alla fyller år första januari. Aja, det får försöka fixas imorgon.

Skicka över koden på sen så kan vi kolla tillsammans, har för mig jag fick till den igår som den skulle. Det här var kul, skicka gärna över lite andra uppgifter ni ska göra, så kan jag lära mig också :)
 

Yoshichan

And they made him a Lord of Cinder. Not for virtue, but for might. Such is a lord, I suppose. But here I ask. Do we have a sodding chance?
Tråden är avtändande som fan just nu :(
 

Maxxan

Member
Då ska vi se här, behöver SweGAF:s hjälp med att hitta en PS4 på lanseringsdagen. Hade tidigt en förhandsbokning hos Webhallen, men kommer typ att behöva en till :p Såatte.. var och när kan jag ställa mig i en passande kö i den Kungliga hufvudstaden?
 
Det blir nog svårt. Jag beställde en från Webhallen direkt efter Sonys konferens på Gamescom och det var tydligen för sent för att få en maskin till lanseringen. Min backup-plan är att köpa en från en polare som har två enheter beställda.
 

Keen

Aliens ate my babysitter
Det blir nog svårt. Jag beställde en från Webhallen direkt efter Sonys konferens på Gamescom och det var tydligen för sent för att få en maskin till lanseringen. Min backup-plan är att köpa en från en polare som har två enheter beställda.


Har webhallen sagt nåt om bundles?
 

Maxxan

Member
Det blir nog svårt. Jag beställde en från Webhallen direkt efter Sonys konferens på Gamescom och det var tydligen för sent för att få en maskin till lanseringen. Min backup-plan är att köpa en från en polare som har två enheter beställda.

Beställde min redan i februari, men behöver en till :p Men visst vill vissa retailers ha några obeställda på lagret för att få in folk i butikerna? Då kan jag ställa mig utanför några timmar innan de öppnar och se dum ut =)
 
Har webhallen sagt nåt om bundles?
Nej, men ingen butik i Sverige säljer PS4 bundles. Jag antar att Nordisk Film antingen valt bort det själva eller att de inte har fått tillräckligt med enheter från leverantören. Det finns tillbehörspaket som eventuellt kan minska totalpriset något.
 

Keen

Aliens ate my babysitter
Nej, men ingen butik i Sverige säljer PS4 bundles. Jag antar att Nordisk Film antingen valt bort det själva eller att de inte har fått tillräckligt med enheter från leverantören. Det finns tillbehörspaket som eventuellt kan minska totalpriset något.


Mmnngh! De där jävla Nordisk Film alltså...
 
Beställde fifa 12 från spelbutiken i tisdags, tänkte att med lite tur kanske man kan få det idag. Med spelbutiken har man aldrig tur.

Fick bli 12an då jag bara ville ha något billigt fotbollsspel att lira ibland.
 
Billiga spel från Spelbutiken är ofta icke-nordiska utgåvor. Jag misstänker att de beställer spelet från t.ex. England när du lägger din beställning vilket gör att leveranstiden blir några dagar längre.
 
Billiga spel från Spelbutiken är ofta icke-nordiska utgåvor. Jag misstänker att de beställer spelet från t.ex. England när du lägger din beställning vilket gör att leveranstiden blir några dagar längre.

Köpte Eu-versionen. Var begagnat också. Tror det är det första begagnade jag köper den här generationen så whatever. Jag vill bara spela lite fotboll. Har haft demon till Fifa 10 på PS3an sen jag köpte den typ och tnäkte att det kan vara kul att spela någon cup istället.

Ogillar spelbutiken sen jag beställde Playstation All Stars i god tid och fick det fyra dagar efter launch.
 
Det är definitivt ingen butik man ska använda om man vill ha saker snabbt. De skickar inte ens varor varje dag. Om man däremot inte har bråttom och vill spara en hundring så är det ett bra alternativ.
 

Groof

Junior Member
Har inte handlat på spelbutiken sen innan de ändrade namn. Använde dom enbart för att dom va dom ändå som sålde Drakengard på den tiden, och jag ville ha det.
 
Top Bottom