Program piszący kwotę słownie

0

Zastosować instrukcję switch do drukowania kwoty do 4 miliardów w postaci słownej.
Tyle udało mi się zrobić na zajęciach, czy mógłby mi ktoś pomóc jak zrobić to do 4 miliardów?

Zastosować instrukcję switch do drukowania kwoty do 4 miliardów w postaci słownej.
Tyle udało mi się zrobić na zajęciach, czy mógłby mi ktoś pomóc jak zrobić to do 4 miliardów?

#include<stdio.h>
#include<stdlib.h>



    int main()
    {
        int liczba, t=0, s=0, d=0, j=0;
       
        printf("Podaje liczbe slownie do 10 000. \n");
        printf("Prosze podac liczbe: ");
        scanf("%d", &liczba);
       
        t = liczba/1000;
        s = (liczba-t*1000)/100;
        d = (liczba-(t*1000+s*100))/10;
        j = liczba-(t*1000+d*10+s*100);
       
        printf("\n\nTwoja liczba slownie to: \n");
       
        if(t > 0){
        switch(t) {
          case 1: printf("tysiac "); break;
          case 2: printf("dwa tysiace "); break;
          case 3: printf("trzy tysiace "); break;
          case 4: printf("cztery tysiace "); break;
          case 5: printf("piec tysiecy "); break;
          case 6: printf("szesc tysiecy "); break;
          case 7: printf("siedem tysiecy "); break;
          case 8: printf("osiem tysiecy "); break;
          case 9: printf("dziewiec tysiecy "); break;
          case 10: printf("dziesiec tysiecy "); break;
          default: printf("PONAD dziesiec tysiecy "); break;       
        }
        }
        if(s > 0){
        switch(s) {
          case 1: printf("sto "); break;
          case 2: printf("dwiescie "); break;
          case 3: printf("trzyssa "); break;
          case 4: printf("czteryssa "); break;
          case 5: printf("piecset "); break;
          case 6: printf("szescset "); break;
          case 7: printf("siedemset "); break;
          case 8: printf("osiemset "); break;
          case 9: printf("dziewiecset "); break;
        }
        }
        if(d > 1 && d > 0){
        switch(d) {
          case 1: printf("dziesiec "); break;
          case 2: printf("dwadziescia "); break;
          case 3: printf("trzdziesci "); break;
          case 4: printf("czterdziesci "); break;
          case 5: printf("piecdziesiat "); break;
          case 6: printf("szescdziesiat "); break;
          case 7: printf("siedemdziesiat "); break;
          case 8: printf("osiemdziesiat "); break;
          case 9: printf("dziewiecdziesiat "); break;   
        }
        }
        if(d == 1 && d > 0) {
         switch((d*10)+j) {
          case 10: printf("dziesiec "); break;
          case 11: printf("jedenascie "); break;
          case 12: printf("dwanascie "); break;
          case 13: printf("trzynascie "); break;
          case 14: printf("czternascie "); break;
          case 15: printf("pietnascie "); break;
          case 16: printf("szesnascie "); break;
          case 17: printf("siedemnascie "); break;
          case 18: printf("osiemnascie "); break;   
          case 19: printf("dziewietnascie "); break;
        }       
        }
        if(d != 1) {
        switch(j) {
          case 0: printf("zero "); break;
          case 1: printf("jeden "); break;
          case 2: printf("dwa "); break;
          case 3: printf("trzy "); break;
          case 4: printf("cztery "); break;
          case 5: printf("piec "); break;
          case 6: printf("szesc "); break;
          case 7: printf("siedem "); break;
          case 8: printf("osiem "); break;
          case 9: printf("dziewiec "); break;   
        }
        }

       
       

        printf("\n\n");
        system("PAUSE");
        return 0;   
    }

0

Gotowiec (język C):
http://4programmers.net/Pastebin/1668

0

Program ma być napisany za pomocą switch, nie można tablic stosować

0

Wykorzystaj właściwości polskich liczb zapisywanych słownie. Np. masz podstawę: "jeden", "dwa", "trzy", "cztery" itd., do której doklejasz sufiks. Przykładowo liczbę 500 konstruujesz z podstawy "pięć" i sufiksu "set". Jedynki i dwójki są tutaj wyjątkami, ale to da się spokojnie ogarnąć.

0

Program ma być napisany za pomocą switch, nie można tablic stosować

switch(t) {
  case 0: printf("zero"); break;
  case 1: printf("jeden"); break;
  ...
  case 123: printf("sto dwadzieścia trzy"); break;
  ...
  case 4000000000: printf("cztery miliardy"); break;
}

i powiedz nauczycielowi, że jest głupi.

0

Wypisywanie setek, dziesiątek i jedności już masz (dla uproszczenia będę teraz je nazywać SDJ).

Zauważ, że dla każdego rzędu wielkości (tysiące, miliony, miliardy...) każdy SDJ będzie się identycznie wypisywać:

123 123 123
sto dwadzieścia trzy miliony sto dwadzieścia trzy tysiące sto dwadzieścia trzy

Czyli musisz powtórzyć tą samą operację dla każdej trójki kolejnych cyfr, zmieniać się będzie tylko rząd wielkości czyli to, co mamy dopisać po SDJ: tysiąc, tysiące, tysięcy, milion, milionów, miliony... Zauważ, że każdy rząd wielkości będzie miał 4 formy:
formę zerową: brak napisu
formę pierwszą: np. tysiąc
formę drugą: np. tysiące
formę trzecią: np. tysięcy
Forma będzie zależna od SDJ, prawie identycznie dla każdego rzędu wielkości (rząd najmniejszy jest wyjątkiem).

Do tego dojdą wyjątki, np. jeśli SDJ=0 to "zero" piszemy tylko i wyłącznie jeśli cała liczba jest równa 0. Podobnie, jeśli SDJ=1, piszemy "jeden" tylko i wyłącznie dla najmniejszego rzędu wielkości (nie piszemy "jeden tysiąc" tylko "tysiąc").

To wszystko jest gotowcu, który podałem.

Proponuję.

  1. Wypisać sobie SDJ dla każdej kolejnej trójki cyfr olewając na razie wypisywanie rzędu wielkości. Jak ładnie wszystko zahula to się możesz zastanowić nad resztą.
  2. Wyznaczyć który to rząd wielkości w danej chwili wypisujemy (tysiące? milion?) i dopisać go za SDJ na razie olewając formę zdaniową (odmianę przez przypadki)
  3. Następnie zastanowić się na dobraniem odpowiedniej formy zdaniowej (tysiące czy tysięcy?)
  4. Na koniec dodać wyjątki

Co do twojego kodu to mam trochę uwag:

/* ten warunek nie jest potrzebny, switch przefiltruje wszystki
 * wartości, w przypadku 0 po prostu nic się nie wykona */
// if(s > 0){
switch(s) {
	case 1: printf("sto "); break;
	case 2: printf("dwiescie "); break;
	case 3: printf("trzyssa "); break;
	case 4: printf("czteryssa "); break;
	case 5: printf("piecset "); break;
	case 6: printf("szescset "); break;
	case 7: printf("siedemset "); break;
	case 8: printf("osiemset "); break;
	case 9: printf("dziewiecset "); break;
}

/* jeśli d>1 to i d>0, dwa warunki nie potrzebne wystarczy jeden warunek d>1,
 * a nawet nie potrzeba żadnego, switch wykluczy niechciane przypadki */
// if(d > 1 && d > 0){
switch(d) {
	/* dziesięć oraz -nastki osobno */
	// case 1: printf("dziesiec "); break;
	case 2: printf("dwadziescia "); break;
	case 3: printf("trzdziesci "); break;
	case 4: printf("czterdziesci "); break;
	case 5: printf("piecdziesiat "); break;
	case 6: printf("szescdziesiat "); break;
	case 7: printf("siedemdziesiat "); break;
	case 8: printf("osiemdziesiat "); break;
	case 9: printf("dziewiecdziesiat "); break;   
}

/* znowóż jeśli d==1 to i d>0, dwa warunki nie potrzebne */
//if(d == 1 && d > 0) {

if (d == 1) { //  dziesięć oraz -nastki
	/* mnożenie nie potrzebne */
	//switch((d*10)+j) {
	switch(j) {
		case 0: printf("dziesiec "); break;
		case 1: printf("jedenascie "); break;
		case 2: printf("dwanascie "); break;
		case 3: printf("trzynascie "); break;
		case 4: printf("czternascie "); break;
		case 5: printf("pietnascie "); break;
		case 6: printf("szesnascie "); break;
		case 7: printf("siedemnascie "); break;
		case 8: printf("osiemnascie "); break;   
		case 9: printf("dziewietnascie "); break;
	}
/* zamiast kolejnego "if" wystarczy "else" */ 
//if(d != 1) {
} else {
	switch(j) {
		/* "zero" piszemy tylko jeśli cała liczba jest 0, najlepiej
		 * sprawdź to sobie osobno na początku programu */
		//case 0: printf("zero "); break;
		case 1: printf("jeden "); break; // tu będzie wyjątek, tylko najmniejszy rząd wielkości
		case 2: printf("dwa "); break;
		case 3: printf("trzy "); break;
		case 4: printf("cztery "); break;
		case 5: printf("piec "); break;
		case 6: printf("szesc "); break;
		case 7: printf("siedem "); break;
		case 8: printf("osiem "); break;
		case 9: printf("dziewiec "); break;   
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1