Permalänk
Medlem

Programmering 1 C#/C++

Första gången jag riktigt skriver något på denna sida och har sett att det är väldigt bra och snabba svar så tänkte ge mig ett försök själv och be lite om hjälp.

C#/C++ är språken som jag använder mig utav. Inlämningarna/uppgifterna var ofast c# men på provet så var det tydligen c++, har lärt mig en del c++ och kan det mesta med commands osv
Nu är det så att jag har ett slutprov på programmering 1 och har fått lite info om vad som kommer att komma på slutprovet men är fortfarande lite skeptisk bland vissa svar som jag har lärt mig under kursens gång.
Vad du behöver kunna inför prov i Programmering 1.
1. Du ska ha de kunskaper motsvarande tidigare kursen
a) Grunder i programmering
b) Variabler
c) Selektion
d) Loopar
e) Funktioner
f) Array
g) Söknings och sorteringsalgoritmer
h) aktivitetsdiagram och pseudokod

2. Grunder i objektorienterad programmering
a) klasser, objekt.
b) set och get funktioner

Detta är vad jag fått ifrån min lärare på vad jag bör "plugga" till eller lära mig egentligen.

Jag förklarar nedanför vad jag har försökt förstått om de olika punkterna och skulle förmodligen behöva hjälp med att förklara ifall jag tänker rätt eller om jag är helt ute och cyklar.. :/
b= först så trodde jag att int, string och bool tex var en typ av variabel men som jag förstår nu så verkar det som att nr, nr1 , nr2..etc som int skapar är en variabel eller är jag fel då? är int, string osv en variabeltyp isåfall?
c= if, else, switch, case och default satser är selektion exempel. Som på något sätt kan välja vad som ska göras eller inte, formulerar ett villkor som kan vara sant eller falskt
d= loopar är ju rätt enkelt förklarat tex for loopen och while loopen. For-loopen (int i=0; i<10; i++) så händer en loop tills att i blir 9, då 0 räknas som en loop. While-loopen fungerar väl i princip på samma sätt som for-loopen men det är väl tex while (i<10) { 1++}så händer en loop tills att i blir 9 igen?
e= Funktioner/Metoder är väl samma sak hoppas jag, då static void blabla() blir skapat och man kan då koda där i och sedan anropa det i main genom att skriva blabla(); där?
f= har faktiskt inte en bra förklaring för array då jag hade väldigt svårt med den.
g= denna vet jag inte heller hur jag ska förklara med en sorteringsalgoritm vi höll på med var bubblesort
h= detta kan vara det svåraste jag vet om, vet inte riktigt hur jag ska tänka när jag gör det, men jag förstår principen till de båda.

2
a = vad jag först trodde var "klasser" var tex int, string osv, alltså grupper typ men det var helt fel och har lärt mig att man skapar en ny klass för att sen göra en massa koder i ett helt nytt program kan man säga men man kan sen bara nämna den klassen i sitt main så vet den vad den ska ta med? och sen så trodde jag att objekt var tex det som klasserna skapade, så som dog, cykel, bil, alltså saker/objekt i världen tex. har kollat lite i https://www.youtube.com/watch?v=yK6zlTVqWzo men vet inte riktigt hur jag ska sammanfatta det hela
b = set och get funktionerna har jag inte riktigt arbetat mycket med och därför tycker jag de är väldigt svåra att förklara och lära mig det också.

Jag sitter fortfarande och pluggar så mycket jag kan och kommer förmodligen att förstå dessa begrepp bättre småningom men skulle verkligen uppskatta ifall ni har några synpunkter på hur jag tänker och kanske kan förklara lite lätt hur det egentligen ska vara och vad anledningen kan vara att jag tänkte att klasser var int, string osv..
Tack på förhand!

Edit * Skrev vilket språk som användes, ber om ursäkt för att jag glömde det

Permalänk
Medlem
Skrivet av Korvulla:

Första gången jag riktigt skriver något på denna sida och har sett att det är väldigt bra och snabba svar så tänkte ge mig ett försök själv och be lite om hjälp.

Nu är det så att jag har ett slutprov på programmering 1 och har fått lite info om vad som kommer att komma på slutprovet men är fortfarande lite skeptisk bland vissa svar som jag har lärt mig under kursens gång.
Vad du behöver kunna inför prov i Programmering 1.
1. Du ska ha de kunskaper motsvarande tidigare kursen
a) Grunder i programmering
b) Variabler
c) Selektion
d) Loopar
e) Funktioner
f) Array
g) Söknings och sorteringsalgoritmer
h) aktivitetsdiagram och pseudokod

2. Grunder i objektorienterad programmering
a) klasser, objekt.
b) set och get funktioner

Då du länkade till en youtube klipp med C# och det är det språket jag föredrar så kommer länkarna vara till detta språket. Dock pratar vi grunderna i programmering vilket gör att det är applicerbart på nästintill samtliga språk.

1. Du ska ha de kunskaper motsvarande tidigare kursen
a) Grunder i programmering

- Skippar denna

b) Variabler
Jag ser en variable som något du namnger som sedan innehåller det önskade värdet av en viss typ. Där typen exempelvis är int, string, bool.

https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp...

c) Selektion
Baserat på ett villkor (Expression) så exekveras en vis kod.

https://docs.microsoft.com/en-us/dotnet/csharp/language-refer...

d) Loopar
Det finns olika loopar, vanligaste är for, foreach, while den mindre ovanliga är do.
Dessa tillåter dig att göra något flera gånger, oftast tills ett visst villkor är uppnått.

e) Funktioner
Är ett sätt att separera din kod som du sedan anropar. En method kan ha input parametrar och kan returnera ett värde.
Fördelen med att separera din kod till funktioner är att det är lättare att återanvända din kod och anropa saker igen.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...

f) Array
En array tillåter dig att spara flera värden av samma typ, exempelvis kan du ha en array av typen string som innehåller namnet på dina vänner. Sen kan du använda en loop som går igenom din array och skriver ut namnet på respektive vän.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...

g) Söknings och sorteringsalgoritmer
Sökning och sorteringsalgoritmer används främst för att jobba med array, exempelvis.
* Innehåller min lista med vänner någon som heter Glenn?
* Sortera min lista av vänner i bokstavsordning innan vi skriver ut namnen.

h) aktivitetsdiagram och pseudokod
aktivitetsdiagram är ett sätt att beskriva vad din kod gör i ett mer visuellt format, för att visa i vilken ordning något sker och när vi gör något baserat på vilkor (ex if satser)

pseudokod är ett sätt att på en övergripande nivå förklara vad din kod skall göra. Exempelvis

In your Main method i want you to do the following

Initiate an array of type string called friends. Add your friends to the array one by one Sort your array using bubblesort Loop the array friends and print each name to the console

OBS att det finns flera olika sätt att skriva pseudokod och ingen tydlig standard finns, ovan är sättet jag gillar att jobba. I ditt fall är det bäst att relatera detta till ditt kursmaterial och vad din lärare har lärt dig.

2. Grunder i objektorienterad programmering
a) klasser, objekt.
Tillåter dig att skapa egna typer som då skall representera något. Du kan exempelvis ha en Class Friend som innehåller name (string), age (int), IsFunny (bool)

https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...

b) set och get funktioner
Är sätt att få en variabler att bete sig mer som en method vilket ger dig möjligheten att styra över vad som skall ske, exempelvis validering.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...

Så för att summera det hela lite i text.
Du kan skapa egna klasser som representerar egna typer. Dessa klasser använder sedan set och get funktioner (properties) för att lagra värden. En klass kan du lagra i en variable du kan även ha en array om du vill lagra flera.

Du använder loopar för att iterera och därmed exekvera din kod flera gånger, exempelvis om du vill gå igen om din lista och söka ut om den innehåller ett visst värde. Detta gör du genom att använda en selektion (if sats) exempelvis. If(friends[i].Name == "Glenn").

Du kan dela upp din kod i olika funktioner vilket är smart om du skall implementera sökning och sorteringsalgoritmer. Du kan beskriva din kod för andra genom att använda aktivitetsdiagram och du kan skriva pseudokod innan du skriver den riktiga koden för att få en förståelse över vilka steg du behöver ta i vilken ordning.

Permalänk
Medlem
Skrivet av Korvulla:

Första gången jag riktigt skriver något på denna sida och har sett att det är väldigt bra och snabba svar så tänkte ge mig ett försök själv och be lite om hjälp.

Nu är det så att jag har ett slutprov på programmering 1 och har fått lite info om vad som kommer att komma på slutprovet men är fortfarande lite skeptisk bland vissa svar som jag har lärt mig under kursens gång.
Vad du behöver kunna inför prov i Programmering 1.
1. Du ska ha de kunskaper motsvarande tidigare kursen
a) Grunder i programmering
b) Variabler
c) Selektion
d) Loopar
e) Funktioner
f) Array
g) Söknings och sorteringsalgoritmer
h) aktivitetsdiagram och pseudokod

2. Grunder i objektorienterad programmering
a) klasser, objekt.
b) set och get funktioner

Detta är vad jag fått ifrån min lärare på vad jag bör "plugga" till eller lära mig egentligen.

Jag förklarar nedanför vad jag har försökt förstått om de olika punkterna och skulle förmodligen behöva hjälp med att förklara ifall jag tänker rätt eller om jag är helt ute och cyklar.. :/
b= först så trodde jag att int, string och bool tex var en typ av variabel men som jag förstår nu så verkar det som att nr, nr1 , nr2..etc som int skapar är en variabel eller är jag fel då? är int, string osv en variabeltyp isåfall?
c= if, else, switch, case och default satser är selektion exempel. Som på något sätt kan välja vad som ska göras eller inte, formulerar ett villkor som kan vara sant eller falskt
d= loopar är ju rätt enkelt förklarat tex for loopen och while loopen. For-loopen (int i=0; i<10; i++) så händer en loop tills att i blir 9, då 0 räknas som en loop. While-loopen fungerar väl i princip på samma sätt som for-loopen men det är väl tex while (i<10) { 1++}så händer en loop tills att i blir 9 igen?
e= Funktioner/Metoder är väl samma sak hoppas jag, då static void blabla() blir skapat och man kan då koda där i och sedan anropa det i main genom att skriva blabla(); där?
f= har faktiskt inte en bra förklaring för array då jag hade väldigt svårt med den.
g= denna vet jag inte heller hur jag ska förklara med en sorteringsalgoritm vi höll på med var bubblesort
h= detta kan vara det svåraste jag vet om, vet inte riktigt hur jag ska tänka när jag gör det, men jag förstår principen till de båda.

2
a = vad jag först trodde var "klasser" var tex int, string osv, alltså grupper typ men det var helt fel och har lärt mig att man skapar en ny klass för att sen göra en massa koder i ett helt nytt program kan man säga men man kan sen bara nämna den klassen i sitt main så vet den vad den ska ta med? och sen så trodde jag att objekt var tex det som klasserna skapade, så som dog, cykel, bil, alltså saker/objekt i världen tex. har kollat lite i https://www.youtube.com/watch?v=yK6zlTVqWzo men vet inte riktigt hur jag ska sammanfatta det hela
b = set och get funktionerna har jag inte riktigt arbetat mycket med och därför tycker jag de är väldigt svåra att förklara och lära mig det också.

Jag sitter fortfarande och pluggar så mycket jag kan och kommer förmodligen att förstå dessa begrepp bättre småningom men skulle verkligen uppskatta ifall ni har några synpunkter på hur jag tänker och kanske kan förklara lite lätt hur det egentligen ska vara och vad anledningen kan vara att jag tänkte att klasser var int, string osv..
Tack på förhand!

b : Du har typ rätt. int, float, bool är datatyper. Nu skrev du inte vilket språk det gäller, men i generell C syntax (som t ex Java och C# har) så är

int x;

syntaxen för att skapa en variabel med datatypen int som har namnet x.

c : Du har helt rätt, selektion/conditional är ett sätt att styra flöded av exekveringen. Tänk bara "if this then that".

d : Loopar är egentligen bara en form av selektion. Alla loopar kan skrivas om till if statements t ex, men loopar är mycket smidigare när du vill göra saker, t ex räkna något, flera gånger. Det blir ganska kladdigt att skriva 100 if satser. For och While loopar gör exakt samma sak men har lite olika use cases som gör det snyggare. Generellt sett så använder du en for loop när du vet antalet iterationer. While används när du inte vet antalet. Ibland nämns även do while, som är en som while loopen fast den körs minst en gång. (Tror aldrig jag sätt denna i det vilda dock).

e : Funktioner/metoder är ett block kod som du ger ett namn och eventuell in och output. Du kan se dessa som mini program som du kan kan kalla på och använda. Det är möjligt att skriva ett program helt utan funktioner, de är till för oss människor. De gör programmen mycket enklare att läsa och förstå, de ökar abstraktionsnivån. I C baserade språk startar alltid programmet i Main metoden.

f : Arrayer är bara ett block data som du allokerar minne till. Nu gör jag detta lite förenklat: Tänk dig minnet som en lång lista med platser. När du gör en variable så säger du till kompilatorn att du allokerar en plats och ger den ett namn och att den ska vara tilräckligt stor för att spara din datatyp. Skriver du t ex

int x;

så säger du "Allokera en plats som håller 32 bitar(en ints storlek) och ge den namnet x". En array fungerar på liknande sett, bara att den sparar flera platser på en gång.

int[] arr = new int[10];

så säger du "Spara flera platser i en sekvens som ska hålla 32 bitar". Så Här får du alltså 10X32 bitars plats allokerat.
Själva arrayen kan du (för tillfället) se som en slags lista. Så arr[0] betyder plats 0, arr[8] är plats åtta.

g : Detta var ju en väldigt vag fråga. Googla på bubble sort om det är det ni har jobbat med. Det finns massor av olika sorteringsalgoritmer för att sortera data. Tänk dig själv när du går in på prisjakt, då vill du säkert sortera produkter efter olika kriterier för att inte behöva sitta där och gå igenom allt.
Olika sorteringsalgoritmer har lite olika use cases, fungerar olika bra på olika data. Bubble sort är en av de sämre, men ganska lätt att förstå. Rekommenderar youtube.

h : Du är lite för vag tycker jag. Aktivitestdiagram är en form av UML, ett modelleringsspråk. Är till för att (enkelt?) rita upp ett program med lådor och pilar. Precis som att det finns ritningar när byggarbetare bygger hus, finns det ritningar för programmerare när de programmerar. UML är ganska enkelt, googla lite. pseudokod är kod/ett programflöde skriven i naturlig text för att göra det enklare att förmedla till andra.

2

a : Det enklaste exempel är att klasser är din bakform, objekt är kakan. Med bakformen kan du stansa ut flera kakor, men du kan inte äta bakformen. Kakorna kan du sedan dekorera med olika former av glasyr, så de är inte samma allihopa, men de har alla likadan form.
Ett annat exempel är att klasser är som en ritning, medans ett objekt är ett hus. En ritning kan användas för att bygga flera olika hus. Husen kan ha olika egenskaper, olika färg och material, men är ändå av samma ritning.
Klasser är en abstraktionsverktyg, det gör det enklare att gruppera metoder och data tillsammans i olika enheter.
Om jag gör en bankapplikation, kan man tänka sig att jag behöver klasser såsom, kontor, bankkonto, användare med mera. Detta är bara för att göra det enklare. När kompilatorn har kompilerat, bryr den inte sig om klasser, den sätter bara ihop allt i ett logiskt flöde. Men ett sådant flöde är svårt att hantera för oss människor.

b : Get och Set är väldigt enkla egenligen. Ett huvudkoncept för OOP är encapsulation. Dvs du vill helst gömma data och metoder så gott du kan för att undvika att de ändras när de inte ska ändras vilket kan orsaka problem. Du har säkert sätt visibillity modifiers. När du gör en klass bör dess variabler alltid vara privata, så ingen annan klass kan nå dem. Då behöver man skriva getters och setters för att hämta och sätta variablerna. Getters och setters är bra att ha när du vill validera något, t ex att ett värde innehåller ett visst tecken eller är inom en viss range.

Många av de här frågorna och svaren hade du dock hittat online men hoppas det hjälpte.

Visa signatur

Citera för svar

Permalänk
Medlem

F) En array är en lista som kan indexeras. Denna lista kan du definiera att den ska bara innehålla objekten "Glass" eller helt enkelt tex Integers, eller doubles. Vad som menas med indexeras är att du kan peka på en position i listan, tex. "Jag vill ha det som finns på plats '5' i listan(arrayen).". Så genom att anropa positionen utav listan får vi elementet(glassen) på denna plats retunerat till oss. Och ofta har programmeringspråken metoder för att t.ex. kolla hur många objekt en lista är populerad med, genom tex "minGlassLista.length", som då retunerar en int. (heltal)

En klass kan du se som en "mall", och denna mall använder vi sen för att skapa "objekt". Vill vi ha en klass/"mall" för glassar skulle denna klass kunna se ut så här,

class Glass {
private string smak;
private double pris;

public Glass(string smaken, double priset) {
smak = smaken;
pris = priset;
}
}

Här ser vi att klassen "Glass" har två egenskaper, en String med namn "smak" och en double vid namn "pris".

För att sedan skapa en glass i vårat program kan måste vi definiera(berätta) hur glassen vi vill skapa ska se ut.

Ett exempel,

chokladGlass = new Glass("Choklad", 19,90);

Så nu innehåller vårat program ett objekt utav typen "Glass", som vi definiera med smaken "Choklad" och priset 19,90.

Permalänk
Medlem

@Tino: Tack för alla svar och länkarna, ska kolla igenom alla dessa och försöka få en större förståelse! Det jag är förvirrad över är att när kursen startades så bad läraren mig beställa hem en bok som förklarar allting i C# och allting i arbetsboken där jag har mina uppgifter verkar det också vara i C# men det verkar som alla inlämningsuppgifter är i C++.. Men när jag gjorde skriftliga provet första gången så verkade det vara C++, men det var i princip samma saker med allting förutom Cout Cin osv som jag lärde mig efter tiden.

Kursen är också på distans så det tar en väldigt lång tid innan man får något svar ifrån läraren vilken är lite tråkigt..

Permalänk
Medlem
Skrivet av Korvulla:

@Tino: Tack för alla svar och länkarna, ska kolla igenom alla dessa och försöka få en större förståelse! Det jag är förvirrad över är att när kursen startades så bad läraren mig beställa hem en bok som förklarar allting i C# och allting i arbetsboken där jag har mina uppgifter verkar det också vara i C# men det verkar som alla inlämningsuppgifter är i C++.. Men när jag gjorde skriftliga provet första gången så verkade det vara C++, men det var i princip samma saker med allting förutom Cout Cin osv som jag lärde mig efter tiden.

Kursen är också på distans så det tar en väldigt lång tid innan man får något svar ifrån läraren vilken är lite tråkigt..

Låter ganska illa att böckerna inte är i samma språk som kursen?!

C++ skiljer sig ganska mycket på vissa punkter, speciellt pekare.

Visa signatur

Citera för svar

Permalänk
Medlem
Skrivet av Korvulla:

d= loopar är ju rätt enkelt förklarat tex for loopen och while loopen. For-loopen (int i=0; i<10; i++) så händer en loop tills att i blir 9, då 0 räknas som en loop. While-loopen fungerar väl i princip på samma sätt som for-loopen men det är väl tex while (i<10) { 1++}så händer en loop tills att i blir 9 igen?

Jag vet inte om det är till någon större hjälp, men for och while är i grunden samma sak. En for-loop kan skrivas om till en while-loop:

int i = 0; while (i < 10) { ... i++; }

Man kan också hoppa över delar av for-loopen för att göra samma sak som en while-loop:

int i = 0; for (; i < 10; ) { ... i++; }

Skrivet av Korvulla:

a = vad jag först trodde var "klasser" var tex int, string osv, ...

I C# kan int och string faktiskt ses som klasser, även om de är lite speciella. Men de har klassmetoder o.s.v., så man kan t.ex. använda nr.toString() för att konvertera int-variabeln nr till en sträng. I C++ är de däremot rena typer utan några metoder eller liknande.

Skrivet av Korvulla:

Det jag är förvirrad över är att när kursen startades så bad läraren mig beställa hem en bok som förklarar allting i C# och allting i arbetsboken där jag har mina uppgifter verkar det också vara i C# men det verkar som alla inlämningsuppgifter är i C++.. Men när jag gjorde skriftliga provet första gången så verkade det vara C++, men det var i princip samma saker med allting förutom Cout Cin osv som jag lärde mig efter tiden.

Det låter som en väldigt virrig kurs. Nog för att man inte ska fokusera så mycket på själva språket när man lär sig grunderna i programmering, utan snarare på koncepten, men att blanda C# och C++ i en nybörjarkurs lär ju inte direkt hjälpa.

Permalänk
Medlem

Jag kommer inte skriva nya förklaringar av begreppen, då jag tycker ovanstående svar förklarar bra.

Det generella tips jag kan ge är att programmera så mycket du bara kan. När du kör fast funderar du över hur man kan lösa det, och söker fram kodexempel. Detta kommer leda till att du lär dig de olika koncepten praktiskt, vilket många gånger är avsevärt mer värt än kunskap ur böcker.

Det är mycket värt att hitta ett projekt som intresserar dig. En skoluppgift blir sällan speciellt engagerande, då är det bättre att hitta något lagom stort att lägga lite tid på. Av egen erfarenhet avråder jag dock från webbsidor som skall användas av andra än sig själv. Det blir mycket tid att lägga på ganska lite kod. Brukar sluta med att projektet dör ut innan man är halvfärdig.

Det spelar mindre roll i vilket språk du programmerar, är man någorlunda bra på ett språk förstår man snabbt koncepten i andra språk. Jag har själv studerat bland annat C++, C#, Java och PHP, men är absolut vassast på JavaScript då det är språket jag haft störst behov av. Jag skulle inte påstå att jag är en superduktig kodare, men jag kan tillräckligt för att lösa de problem jag stöter på.

Jag vill påstå att de koncept ni går igenom på provet är väldigt bra grunder, kan man dessa kan man programmera väldigt mycket. Kanske inte snyggt eller effektivt, men man kan lösa problemen och lära sig nya saker.

Visa signatur

Desktop: | Win10 | InWin 303 | ASUS TUF X570 | AMD Ryzen 5 3600 | Noctua NH-U12S (PP) | Intel 600p 256GB | Gigabyte GTX 670 | 32GB DDR4 2400Mhz | Corsair RM650x | 3x 1080 Screens |
Datacenter: | 1x Physical | 1x Virtual |
Laptop: | 2x |

Dell Certified Technician

Permalänk
99:e percentilen

Märk väl att skillnaden mellan vanliga metoder/"funktioner" (med sidoeffekter) och pure functions är milsvid. En äkta funktion returnerar alltid samma sak för samma input och har inga sidoeffekter. Generellt är det så att ju större andel av koden du kan placera i äkta funktioner, desto bättre blir ditt liv. Ty en äkta funktion är vansinnigt mycket lättare att testa, verifiera och underhålla än en "oäkta".

Exempel för att förstå pure:

int f(int x) { return 2*x; }

f är pure, för den returnerar alltid sin input gånger två och har inga sidoeffekter.

int a = 0; int g(int x) { a++; return 2*x; }

g är inte pure, ty den har sidoeffekten att ändra värdet på den globala variabeln a.

int a = 0; int h(int x) { return x + a; } // ...

Inte heller h är pure, eftersom den inte garanterat returnerar samma sak varje gång den kallas med samma input.

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

@Baxtex: Ber om ursäkt för att jag glömde skriva dit språket, men språket är en blandning av C# och C++, det är lite förvirrande för att min bok är C+ men läraren vill att jag ska skicka inlämningarna som C++... kursen är distans och har inte riktigt fattat varför det är så heller men det har funkat än så länge iaf.

Dina svar var perfekta tyckte jag, lätt att förstå för mig, men det jag tänkte på nu efter att jag suttit och funderat lite på vad man ska lära sig så tänkte jag om du vet någon sida/ställe där jag skulle kunna kolla på olika uppgifter som man kanske behövde fylla på för att få den komplett osv?

Jag tänkte på det här med fråga g och h, jag har gjort båda koderna i ett och för ett program men jag förstod princip sen tidigare men jag förstod aldrig riktigt koden för den.. om du vill kan jag skicka bilder på vad jag har gjort om du har lust att förklara lite snabbt? koden fungerar och är användbar men är mestadels gjord utav google som inte riktigt förklarade så tydligt tyckte jag..

2 a och b var lite krångligt för mig att förstå, speciellt med get & set, men om vi säger klasserna till exempel, jag ska baka en muffin, jag skapar alltså en form för en muffin. och sedan inuti formen så har de som du kallade kakan(objekten) då eller? tex nedanför

Class muffinForm
{
int Sockerbitar
int Chokladbitar
}
eller tänker jag helt fel då?

----

Inte för att vara så dryg och be om för mycket hjälp men skulle du kunna skriva några snabba kodstycken till olika delar av frågorna jag skrev? tänkte mer på muffin som jag tog upp ungefär, hur den ska se ut egentligen, så simpelt som möjligt om du inte vill att jag ska skriva lite kod och sen hjälper dig med vad jag gör fel och varför jag inte ska göra så typ

Permalänk
Medlem

@Baxtex: Ja alltså jag är jätte förvirrad varför det är så? Jag använder mig utav boken, Bok och sedan samma arbetsbok, och den har läraren skrivit till kursen att man ska ha, men sen kollar man på alla inlämningar så är allt i c++...

Permalänk
Medlem

@perost: Tack för alla svar! hade inte riktigt tänk på att de är så lika för har försökt lära mig dem enskilt bara men nu när du/alla nämner det så är dem ju samma sak typ, uppskattar verkligen att du svarar i kod och vet inte hur jag gör sånna där kodformar som du gjorde men svar i kod är väldigt uppskattat då jag lär mig hur koden fungerar samtidigt som ni förklarar vad den gör.

Tror du att jag kan ha förstått C# för mycket och därför blandar jag ihop uttrycken mellan vad vissa saker heter i C# och sen vad de heter i C++? verkar som att jag gör det när jag läser hur du förklarar

Permalänk
Medlem

@Naxos: Jahaaa, så när man startar en ny klass så ger man den bara viss information om vad som ska skapas och sen i själva main så lägger man dit de extra sakerna som i detta fall vad för glass (vanilj, banan, choklad) typ?

Permalänk
Medlem

@JamesBanana: Jag har det största problemet när det kommer till att jag fastnar är att det känns som jag har lärt mig så mycket nytt på sådan kort tid så att man blandar ihop allting och på så sätt glömmer vad vissa saker gör och sedan tappar man motivationen pga det.. :/
Går så långt till att man kanske saknar en ; bara på slutet men man tror att det är hela programmet det är fel på haha, nu kör jag Visual Studio så den hjälper mig väldigt mycket med vad som saknas osv men tog det som ett exempel bara

Permalänk
Medlem

@Alling: förstår de första två men den sista med h förstår jag inte riktigt varför det inte är pure, är det för att ifall man ändrar värdet på a senare ? för just i den koden så kommer ju x och a alltid att vara detsamma, eller?

Permalänk
Medlem
Skrivet av Korvulla:

@Baxtex: Ber om ursäkt för att jag glömde skriva dit språket, men språket är en blandning av C# och C++, det är lite förvirrande för att min bok är C+ men läraren vill att jag ska skicka inlämningarna som C++... kursen är distans och har inte riktigt fattat varför det är så heller men det har funkat än så länge iaf.

Dina svar var perfekta tyckte jag, lätt att förstå för mig, men det jag tänkte på nu efter att jag suttit och funderat lite på vad man ska lära sig så tänkte jag om du vet någon sida/ställe där jag skulle kunna kolla på olika uppgifter som man kanske behövde fylla på för att få den komplett osv?

Jag tänkte på det här med fråga g och h, jag har gjort båda koderna i ett och för ett program men jag förstod princip sen tidigare men jag förstod aldrig riktigt koden för den.. om du vill kan jag skicka bilder på vad jag har gjort om du har lust att förklara lite snabbt? koden fungerar och är användbar men är mestadels gjord utav google som inte riktigt förklarade så tydligt tyckte jag..

2 a och b var lite krångligt för mig att förstå, speciellt med get & set, men om vi säger klasserna till exempel, jag ska baka en muffin, jag skapar alltså en form för en muffin. och sedan inuti formen så har de som du kallade kakan(objekten) då eller? tex nedanför

Class muffinForm
{
int Sockerbitar
int Chokladbitar
}
eller tänker jag helt fel då?

----

Inte för att vara så dryg och be om för mycket hjälp men skulle du kunna skriva några snabba kodstycken till olika delar av frågorna jag skrev? tänkte mer på muffin som jag tog upp ungefär, hur den ska se ut egentligen, så simpelt som möjligt om du inte vill att jag ska skriva lite kod och sen hjälper dig med vad jag gör fel och varför jag inte ska göra så typ

Nja inte riktigt, tror det är enklast att jag demonstrerar med ett exempel i Java. Man brukar göra en klass per fil. Nedan är ett exempel på 2 klasser. Vi har ett objekt av Program.java, detta är inget du själv ser dock. Det objektet kommer att skapa 2 objekt av klassen CupCake. Vi skapar två variabler av datatypen CupCake som var och en ska innehålla ett nytt CupCake objekt. Dessa objekten är alltså helt frånskilda, har ingenting att göra med varandra förutom att de är av samma klass.
På raden där jag deklarerar int nbr = 1; kan du se likadan som de andra, vi skapar en variabel med datatypen int som innehåller ett objekt som är en etta. (Nu är det inte riktigt sant, men vi kan låtsats att det är så för tillfället) :

Program.java

public class Program { //method that is called when program starts. public static void main (String[] args) { int nbr = 1; //a variable of datatype int that holds the number 1. CupCake cake1 = new CupCake(); CupCake cake2 = new CupCake(); //Now we got two instances/objects of CupCake. We can't really use the class itself, just the objects. (Though static classes can, but let's ignore that for now.) //Setting the color in one cake, doesn't affect the others. They are two different objects. cake1.setIcingColor("blueIcing"); //a variable of datatype CupCake that has the icing color of blue. cake2.setIcingColor("redIcing"); //a variable of datatype CupCake that has the icing color of red. } }

CupCake.java

public class CupCake{ private String icingColor = "none"; //setter that sets the icingColor. public void setIcingColor(String icingColor){ this.icingColor = icingColor; } //getter that returns the icingColor. public String getIcingColor(){ return this.icingColor; } }

I fallet ovan hade det antagligen varit bättre att sätta icingColor i constructorn, men vet inte om du känner till det så tänkte visa ett getter/setter exempel på samma sång.

Om du använder C# bok så kan de prata om properties också. Då är :

private String icingColor = "none"; //setter that sets the icingColor. public void setIcingColor(String icingColor){ this.icingColor = icingColor; } //setter that sets the icingColor. public String getIcingColor(){ return this.icingColor; }

Samma sak som:

public string CupCake { get; set; }

Men du ser ju själv vad som är snyggast hehe. Men nu är det lite överkurs.

Skrivet av Korvulla:

@GreveFrog: Jag har det största problemet när det kommer till att jag fastnar är att det känns som jag har lärt mig så mycket nytt på sådan kort tid så att man blandar ihop allting och på så sätt glömmer vad vissa saker gör och sedan tappar man motivationen pga det.. :/
Går så långt till att man kanske saknar en ; bara på slutet men man tror att det är hela programmet det är fel på haha, nu kör jag Visual Studio så den hjälper mig väldigt mycket med vad som saknas osv men tog det som ett exempel bara

Vi har alla varit där. Det är många nya koncept som ska in. När du jobbat tillräckligt mycket och länge med det så sitter det mesta i ryggraden. Ibland kan man läsa på något, citera boken, men ändå inte förstå dess innebörd förrän långt senare.

Visa signatur

Citera för svar

Permalänk
99:e percentilen
Skrivet av Korvulla:

@Alling: förstår de första två men den sista med h förstår jag inte riktigt varför det inte är pure, är det för att ifall man ändrar värdet på a senare ? för just i den koden så kommer ju x och a alltid att vara detsamma, eller?

Du tänker helt rätt! Konstanter är OK att använda inne i en äkta funktion. Problemet är som du mycket riktigt beskriver att a mycket väl kan ändras på en annan rad (vilket jag lite subtilt markerade med // ...).

Nedan följer ett exempel på en äkta funktion:

const double pi = 3.141592; double circleCircumference(double radius) { return 2 * radius * pi; }

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

Edit: detta gäller C#
Vill du lära dig betydligt enklare i början så håll dig till ett språk!

Jag gör ett försök också ^.^:

Mönstret som det mesta följer är detta:

class myClass{ // klass var variable; // variabel, kallas även fält/field public int myProp{get; set;} // Property, egenskap public bool myMethod(){} // metod, funktion }

Där variabler oftast används för att lagra data inom klassen, egenskaper används för att komma åt värdena från variablerna och metoder som kan ses som avancerade egenskaper som man använder för att göra mer avancerade beräkningar osv

__________________________________

f) Array

Array är en samling av en typ.

string[] s = ["hej", "då"];

s är en array av strings, dvs en samling av strings.
För att hålla reda på alla element i arrayen så numreras dessa med ett nummer (index), som alltid börjar på 0.
"hej" blir då index 0 och "då" blir index 1.
Så för att komma åt värdena i en array måste man ange vilket indexnummer man vill komma åt.
Vill man komma åt "hej" måste man skriva

s[0];

osv
Tänk på en array som en byrå med numrerade lådor där du kan stoppa i saker:

string[] s = new string[3](); // skapa en byrå med tre lådor s[0] = "hej"; // stoppa värdet "hej" i första lådan s[1] = "då"; // stoppa värdet "då" i andra lådan

_____________________________

g) Söknings och sorteringsalgoritmer

Sökalgoritmer är egentligen bara sätt att loopa över en samling med värden för att se om man hittar det man letar efter.

public bool findIt(string needle, string[] haystack){ foreach(var item in haystack){ if( item == needle) return true; } return false; } string[] haystack = ["hej", "då"]; string needle = "då"; findIt(needle, haystack); // returnerar true

Sorteringsalgoritmer är lite bökigare men förenklat kan man säga att dom jämför alla element i en samling och flyttar dom om det behövs.

int[] i = [1,3,2]; i.sort();

sort() kommer att börja framifrån och jämföra varje element i arrayen:
1. 1 och 3 jämförs och dom är i rätt ordning så inget görs
2. 3 och 2 jämförs och dom är i fel ordning så algoritmen låter dom byta plats
3. börjar om från början och om inga förflyttningar görs på en hel iteration så är sorteringen klar.

____________________________________

h) aktivitetsdiagram och pseudokod

Aktivitetsdiagram är som en karta över möjliga händelseförlopp och det finns en del olika designer på dom. Många av dom är av typen fråga och svar.
Som i sökalgoritemen ovanför:
Är item från haystack samma som needle?
ja: returnera sant
nej: Finns fler items i haystack?
ja: gå till början
nej: returnera falskt
Nu är det i textform men tänk dig frågorna som rutor och ja/nej som linjer mellan dom.
Det som är skrivet här ovan är också pseudokod, dvs en mänsklig beskrivning av vad koden man vill skriva ska göra.

_______________________________________

2. Grunder i objektorienterad programmering
a) klasser, objekt.

klasser, objekt och typer är egentligen olika ord på samma sak men i olika sammanhang.

Säg att du har en klass:

class Person{ string name; }

och att du tilldelar en variabel den klassen:

var p = new Person();

Variabeln p är nu av typen Person.
p är också en instans av klassen Person.
p är också ett objekt av typen Person.

Om man däremot menar object, som i klassen object, från vilket dom flesta klasser ärver ifrån så kan man också säga att både p och Person är av typen object.

_____________________________________________

b) set och get funktioner

get- och set-metoder tillhör propertys i klasser och används för att hantera skrivning och läsning av värden till och från variabler:

class Person{ string name; public string Name{ get{ return name; } //get returnerar ett värde set{ name = value; } // set får alltid ett värde 'value' } } var p = new Person(); p.Name = "Kalle"; // set-funktionen i Name anropas och 'value' får värdet "Kalle" var k = p.Name; // get-funktionen i Name anropas

Egenskaper används ofta för att skydda variabler i klasser. Vi anropar inte variabeln name direkt utan gör det via egenskapen Name och kan då i get- och set-metoderna kontrollera vad som skrivs till variabeln name och vad som returneras.
_____________________________________

Hoppas det hjälper lite.
Det finns massor med komplexa användningsområden och andra objekt som bryter mot mönstret jag beskriver ovan. Men detta är en förenkling av grunderna

Visa signatur

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

Permalänk
Medlem
Skrivet av Korvulla:

..., uppskattar verkligen att du svarar i kod och vet inte hur jag gör sånna där kodformar som du gjorde men svar i kod är väldigt uppskattat då jag lär mig hur koden fungerar samtidigt som ni förklarar vad den gör.

[code]
Kod här
[/code]
Om du trycker på Citera-knappen för ett inlägg så ser du forumkoden som användes.

Skrivet av Korvulla:

@Naxos: Jahaaa, så när man startar en ny klass så ger man den bara viss information om vad som ska skapas och sen i själva main så lägger man dit de extra sakerna som i detta fall vad för glass (vanilj, banan, choklad) typ?

Nja, inte riktigt. Man brukar säga att en klass är som en ritning, som man sedan använder för att skapa objekt. D.v.s. du har kanske en klass för glass som beskriver vilka egenskaper en glass har. Klassen i sig är inte en glass, det är bara en beskrivning av hur glassar ser ut och uppför sig. Sedan kan man använda klassen för att skapa instanser av den, t.ex. en vaniljglass eller en chokladglass. T.ex. i C++:

class Icecream { public: Icecream(string flavour) // Konstruktor, anropas automatiskt när man instantierar klassen. { _flavour = flavour; } Icecream() {} // En annan konstruktor för när man inte vill ange någon smak. void eat() // En instansmetod. { std::cout << "I'm eating a " << _flavour << " icecream!" << std::endl; } static Icecream makeRandom() // En klassmetod, notera static. { // Returnera en vanilj eller chokladglass baserat på ett slumpvärde. if (rand() % 2 == 0) { return Icecream("vanilla"); // Returnera vaniljglass vid jämnt värde. } else { return Icecream("chocolate"); // Returnera chokladglass vid udda värde. } } private: std::string _flavour; // En instansvariabel. }; // Något scope, t.ex. i main, eller vart som helst man kan deklarera variabler. { Icecream vanilla("vanilla"); // En instans av Icecream-klassen, konstruktorn anropas med "vanilla". Icecream chocolate("chocolate"); // En annan instans. Icecream unknown = Icecream::makeRandom(); // Ytterligare en instans som tilldelas en slumpmässig smak. vanilla.eat(); // Skriver ut "I'm eating a vanilla icecream!". chocolate.eat(); // Skriver ut "I'm eating a chocolate icecream!". unknown.eat(); // Skriver ut något av ovanstående meddelanden beroende på vilken smak den fick. }

Som du ser är det inte riktigt sant att klasser bara är en beskrivning av objekt, de kan även ha metoder och t.o.m. variabler som hör till själva klassen. Instansmetoder kan endast användas via en instans av klassen, d.v.s. ett objekt, medan klassmetoder endast kan anropas på själva klassen. Men det viktiga här är alltså att Icecream-klassen beskriver att en instans har en string-variabel vid namn _flavour¹, d.v.s. själva klassen har ingen sån variabel utan det är varje instans som har en egen _flavour-variabel.

¹ Jag brukar använda _ för instansvariabler för att undvika namnkollisioner, det är inte viktigt.

Skrivet av Korvulla:

@Alling: förstår de första två men den sista med h förstår jag inte riktigt varför det inte är pure, är det för att ifall man ändrar värdet på a senare ? för just i den koden så kommer ju x och a alltid att vara detsamma, eller?

h använder en global variabel, så man kan inte garantera att funktionen alltid returnerar samma svar för ett visst argument. I just det exemplet ändras så klart inte värdet på a, men meningen med exemplet är mer att demonstrera principen. I ett riktigt program brukar man försöka undvika globala variabler just för att det är svårt att hålla koll på var de ändras någonstans.

Permalänk
Medlem

@Baxtex: Hur gör du så att koden ser ut som din gör? på forumet alltså.

Jag tror jag förstår lite bättre nu, problemet för min del är att jag alltid har gjort static void på samma program som där min main var och tror att det har gjort allting mer förvirrande för mig, istället för att skapa en ny klass där man bara ser "CupCake" i detta fall.

class person // Klass: Innehåller en person { public: // Public då det ska fungera utanför ramerna av "class person" string name; int age; void SkrivUt() // Skapar void SkrivUt { cout << "Namn: " << name << ", " << age << " \x8Fr." << endl; // Talar om vad som ska skrivas ut } void setInfo(string _name, int _age) // Sätter den info som krävs { name = _name; age = _age; } }; // Avslut class person int linsok(person p[], int n, int a) // Linjär sökning av ålder { for (int i = 0; i < n; i++) // Går igenom hela listan { if (p[i].age == a) //Kollar om i har rätt ålder { return i; } } return -1; // returnerar -1 om ingen person hittats };// linsok avslut void bubblesort(person p[], int n) // bubblesort algoritm skapas { int i = 0; for (i = 0; i < n; i++) // Yttre loop söker igenom hela listan { int nrLeft = n - i; for (int j = 0; j < nrLeft; j++)// Inre loop, element för element { if (p[j].age > p[j + 1].age) // Jämför elementen { // Byter plats person temp = p[j]; p[j] = p[j + 1]; p[j + 1] = temp; } } } }// Bubblesort slut int main() { //Skapar en lista med personer - namn/ ålder cout << "-- Osorterad lista --" << endl << endl; // Skriver ut titel person family[4]; family[0].setInfo("Niklas", 21); // "Sätter personens namn & ålder" family[1].setInfo("Elin", 18); family[2].setInfo("Johan", 19); family[3].setInfo("Johanna", 22); for (int i = 0; i<4; i++) { family[i].SkrivUt(); } cout << endl << "-- Sorterad lista --" << endl << endl; // Skriver ut titel bubblesort(family, 3); //Anropar funktionen bubblesort för att sortera vektorn Familj. for (int i = 0; i<4; i++) { family[i].SkrivUt(); } int index = linsok(family, 4, 19); //Söker efter en viss person i vektorn Familj som innehåller 4 element och ska vara 19 år gammal if (index == -1) cout << "Personen hittas ej!"; // Antingen hittas inte personen eller... Denna skulle spela en större roll ifall det var userinput istället för att namn/ålder skrevs i kod. else cout << endl << family[index].name << " finns p\x86 plats " << index << " i listan."; // ... så hittar programmet personen och info skrivs ut. // Elementen räknas som 1 = 0, 2 = 1, 3 = 2, 4 = 3, och därför står det nu att Johan är nr 1 på listan men egentligen nr 2, förstod inte hur man ändrade detta men hoppas att det duger ändå, jag förstår principen till varför det står som det gör iaf. cin.get(); return 0; }

detta var en inlämningsuppgift jag gjorde förut och tror att det har samma funktion som med din cupcake att göra?

Permalänk
Medlem

@Alling: Precis, då Const gör att pi inte kan ändras senare(?) och därför blir den i detta fall Pure?

Permalänk
Medlem

@Korvulla jag orkar inte läsa din kod utan formatering. Innan din kod börjar skriver du CODEmed hakparanteser runt alltså []. Efter din kod skriver du samma sak fast med en slash framför /CODE

https://imgur.com/a/St2Fq

Visa signatur

Citera för svar

Permalänk
Medlem

@kundun: nu när du nämner (var) så blir jag påmind om en video jag såg förut som istället för att skriva int, string osv så skrev han (var x = 1) tex och då kände programmet på sig att det skulle vara int typ, och jag tror det också förvirrar mig med vad en variabel är då jag alltid trodde int var en variabel pga detta... men nu förstår jag att int x (x är variabeln) i detta fall.

float medel(int v[], int n) { float sum = 0; for (int i = 0; i < n; ++i) sum += v[i]; float average = sum / n; // Istället för att direkt skriva ut resultatet så skickar jag tillbaka resultatet till main-funktionen. return average; } int main() { int n = 10; int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Anropa funktion medel och skicka med variabeln "array" som parameter. // Funktionen skickar tillbaka ett värde som alltså är medelvärdet av talen. Detta returnerade värde är det jag skriver ut. float average = medel(array, n); cout << "Medelv\x84rdet \x84r: " << average; }

detta är en kod jag skrev för länge sen till array, och jag verkar bara ha förstått allting på fel sätt känns det som, eller att jag glömmer allt så fort typ..
Eller har jag gjort fel på denna kod? den funkar iaf

det jag inte förstår i sorteringsalgoritmen är vilken kod är det som gör att den sorteras egentligen? jag låter som cp när jag säger så förmodligen men förstår aldrig riktigt vilken del av all kod som sorterar sakerna och hur den gör det ifrån den kodstycket

tänkte lägga in en bild om ett pseudokod och aktivitetsdiagram jag skrev länge sen som jag bara googlade fram och ändrade vissa delar på, kan försöka förklara vad jag tror att de gör osv för att försöka lära mig själv samtidigt som jag förklarar för er

så get och set har alltid till med nya klasser att göra?

Permalänk
Medlem

@Baxtex: Fixade, visste inte om hur man skrev i kodstycke

Permalänk
Medlem

@Korvulla Jag tror du får försöka formulera dina frågor lite bättre för du frågor liksom om allting hehe.

Men för att svara på några: "const" är din bästa vän, använd det så mycket du bara kan. Konstanter går aldrig och ändra och är därför lätta att hantera.

"var" finns i vissa språk. I det sammanhang du nämner så är det "type inference". Kompilatorn märker själv vad det är för typ så du slipper ange den. I c++ finns "auto" som gör samma sak. Jag råder dig att inte använda det, iallfall inte nu i början, det är nog enklast.

Det blir lite extra rörigt för din del när uppgifterna är i C++, eftersom där består varje klass av två delar, både själva klassen och header filen. Header filen deklarerar hur klassen ska se ut, medan klassen sedan implementerar den. Klassen kan sedan användas för att göra objekt. Jag inser att detta kan vara svårt att förstå. Jag råder dig att skaffa en vettig c++ bok istället, t ex C++ Primer Plus, finns online och även på många bibliotek.

Visa signatur

Citera för svar

Permalänk
Medlem

@perost:

class Icecream { public: Icecream(string flavour) // Konstruktor, anropas automatiskt när man instantierar klassen. { _flavour = flavour; } Icecream() {} // En annan konstruktor för när man inte vill ange någon smak. void eat() // En instansmetod. { std::cout << "I'm eating a " << _flavour << " icecream!" << std::endl; } static Icecream makeRandom() // En klassmetod, notera static. { // Returnera en vanilj eller chokladglass baserat på ett slumpvärde. if (rand() % 2 == 0) { return Icecream("vanilla"); // Returnera vaniljglass vid jämnt värde. } else { return Icecream("chocolate"); // Returnera chokladglass vid udda värde. } } private: std::string _flavour; // En instansvariabel. };

den här delen är nog den svåraste för mig att förstå av alla delar i denna kod, men jag ska försöka förklara hur jag tänker.
jag ser att du skapar tex void eat, vilket du tar upp senare när du använder dig utan

cout

för att skriva ut vilken smak man äter tex och då behöver du bara skriva

eat

för att då vet programmet redan att

eat

=

std::cout << "I'm eating a " << _flavour << " icecream!" << std::endl;

eller hur?
det med random fungerar ju på samma sak att du behöver bara skriva makeRandom så vet programmet vad den ska göra när den senare används, alltså slumpa mellan vanilla och chocolate, så denna kommer/kan ändra sig varje gång du startar programmet senare.

men det jag inte förstår är

Icecream(string flavour) // Konstruktor, anropas automatiskt när man instantierar klassen. { _flavour = flavour; } Icecream() {} // En annan konstruktor för när man inte vill ange någon smak.

^Vad gör denna kod för något egentligen?

// Något scope, t.ex. i main, eller vart som helst man kan deklarera variabler. { Icecream vanilla("vanilla"); // En instans av Icecream-klassen, konstruktorn anropas med "vanilla". Icecream chocolate("chocolate"); // En annan instans. Icecream unknown = Icecream::makeRandom(); // Ytterligare en instans som tilldelas en slumpmässig smak.

Här så byter du alltså namn på Icecream chocolate tex till endast chocolate så att det ska se bättre ut och bli en lättare kod när du sedan använder den?

vanilla.eat(); // Skriver ut "I'm eating a vanilla icecream!". chocolate.eat(); // Skriver ut "I'm eating a chocolate icecream!". unknown.eat(); // Skriver ut något av ovanstående meddelanden beroende på vilken smak den fick. }

här använder du alltså de förkortade namnen som du i tidigare kod ändrade till för att få bättre struktur och finare kod?

Permalänk
Avstängd

Angående b, visst måste man passa sig för att blanda ihop variabler och objekt? Jag tänker t.ex. att int, char och bool räknas som variabel (primitiv variabel) medan String osv. räknas som objekt? Ta det jag säger med en nypa salt då jag inte har ingående kunskap om C++.

Permalänk
Medlem

@Baxtex: hmm men jag tror jag börjat få ett lite med vett om vad sakerna jag inte fattade är nu ändå,
Variabler är alltså inte int,string osv utan det är int x, string muffin, (variabler är x, muffin, alltså det som är efter int osv)

Funktioner är något du kan skriva utanför main och sen behöver du bara nämna den i main sedan och då vet den vad den ska göra pga du har skrivit koden i ett annat stycke exempel såhär

Array är när man skriver int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };, man kan förklara att man sparar en massa variabler i en array.

Söknings och sorteringsalgoritmer jag har fortfarande lite svårt med att förstå hur koden fungerar

aktivitetsdiagram och pseudokod detta förstår jag principen till men att skriva det och hur jag ska tänka när jag skriver det är lite svårt med aktivitetsdiagramet iaf

klasser är ifall man skapar en class Person så ska den classen alltså handla om koder man sedan kan använda för att specificera en viss persons uppgifter?

class person // Klass: Innehåller en person { public: // Public då det ska fungera utanför ramerna av "class person" string name; int age; void SkrivUt() // Skapar void SkrivUt { cout << "Namn: " << name << ", " << age << " \x8Fr." << endl; // Talar om vad som ska skrivas ut } void setInfo(string _name, int _age) // Sätter den info som krävs { name = _name; age = _age; } }; // Avslut class person

för att sedan använda mig utifrån detta i main så måste börja med att skriva typ
person niklas = new person () för att skapa objektet?
sen niklas.setInfo("Niklas" , 20) typ?

är det ungefär vad allt betyder?

Permalänk
Medlem

Jag kastar om dina frågor lite för bättre struktur:

Skrivet av Korvulla:

// Något scope, t.ex. i main, eller vart som helst man kan deklarera variabler. { Icecream vanilla("vanilla"); // En instans av Icecream-klassen, konstruktorn anropas med "vanilla". Icecream chocolate("chocolate"); // En annan instans. Icecream unknown = Icecream::makeRandom(); // Ytterligare en instans som tilldelas en slumpmässig smak.

Här så byter du alltså namn på Icecream chocolate tex till endast chocolate så att det ska se bättre ut och bli en lättare kod när du sedan använder den?

Nej, här skapar jag tre nya instanser av klassen Icecream. Detta är alltså samma sak som när du t.ex. skriver:

int x; int y;

Enda skillnaden är att vanillja, chocolate och unknown har typen Icecream istället för int. Icecream-klassen beskriver vad dessa instanser innehåller, i det här fallet har varje instans en egen string-variabel som heter _flavour, en metod som heter eat, samt två konstruktorer.

Skrivet av Korvulla:

vanilla.eat(); // Skriver ut "I'm eating a vanilla icecream!". chocolate.eat(); // Skriver ut "I'm eating a chocolate icecream!". unknown.eat(); // Skriver ut något av ovanstående meddelanden beroende på vilken smak den fick. }

här använder du alltså de förkortade namnen som du i tidigare kod ändrade till för att få bättre struktur och finare kod?

Nej, vanilla, chocolate och unknown är som sagt olika instanser av Icecream, och här anropas deras eat-metod. Se nästa svar för en längre förklaring.

Skrivet av Korvulla:

... deklaration av Icecream-klassen ...

den här delen är nog den svåraste för mig att förstå av alla delar i denna kod, men jag ska försöka förklara hur jag tänker.
jag ser att du skapar tex void eat, vilket du tar upp senare när du använder dig utan

cout

för att skriva ut vilken smak man äter tex och då behöver du bara skriva

eat

för att då vet programmet redan att

eat

=

std::cout << "I'm eating a " << _flavour << " icecream!" << std::endl;

eller hur?

Nja, jag definierar t.ex. eat, vilket talar om för kompilatorn att det finns en metod i Icecream som heter eat och hur den ser ut. Metoden kan däremot inte anropas direkt, utan den kan endast anropas via en instans.

Tänk dig att eat istället skulle vara definierad så här:

void eat(Icecream this) { std::cout << "I'm eating a " << this._flavour << " icecream!" << std::endl; }

Och istället för att man sen skriver t.ex. vanilla.eat() så skriver man eat(vanilla). Då blir det ju tydligt att eat skriver ut den _flavour som tillhör instansen som man skickar som argument till eat. Detta är också ungefär vad som sker i bakgrunden. Det finns nämligen en speciell variabel i C++ och C# som heter just this, vilket är en pekare/referens till instansen som metoden anropades på. this skickas automatiskt som ett argument till instansmetoder när de anropas, så att man inte behöver göra det själv, och den används automatiskt när man använder instansvariabler eller anropar andra instansmetoder.

Skrivet av Korvulla:

men det jag inte förstår är

Icecream(string flavour) // Konstruktor, anropas automatiskt när man instantierar klassen. { _flavour = flavour; } Icecream() {} // En annan konstruktor för när man inte vill ange någon smak.

^Vad gör denna kod för något egentligen?

En konstruktor anropas automatiskt när man instantierar klassen, och används för att initialisera instansen. D.v.s. det är ungefär samma sak som:

class Icecream { public: void init(std::string flavour) { _flavour = flavour; } private: std::string _flavour; }; void main() { Icecream vanilla; vanilla.init("vanilla"); }

Problemet med denna kod är att vanilla kommer vara oinitialiserad tills man anropar init-metoden, så t.ex. vanilla._flavour kommer vara en tom sträng innan init anropats. Istället för att man ska behöva komma ihåg att initialisera sina objekt så kan man då ha en konstruktor som anropas automatiskt när instansen skapas.

Orsaken till att jag var lov att definiera två konstruktorer i mitt tidigare exempel har att göra med att standardkonstruktorn som kompilatorn genererar automatiskt inte genereras ifall man definierat en egen konstruktor. Men då är vi inne på lite mer specifika detaljer, så du kan strunta i Icecream() {}-konstruktorn för tillfället om det gör det lättare att förstå.

Permalänk
Medlem

en variabel är en behållare för ett värde, och värdet kan vara ett objekt av någon typ eller ett primitivt värde som tex 1, true, "hej".
En variabel är alltså bara ett namn som representerar ett värde av något slag.

int i = 3;
i är variabeln som representerar värdet 3 av typen int.

Person p = new Person();
variabeln p representerar en instans(kopia) av klassen Person.
variabeln p är av typen Person

Visa signatur

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