webForumDet fria alternativet

växelutbetalning

C/C++

1 svar · 179 visningar · startad av Fredde Mannen

Medlem sedan nov. 20014 054 inlägg
Frågan#1

sitter här och knopar på en uppgift, som borde vara simpel..

har skapat hela programmet, men glömde avrundningen så nu håller jag på och försöker fibbla in det utan att ändra på för mycket... men de går inget vidare..

Detta är tänkte som ett ex. När kassören slår in beloppet så kan det vara 23.4 med avrundning på femtioöringen blir det 23 kronor och vid betalning med 23.6 blir det 24 kronor, enkelt är det juh att avrunda.. men lyckas inte få in det i mitt program.. någon som kan säga var jag ska ändra? :q

/************************* INKLUDERING AV FILER *************************
   inkludera fil för I/O, nödvändig för input från tangentbord och output 
   till skärmen.
*/
#include<stdio.h>
#include<math.h>
// inkluderingsfil för skoj! :-D  finns dock ej ANSI C. 
#include<stdlib.h>

// Funktionen vaxel().
void vaxel(float vaxelsumma) {
/*********************DEKLARERA VARIABLAR*****************************/
																  
	// Deklaration av nödvändiga variablar i funktion.				

	// deklarera sedlar
	int sec_check = 500, sedel_100 = 100, sedel_50 = 50, sedel_20 = 20;
	
	// deklarara kronor
	int kr_10 = 10, kr_5 = 5, kr_1 = 1;

	// deklarera summor.
	int tmp_vaxelsumma = 0;
																	  
/**********************************************************************/
	
	// Undersök om växeln överstiger den tillåtna summan att betala ut.
	// Om den inte överstiger, visa antalet valörer och växel, annars
	// visa ett felmeddelande! :)

	if(vaxelsumma < sec_check) {
		// Matematiska utberäkningar. 
		// Temporär summa som används vid uträkning!
		tmp_vaxelsumma = (int)vaxelsumma;
	
		// Plocka ut antal 100-lappar
		printf("100 kr sedlar: %i\n", (tmp_vaxelsumma / sedel_100));
	
		// Plocka ut antal 50-lappar
		tmp_vaxelsumma = tmp_vaxelsumma % sedel_100;
		printf("50 kr sedlar: %i\n", (tmp_vaxelsumma / sedel_50));

		// Plocka ut antal 20-lappar
		tmp_vaxelsumma = tmp_vaxelsumma % sedel_50;
		printf("20 kr sedlar: %i\n", (tmp_vaxelsumma / sedel_20));

		// Plocka ut 10 kronor
		tmp_vaxelsumma = tmp_vaxelsumma % sedel_20;
		printf("10 kronor: %i\n", (tmp_vaxelsumma / kr_10));

		// Plocka ut 5 kronor
		tmp_vaxelsumma = tmp_vaxelsumma % kr_10;
		printf("5 kronor: %i\n", (tmp_vaxelsumma / kr_5));

		// Plocka ut 1 kronor
		tmp_vaxelsumma = tmp_vaxelsumma % kr_5;
		printf("1 kronor: %i\n", (tmp_vaxelsumma / kr_1));

		// Hur mycket kunden skall ha tillbaka
		printf("\n\nVäxel: %.0f", vaxelsumma);

	} else {

		// Rensa skärmen!
		system("cls");

		// Skriv ut skärm meddelande!
		printf("\nEtt fel uppstod,kassaapparaten hängde sig!");
		// hindra från avslut!
		getchar();
	}

}
/*********************************************************************/

// Funktionen main().
int main(void) {
/*********************DEKLARERA VARIABLAR*****************************/
																  
	// Deklaration av nödvändiga variablar i funktion.					  
	
	// Deklarera summor. // Gjort ändring från int till float.
	float att_betala = 0, kund_betala = 0, vaxel_summa = 0, kvar = 0;
	char LogVar[1];
	LogVar[1] = 'n';
	
/*********************************************************************/
	// Skriv ut huvud för programmet.
	printf("This program is made by Fredrik Malmstrom (c) 2004\n\n\n");

	// Fråga efter hur mycket kunden har köpt för
	printf("Kunden har handlat för: ");
	scanf("%f",&att_betala);

	// Fråga efter hur mycket kunden betalar.
	printf("\nKunden betalar: ");
	scanf("%f",&kund_betala);

	// Fel hantering!
	// Om kundens inbetalning är för liten.
	if(kund_betala < att_betala) {
		printf("\n\nError: Kunden har betalt för lite!\n");
		printf("Kvar att betala: %0.0f \n\n", (att_betala - kund_betala));

		// Fråga efter hur om kunden betalar kvarvarande summa eller ångrar sig.
		printf("\nVill kunden betala kvarvarande summa? y/n ");
		scanf("%s",LogVar); // <-- Fel uppstår.. programfel! 
		
		if(LogVar[0] != 'n') {
			// Fråga efter hur mycket kunden betalar, förutsätter
			// att de betalar resterande summa!
			printf("\n\nKunden betalar: ");
			scanf("%f", &kvar); 
			
			// Räkna ut växeln!

			vaxel_summa = (kund_betala + kvar) - att_betala;
			/*
			   räkna ut vilka valörer och hur mycket av varje valör med 
			   med funktionen vaxel. 
			*/			
			vaxel(vaxel_summa);
			
			// hindra från avslut!
			getchar();
			return 0;
		} else {
			// hindra från avslut!
			getchar();
			return 0;
		}
	} else {

		/* 
		    räkna ut vilka valörer och hur mycket av varje valör med 
		    med funktionen vaxel, om de betalar tillräckligt från början. 
		*/
			vaxel_summa = kund_betala - att_betala;
			vaxel(vaxel_summa);

			// hindra från avslut!
			getchar();
			return 0;
	}
}
/***************************** END OF FILE ******************************/
Medlem sedan juli 2002581 inlägg
#2

Eftersom det troligtvis handlar om skolarbete, tänker jag inte ge dig färdig kod.
1. Separera summan i en heltalsdel och en rest
2. Om 0<=rest<0.25 gör inget
3. Om 0.25<=rest<0.75 lägg till 0.5 till heltalsdelen
4. Annars lägg till 1 till heltalsdelen
5. Den avrundade summan finns nu i heltalsdelen.

Att få heltalsdelen av ett tal kan göras genom att konvertera det till en int.

PS: Den fruktansvärt osmakliga bilden på dig (?) har nu fått mig att stänga av avatarer för gott i inställningarna. :)

255 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
113 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)