Forum » Programiranje » [C] Razumevanje kode
[C] Razumevanje kode
sobota56 ::
Zdravo,
s pomočjo sem spisal spodnjo kodo, ki pa je v nekaterih delih ne razumem najbolje. Koda je bila prav tako delno že narejena, sam pa bi rad vedel točno kako deluje.
Begajo me vhodni in izhodni parametri. Se pravi, če razumem pravilno, void, return...
Tole pa je moje razumevanje kode:
Prosim, če bi mi lahko kdo razložil, če je moje razumevanje poteka kode pravilno in odgovoril na boldane zapise, kjer ne vem, kako deluje ta return in void.
Hvala že v naprej.
s pomočjo sem spisal spodnjo kodo, ki pa je v nekaterih delih ne razumem najbolje. Koda je bila prav tako delno že narejena, sam pa bi rad vedel točno kako deluje.
Begajo me vhodni in izhodni parametri. Se pravi, če razumem pravilno, void, return...
#include <cs50.h> #include <stdio.h> int get_cents(void); //vrstica 4 int calculate_quarters(int cents); //vrstica 5 int calculate_dimes(int cents); //vrstica 6 int calculate_nickels(int cents); //vrstica 7 int calculate_pennies(int cents); //vrstica 8 int main(void) { // Ask how many cents the customer is owed int cents = get_cents(); //vrstica 13 // Calculate the number of quarters to give the customer int quarters = calculate_quarters(cents); //vrstica 16 cents = cents - quarters * 25; //vrstica 17 // Calculate the number of dimes to give the customer int dimes = calculate_dimes(cents); //vrstica 20 cents = cents - dimes * 10; //vrstica 21 // Calculate the number of nickels to give the customer int nickels = calculate_nickels(cents); //vrstica 24 cents = cents - nickels * 5; //vrstica 25 // Calculate the number of pennies to give the customer int pennies = calculate_pennies(cents); //vrstica 28 cents = cents - pennies * 1; //vrstica 29 // Sum coins int coins = quarters + dimes + nickels + pennies; //vrstica 32 // Print total number of coins to give the customer printf("All coins: %i\n", coins); //vrstica 35 } int get_cents(void) //vrstica 38 { // TODO int cents; //vrstica 41 do { cents = get_int("Enter cents: "); //vrstica 44 } while (cents <= 0); printf("cents %i\n", cents); //vrstica 47 return cents; //vrstica 48 } int calculate_quarters(int cents) //vrstica 51 { // TODO int quarters = cents / 25; //vrstica 54 printf("quarters %i\n", quarters); //vrstica 55 return quarters; //vrstica 56 } int calculate_dimes(int cents) { // TODO int dimes = cents / 10; printf("dimes %i\n", dimes); return dimes; } int calculate_nickels(int cents) { // TODO int nickels = cents / 5; printf("nickels %i\n", nickels); return nickels; } int calculate_pennies(int cents) { // TODO int pennies = cents / 1; printf("pennies %i\n", pennies); return pennies; }
Tole pa je moje razumevanje kode:
Imamo spremenljivke tipa integer, ki so zapisane v vrsticah 4 do 8.
Spremenljivka int get_cents ne sprejme vhodnih parametrov (zato v oklepaju "void").
Ostale spremenljivke (vrstice 5 - 8) sprejmejo vhodni parameter tipa integer (int cents).
Sledi main funkcija, ki ne sprejme vhodnih parametrov (zato v oklepaju "void").
Prebere vrstico 13 od desne proti levi. Ker nima podatkov za funkcijo get_cents(), ko gre iskat.
Najde jo v vrstici 38, kjer funkcija ne sprejme vhodnih podatkov (void - ne vem, zakaj je tako?).
Določi se spremenljivka int cents (vrstica 41), ki še ni določena.
Izvede se zanka do-while, dokler uporabnik ne vpiše števila, ki je večje od 0. To se zapiše v spremenljivko cents.
Nazaj dobimo vrednost spremenljivke cents (vrstica 48). Ta return mi ni ravno jasen. Zakaj mora biti?
Potem se vrnemo v vrstico 13 in se vrednost return cents oz. cents (iz vrstice 48) zapiše v int cents (vrstica 13).
Potem gremo v vrstico 16, kjer kliče funkcijo calculate_quarters(cents), ki jo najde v vrstici 51.
Ta ima vhodne parametre int cents, ki smo jih prej izračunali. Izvede se desni del zapisa v vrstici 54, kje cents delimo z 25.
Rezultat se izpiše (vr. 55).
Vrednost dobimo z returnom (ne vem zakaj tako?) (vr. 56), kot spremenljivko quarters, ki je bila prvič definirana v vr. 54.
Gremo spet nazaj v main in vr. 20, kjer se v funkcijo calculate_dimes vpiše vrednost cents.
To je potem enako, kot prejšnji korak, le da gremo v vr. 59 itd.
Vse se nato izvaja na enak način, dokler se ne izvede še vr. 29, kjer dobimo še pennies.
Potem se vse sešteje v vr. 32 in izpiše v vr. 35.
Prosim, če bi mi lahko kdo razložil, če je moje razumevanje poteka kode pravilno in odgovoril na boldane zapise, kjer ne vem, kako deluje ta return in void.
Hvala že v naprej.
kuall ::
nauči se iskat z googlom
vrstica 38: https://stackoverflow.com/questions/693...
vrstica 48: si ziher, da ti ni jasno?
btw napačno si se lotil programiranja: prevajanje kode v človeški jezik. to se ne dela, predvsem zato ne, ker ni fun in boš hitro zgubil veselje.
vrstica 38: https://stackoverflow.com/questions/693...
vrstica 48: si ziher, da ti ni jasno?
btw napačno si se lotil programiranja: prevajanje kode v človeški jezik. to se ne dela, predvsem zato ne, ker ni fun in boš hitro zgubil veselje.
kow ::
Narobe si predstavljas kako sploh vse deluje, pomembno je da razumes analiticno kaj se zgodi, primer:
"Prebere vrstico 13 od desne proti levi. Ker nima podatkov za funkcijo get_cents(), ko gre iskat."
Kaj se v resnici zgodi:
- ze prej je prevajalnik prebral vse vrstice nad omenjeno vrstico
- vrstico PREVAJALNIK razbije na posamezne besede - "int", "cents", "=", "get_cents()".
- C prevajalnik ima neka pravila, in ugotovi:
- klice se funkcija, ki smo jo oznacili z besedo "get_cents". Aha, na to besedo sem naletel ze prej (vrstica 4 - programer napove obliko/tip funkcije, napovedana oblika funkcije/spremenljivke se imenuje deklaracija.). V tem primeru funkcija nima vhodnih parametrov (to se oznaci z besedo void), vrne pa rezultat tipa "int"
- izvajanje se prenese v samo kodo funkcije. Ce zanemarimo kaj tocno ta funkcija dela, v nekem trenutku vrne rezultat - t.i. "return" statement.
- ta rezultat tipa int, se skopira oz. "assigna" (to je programer oznacil z enacajem, t.i. assignment operator, v del pomnilnika, ki ga je poimenoval z "cents"). Pred cents je programer napisal "int", kar pomeni da se bodo 4 bajti podatkov skopirali v 4 bajte lokalnega pomnilnik -> ne bo prislo do napake, da bi prepisal sosednji del pomnilnika.
ne, da se mi vec.. ampak, tako v grobem si moras predstavljati:
- kaj sploh je spremenljivka
- kaj pomeni klicati funkcijo
- kaj je assignment
Naceloma je trivialno, ko enkrat zapopades.
Ce imas funkcijo oblike int get_cents(void). Pomeni, da bo return statement v tej sami funkciji moral vrniti podatek tipa "int". Prevajalnik bi ti preprecil, da bi recimo vrnil tip "char", e.g: "return 'a';"
"Prebere vrstico 13 od desne proti levi. Ker nima podatkov za funkcijo get_cents(), ko gre iskat."
Kaj se v resnici zgodi:
- ze prej je prevajalnik prebral vse vrstice nad omenjeno vrstico
- vrstico PREVAJALNIK razbije na posamezne besede - "int", "cents", "=", "get_cents()".
- C prevajalnik ima neka pravila, in ugotovi:
- klice se funkcija, ki smo jo oznacili z besedo "get_cents". Aha, na to besedo sem naletel ze prej (vrstica 4 - programer napove obliko/tip funkcije, napovedana oblika funkcije/spremenljivke se imenuje deklaracija.). V tem primeru funkcija nima vhodnih parametrov (to se oznaci z besedo void), vrne pa rezultat tipa "int"
- izvajanje se prenese v samo kodo funkcije. Ce zanemarimo kaj tocno ta funkcija dela, v nekem trenutku vrne rezultat - t.i. "return" statement.
- ta rezultat tipa int, se skopira oz. "assigna" (to je programer oznacil z enacajem, t.i. assignment operator, v del pomnilnika, ki ga je poimenoval z "cents"). Pred cents je programer napisal "int", kar pomeni da se bodo 4 bajti podatkov skopirali v 4 bajte lokalnega pomnilnik -> ne bo prislo do napake, da bi prepisal sosednji del pomnilnika.
ne, da se mi vec.. ampak, tako v grobem si moras predstavljati:
- kaj sploh je spremenljivka
- kaj pomeni klicati funkcijo
- kaj je assignment
Naceloma je trivialno, ko enkrat zapopades.
Ce imas funkcijo oblike int get_cents(void). Pomeni, da bo return statement v tej sami funkciji moral vrniti podatek tipa "int". Prevajalnik bi ti preprecil, da bi recimo vrnil tip "char", e.g: "return 'a';"
Zgodovina sprememb…
- spremenil: kow ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Izračun normale v C++ in povezava z ExcelomOddelek: Programiranje | 1616 (1266) | primoz4p |
» | pra števila.. (strani: 1 2 )Oddelek: Znanost in tehnologija | 8813 (5152) | Yacked2 |
» | [Android] Kaj metoda vrne?Oddelek: Programiranje | 920 (758) | virusss8 |
» | [NALOGA] Java: RekurzijaOddelek: Programiranje | 954 (768) | Spura |
» | OpenGL orr v ansi cOddelek: Programiranje | 1638 (1426) | igor12 |