Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Vechime vs km reali

Android 12 : "Yahoo Mail s-a ...

Bloc Favorit cu RS2

Ce extractor audio (analogic) pen...
 Cine suporta cheltuielile de jude...

Apartament Grecia - Kavala

obtinere venituri PFA / PFI in ti...

Recomandare Volvo
 Diferenta suprafata teren

Plafonare preturi energie

Vanzari foto - CIPA 2023

Recomandare perdele sau draperii ...
 Invertor Victron Easysolar-II 48/...

"Militarizarea" Antifraudei

Washington DC in 1940 - secvente ...

Miniatur Wunderland - Monaco
 

Transformare Numere In Litere

- - - - -
  • Please log in to reply
56 replies to this topic

#1
michaelady

michaelady

    Member

  • Grup: Members
  • Posts: 321
  • Înscris: 03.09.2004
As vrea sa stiu daca are cineva sau daca stie cineva un algoritm de transformare a numerelor in litere adica 2-> doi etc, care sa mearga si pentru miliarde. as fi recunoscator. ar fi bun si doar programul, de preferat in peascal, delphi sau fox.
thanks!

#2
stargate

stargate

    Active Member

  • Grup: Members
  • Posts: 1,613
  • Înscris: 12.07.2003
Pai cat de greu e sa scrii cod pentru asta?

#3
dixy

dixy

    Senior Member

  • Grup: Banned
  • Posts: 3,910
  • Înscris: 06.09.2004
Uite ca am facut eu programul.Din pacate nu e pascal (nu m-am mai atins de pascal de acum opt ani din clasa a 10-a,  asta nu inseamna ca nu as fi putut scrie programul si in pascal dar ce sa-i faci principiile sunt principii), delphi(get serious!) sau fox(mai exista?). Prin urmare nu-l poti folosi decat daca-l intelegi. :D

-----------------------------------------------------------------------------------------------------------------------------
using namespace std;
#include <iostream>
#include <stdlib.h>
#include <cstdio>

typedef unsigned long bignum;

class cstr {
protected:
   static const int maxlen = 2048;
   char * thestring;
public:
   cstr() {
   thestring = new char(maxlen);
   }
   cstr(char* foo);
   cstr& operator<<(cstr& foo);
   cstr& operator<<(char* foo);
   operator char*() const {
   return thestring;
   }
   friend ostream& operator<<(ostream&, cstr&);
   void reset(){
   thestring[0] = '\0';
   }
   bool mem(){
   if(thestring)
   return 1;
   return 0;
   }
   ~cstr() {
   delete thestring;
   }
};

cstr::cstr(char* foo) {
thestring = new char(maxlen);
*this<<foo;
}

cstr& cstr::operator<<(cstr& foo) {
strcat(thestring, foo.thestring);
return *this;
};

cstr& cstr::operator<<(char* foo) {
strcat(thestring, foo);
return *this;
};

ostream& operator<<(ostream& str, cstr& foo) {
str<<foo.thestring;
return str;
};




cstr text;

void TooBig() {
cout<<"\n"<<"Dimensiunea depaseste limitele: 0xFFFF";
}

void compute(bignum n) {
bignum foo = n;
int length = 0;
while(foo) {
length++;
foo /= 10;
}
if(n > 4228250625) {
atexit(TooBig);
exit(1);
}
switch(length) {
case 10:
if(n/1000000000 == 1)
text<<"un miliard";
else if(n/1000000000 == 2)
text<<"doua miliarde";
     else {
compute(n/1000000000);
text<<" miliarde";
}
if(n%1000000000)
compute(n%1000000000);
break;
case 9:
compute(n/1000000);
    text<<" de milioane";
    if(n%1000000)
compute(n%1000000);
break;
case 8:
compute(n/1000000);
       if(n/1000000 > 19)
  text<<" de milioane";
   else text<<" milioane";
   if(n%1000000)
      compute(n%1000000);
   break;
case 7:
if(n/1000000 == 1)
text<<"un milion";
else if(n/1000000 == 2)
text<<"doua milioane";
     else {
compute(n/1000000);
text<<" milioane";
}
if(n%1000000)
compute(n%1000000);
   break;
case 6:
compute(n/1000);
    text<<" de mii";
    if(n%1000)
compute(n%1000);
break;
case 5:
compute(n/1000);
    if(n/1000 >  19)
text<<" de mii";
else
text<<" mii";
    if(n%1000)
   compute(n%1000);
    break;
case 4:
if(n/1000 == 1)
text<<"o mie";
else if(n/1000 == 2)
text<<"doua mii";
   else {
   compute(n/1000);
   text<<" mii";
   }
if(n%1000) {
text<<" ";
compute(n%1000);
}
break;
case 3:
if((n/100) == 1)
text<<" o suta";
else if((n/100) == 2)
     text<<" doua sute";
     else {
  text<<" ";
  compute(n/100);
  text<<" sute";
  }
if(n % 100) {
text<<" ";
compute(n%100);
}
break;
case 2:
if(n == 10)
text<<"zece";
else if(n == 11)
text<<"unsprezece";
    else if(n/10 == 1) {
compute(n%10);
text<<"sprezece";
     }
else if(n == 20)
text<<"douazeci";
      else if(n/10 == 2) {
  text<<"douazecisi";
  compute(n%10);
  }
     else {
compute(n/10);
text<<"zeci";
if(n%10) {
text<<"si";
     compute(n%10);
}
}
      break;
case 1:

   switch(n) {
   case 1:
   text<<"unu";
       break;
   case 2:
   text<<"doi";
       break;
   case 3:
   text<<"trei";
       break;
   case 4:
   text<<"patru";
       break;
   case 5:
   text<<"cinci";
       break;
   case 6:
   text<<"sase";
       break;
   case 7:
   text<<"sapte";
       break;
   case 8:
   text<<"opt";
       break;
   case 9:
   text<<"noua";
       break;
   case 0:
   text<<"zero";
       break;
   }
break;  
  
}

}

void NoMem() {
cout<<"\nInsuficienta memorie!";
}

int main() {
if(!text.mem()) {
atexit(NoMem);
exit(1);
}
bignum foo;
cout<<"\n"<<"Introduceti numere intre 1 si 4228250625";
cout<<"\n"<<":";
cin>>foo;
compute(foo);
cout<<text;
return 0;
}
-----------------------------------------------------------------------------------------------------------------------

Ar fi interesant de extins bignum astfel incat sa se poata transforma si miliarde de miliarde de miliarde in text.Asta ar insemna crearea unei clase bignum cu un membru in cel mai rau caz de genul
static long double val;               -> s-ar putea folosi numere pana la (255^12)/2
sau static char* buff;//retine numarul
       static int len;//pe cati bytes se scrie numarul  -> se pot folosi numere de lungimi foarte mari
si supraincarcarea operatorilor /, /=, int(), bool(), bignum(), <, >, ==, =, pentru ca programul sa functioneze corect. Pentru cine intereseaza, las ca exercitiu creearea acestei clase.

#4
dixy

dixy

    Senior Member

  • Grup: Banned
  • Posts: 3,910
  • Înscris: 06.09.2004
Ia uite, mi  s-a stricat bunatate de identare...
partea cu #include <cstdio> ...forget it ...era ca sa testez operatorul char*() deci nu mai are ce cauta in program

#5
Nis

Nis

    Junior Member

  • Grup: Members
  • Posts: 88
  • Înscris: 17.03.2003
:o
N-am vazut asa ceva in viata mea! Tu chiar traiesti din programare (zici ca ai terminat de mult cu scoala)?
Lasand la o parte faptul ca e un monstru de program fara absolut nici o structura, am cateva observatii:
1) Vad ca ai o fixatie cu "using namespace" inainte de includerea unui header ce declara namespace-ul respectiv; merge si asa dar e aiurea stilul.
2) Cu "stdlib.h" ce e?
3) Ce este cu clasa cstr? std::string nu oferea toate facilitatile?
4) Ce este cu "new char(maxlen)"? In caz ca nu stii linia asta aloca un caracter (doar unul) si il initializeaza cu 0 ((char)2048 = (char)0x800 = 0x00). Voiai probabil sa aloci un buffer de 2048 de caractere? Pai asta e alta mancare de peste: "new char[maxlen]".
5) Functia "mem()": iti dai seama ca testezi o conditie doar pentru a returna o valoare booleana (btw, valorile pentru "bool" sunt true si false)? Nu era mai logic sa scrii "return thestring != 0;"? Ce ai scris tu acolo este echivalent cu:
if (true) return true;
return false;
6) Ce e cu limitarea numarului la 4228250625? Vreo valoare magica? Dar mesajul cu "0xFFFF"?
7) Ce faci cu "atexit()" daca oricum apelezi "exit()"? Poate nu stii dar atexit() exista pentru cazurile in care nu poti determina momentul cand o sa fie terminat programul si vrei sa te asiguri ca ti se executa o functie (de obicei o functie de cleanup); pe cand la tine e clar ca lumina zilei cand se va termina programul... cout << mesaj; exit(1); nu mergea? (btw, observ ca erorile astea doua le tratezi ca si cum ar fi identice... programul returneaza 1 in ambele cazuri).

Imi fac cruce... serios! Tu ai permis pentru vreun limbaj de programare? Ca la capitolul C/C++ nu incape nici o discutie...
[/off-topiceanu']
:puke:

Edited by Nis, 10 October 2004 - 20:23.


#6
dixy

dixy

    Senior Member

  • Grup: Banned
  • Posts: 3,910
  • Înscris: 06.09.2004
[quote name='Nis' date='Oct 10 2004, 21:22']N-am vazut asa ceva in viata mea!
[/quote]
Multe n-ai vazut tu la viata ta.
[quote name='Nis' date='Oct 10 2004, 21:22'] Tu chiar traiesti din programare (zici ca ai terminat de mult cu scoala)?
[/quote]
Inchipuieste-ti ca da.
[quote name='Nis' date='Oct 10 2004, 21:22']Lasand la o parte faptul ca e un monstru de program fara absolut nici o structura, am cateva observatii:
[/quote]
In locul tau m-as feri sa fac afirmatii gratuite.
[quote name='Nis' date='Oct 10 2004, 21:22']1) Vad ca ai o fixatie cu "using namespace" inainte de includerea unui header ce declara namespace-ul respectiv; merge si asa dar e aiurea stilul.
[/quote]
E stilul meu.Nu te obliga nimeni sa-l folosesti.
[quote name='Nis' date='Oct 10 2004, 21:22']2) Cu "stdlib.h" ce e?
[/quote]
Nimic.
[quote name='Nis' date='Oct 10 2004, 21:22']3) Ce este cu clasa cstr? std::string nu oferea toate facilitatile?
[/quote]
Ba da, dar care e problema ta daca eu vreau sa folosesc o alta clasa?
[quote name='Nis' date='Oct 10 2004, 21:22']4) Ce este cu "new char(maxlen)"? In caz ca nu stii linia asta aloca un caracter (doar unul) si il initializeaza cu 0 ((char)2048 = (char)0x800 = 0x00). Voiai probabil sa aloci un buffer de 2048 de caractere? Pai asta e alta mancare de peste: "new char[maxlen]".
[/quote]
Asta a scapat.Trebuia intradevar sa fie []
[quote name='Nis' date='Oct 10 2004, 21:22']5) Functia "mem()": iti dai seama ca testezi o conditie doar pentru a returna o valoare booleana (btw, valorile pentru "bool" sunt true si false)? Nu era mai logic sa scrii "return thestring != 0;"? Ce ai scris tu acolo este echivalent cu:
[/quote]
Valorile booleene sunt asimilate si cu 0 si 1 nu numai cu true si false ....desteptule. De altfel pe unde va exista #define true 1
[quote name='Nis' date='Oct 10 2004, 21:22']6) Ce e cu limitarea numarului la 4228250625? Vreo valoare magica? Dar mesajul cu "0xFFFF"?
[/quote]
0xFFFFFFFF val maxima pe care o poate avea un unsigned long
[quote name='Nis' date='Oct 10 2004, 21:22']7) Ce faci cu "atexit()" daca oricum apelezi "exit()"? Poate nu stii dar atexit() exista pentru cazurile in care nu poti determina momentul cand o sa fie terminat programul si vrei sa te asiguri ca ti se executa o functie (de obicei o functie de cleanup); pe cand la tine e clar ca lumina zilei cand se va termina programul... cout << mesaj; exit(1); nu mergea? (btw, observ ca erorile astea doua le tratezi ca si cum ar fi identice... programul returneaza 1 in ambele cazuri).
[/quote]
atexit(...) inregistreaza o functie care sa poata fi chemata la terminarea programului.Functia respectiva(inregistrata cu atexit) poate fi folosita pt afisarea unor mesaje de eroare.
[quote name='Nis' date='Oct 10 2004, 21:22']
Imi fac cruce... serios! Tu ai permis pentru vreun limbaj de programare? Ca la capitolul C/C++ nu incape nici o discutie...
[quote]
Probabil te referi la tine...Tu chiar te gandesti inainte sa debitezi ceva?Get a life!

Daca mai sunt si alti lameri > /dev/null


:coolspeak:

Edited by dixy, 11 October 2004 - 00:36.


#7
driverx

driverx

    Senior Member

  • Grup: Senior Members
  • Posts: 3,083
  • Înscris: 22.07.2002
Am avut si eu nevoie sa trantesc repede intr-un program ceva de genu. Nu am scris eu codu ca nu aveam timp, so, am cautat pe net...uite rezultatu, bun, rau, dar merge

unit Num2Word;

interface

uses
  Windows, WinTypes, WinProcs, SysUtils, Classes, Math, ComObj, Variants;

type
  TNumToWords_Static = record
    ones : Variant {array};
    teens : Variant {array};
    tens : Variant {array};
    thousands : Variant {array};
  end;

var
  NumToWords_Static : TNumToWords_Static;
  function MyInt(const DblArg: double): longint;
  function MyVal(const Str: string): double;
  function Bool2Int(b: boolean): integer;
  function FormatStr(const ExpVar: variant; const Fmt: string): string;
  function NumToWords( num : double ) : string;
  function CurrencyToWords(Value: double): string;

implementation

function MyInt(const DblArg: double): longint;
begin
     if DblArg < 0 then
        Result := Floor(DblArg)
     else
         Result := Trunc(DblArg);
end;

function MyVal( const Str: string ): double;
var
   ValidNumStr : string;
   ValidNumP : PChar;
   StrP : PChar;
   //CurLen : integer;
   FindSign : boolean;
   FindDot : boolean;
   FindE : boolean;
   FirstDigitFound : boolean;
   i : integer;
begin
     Result := 0;
     { make sure ValidNumStr can handle the whole str exp}
     SetLength( ValidNumStr, Length( Str ) + 1);
     ValidNumP := PChar( ValidNumStr );
     StrP := PChar( Str );
     FindSign := true;
     FindDot := true;
     FindE := true;
     FirstDigitFound := false;
     for i := 1 to Length( Str ) do
      begin
        if( FindSign ) And ( StrP^ in ['+', '-'] ) then
          begin
            FindSign := false;
          end
        else if( FindDot ) And ( StrP^ = '.' ) then
          begin
            FindDot := false;
            FindSign := false;
          end
        else if( FindE ) And ( FirstDigitFound )
               And ( StrP^ in ['E', 'e'] ) then
          begin
            FindE := false;
            FindDot := false;
            FindSign := true;
          end
        else if( StrP^ in ['0'..'9'] ) then
          begin
            FindSign := false;
            FirstDigitFound := true;
          end
        else
          begin
            if( StrP^ <> ' ' ) then break;
          end;

        if( StrP^ <> ' ' ) then
          begin
            ValidNumP^ := StrP^;
            Inc( ValidNumP );
          end;
        Inc( StrP );
      end;
     ValidNumP^ := #0;
     ValidNumStr := PChar( ValidNumStr );
     if( Length( ValidNumStr ) > 0 ) And ( FirstDigitFound ) then
      begin
        Result := StrtoFloat( ValidNumStr );
      end;
end;

function Bool2Int(b: boolean): integer;
begin
     if (B) then
        Result := -1
     else
         Result := 0;
end;

function FormatStr(const ExpVar: variant; const Fmt: string): string;
var
   FmtStr: string;
begin
     Result := '';
     FmtStr := Fmt;
     if (FmtStr = '') then
        Result := ExpVar
     else
         begin
         //FormatVBPredefinedNumeric(FmstStr, ExpVar)
             Result := Format('%g',[Double(ExpVar)]);
         end;
end;

function NumToWords( num : double ) : string;
  var
    i : integer;
    nPos : integer;
    nDigit : integer;
    bAllZeroes : integer;
    sResult : string;
    sTemp : string;
    sBuff : string;
    CaseValue1 : longint;
  begin
    with NumToWords_Static do
      begin
        ones[0] := 'Zero';
        ones[1] := 'One';
        ones[2] := 'Two';
        ones[3] := 'Three';
        ones[4] := 'Four';
        ones[5] := 'Five';
        ones[6] := 'Six';
        ones[7] := 'Seven';
        ones[8] := 'Eight';
        ones[9] := 'Nine';
        teens[0] := 'Ten';
        teens[1] := 'Eleven';
        teens[2] := 'Twelve';
        teens[3] := 'Thirteen';
        teens[4] := 'Fourteen';
        teens[5] := 'Fifteen';
        teens[6] := 'Sixteen';
        teens[7] := 'Seventeen';
        teens[8] := 'Eighteen';
        teens[9] := 'Nineteen';
        tens[0] := '';
        tens[1] := '';
        tens[2] := 'Twenty';
        tens[3] := 'Thirty';
        tens[4] := 'Forty';
        tens[5] := 'Fifty';
        tens[6] := 'Sixty';
        tens[7] := 'Seventy';
        tens[8] := 'Eighty';
        tens[9] := 'Ninty';
        thousands[0] := '';
        thousands[1] := 'Thousand';
        thousands[2] := 'Million';

        sTemp := IntToStr(MyInt(num));
        for i := Length(sTemp) downto 1 do
          begin
            nDigit := Round(MyVal(Variant((Copy(sTemp, i, 1)))));
            nPos := (Length(sTemp) - i) + 1;
            CaseValue1 := (nPos Mod 3);

            If (CaseValue1 = 1) Then
              begin
                bAllZeroes := Bool2Int(False);
                if i = 1 then
                  begin
                    sBuff := ones[nDigit] + ' ';
                  end
                else if VarAsType(Variant((Copy(sTemp, i - 1, 1))), varString ) = '1' then
                  begin
                    sBuff := teens[nDigit] + ' ';
                  end
                else if nDigit > 0 then
                  begin
                    sBuff := ones[nDigit] + ' ';
                  end
                else
                  begin
                    bAllZeroes := Bool2Int(True);
                    if i > 1 then
                      begin
                        if VarAsType(Variant((Copy(sTemp, i - 1, 1))), varString ) <> '0' then
                          begin
                            bAllZeroes := Bool2Int(False);
                          end;
                      end;
                    if i > 2 then
                      begin
                        if VarAsType(Variant((Copy(sTemp, i - 2, 1))), varString ) <> '0' then
                          begin
                            bAllZeroes := Bool2Int(False);
                          end;
                      end;
                    sBuff := '';
                  end;
                if (bAllZeroes = Bool2Int(False)) And (nPos > 1) then
                  begin
                    sBuff := sBuff + thousands[Round(nPos / 3)] + ' ';
                  end;
                sResult := sBuff + sResult;
              end
            Else If (CaseValue1 = 2) Then
              begin
                if nDigit > 0 then
                  begin
                    sResult := tens[nDigit] + ' ' + sResult;
                  end;
              end
            Else If (CaseValue1 = 0) Then
              begin
                if nDigit > 0 then
                  begin
                    sResult := ones[nDigit] + ' Hundred ' + sResult;
                  end;
              end;
          end;
        Result := sResult;
      end;
  end;

procedure Init; far;
  begin
    NumToWords_static.ones := VarArrayCreate( [ 0,9 ], varOLEStr );
    NumToWords_static.teens := VarArrayCreate( [ 0,9 ], varOLEStr );
    NumToWords_static.tens := VarArrayCreate( [ 0,9 ], varOLEStr );
    NumToWords_static.thousands := VarArrayCreate( [ 0,2 ], varOLEStr );
  end;

procedure FInit; far;
  begin
  end;


function CurrencyToWords(Value: double): string;
begin
     Result:= NumToWords(Value) + 'Dollars and ' +
              NumToWords(Round((Value - Int(Value)) * 100)) + ' Cents';
end;

initialization
  AddExitProc( FInit );
  Init;
end.

#8
Nis

Nis

    Junior Member

  • Grup: Members
  • Posts: 88
  • Înscris: 17.03.2003
@dixy:
Nu fac afirmatii gratuite, mi le sustin cu argumente. Programul tau (hai sa-i zic totusi program) nu are structura; pur si simplu amesteci C cu C++ intr-o veselie; ai aruncat acolo si o clasa aiurea fara nici un scop. Nimeni nu programeaza asa!

dixy, on Oct 11 2004, 01:31, said:

Asta a scapat.Trebuia intradevar sa fie []
A scapat... ca multe altele... pariez ca aveai impresia ca [] si () sunt interschimbabile!

Quote

Valorile booleene sunt asimilate si cu 0 si 1 nu numai cu true si false ....desteptule. De altfel pe unde va exista #define true 1
Pe bune? #define-ul ala probabil l-ai vazut prin C... in C++, bool, true si false sunt cuvinte cheie. In plus, eu ti-am atras atentia asupra stilului defectuos de a scrie "if (1) return 1;"! Unde dai si unde crapa...

Quote

0xFFFFFFFF val maxima pe care o poate avea un unsigned long
Intr-adevar... dar tu scrisesei 0xFFFF, ai numarat gresit F-urile? :P Tot nu mi-ai spus ce este cu 4228250625... Asta e tot o valoare maxima?

Quote

atexit(...) inregistreaza o functie care sa poata fi chemata la terminarea programului.Functia respectiva(inregistrata cu atexit) poate fi folosita pt afisarea unor mesaje de eroare.
Daca te oboseai sa citesti post-ul meu inainte de a da un reply ca sa te afli in treaba ai fi vazut ca asta spuneam si eu. Cu ce te ajuta inregistrarea functiei daca intrerupi executia in momentul exact urmator? Nu puteai pur si simplu sa afisezi un mesaj si gata?

Quote

Probabil te referi la tine...Tu chiar te gandesti inainte sa debitezi ceva? Get a life!
Te rog, domnule dixy, spune-mi ce am debitat! B)
Tu sustii in continuare ca stii C++? Lasa forumurile si pune mana pe o carte inainte sa te faci si mai mult de ras!

#9
ThePuiu

ThePuiu

    Active Member

  • Grup: Members
  • Posts: 1,738
  • Înscris: 11.11.2003
Departe de mine ideea ca sint meserias in programare, dar nu e mai bine asa: ?
////////////////////////////////////////////////////////////////////////////////////
CString COPTrezorerie::Comun(int nr)
{
CString comun;
CString mat[11];
mat[0]="zero";
mat[1]="unu";
mat[2]="doua";
mat[3]="trei";
mat[4]="patru";
mat[5]="cinci";
mat[6]="sase";
mat[7]="sapte";
mat[8]="opt";
mat[9]="noua";
int a,b,c;
a=int(nr/100);
if(a != 0)
{
if(a == 1)
comun="unasuta";
else
if(a == 2)
comun="douasute";
else
comun=mat[a]+"sute";
}
b=nr%100;
b=int(b/10);
c=nr%10;

if(b != 0)
{
if(b == 1)
{
if(c == 0) comun=comun+"zece";
else
if(c == 1) comun=comun+"unsprezece";
else
if(c == 2) comun=comun+"doisprezece";
else
comun=comun+mat[c]+"sprezece";
return comun;
}
else
{
if(b == 2)
comun=comun+"douazeci";
else
comun=comun+mat[b]+"zeci";
}
}
if(c != 0)
{
if(b != 0) comun=comun+"si";
comun=comun+mat[c];
}
return comun;
}

///////////////////////////////////////////////
CString COPTrezorerie::NrToStr(int nr)
{
CString string;
int a;
if(nr >= 1000000000) return "DEPASIRE";
if(nr >= 1000000)//un milion
{
a=int(nr/1000000);//cate milioane sint...
if(a == 1) string=string+"unmilion";
else // mai multe milioane
string=Comun(a)+"milioane";
}
nr=nr%1000000;
if(nr >= 1000)//o mie
{
a=int(nr/1000);//cate mii sint...
if(a == 1) string=string+"unamie";
else // mai multe milioane
string=string+Comun(a)+"mii";
}
nr=nr%1000;
if(nr >= 1)//o mie
{
a=int(nr/1);//cate mii sint...
string=string+Comun(a);
}
string = string+" LEI";
return string;
}


Codul il folosesc lunar intr-un program facut acum 2 ani...deci merge!
Se foloseste apelind functia: NrToStr(int nr)

Bafta! :peacefingers:

PS: eu nu traiesc din programare !

Edited by ThePuiu, 11 October 2004 - 10:27.


#10
dixy

dixy

    Senior Member

  • Grup: Banned
  • Posts: 3,910
  • Înscris: 06.09.2004

Nis, on Oct 11 2004, 11:07, said:

@dixy:
pur si simplu amesteci C cu C++ intr-o veselie; ai aruncat acolo si o clasa aiurea fara nici un scop. Nimeni nu programeaza asa!

Zau?Si de ce ma rog n-as amesteca c cu c++?Care-i problema?1

Nis, on Oct 11 2004, 11:07, said:

Pe bune? #define-ul ala probabil l-ai vazut prin C... in C++, bool, true si false sunt cuvinte cheie. In plus, eu ti-am atras atentia asupra stilului defectuos de a scrie "if (1) return 1;"! Unde dai si unde crapa...

Ia sa vedem:
if(true == 1)
cout<<"\nNis are dreptate";
else cout<<"\nNis e doar un lamer!"


Nis, on Oct 11 2004, 11:07, said:

Cu ce te ajuta inregistrarea functiei daca intrerupi executia in momentul exact urmator? Nu puteai pur si simplu sa afisezi un mesaj si gata?
Ma ajuta prin faptul ca leg intreruperea programului de eroare. De aia si intrerup programul pentru ca apre o eroare.

Nis, on Oct 11 2004, 11:07, said:

Tu sustii in continuare ca stii C++? Lasa forumurile si pune mana pe o carte inainte sa te faci si mai mult de ras!

<{POST_SNAPBACK}>

Da , am pretentia ca stiu C++.Programul poate ca nu are un stil nemaipomenit, pot aparea si erori, dar asta e daca l-am scris intr-un sfert de ora. Pana acum singurele eroro pe care le-am vazut sunt:
() in loc de [] la new, din cauza grabei si 4228250625 in loc de 4294967295. Greseala provine din faptul ca am incercat sa calculez mintal 2^6 - 1.
Dar nu vad de ce ar fi o problema foarte mare deoarece orice programator daca citeste programul poate sa-si dea seama de astea doua erori.

Se pare ca sunt unii care ca sa faca pe cunoscatorii si sa zica lumea "ia uite ce le stie asta" arunca cu pietre in altii, se leaga de tot felul de prostii sau de greseli inexistente.Dar ma rog daca vor sa fie in centrul atentiei si sa-i bage si altcineva in seama decat mama, tata sau bunicul se apuca de flame.

Oricum discutia este al dracu' de offtopic, si daca nis vrea sa dovedeasca ca poate fi si altceva decat un simplu lamer, n-are decat sa conceapa si el propriul lui program care sa transfforme numerele in cuvinte si sa-l puna aici ca sa-l vedem si noi. Pana cand o sa faca sau nu (99% nu) chestia asta este si ramane un simplu lamer.

Cu tot respectul, domnu' lamer!

Edited by dixy, 11 October 2004 - 10:39.


#11
Nis

Nis

    Junior Member

  • Grup: Members
  • Posts: 88
  • Înscris: 17.03.2003
Greselile astea ale tale tradeaza lipsa experientei cu C si C++. (btw, true nu este numai 1, este orice valoare diferita de 0 ;))
La faza cu calculat mintal 2^6-1 m-am tavalit pe jos de ras...  (ce o avea asta a face cu 2^32-1 nu-mi sau seama :rolleyes:). A propos, nu era mai simplu (unsigned long)-1 sau 0xFFFFFFFF?

dixy, on Oct 11 2004, 11:34, said:

Ma ajuta prin faptul ca leg intreruperea programului de eroare. De aia si intrerup programul pentru ca apre o eroare.
Daaaa... "cout << "eroare"; exit(1);" nu mergea de fel! :rolleyes:

Quote

Da , am pretentia ca stiu C++.
Mda... Repet, pune mana pe o carte! "Thinking in C++" a lui Bruce Eckel e excelenta.

Quote

...si daca nis vrea sa dovedeasca ca poate fi si altceva decat un simplu lamer, n-are decat sa conceapa si el propriul lui program care sa transfforme numerele in cuvinte si sa-l puna aici ca sa-l vedem si noi.
Nu am ce sa-ti dovedesc (mai bine zis nu am cui)...

Quote

Pana cand o sa faca sau nu (99% nu) chestia asta este si ramane un simplu lamer.
Ai dreptul la parerea ta, bine-nteles, cum si eu am dreptul la a mea... B)

PS: Scuze moderatorilor pentru acest off-topic kilometric...

Edited by Nis, 11 October 2004 - 11:24.


#12
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,294
  • Înscris: 21.04.2004
cel mai dubios program pe care l-am vazut in viata mea... parca ar fi din poanta aia "shoot yourself in the foot in C++ blablabla"
"l-am facut intr-un sfert de ora" yeah, right, mai bine faceai o cafea

#13
kml

kml

    Member

  • Grup: Members
  • Posts: 540
  • Înscris: 01.04.2004
ia varianta de fox (nu vreau comentarii pe marginea stilului imprastiat de programare; l-am facut SA MEARGA si MERGE pana la sute de miliarde).
il apelezi cu
?litere(1234567890)

func litere(q)
dime gen(4)
gen(1)=.t.
gen(2)=.f.
gen(3)=.t.
gen(4)=.t.
qs=allt(str(q,12))
do whil len(qs)%3<>0
   qs="0"+qs
  endd
f=len(qs)
g3=""
tx=""
f=len(qs)
i=1
do whil f>0
   g3=subs(qs,f,1)+g3
   if len(g3)=3
      txg=grup3(g3,iif(i<>3,gen(i),iif(righ(g3,1)="2",.f.,gen(i))))
      tx=txg+iif(len(allt(txg))>0,ordin(i,iif(g3="001",.t.,.f.)),"")+tx
      i=i+1
      g3=""
     endi
   f=f-1
  endd
if righ(tx,2)="un"
   tx=tx+"u"
  endi
retu tx

func grup3(w,tip)
stw=""
if w="001" .or. w=" 01" .or. w="  1"
   retu iif(tip,"un","una")
  endi
if subs(w,1,1)="1"
   stw=stw+"unasuta"
  endi
if subs(w,1,1)>"1"
   stw=stw+cifra(subs(w,1,1),.f.)+"sute"
  endi
if subs(w,2,2)<"20"
   if subs(w,2,2)<"10"
      stw=stw+cifra(subs(w,3,1),tip)
     else
      stw=stw+cifre2(subs(w,2,2),tip)
     endi
  else
   stw=stw+cifra(subs(w,2,1),.f.)+"zeci"
   if subs(w,3,1)>"0"
      stw=stw+"si"+cifra(subs(w,3,1),tip)
     endi
  endi
retu stw

func cifra
para e,tip
do case
   case e="1"
     retu iif(tip,"unu","una")
   case e="2"
     retu iif(tip,"doi","doua")
   case e="3"
     retu "trei"
   case e="4"
     retu "patru"
   case e="5"
     retu "cinci"
   case e="6"
     retu "sase"
   case e="7"
     retu "sapte"
   case e="8"
     retu "opt"
   case e="9"
     retu "noua"    
  endc
retu ""

func cifre2
para e,tip
do case
   case e="10"
      retu "zece"
   case e="11"
      retu "unsprezece"
   case e="12"
      retu iif(tip,"doisprezece","douasprezece")
   case e="13"
      retu "treisprezece"
   case e="14"
      retu "patrusprezece"
   case e="15"
      retu "cincisprezece"
   case e="16"
      retu "saisprezece"
   case e="17"
      retu "saptesprezece"
   case e="18"
      retu "optsprezece"
   case e="19"
      retu "nouasprezece"
   endc
retu ""

func ordin
para q,tip
do case
   case q=1
      retu ""
   case q=2
      retu iif(tip,"mie","mii")
   case q=3
      retu iif(tip,"milion","milioane")
   case q=4
      retu iif(tip,"miliard","miliarde")
   endc
retu ""

#14
stargate

stargate

    Active Member

  • Grup: Members
  • Posts: 1,613
  • Înscris: 12.07.2003

stargate, on Oct 10 2004, 09:07, said:

Pai cat de greu e sa scrii cod pentru asta?

<{POST_SNAPBACK}>


Aparent m-am inselat amarnic.  :rolleyes:

#15
Africanul

Africanul

    Active Member

  • Grup: Members
  • Posts: 1,739
  • Înscris: 24.10.2003
Chiar nu-i mare branza. Normal, nu cred ca poate cineva sa faca in 15 minute programelul, si sa mearga si corect, dar este simplu. Am facut acum 12-14 ani o chestie de genul asta. Este tema pentru generala/liceu, am impresia.

#16
PlaceBo

PlaceBo

    Member

  • Grup: Members
  • Posts: 418
  • Înscris: 28.03.2003
@kml
sar'mana pt. varianta de fox (it's workin')

#17
kml

kml

    Member

  • Grup: Members
  • Posts: 540
  • Înscris: 01.04.2004
stiu, cu asta tipareste navasta-mea ordinele de plata, si daca n-ar merge... :death:

#18
michaelady

michaelady

    Member

  • Grup: Members
  • Posts: 321
  • Înscris: 03.09.2004

dixy, on Oct 10 2004, 18:43, said:

Uite ca am facut eu programul.Din pacate nu e pascal (nu m-am mai atins de pascal de acum opt ani din clasa a 10-a,  asta nu inseamna ca nu as fi putut scrie programul si in pascal dar ce sa-i faci principiile sunt principii), delphi(get serious!) sau fox(mai exista?). Prin urmare nu-l poti folosi decat daca-l intelegi. :D

-----------------------------------------------------------------------------------------------------------------------------
using namespace std;
#include <iostream>
#include <stdlib.h>
#include <cstdio>

typedef unsigned long bignum;

class cstr {
protected:
    static const int maxlen = 2048;
    char * thestring;
public:
    cstr() {
     thestring = new char(maxlen);
    }
    cstr(char* foo);
    cstr& operator<<(cstr& foo);
    cstr& operator<<(char* foo);
    operator char*() const {
     return thestring;
    }
    friend ostream& operator<<(ostream&, cstr&);
    void reset(){
     thestring[0] = '\0';
    }
    bool mem(){
     if(thestring)
      return 1;
     return 0;
    }
    ~cstr() {
     delete thestring;
    }
};

cstr::cstr(char* foo) {
thestring = new char(maxlen);
*this<<foo;
}

cstr& cstr::operator<<(cstr& foo) {
strcat(thestring, foo.thestring);
return *this;
};

cstr& cstr::operator<<(char* foo) {
strcat(thestring, foo);
return *this;
};

ostream& operator<<(ostream& str, cstr& foo) {
str<<foo.thestring;
return str;
};
cstr text;

void TooBig() {
cout<<"\n"<<"Dimensiunea depaseste limitele: 0xFFFF";
}

void compute(bignum n) {
bignum foo = n;
int length = 0;
while(foo) {
  length++;
  foo /= 10;
}
if(n > 4228250625) {
  atexit(TooBig);
  exit(1);
}
switch(length) {
  case 10:
  if(n/1000000000 == 1)
    text<<"un miliard";
  else if(n/1000000000 == 2)
    text<<"doua miliarde";
        else {
      compute(n/1000000000);
      text<<" miliarde";
     }
  if(n%1000000000)
    compute(n%1000000000);
  break;
  case 9:
  compute(n/1000000);
      text<<" de milioane";
      if(n%1000000)
    compute(n%1000000);
  break;
  case 8:
  compute(n/1000000);
         if(n/1000000 > 19)
      text<<" de milioane";
      else text<<" milioane";
      if(n%1000000)
         compute(n%1000000);
      break;
  case 7:
  if(n/1000000 == 1)
    text<<"un milion";
  else if(n/1000000 == 2)
    text<<"doua milioane";
        else {
      compute(n/1000000);
      text<<" milioane";
     }
  if(n%1000000)
    compute(n%1000000);
     break;
  case 6:
  compute(n/1000);
      text<<" de mii";
      if(n%1000)
    compute(n%1000);
  break;
  case 5:
  compute(n/1000);
      if(n/1000 >  19)
    text<<" de mii";
  else
    text<<" mii";
      if(n%1000)
      compute(n%1000);
      break;
  case 4:
  if(n/1000 == 1)
    text<<"o mie";
  else if(n/1000 == 2)
    text<<"doua mii";
      else {
       compute(n/1000);
       text<<" mii";
      }
  if(n%1000) {
    text<<" ";
    compute(n%1000);
  }
  break;
  case 3:
  if((n/100) == 1)
    text<<" o suta";
  else if((n/100) == 2)
         text<<" doua sute";
        else {
       text<<" ";
       compute(n/100);
       text<<" sute";
      }
  if(n % 100) {
    text<<" ";
    compute(n%100);
  }
  break;
  case 2:
  if(n == 10)
    text<<"zece";
  else if(n == 11)
    text<<"unsprezece";
       else if(n/10 == 1) {
    compute(n%10);
    text<<"sprezece";
         }
      else if(n == 20)
       text<<"douazeci";
           else if(n/10 == 2) {
         text<<"douazecisi";
         compute(n%10);
        }
           else {
         compute(n/10);
         text<<"zeci";
         if(n%10) {
          text<<"si";
             compute(n%10);
         } 
        }
        break;
  case 1:
       
     switch(n) {
      case 1:
       text<<"unu";
          break;
      case 2:
       text<<"doi";
          break;
      case 3:
       text<<"trei";
          break;
      case 4:
       text<<"patru";
          break;
      case 5:
       text<<"cinci";
          break;
      case 6:
       text<<"sase";
          break;
      case 7:
       text<<"sapte";
          break;
      case 8:
       text<<"opt";
          break;
      case 9:
       text<<"noua";
          break;
      case 0:
       text<<"zero";
          break;
     }
  break;   
       
}

}

void NoMem() {
cout<<"\nInsuficienta memorie!";
}

int main() {
if(!text.mem()) {
  atexit(NoMem);
  exit(1);
}
bignum foo;
cout<<"\n"<<"Introduceti numere intre 1 si 4228250625";
cout<<"\n"<<":";
cin>>foo;
compute(foo);
cout<<text;
return 0;
}
-----------------------------------------------------------------------------------------------------------------------

Ar fi interesant de extins bignum astfel incat sa se poata transforma si miliarde de miliarde de miliarde in text.Asta ar insemna crearea unei clase bignum cu un membru in cel mai rau caz de genul
static long double val;               -> s-ar putea folosi numere pana la (255^12)/2
sau static char* buff;//retine numarul
       static int len;//pe cati bytes se scrie numarul  -> se pot folosi numere de lungimi foarte mari
si supraincarcarea operatorilor /, /=, int(), bool(), bignum(), <, >, ==, =, pentru ca programul sa functioneze corect. Pentru cine intereseaza, las ca exercitiu creearea acestei clase.

<{POST_SNAPBACK}>



ok.
e mishto.
mai inteleg unele faze, dar nu tot.
zi-mi in ce limbaj e ca nu imi dau seama!
thanks!

Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate