Loading:


    C++ Liczba słownie z przedziału od 0 do 4 294 967 295

    Program wczytuje od użytkownika liczbe z przedziału od 0 do 4 294 967 295 i wyświetla ją słownie.

    Treść zadania:

    Program rozbudować tak, aby wypisywał poprawnym polskim tekstem liczbę z przedziału od 0 do zakresu liczb typu unsigned long (4 294 967 295). Z instrukcji, które tworzą tekst liczby od 0 do 999 skonstruować funkcję, która ponadto zwróci jako wynik numer formy gramatycznej dla słowa określającego wagę tych trzech cyfr (miliard (-y,-ów), milion (-y,-ów), tysiąc (-e,-y), lub brak tekstu). Zwrócić uwagę na sformatowanie tekstu i prawidłową rezerwację pamięci na utworzony tekst. Posłużyć się tablicami:
    char    *T[][4]=     {          {””,”miliard”, ”miliardy”, ”miliardow”},
                                             {””,”milion”, ”miliony”, ”milionow”},
                                             {””,”tysiac”, ”tysiace”, ”tysiacy”},
                                             {””,””, ””, ””} };



    Napisz Artyku³

    Listing


    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>    // pow()

    /* rozklad_liczby - rozklada liczby na jednosci dziesiatki i setki oraz
       okresla forme gramatyczna przyrostka                                  */


    int rozklad_liczby(unsigned short rozklad[4], unsigned long liczba)
    {
      int n;
      for(n=0;n<4;n++) rozklad[n]=0;    // czysci tablice
      if(0>liczba>999) return -1;       // sprawdza czy liczba jest prawidlowa
      for(n=3;n>0;n--) {
        if(liczba<20) {                 // jesli liczba(reszta)<20 jednostki=liczba
          rozklad[1]=liczba;
          break;
        }
        rozklad[n]=liczba/pow(10,n-1);  // wyznaczamy kolejne cyfry liczby przez dzielenie przez potegi 10
        liczba%=(int)pow(10,n-1);       // liczbe zmniejszamy kolejno o setki i dziesiatki
      }
      if(rozklad[1]==0 && rozklad[2]==0 && rozklad[3]==0) rozklad[0]=0;           // warunki okreslajace forma gramatyczna
        else if(rozklad[1]==1 && rozklad[2]==0 && rozklad[3]==0) rozklad[0]=1;    // przyrostka
          else if(rozklad[1]<=4 && rozklad[1]>1) rozklad[0]=2;
            else rozklad[0]=3;
      return 0;
    }


    int main()
    {
      unsigned long liczba;
      short n;
      unsigned short rozklad[4]={0,0,0,0};   // tablica rozkladu liczby elementy to kolejno forma gramatyczna przyrostka, jednosci, dziesiatki, setki
      char *J[]={"","jeden","dwa","trzy","cztery","piec","szesc","siedem ","osiem","dziewiec","dziesiec","jedenascie","dwanascie","trzynascie","czternascie","pietnascie","szesnascie","siedemnascie","osiemnascie","dziewietnascie"};
      char *D[]={"","dziesiec","dwadziescia","trzydziesci","czterdziesci","piedziesiat","szezdziesiat","siedemdziesiat","osiemdziesiat","dziewiedziesiat"};
      char *S[]={"","sto","dwiescie","trzysta","czterysta","piecset","szescset","siedemset","osiemset","dziewiecset"};
      char *T[][4]={{"","miliard","miliardy","miliardow"},
                    {"","milion","miliony","milionow"},
                    {"","tysiac","tysiace","tysiecy"},
                    {"","","",""}};

      printf("podaj liczbe: ");
      scanf("%d",&liczba);            // wiadomo :)

      for(n=9;n>=0;n-=3) {                      // petle wykonujemy 4 razy przetwarzamy liczbe od konca(miliardow)
        rozklad_liczby(rozklad, liczba/pow(10,n));    // rozkladamy liczbe kolejno okreslajaca miliardy, miliony itd...
        liczba%=(int)pow(10,n);                       // zmniejszamy liczbe kolejno o miliardy, miliony....
        if(rozklad[3]) printf("%s ", S[rozklad[3]]);  // wyprowadzanie liczby
        if(rozklad[2]) printf("%s ", D[rozklad[2]]);
        if(rozklad[1]) printf("%s ", J[rozklad[1]]);
        if(rozklad[0]) printf("%s ", T[3-(n/3)][rozklad[0]]);  // 3-(n/3) forma okreslajaca z jakim przyrostkiem mamy doczynienia, w petli odlicza od 0 do 3
      }
      printf("\n");     // zeby ladnie wygladalo

      system("PAUSE");
      return 0;
    }
     




    Dodano przez: igor
    Ranga: Administrator serwisu Punktów: 0
    Komentarze użytkowników
      • Tre¶æ komentarza
        Kod do komentarza (opcjonalnie)
        PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
        Autor
        Token
        token

         

         








    funkcje.net
    Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2025 v.1.5 | design: diviXdesign & rainbowcolors