Video 8, opgave 2

I dette forum kan du stille spørgsmål til Objective-C programmering og udvikling til Apple´s iPhone, iPad og Mac platforme.
Besvar
niemoe
Begynder
Indlæg:16
Tilmeldt:25. mar 2014, 13:54
Video 8, opgave 2

Indlæg af niemoe » 17. apr 2014, 16:25

Er der nogen af jer, der har forslag til denne opgave ;-)

Opgaven lyder:

"Erklær en int variabel kaldet "health". Lav en loop, der kører så længe health er større end 0. I loopen, skal der laves en variabel kaldet "damage" der trækker 10 fra health for hver iteration."

Det jeg har svært ved, er den sidste del - At trække 10 fra health for hver iteration. Har prøvet flere løsninger, men loggen flyver bare der ud af :-(

seerex
Entusiast
Entusiast
Indlæg:37
Tilmeldt:17. apr 2014, 17:23

Re: Video 8, opgave 2

Indlæg af seerex » 17. apr 2014, 17:27

Hej niemoe,

Jeg vil lige prøve at beskrive det lidt mere via tekst, og så vidt som muligt undgå at skrive kode, så du selv kan løse det ;) håber det her hjælper dig på vej:

"Så længe health er større end 0" ---> brug en while-løkke :) Når du har noget, der skal køre "så længe" en eller anden betingelse er true (health > 0), så er while-løkken som regel svaret :)

Når du nu har slået fast hvilken slags loop du bruger, skal du finde din betingelse (health > 0) som du kan køre din loop op imod. Det vil sige du skal have en variabel health, og din loop skal køre så længe health er større end 0.

Nu skal du så få trukket det her "damage" fra. Det vil sige, du laver en int variabel damage og sætter til 10. Hver gang din while-loop kører, så trækker du bare damage fra health:
health = health - damage
ELLER
health -= damage

Så skulle din loop gerne køre 10 gange (hvis du sætter din health til 100).

Hint: Husk at lave dine variable health go damage, INDEN du skiver din while-loop, så de er klar til at blive brugt indeni i din løkke.

Jeg håber det hjælper dig på vej. Hvis det stadig driller, så sig endelig til (post eventuel det kode du har skrevet, så kan jeg vejlede dig ud fra det). :-)

niemoe
Begynder
Indlæg:16
Tilmeldt:25. mar 2014, 13:54

Re: Video 8, opgave 2

Indlæg af niemoe » 17. apr 2014, 17:40

seerex skrev:Hej niemoe,

Jeg vil lige prøve at beskrive det lidt mere via tekst, og så vidt som muligt undgå at skrive kode, så du selv kan løse det ;) håber det her hjælper dig på vej:

"Så længe health er større end 0" ---> brug en while-løkke :) Når du har noget, der skal køre "så længe" en eller anden betingelse er true (health > 0), så er while-løkken som regel svaret :)

Når du nu har slået fast hvilken slags loop du bruger, skal du finde din betingelse (health > 0) som du kan køre din loop op imod. Det vil sige du skal have en variabel health, og din loop skal køre så længe health er større end 0.

Nu skal du så få trukket det her "damage" fra. Det vil sige, du laver en int variabel damage og sætter til 10. Hver gang din while-loop kører, så trækker du bare damage fra health:
health = health - damage
ELLER
health -= damage

Så skulle din loop gerne køre 10 gange (hvis du sætter din health til 100).

Hint: Husk at lave dine variable health go damage, INDEN du skiver din while-loop, så de er klar til at blive brugt indeni i din løkke.

Jeg håber det hjælper dig på vej. Hvis det stadig driller, så sig endelig til (post eventuel det kode du har skrevet, så kan jeg vejlede dig ud fra det). :-)
Jeg vil først takke for dit svar, og ikke mindst måden du svarer på :-) Det giver mig muligheden for forhåbentligt at regne det ud selv :-) Jeg kan godt se - nu hvor du pointerer dét - at while loop nok er bedre valg. Jeg har haft brugt en for-loop.
Går straks i gang med at finde løsningen, når familien er blevet fodret :-)

seerex
Entusiast
Entusiast
Indlæg:37
Tilmeldt:17. apr 2014, 17:23

Re: Video 8, opgave 2

Indlæg af seerex » 17. apr 2014, 17:46

Godt du kan bruge mit svar til noget ;) En for-løkke er som regel godt når du siger ting som "det her skal køres 25 gange" - altså så snart du ved et mere præcist antal gange, så vælger man en for-loop :) meget groft sagt:

for-loop: "X antal gange"
While: "Så længe at"
og den sjældne do-while: "Så længe at, men kør mindst én gang".

Alle opgaver kan dog løses ved brug af alle de forskellige loops, men løsningen bliver mere eller mindre kompliceret på baggrund af den løkke man vælger :)

Held og lØkke ^^ med opgaven. Feel free til at poste din løsning :)

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Video 8, opgave 2

Indlæg af cristian » 17. apr 2014, 19:00

Aldrig brug

Kode: Vælg alt

health = health - damage
;)

Compilerer i stort set alle object orienteret sprog er blevet optimeret til at køre

Kode: Vælg alt

x -= noget
Og hvis du laver en

Kode: Vælg alt

x = x - noget
Så bliver dit program faktisk langsommere.

seerex
Entusiast
Entusiast
Indlæg:37
Tilmeldt:17. apr 2014, 17:23

Re: Video 8, opgave 2

Indlæg af seerex » 17. apr 2014, 19:45

Sandt (det fremgik også i mit svar at man kunne benytte den nyere syntax health -= damage), men det kan tit hjælpe begyndere med forståelsen af, hvad der rent faktisk sker.

Ganske vidst er det bedst at bruge den mere moderne syntax når man er over "the learning stage", dog er det nu ikke performance man skal tænke på ;) der skal lidt mere til før det bliver relevant.

niemoe
Begynder
Indlæg:16
Tilmeldt:25. mar 2014, 13:54

Re: Video 8, opgave 2

Indlæg af niemoe » 17. apr 2014, 22:11

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

@autoreleasepool {


int i = 100;
int damage = 10;

while (i>=1) {
NSLog(@"du har %i liv", i);
i = i - damage;
}

}
return 0;
}
Når du skriver
i>=1
Så skriver du
While i is bigger than or equal to 1, run loop
Når vi snakker "liv" tror jeg
! i == 0
er bedre.
While i is not equal to 0, run loop
Eller endnu bedre
! i <= 0
While i is not less than or equal to 0, run loop

niemoe
Begynder
Indlæg:16
Tilmeldt:25. mar 2014, 13:54

Re: Video 8, opgave 2

Indlæg af niemoe » 17. apr 2014, 22:26

niemoe skrev:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

@autoreleasepool {


int i = 100;
int damage = 10;

while (i>=1) {
NSLog(@"du har %i liv", i);
i = i - damage;
}

}
return 0;
}
Når du skriver
i>=1
Så skriver du
While i is bigger than or equal to 1, run loop
Når vi snakker "liv" tror jeg
! i == 0
er bedre.
While i is not equal to 0, run loop
Eller endnu bedre
! i <= 0
While i is not equal to or less than 0, run loop

OK, jeg tænkte at man ikke kunne have mindre end et liv.

cristian
Moderator
Moderator
Indlæg:882
Tilmeldt:26. sep 2011, 21:31
Kontakt:

Re: Video 8, opgave 2

Indlæg af cristian » 17. apr 2014, 22:29

Når man snakker "liv" (aka spil) så er 1 i liv lig med at du stadig er i "live".

Men i Objective-C som i så mange andre sprog, så kan du have en negativ værdi.

Så hvis du har 1 i liv og tager et "critical hit" på lad os sige 9.000.
Så har du -9.001 i liv. Og så er du i hvert fald toast.

niemoe
Begynder
Indlæg:16
Tilmeldt:25. mar 2014, 13:54

Re: Video 8, opgave 2

Indlæg af niemoe » 17. apr 2014, 22:30

niemoe skrev:
niemoe skrev:
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

@autoreleasepool {


int i = 100;
int damage = 10;

while (i>=1) {
NSLog(@"du har %i liv", i);
i = i - damage;
}

}
return 0;
}
Når du skriver
i>=1
Så skriver du
While i is bigger than or equal to 1, run loop
Når vi snakker "liv" tror jeg
! i == 0
er bedre.
While i is not equal to 0, run loop
Eller endnu bedre
! i <= 0
While i is not equal to or less than 0, run loop

OK, jeg tænkte at man ikke kunne have mindre end et liv.

- læser jeg dig rigtigt, så skriver du at sålænge i ikke er lig med nul - eller i ikke er mindre eller lig med nul - så er jeg død :-) du vil helt ned til nul - fair nok... der er stadig liv, sålænge der er noget efter decimalen :-)

tak for det. Men ellers... er det så en korrekt løsning?

seerex
Entusiast
Entusiast
Indlæg:37
Tilmeldt:17. apr 2014, 17:23

Re: Video 8, opgave 2

Indlæg af seerex » 18. apr 2014, 08:39

Hej Niemoe,

Løsningen er RIGTIG fin! Meningen med opgaven, er ikke at diskutere om hvorvidt det skal være i >= 1 eller i >= 0. Det er jo som man ser på det, og hvordan man ville implementere health i sit spil. Meningen med opgaven, er at lære at få brugt nogen loops, og det har du gjort! Du har fået en fin øvelse i en while-loop, lavet et kørende eksempel, og løst opgaven! :)

Rigtig fint Niemoe, held og lykke med resten af serien! :)

Besvar