C# Start
Start
Att programmera handlar mycket om att lära sig att analysera det problem eller den funktion man vill att
programmet ska ha, och översätta det från talspråk till programkod. Många tar vägen över denna via s.k.
pseudokod, ett mellanting mellan vanligt språk och programkod. I dagens första lektion ska du dels
bekanta dig med de verktyg du ska använda för att skriva dina program, dels lära dig de första stegen i det
programmeringsspråk som kallas C#. Men allra först programspråkens historia.
Programmeringsspråk
FORTRAN 1954 1:A HÖGNIVÅSPRÅKET
COBOL 1959 ekonomi
ALGOL 1960 påverkat senare språk
SIMULA 1967 möjligt att skriva objektorienterade program
PASCAL 1971 undervisningsspråk, TURBOPascal
C ca 1973 "högnivåspråk på låg nivå"
Smalltalk 1980 objektorienterande, interpreteras
Ada 1983 amerikanska försvaret, ISO-standard
C++ 1985 utökning av C, Bjarne Stroustrup (AT&T)
Python 1991, Guido van Rossum, objektorienterad och funktionell programmering
JAVA 1995 Sun Microsystem, plattformsoberoende, interpreteras, C++ förebild
Javascript 1995, Brendan Eich, skriptspråk
PHP 1995, Rasmus Lerdorf,
populärt skriptspråk som främst körs på webbservrar
fler språk (wikipedia)
C-sharp (C#)
Lanserades år 2000 så det är ett relativt nytt språk. C# har tagit en hel del från C++ och Java. C# är objektorienterat men mycket vi kommer att göra i början liknar vanlig sekvensiell programmering. Microsoft ligger bakom utvecklingen av språket.
Programkod skriven i C# omvandlas av en kompilator till en sorts bytekod vilken sedan körs i en virtuell maskin, CLR (Common Language Runtime). Detta liknar hur Java fungerar.
C# på wikipedia
Börja programmera
Nu ska du börja så smått med att programmera. Programmering innebär
1. att du först gör klart för dig vilket problem som ska lösas. Vad ska programmet göra? Vilka data
ska matas ut från programmet? Vilka data måste matas in i programmet för att det ska fungera?
2. att du därefter tänker igenom hur programmet ska konstrueras (i stora drag) och gör en stegvis
beskrivning, en s.k. algoritm, som datorn kan använda sig av för att ge rätt utdata från de indata
du matar in. En sån beskrivning kallas ofta för pseudokod.
3. att du till sist skriver själva koden i programmeringsspråk, samt testkör och dokumenterar
programmet. Dokumentationen bör dels innehålla en handledning för användaren, dels en
konstruktionsbeskrivning som underlättar för den som ska underhålla programmet.
Algoritm
Första programmet
Vi kommer i denna kurs att ta hjälp av en färdig miljö där många saker är tillrättalagda. På samma sätt
som när vi ska skriva vanlig textdokument så utnyttjar vi t ex Word-programmet. Här använder vi ett
freewareprogram som heter Visual Studio Community 2019 från Microsoft.
Vårt första program:
//exempel 1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("Hej svejs i lingonskogen!");
Console.ReadKey();
}
}
}
Vägen till ett körbart program
Editorn här skriver vi programtexten, dvs källkoden sparar som en *.cs fil.
Kompilatorn kollar att syntaxen stämmer med givna regler och översätter koden till en binärfil, den vanliga
texten (källkoden) översätts till maskinkod. Den slås ihop med övriga binärfiler och blir en exe-fil.
Andra programmet
Ex.
Du vill skriva ett program som ska räkna ut kostnaden för en bokbeställning. Här vill vi mata in antal
och pris. En expeditionsavgift på 50 kr ska också läggas till. Slutligen ska kostnaden skrivas ut.
1. Indata i detta fall: antal och pris. Utdata är kostnaden. Problemställningen framgår av texten ovan.
2. Algoritm (pseudokod):
Mata in antal och priset.
Kostnaden beräknas som a*p+50
Skriv ut kostnaden.
3. Nu börjar vi översätta pseudokoden till programkod.
Variabeltyper
double: flyttal, reellt tal(decimaltal)
float: flyttal, reellt tal (decimaltal)
long: heltal (positiva och negativa)
int: heltal (positiva och negativa)
short: heltal (positiva och negativa)
string: textsträngar (ett antal tecken)
Variabelnamn
Du kan använda alla svenska bokstäver, siffror, dollartecken och understreck. Observera att det är skillnad mellan stora och små bokstäver.
MEN DU FÅR bara börja variabelnamnet med en bokstav eller understreck.
Använd tydliga bra variabelnamn som talar om vad som finns i variabeln. En bra programmeringssed är att använda "camelCase". Du startar en variabel med en liten bokstav, sen när det kommer ett nytt ord så skriver du första bokstaven i det ordet med stor bokstav. T ex antalVarv, aktuellRanta, summaAllaVaror.
Andra programmet, koden
Pseudokoden i exemplet ovan blir följande programkod (kallas ofta för källkod).
//exempel 2
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int antal;
double pris, kostnad;
string text;
Console.Write("Ange antal: ");
text = Console.ReadLine();
antal = Convert.ToInt32(text);
Console.Write("Ange bokpris: ");
text = Console.ReadLine();
pris = Convert.ToDouble(text);
kostnad = 50 + antal * pris;
Console.Write("Kostnad: "+kostnad);
Console.ReadKey();
}
}
}
Vi läser in talen som textsträngar till programmet med "Console.ReadLine()". För att kunna räkna så måste vi plocka ut talen ur textsträngarna (eller konvertera om strängarna till tal). Dock måste vi veta vad vi vill göra. För beroende på om det är heltal eller decimaltal så använder vi olika "Parse"-metoder. En som finns i int paketet och en som finns i double paketet.
För att en programsnutt ska bli mera lättläst (framför allt för någon som inte skrivit programmet), kan
man lägga in s.k. kommentarer i programmet, som inte kompilatorn bryr sig om när man kompilerar
koden. För att få kompilatorn att strunta i resten av raden, skriver man // (dubbelt snedstreck). Allt som
står efter detta kommer då att hoppas över. Om man istället vill lägga in en lång kommentar som sträcker
sig över flera rader, kan man inleda med /* och avsluta med */. Allting mellan dessa två markeringar
kommer då att ignoreras av kompilatorn.
Prioritet
När du skriver matematiska uttryck så har olika operatorer olika prioritet, dvs behandlas av datorn i en viss
förutbestämd ordning. (Samma som i matematiken.))
Prioritetsnivå Operator
1 (högst prioritet) ( )
2 * / %(modulo)
3 + -
4 < >
5 (lägst) = tilldelning
Operatorer på samma nivå har samma prioritet.
För operatorer på samma nivå utförs de i ordningen vänster till höger, utom för tilldelningsoperatorn där
de utförs från höger till vänster.
Parenteser kan på vanligt sätt bryta ordningen.
Ex 1)
double x;
x=2.5 + 12.0 / 2.0 / (2.0 + 1.0) x=
Omvandlingar
Om vi blandar olika typer av tal så gäller nedanstående regler.
X + Y
Om X och Y är av samma typ blir resultatet av den typen.
Om X och Y är av olika typ omvandlas den lägre typen (se nedan) till
den högre. Därefter sker beräkningen och resultatet blir av den högre typen.
Decimaltal har högre prioritet än heltal.
Omvandlingsprioritet (ju högre, desto högre prioritet)
double: decimaltal
(float: decimaltal)
(long: heltal)
int: heltal
(short: heltal)
T ex 4.5 + 4 (decimaltal + heltal) ger efter hopslagning ett decimaltal eftersom double står ovanför int
Två andra exempel:
Ex.2)
double x;
x=8.0/3 + 8/3; x=
/* Ledtråd: 8.0/3 => 8.0/3.0 => 2.666
8/3 => 2 (typen heltal, resultatet trunkerat, dvs decimalsiffrorna stryks) */
Ex3)
double d=0, b=0;
d=d+1/100; detta ger d=
b=b+1.0/100; detta ger b=
Svar till ovanstående exempel:
Bra att ha
Heltalsdivision
När du delar ett heltal med ett annat heltal så är två heltal inblandade och resultatet av den operationen blir ett heltal, alltså OM den inte går jämt upp så kommer decimalerna att trunkeras. Det vill säga decimalerna kapas bort.
Console.WriteLine(5 / 2);
Console.WriteLine(4 / 2);
Console.WriteLine(-5/ 2);
Console.WriteLine(16 / 3);
/*
2
2
-2
5
*
Modulo - %
Resten vid division. Speciellt användbart när vi använder det på heltal, "resten vid heltalsdivision".
Console.WriteLine(5 % 2);
Console.WriteLine(-5 % 2);
Console.WriteLine(5.0 % 2.2);
Console.WriteLine(-5 % 2.1);
/*
1
-1
0.6
-0.8
*/
Omtypning
Om vi skriver i koden att en heltalsvariabel ska tilldelas ett decimaltal så får vi ett felmeddelande på direkten.
Man kan tvinga fram ett godkännande med en "omtypning".
int x;
double y=12.3;
x=(int)y; // detta fungerar, decimalerna kapas och heltalsdelen flyttas till x-variabeln
Källor
Filmer
C# Svenska - 1 - C# introduktion och Installera Visual Studio (Mr1Buying - 9 min)
C# Svenska - 2 - Komma igång med Visual Studio (Mr1Buying - 21 min)
C# Svenska - 3 - Datatyper (Mr1Buying - 10 min)
C# Svenska - 4 - Variabler (Mr1Buying - 21 min)
C# Svenska - 5 - Matematiska operatorer (bl a modulo) (Mr1Buying - 11 min)