2010-10-11 5 views
1

Je viens tout juste de commencer à étudier l'Objective-C (ou la programmation d'ailleurs) et je suis bloqué sur un programme simple. J'essaye de créer des changements dans les quarts, les dimes, les nickels, et les pennies, mais j'ai remarqué que la solution que je suis venu donnerait une valeur aléatoire aux nickels ou pennies.Faire des changements avec Objective-C

Ex. Changement pour 25 serait sortir à "Le changement est 1 quart, 0 dime, -1881139893 nickels, et 4096 pennis"

Ex2. Changement pour 30 sortirait à "Le changement est 1 quart, 0 dime, 1 nickels, et 4096 pennis"

Que puis-je ajouter/modifier pour résoudre ce problème?

De même, existe-t-il une meilleure solution que de devoir exécuter 4 instructions if différentes?

Merci!

Voici mon code ci-dessous:

int orig, q, d, n, p; 

NSLog(@"Give money to make change"); 
scanf("%i", &orig); 

if(orig >= 25) { 
    q = orig/25; 
    orig -= q*25; 
} 
if(orig >= 10 && orig < 25) { 
    d = orig/10; 
    orig -= d*10; 
} 
if(orig >= 5 && orig < 10) { 
    n = orig/5; 
    orig -= n*5; 
} 
if(orig >= 1 && orig < 5) { 
    p = orig; 
} 

NSLog(@"The change is %i quarter, %i dime, %i nickels, and %i pennis", q, d, n, p); 
+0

'pennies', soit dit en passant. Pas 'pennis'. =) –

Répondre

3

Vous devez utiliser le module à la place. Je ne veux pas ruiner votre expérience d'apprentissage, c'est donc un exemple de la façon dont vous pouvez utiliser le module pour calculer les jours, heures, minutes et secondes pour le temps donné en secondes seulement.

int x = 1123123; 
int seconds = x % 60; 
x /= 60; 
int minutes = x % 60; 
x /= 60; 
int hours = x % 24; 
x /= 24; 
int days = x; 

maintenant l'appliquer à votre problème :)

+0

Va essayer ça. Merci pour la suggestion! Aide vraiment à obtenir des pointeurs comme ça. :) –

4

Vous n'initialisez pas vos variables pour commencer, ils commencent tous par des valeurs aléatoires, puis dans votre code, dans le cas où il n'y a pas Penny.s , vous ne définissez jamais p à quoi que ce soit, donc il conserve sa valeur aléatoire initiale, que vous voyez alors dans votre sortie. Vous pouvez le réparer en initialisant vos variables au début.

int orig=0, q=0, d=0, n=0, p=0; 
+0

Je vois, je me suis rendu compte que le réglage de sa valeur initiale à 0 a aidé la solution, cependant, il semble que DIME serait toujours 0 même si je n'ai pas défini une valeur initiale? Veillera à garder cela à l'esprit à l'avenir. Merci. –

+0

@Hyung: ce n'est pas vraiment aléatoire, c'est ce qui était dans cet emplacement de mémoire avant. Si vous appelez une fonction qui initialise juste un grand nombre de variables locales à (par exemple) 42, puis revient, et _directement sur return_ vous appelez votre fonction de modification, vous verrez probablement 42 pour votre nombre de pièces de dix cents. –

+0

@Hyung Suh: Comme Aidan l'a dit, ce n'est pas aléatoire, mais ce n'est pas fiable non plus. Il est juste * probable * de travailler de cette façon sur la plupart des ordinateurs. Juste FYI. – Chuck

Questions connexes