Kirchhoff Skrevet 17. september 2010 Del Skrevet 17. september 2010 Hei, jeg holder på å lese Cprogramming.com sin c++ made easy tutorial. De tre første sidene er lett forståelig, men så kommer man til funksjoner(link. Leste litt nedover siden og alt er helt uforståelig for meg. Just like a blueprint, the prototype tells the compiler what the function will return, what the function will be called, as well as what arguments the function can be passed. !? Finnes det et sted som forklarer dette bedre? Alt var så lett og forståelig helt til dette. Lenke til kommentar
PerB Skrevet 17. september 2010 Del Skrevet 17. september 2010 Fra Wikipedia: In computer science, a subroutine (also called procedure, method, function, or routine) is a portion of code within a larger program that performs a specific task and is relatively independent of the remaining code. As the name "subprogram" suggests, a subroutine behaves in much the same way as a computer program that is used as one step in a larger program or another subprogram. A subroutine is often coded so that it can be started ("called") several times and/or from several places during a single execution of the program, including from other subroutines, and then branch back (return) to the next instruction after the "call" once the subroutine's task is done. En funksjon returnerer normalt en verdi (f.eks: String, boolean, tall etc) i motsetning til en prosedyre. Lenke til kommentar
greygenic Skrevet 17. september 2010 Del Skrevet 17. september 2010 (endret) "Just like a blueprint, the prototype tells the compiler what the function will return, what the function will be called, as well as what arguments the function can be passed." int Funksjon(int argument_1, int argument_2); Her forteller du først litt om funksjonen du skal bruke lenger ned, og angir hvilken datatype den skal kunne motta (argumentnavnet er ikke viktig), og hvilken den skal kunne returnere. I dette tilfellet er 'int' valgt for begge, dette er en type som kun kan holde hele tall, f.eks. tallet "15". int Funksjon(int argument_1, int argument_2) { return argument_1 + argument_2; } Dette er så lenger ned i koden din, der du lager funksjonen, og den må da ta samme datatyper som henvist til lenger opp. Du må også lage funksjonslogikken - hva funksjonen skal gjøre.. Denne funksjonen kan da "ringes til" fra en annen del av programmet - gis to verdier, og eventuelt sende et svar tilbake, som du da kan lagre i en variabel.. Et tips: Ikke prøv for hardt å forstå alt i starten, det er bedre å bare la det synke inn og gi det litt tid.., hjerne din vil etterhvert skjønne det på egen hånd, uten at du tvinger den til det. Endret 18. september 2010 av greygenic Lenke til kommentar
GeirGrusom Skrevet 18. september 2010 Del Skrevet 18. september 2010 Hvis du har vært borti funksjonsbegrepet i matematikk så er det akkurat det samme. Sett at du har en maskin som lager pølser. Denne maskinen krever en del råvarer (kjøtt, krydder, pølseskinn) og gir tilbake et produkt, nemlig pølser. Se på råvarene som parametere til funksjonen, og returdatatypen som pølsene. Pølse LagPølse(Råvare inn_kjøtt, Råvare inn_krydder, Råvare inn_pølseskinn) { // Lag pølse //... return pølse; } Dette brukes mye til å regne ut verdier uten at du trenger å tenke på hvordan algoritmen i seg selv fungerer. For eksemppel en naiv implementasjon av en eksponent funksjon: int pow2(int a, exp) { int ret = a; // Opphøy tallet i seg selv exp ganger for(int i = 0; i < exp; i++) ret = ret * a; return a; } Lenke til kommentar
TheMaister Skrevet 18. september 2010 Del Skrevet 18. september 2010 Hvis du har vært borti funksjonsbegrepet i matematikk så er det akkurat det samme. Nja, for å være helt korrekt er en matematisk funksjon definert til å gi kun ett resultat for en gitt input, noe C/C++ ikke gjør. Kall som int foo(int); kan returnere forskjellige verdier mellom hver gang pga globale variabler, eller tilsvarende. Og hva med void foo(); ? Den returnerer jo ingenting. Det er kanskje bedre å tenke på funksjoner i C/C++ som en kodeblokk som gjør et eller annet. Prosedyre er kanskje et bedre ord egentlig. Lenke til kommentar
Kirchhoff Skrevet 18. september 2010 Forfatter Del Skrevet 18. september 2010 (endret) Takk for hjelp. jeg fikk ikke programmet ditt til å fungere GeirGrusom: #include <iostream> using namespace std; int pow2(int a, exp) { int ret = a; // Opphøy tallet i seg selv exp ganger for(int i = 0; i < exp; i++) ret = ret * a; return a; } } Documents\c++\test2\main.cpp|5|error: 'exp' has not been declared|Documents\c++\test2\main.cpp||In function 'int pow2(int, int)':| c++\test2\main.cpp|9|error: 'exp' was not declared in this scope| ||=== Build finished: 2 errors, 0 warnings ===| Hva gjør det programmet forskjellig fra dette(som jeg ikke har brukt funksjoner i): #include <iostream> using namespace std; int main() { for ( int x = 2; x < 10; x++ ) { cout<< x * x<<endl; } cin.get(); } Endret 18. september 2010 av O:M:A Lenke til kommentar
GeirGrusom Skrevet 18. september 2010 Del Skrevet 18. september 2010 (endret) Ingenting (forutsatt at konstantene er satt likt) Men sett at du skal gjøre dette mange ganger, så er det mye enklere å bruke funksjoner. "Ingenting" er en overdrivelse dog, men dette kan du lese deg opp til selv. Endret 18. september 2010 av GeirGrusom Lenke til kommentar
Kirchhoff Skrevet 18. september 2010 Forfatter Del Skrevet 18. september 2010 Okok. Har et spørsmål til da. Etter en sånn beginner tutorial, hvor ligger jeg da. Kan jeg gjøre noe som helst utenom å lage (knøtt)små konsoll programmer. Jeg jobber meg gjennom cprogramming.com sin tutorial. Lenke til kommentar
GeirGrusom Skrevet 18. september 2010 Del Skrevet 18. september 2010 Du må noke beregne å bruke en del mer tid på console programmer. Du vil neppe drive med noe annet enn console programmer før du kan objektorientering godt. Etterhvert kan du begynne å kikke på GTK eller OpenGL, men først må du nok ha et bedre grep på C++. Lenke til kommentar
greygenic Skrevet 18. september 2010 Del Skrevet 18. september 2010 Dette blir kanskje litt off-topic, men det er for å vise hvor mye tid og krefter det går på og lære seg programmeringskunsten: Jeg begynte å lese C når jeg var 15 år fordi jeg ville lage raske, enkle, portable og kule grafiske vinduer (lite visste jeg da hvor lang veien ville bli..) uten å måtte være avhengig av det herket .NET som jeg den gang hatet over alt på jord (jeg var ivrig Linux-bruker og sterk motstander av Microsoft (og Windows)), eller JVM som jeg syntes bare var en utrolig teit greie. Jeg leste og leste i "Tech yourself ..."-bøkene jeg hadde, på og av i noen måneder, i flere år.., også dabbet det sakte av i skuffelse. Jeg begynte så på'n igjen, men lurte meg selv fordi jeg mente jeg skulle være smart og hoppet derfor rett på "GUI programmering" med Qt for C++ (selv om jeg aldri hadde rørt C++, vel og merke), men skjønte ikke så mye av det når jeg skulle lage noe på egenhånd (hadde jo overhodet ingen forståelse for objekter i programmering..). Og etterhvert som jeg ga opp på Qt (og de hersens tilhørende bibliotekene man måtte ha) gjorde jeg ikke så mye de neste årene, før jeg så ifjord begynte på Java og virkelig ga jernet - og hvor det plutselig gikk opp mange lys for meg, etter å ha sittet med det hver dag i flere måneder.... Og nå i sommer begynte jeg på C++ (igjen) og alt går mæget mæget gladt, ting er enkelt og forstå - jeg lærer raskt, og jeg ser frem til hver dag jeg kan lære enda noe nytt. ---- Alt dette har tatt meg snart 10 år, (jeg har selvsagt plukket opp mye annet rart etterhvert i tillegg - f.eks. web-programmering, noe design, og litt scripting, men det blir som en lek å regne i forhold). Og det er først nå jeg syns jeg at jeg har fått grepet på det.. (selv om jeg fremdeles egentlig ikke syns jeg kan så mye..) Lenke til kommentar
TheMaister Skrevet 18. september 2010 Del Skrevet 18. september 2010 http://norvig.com/21-days.html passer vel godt inn her? Lenke til kommentar
Kirchhoff Skrevet 18. september 2010 Forfatter Del Skrevet 18. september 2010 Når jeg leste litt på artikkelen TheMaister postet mistet jeg store deler av motivasjonen min. Men det vel kanskje likegreit, går alt etter planen kommer jeg inn på ntnu neste år. Lenke til kommentar
Jaffe Skrevet 18. september 2010 Del Skrevet 18. september 2010 Står litt om funksjoner på norsk her også. Lenke til kommentar
LostOblivion Skrevet 17. oktober 2010 Del Skrevet 17. oktober 2010 (endret) Det er lett å gi opp programmring når man ikke setter seg mål, eller gir opp for lett. For mange er det å lære seg noe såpass teknisk og utfordrende som programmering en umulighet når man er 15 år gammel, hvor det kun kan være en hobby. Man har ofte ikke tolmodigheten innlært, og de fleste gir opp da de skjønner at man ikke kunne lage fete spill i løpet av dager etter man hadde begynt. Som greygenic sier om at han egentlig synes han ikke kan så mye har nok mer med det faktum å gjøre at jo mer man lærer, jo mer skjønner man at man kan veldig lite. Slik er det om alt, men kanskje enda mer i områder som matte, fysikk, og informatikk, fordi man ofte bare må gjøre ting fordi 'det er sånn'. Jeg tviler på at det finnes programmerer som 'kan C++', eller 'kan Java' i den forstand at de kunne gjort hva som helst med programmeringsspråket. Faktum er, du kan gjøre så utrolig mye med en datamaskin, at man neppe klarer å lære seg 'alt' i løpet av en livstid. Mitt forslag, er at trådstarter setter seg små, gjørbare, mål, og gjør dem! For eksempel. Les boka ferdig, gjør oppgavene i den. Når du har lest boka, prøv å lag et lite spill i konsollen. Med lite mener jeg fem-på-rad eller noe lignende. Jeg har lært mye C/C++ ved kun å lage små spill, og etterhvert større demo-spill med minifysikkmotor og det hele, med det har alltid vært i svært små steg. Men prøv å lag spill! Lykke til! Endret 17. oktober 2010 av LostOblivion 1 Lenke til kommentar
Kirchhoff Skrevet 18. oktober 2010 Forfatter Del Skrevet 18. oktober 2010 (endret) Som sagt er det ikke programmerer som skal bli mitt yrke, og for tiden tar jeg opp igjen fag fra videregående fordi jeg ønsker å komme inn på elektronikk linjen på ntnu neste år. Men om ikke lenge blir jeg sykemeldt(ikke noe snylteri), og vil få mer tid til overs, kanskje jeg kan bruke litt tid til c++ da. Takk for strålende post. Er 19 år forresten Endret 18. oktober 2010 av O:M:A Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå