Datakurser
Aktuell vecka: 48

Tillbaka till toppen

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

De 10 främsta algoritmerna som dominerar världen

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)