Gå til innhold

Hva er Variabler (Programmering)


Anbefalte innlegg

Mye interessant lesing her, og som noen har vært inne på er nok det riktige svaret avhengig av hva oppgavestilleren har ment med spørsmålet!  :wee: 

Når det spørres om 3 egenskaper til en variabel holder jeg imidlertid fast ved diagrammet mitt over uavhengig av programmeringsspråk. I VBA som jeg jobber en del med finnes det mange måter å definere en variabel på, men det høres allikevel fornuftig ut.

1. Enten JA eller NEI = Kun 2 mulige verdier

2. JA eller NEI eller VET IKKE = Flere, men allikevel bestemte verdier

3. En hvilken som helst verdi

  • Liker 1
Lenke til kommentar
Videoannonse
Annonse

En variabel er det samme som en fyrstikkeske.

 

Hent fram 3 fyrstikkesker og du har da deklarert 3 variabler.

 

Skriv A på den ene esken og B på den andre. Da har de to variablene fått navn.

 

Skriv eske-3 på den tredje esken.

 

Skriv 3000 på en papirlapp og putt den i den første eksen. Skriv 250 på en annen lapp og putt den i den andre esken.

 

Da har variablen A fått verdien 3000 og variablen B har fått verdien 250.

 

Skriv så "bare løgn" på en ny lapp og putt den i eske-3. Da har eske-3 fått den boolske verdien 0, usann eller løgn.

 

Det fungerer ellers også likt i matmatikk, og med andre ord: A + B = 3250.

Endret av arne22
  • Liker 1
Lenke til kommentar

En variabel er det samme som en fyrstikkeske.

 

Hent fram 3 fyrstikkesker og du har da deklarert 3 variabler.

 

Skriv A på den ene esken og B på den andre. Da har de to variablene fått navn.

 

Skriv eske-3 på den tredje esken.

 

Skriv 3000 på en papirlapp og putt den i den første eksen. Skriv 250 på en annen lapp og putt den i den andre esken.

 

Da har variablen A fått verdien 3000 og variablen B har fått verdien 250.

 

Skriv så "bare løgn" på en ny lapp og putt den i eske-3. Da har eske-3 fått den boolske verdien 0, usann eller løgn.

 

Det fungerer ellers også likt i matmatikk, og med andre ord: A + B = 3250.

 

Ehhh??? Hvis 1 fyrstikkeske er lik A er også B=A og eventuelt C også...

  • Liker 1
Lenke til kommentar

Sånn rent praktisk tenker jeg designasjon, verdi og eksistens - dersom sistnevnte kan tilfalle en ikke-eksisterende variabel.

 

Disclaimer: uavhengig av gjeldende pensum og språk.  Manglende designasjon vil også tilsi at den ikke eksisterer, men hva legger man i egenskap her? Kontekst og scope vil også være relevant.

Endret av process
  • Liker 1
Lenke til kommentar

Denne posten inneholder info om mange egenskaper ved datatyper. Merk at datatype uansett er bare én egenskap ved en variabel.

 

Dette er mitt sammenraskede inntrykk her og nå. Andre kan (og gjør) stille opp kategoriene annerledes.

 

Diskrete/diskontinuerlige typer

Dette vil si at det ikke er noe "i mellom" verdiene. Eksempel: I datatypen int finnes det ikke en verdi mellom 500 og 501. Int er derfor en diskret/diskontinuerlig type.

Eksempel: Det er ingenting "i mellom" bool og false. Boolean er derfor også en slik type.

 

Ordene betegner på en måte det samme, men man kan kanskje si at det er mer naturlig å betegne heltall som diskontinuerlige og enum/bool som diskrete. Diskontinuerlig hinter i mitt hode til at typen er sorterbar (som vi skal lese om under). Man kunne splittet denne kategorien i to, og latt diskontinuerlig = diskret + sorterbar, men det får være grenser.

 

Kontinuerlige typer

Dette vil si at det alltid er en verdi i mellom verdiene.

Eksempel: I datatypen float finnes det en verdi mellom 500 og 501 (nemlig 500.5), og mellom 500 og 500.5 (nemlig 500.25). Float er altså regnet som kontinuerlig i denne inndelingen (i praksis kommer man selvsagt til et punkt der man ikke kan dele opp mer).

 

En type er ENTEN diskontinuerlig ELLER kontinuerlig, ikke begge.

 

Sorterbare (orderable) typer

Man kan sammenligne to verdier, og alltid vite om den ene er større enn den andre, eller om de er like store.

Eks: 5 > 3. Int er orderable.

Eks: 5.0 > 3.0. Float er orderable.

Eks: true > false gir ingen mening. Bool er ikke orderable.

 

Typer som er inkrementer-bare

Inkrementere = øke (med ett steg).

 

Eks (int): For enhver verdi finnes det en verdi som er neste og forrige. 502 er neste etter 501. Int er altså inkrementerbar.

Eks (ikke float): Hva er den neste verdien etter flyttallet 10.0? Ikke 10.1, fordi før der kommer nemlig 10.05. Osv...

 

Float er ikke inkrementer-bar.

 

Hvis man har en verdi av typen "en av [grønn, stor, kald, blå]", er det ikke mulig å inkrementere eller minske verdien. Det ene er ikke større eller mindre enn det andre. En Enum (som det kalles) er altså ikke inkrementerbar.

 

Du har kanskje oppdaget at når en verdi er BÅDE sorterbar OG diskret, er den inkrementerbar, ellers ikke. Float er ikke inkrementerbar fordi den ikke er diskret, Enum er ikke inkrementerbar fordi den ikke er sorterbar.

 

Unit type

En type som bare har én mulig verdi. Den heter gjerne Unit.

 

Void type

En type som ikke har NOEN verdier. Fyller nesten samme funksjon som unit type (beskrevet over). Den heter alltid void.

 

Compound type

En datatype som er satt sammen av andre variabler. Eksempler er array, set, struct, class.

 

Slutt på egenskaper ved datatyper.

-------------------------------

La oss gjøre det motsatte, og ta en titt på forskjellige typers egenskaper:

 

integer, int, uint, short int, long int, byte, word, dword, quad, BigInt osv.

Diskontinuerlig OG orderable (og dermed inkrementerbar).

 

float, double, extended, arbitrary precision float

Kontinuerlig og orderable (og ikke inkrementerbar)

 

Nå skal det dog sies at både float, double og extended er tilnærmeringer som bruker et fast antall bits. Derfor er det mulig å inkrementere i minste steg med triksing med bits "behind the scenes". En ekte arbitrary precision float, har derimot ikke denne bakdøren.

 

char, wchar_t

En char er egentlig bare en liten int, som i "etterpåklokskap" tolkes som en bokstav. Den har derfor samme egenskaper som en int.

Eks: Etter 'a' kommer 'b' uten et mellomstadie. Og 'b' kommer etter 'a' - som kommer før 'b'.

 

string, streng

Er en eller flere chars. Dermed må en streng også være diskret/diskontinuerlig. Man kan definere en måte å sammenligne strenger på som gjør den orderable (og dermed inkrementerbar).

Eks: Etter "a" kommer "b" uten et mellomstadie, og etter "z" kommer "aa" uten et mellomstadie.

 

Merk at string i mange språk er implementert som en klasse (compound type), men likevel beholder egenskapene over.

 

Enum

Diskret, men ikke orderable.

 

En (opaque) enum er en type der man lister opp de lovlige verdiene, f.eks. Farge = en av [Rød, Grønn, Brun] eller Bool = en av [true, false]. Disse forskjellige verdiene har ingenting "i mellom" dem, man må velge én av dem. En Enum er dermed en diskret datatype.

 

En enum er per definisjon ikke orderable. Man kan ikke si at Rød > Grønn. Farge = en av [Rød, Grønn, Brun] skal være det samme som Farge = en av [Grønn, Rød, Brun].

 

(Merk at en "vanlig" (ikke opaque) enum ikke er en datatype, men en måte å tilordne stigende heltallsverdier på.)

 

Boolean

En enum med to verdier: true og false.

Og er dermed diskret, men ikke orderable.

 

Unit

https://en.wikipedia.org/wiki/Unit_type

Kan muligens katalogiseres som en enum med bare én mulig verdi.

Og er dermed diskret, men ikke orderable. Selv om dette virker litt rart, og det ikke står forklart sånn noe annet sted på nettet. Unit brukes som en mer kraftig variant av void i funksjonsbaserte språk.

 

--------------------------------

 

Dette var sikkert ikke det svaret trådstarer var ute etter...

  • Liker 2
Lenke til kommentar

Hvilke tre egenskaper har variabler?

 

Skulle tro det var et navn, en type og en verdi, stort vanskeligere er det neppe på det nivået av opplæringen.

 

Men hvis den er definert av språket til å ikke ha en verdi... Programmet stopper når man leser fra den - man får ikke ut noen verdi. At å lese fra en uinitialisert variabel gir en exception, f.eks.

 

Ikke alltid, for eksempel JavaScript

var x;    // undefined
if (x) {} // helt okay, ingen feil, dog er undefined "falsy"
Her er variablen deklarert, men ikke definert, det er fremdeles ikke noe problem å bruke variablen, for eksempel i en "if" statement.

Variabler som ikke er deklarert, vil derimot gi en feilmelding.

 

I C/C++ ville det jo bli feil

int x;

if (x) {} // fail

La oss gjøre det motsatte, og ta en titt på forskjellige typers egenskaper:

Du glemte long double, og hva med null pointere da, null pointere som er så viktige !

Endret av adeneo
  • Liker 1
Lenke til kommentar

Jeg jobber med PLS, og mener da en variabel også kan ha disse egenskapene:

1: Retentiv/temp - Hvor du velger å lagre variablen din blir en egenskap til variablen.

2: Intern/global - Hvor du velger å ha variablen tilgjengelig blir en egenskap til variablen.

3: Navngitt/ikke navngitt - Om du velger å gi variablen et symbol (i PLS verden).

 

1: Retentiv = Om verdien i variablen lagres i minnet hvis man tar av og på strømmen på PLS'en.

2: Intern = At variablen bare er tilgjengelig innenfor funksjonen der den er definert. Global er tilgjengelig på tvers av funksjoner.

3: Jeg kan bruke en variabel jeg har valgt å lagre i f.eks datablokk 100, på adresse 50, bit 3. Symbolet til denne variablen er "PLS".databit. Jeg kan nå bruke denne variablen ved å enten bruke DB100.DBX50.3, eller "PLS".databit. Litt usikker på om man kan la vær å gi en variabel som dette noe symbol. Godt mulig det blir generert et symbol uansett når man deklarerer en variabel.

(For de som kan siemens pls: Hvis man ser i en DB der symboler ikke er lagret, så vil jo variablene hete STAT..)

  • Liker 1
Lenke til kommentar

Siden vi er på starten av denne terminen, bruker vi et ganske enkelt og brukervennlig program som heter Scratch. I vinter skal vi begynne med Python, så jeg tenker at læreren mener noe innen Scratch. 

Fant dette på nettet:

 

"A simple way to think about variables is a box with numbers in it. These numbers can be increased and decreased and made to control various parts of a project. Contrary to algebraic variables (which are usually unknown), the variables in Scratch and other programming languages are simply known values. In fact, in Scratch 1.3 and above, variables can contain text (strings), numbers, or booleans (true/false values)"

Endret av Mr.cornflakes
Lenke til kommentar

Kan noen forklare meg hva det menes?

 

Det er nok vanskelig, for vi vet ikke hva læreren din mener med spørsmålet, og ikke har vi vært til stede under undervisningen.

 

Scratch er dog "C-lignende", dog bare så vidt, ettersom det nærmest er et WYSIWYG språk, hvor man ikke skriver stort, men trykker på knapper og drar ting rundt på skjermen.

 

Det er litt sånn "Programmering for dummies", men det fungerer jo til å lære det aller mest elementære.

 

Ettersom språket er "C-lignende", så er vel egentlig alt som står i denne tråden, og de forslagene som har kommet, gode alternativ.

Det beste ville jo være om du fulgte med på undervisningen, å gjorde dine egne hjemmelekser.

  • Liker 1
Lenke til kommentar

 

Kan noen forklare meg hva det menes?

 

Det er nok vanskelig, for vi vet ikke hva læreren din mener med spørsmålet, og ikke har vi vært til stede under undervisningen.

 

Scratch er dog "C-lignende", dog bare så vidt, ettersom det nærmest er et WYSIWYG språk, hvor man ikke skriver stort, men trykker på knapper og drar ting rundt på skjermen.

 

Det er litt sånn "Programmering for dummies", men det fungerer jo til å lære det aller mest elementære.

 

Ettersom språket er "C-lignende", så er vel egentlig alt som står i denne tråden, og de forslagene som har kommet, gode alternativ.

Det beste ville jo være om du fulgte med på undervisningen, å gjorde dine egne hjemmelekser.

 

Oja, jeg følger med i timen jeg, greia er at jeg IKKE FORSTÅR, og når man ikke forstår læreren, tenkte jeg kanskje å bli forklart her i forumet istedet.

Lenke til kommentar

Oja, jeg følger med i timen jeg, greia er at jeg IKKE FORSTÅR, og når man ikke forstår læreren, tenkte jeg kanskje å bli forklart her i forumet istedet.

 

For å ta det litt enklere, variabler er rett og slett et sted du lagrer noe som du trenger senere.

 

Du har for eksempel teksten "Ibsens ripsbærbusker og andre buskvekster, samt en djerv dvergbjerk", og du ønsker ikke å skrive alt det mer enn en gang. Da kan du lagre teksten i en variabel, og bruke den i stedet.

 

I javascript, ettersom det er forholdsvis greit å forstå uten typer og annet dilldall

var tekst = "Ibsens ripsbærbusker og andre buskvekster, samt en djerv dvergbjerk"; 
// ^ dette er en variabel, angitt med nøkkelordet "var"

 
var element1 = document.getElementById('test1'); // dette henter et HTML element, ikke noe du trenger å forstå
var element2 = document.getElementById('test2'); // dette henter et HTML element til
var element3 = document.getElementById('test3'); // .... og nummer tre
 
element1.innerHTML = tekst; // så BRUKER vi variablen, og "tekst" er altså det samme som ...
element2.innerHTML = tekst; // ... "Ibsens ripsbærbusker..." fordi det er den verdien ...
element3.innerHTML = tekst; // vi har satt på variabelen.
 
// så har vi jo også elementene lagret i variabler, 
// slik at vi slipper å hente de hver gang, så nå kan vi endre fargen
 
element1.style.color = 'red'; // element1 er altså det samme som "document.getElementById('test1');"
element2.style.color = 'blue';

Den teksten som er rød i det jeg skrev ovenfor, er altså ikke del av koden, men er kommentarer

 

Enda en fordel med JavaScript, du kan se det "live" -> https://jsfiddle.net/adeneo/mymm97pv/

 

Alternativet her ville altså vært å gjøre

document.getElementById('test1').innerHTML = "Ibsens ripsbærbusker og andre buskvekster, samt en djerv dvergbjerk";
document.getElementById('test2').innerHTML = "Ibsens ripsbærbusker og andre buskvekster, samt en djerv dvergbjerk";
document.getElementById('test3').innerHTML = "Ibsens ripsbærbusker og andre buskvekster, samt en djerv dvergbjerk"

Men det er lite effektivt, og går i mot DRY kode, altså "Don't Repeat Yourself".

 

Og sist men ikke minst, denne variabelen

var tekst = "Ibsens ripsbærbusker og andre buskv...."

har altså et navn, en verdi, og en type.

 

Navnet er "tekst", verdien er "Ibsens ripsbærbusker og andre buskv...." og type er "string", fordi det er en streng med tekst.

Hadde verdien vært 3, som i 

var tekst = 3;

så ville typen vært "number", ettersom det er et nummer.

Andre språk har langt flere typer, og deklarasjoner som må inneholde type osv. mens noen språk, slik som det jeg bruker ovenfor, finner ut av typen selv ut i fra hva du setter som verdi.

 

For eksempel C

int tekst = 3;

hvor `int` betyr at verdien må være en integer, altså et "helt" tall, uten desimal.

Endret av adeneo
Lenke til kommentar

En variabel er data i programmet som ikke har fast verdi når programmet starter.

 

CASE STUDY:

Se for det at du skal kjøre bil, men så er farten satt til 80km/t. Det blir en lite trivelig tur! I stede kan vi ha en variabel, som vi kaller fart, og som brukeren av bilen/programmet selv kan bestemme over.

 

Variabler bør ofte, i tillegg til navn, ha en verdi. Litt over middels spennende å kjøre bil med ubestemt fart, ikkesant?

 

Til slutt så er det fint å vite hva variabelen forventer av type data. Kan den ta inn et tall som bestemmer farten? Tar den inn tekst? Kanskje et desimaltall som går fra 0 til 1?

Lenke til kommentar

For en del tekniske anvendelser så er det jo nokså viktig at variabelen får/har en bestemt verdi når programmet starter. 

 

Noen ganger så er det jo også viktig at variabelen, eller "det minneområdet" som variabelen er "knyttet opp mot" beholder sin verdi etter at programmet har sluttet å kjøre.

 

Eksempel - Hastighetskontroll for bil. Her vil det nok være rimelig fornuftig at variabelene for "skal-verdi" og "motorpådrag" har verdien "0" når man setter spenning på systemet.

 

Variabler som ikke er initiert eller "satt" riktig kan vel ha nettop "tilfeldige verdier" og det ønsker man vel ikke i dette tilfellet.

  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...