Close
Duke shfaqur rezultatin -9 deri 0 prej 8
  1. #1
    linux user Maska e eni_
    Anėtarėsuar
    13-03-2005
    Postime
    67

    C/C++ - Konvertime dec, bin, hex

    Me sa me zune syte te kjo faqja e pare, spo shoh ndo nje teme qe te flase per kodet e shkruara nga anetaret e Forumi-t Shqiptar. Do me pelqente qe te kishte nje teme, ku persona te ndryshem te fusnin kodet e tyre, te pyesnin per kodet e njeri tjetrit, te studionin kodet e njeri tjetrit, te kritikonin dhe te pergezonin njeri tjetrin.
    Une po hedh nje kod qe kam shkruar para disa kohesh, nje Binary To Decimal/Decimal To Binary Converter.. :


    Kodi PHP:

    /*************************FILLON**************************************/
    /************************
     * binary to decimal converter
     * decimal to binary converter
     * written by
     * Eni Bundo
     * *********************************/
    #include <stdio.h>
    #include <string.h>
    #define BITS 8
    int table[]={1286432168421};
    char progname[30];

    void BinToDec (char *bin) {
      
    int counter=0c=0Decimal=0;
      
    char FullBin[BITS+1];
      if (
    strlen(bin) != BITS) {
        for (
    counter=0counter<BITS-strlen(bin); counter++)
          
    FullBin[counter]='0';
      }
        for (;
    counter<BITScounter++, c++)
          
    FullBin[counter]=bin[c];
      for (
    c=0c<BITSc++) {
        if (
    FullBin[c]=='1')
          
    Decimal += table[c];
      }
      
    printf ("%s\n%d\n"binDecimal);
    }

    void DecToBin (char *dec) {
      
    int counterc;
      
    long RealDec=0;
      
    int Binary[BITS];
      
    RealDec=strtol(dec, (char **)NULL10);
      for (
    counter=0c=BITS-1counter<BITScounter++, c--) {
        
    Binary[c]=RealDec%2;
        
    RealDec /= 2;
      }
      
    printf ("%s\n"dec);
      for (
    counter=0counter<BITScounter++)
        
    printf ("%d"Binary[counter]);
      
    putchar('\n');
    }

    void PrintHelp() {
      
    printf ("Usage : %s [OPTION] [NUM]\n"progname);
      
    printf ("\tOPTION can be [-b | -d | -h]\n");
      
    printf (" -b\tConverts num from binary to decimal.\n");
      
    printf (" -d\tConverts num from decimal to binary.\n");
      
    printf (" -h\tPrints this help.\n");
      
    printf ("-------------------");
      
    printf ("Program designed by Eni Bundo\n");
      
    printf ("http://www.zsuatt.org/~albacker\n");
    }
    int main (int argcchar *argv[]) {
      
    strcpy(prognameargv[0]);
      if (
    argc != 3)
        
    PrintHelp();
      else {
        if (
    argv[1][0]=='-') {
          switch (
    argv[1][1]) {
            case 
    'b':
              
    BinToDec(argv[2]);
              break;
            case 
    'd':
              
    DecToBin(argv[2]);
              break;
            case 
    'h':
            default:
              
    PrintHelp();
          }
        } else
          
    PrintHelp();
      }
      return 
    0;
    }
    /*****************************MBARON**************************************/ 
    Ndryshuar pėr herė tė fundit nga edspace : 05-04-2006 mė 19:04
    Phuck windows, Think Linux

  2. #2
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Eni,

    Forumi ka plot tema me kod tė anėtarėve nė shumė gjuhė programuese, bashkė me komente, sugjerime, kritika, e pėrgėzime. Renditi temat sipas numrit tė pėrgjigjeve pėr tė parė disa nga kėto tema.

    T'i fillojmė qė tani kėshillat:
    - Mundohu tė hedhėsh kod nė gjuhėn shqipe; kjo ėshtė gjuha jonė e pėrbashkėt qė i jep kodit nė forumin shqiptar mė shumė vlerė se kodi qė mund tė gjesh nė google. Pėr kodet e shkruar nė gjuhė tė huaja (pėr shkollėn, punėn, etj) tė paktėn komento pjesėt mė kryesore nė shqip pėr ata qė nuk njohin gjuhėt e huaja ose ata qė janė duke mėsuar si tė programojnė.
    - Shkruaj pak mė shumė pėr programin, gjuhėn e pėrdorur, pėrpiluesin, etj.
    - Hap njė temė tė re pėr ēdo program qė do tė ndash me anėtarėt e tjerė qė tė mos bėhet rrėmujė.
    - Kodin mbylle brėnda etiketave [php] [/php] ose [code] [/code] qė tė ruajė formatin dhe tė jetė i i lehtė pėr t'u lexuar.
    - Mbi tė gjitha, pėrgatitu tė pranosh dhe tė japėsh kritika pa u ndjerė i ofenduar dhe pa ofenduar tė tjerėt.


    Mė ėshtė dashur tė shkruaj disa funksione konvertuese si ato mė lart pėr njė program qė kthen kodin e makinės (machine code) nė MIPS (MIPS Disassembler). Po i postoj nesėr me disa komente nė shqip.
    Edi

  3. #3
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Mė poshtė ėshtė versioni im nė C++ i funksionit qė bėn kthimin nga baza 2 nė bazė 10. Kam pėrdorur errno me qėllim qė funksioni tė pėrdoret njėsoj si atoi(), atol() ose funksione tė tjera tė ngjashme tė gjuhės standarde.

    Kodi PHP:
    #include <iostream> 
    #include <string>   
    #include <sstream>  // permban ostringstream per konvertimet ne string
    #include <iomanip>  // perdoret per konvertimin nga baza 10 ne baze 16
    #include <cerrno>

    using namespace std;

    string bintodec(string bin);

    //================ MAIN =======================

    int mainint argccharargv[]) {

        
    string rezultati;
        
    errno 0;
        
    rezultati bintodec("0000011111111111111111111111111111111");
        if (
    errno == ERANGE) {    rezultati "Mbingarkese";    }
        
    cout << rezultati << endl;
        
        
    errno 0;
        
    rezultati bintodec("00000000000000000000000000000000000");
        if (
    errno == ERANGE) {    rezultati "Mbingarkese";    }
        
    cout << rezultati << endl;
        
        
    errno 0;
        
    rezultati bintodec("10000000000000000000000000000000000");
        if (
    errno == ERANGE) {    rezultati "Mbingarkese";    }
        
    cout << rezultati << endl;
        
        return 
    EXIT_SUCCESS;
    }


    //=======================================================================
    // Funksion qe merr nje numer pozitiv dyjor (binary) dhe e kthen ate ne
    // numer dhjetor (dec). shembull: 10010 = 18
    // Nese numri tejkalon kapacitetin e unsigned long, funksioni kthen nje
    // varg bosh dhe errno = ERANGE.
    //=======================================================================
    string bintodec(string bin) {

        
    bin.erase(0bin.find('1'));                // hiq zerot para
        
        
    string::size_type nrBiteve bin.size();     // kontrollo per mbingarkese
        
    if (nrBiteve sizeof(long) * 8) {
            
    errno ERANGE;
            return 
    "";
        }
        
        
    unsigned long dec 0;                      // ktheje ne numer dhjetor
        
    unsigned long dyFuqi_b 1;

        for (
    int b nrBiteve 1>= 0b--, dyFuqi_b *= 2) {
            if (
    bin[b] == '1') {
                
    dec += dyFuqi_b;
            }
        }
        
        
    ostringstream os;                           // ktheje ne varg (string)
        
    os << dec;
        return 
    os.str();

    Rezultati:
    4294967295
    0
    Mbingarkese
    Edi

  4. #4
    mos e luaj; I DEBUAR! Maska e qoska
    Anėtarėsuar
    17-05-2004
    Vendndodhja
    tirane
    Postime
    837
    Edhe une e bera nje version, te pakten sipas meje, te permiresuar te asaj c'ka eni ka krijuar me siper. Sidomos me me shume komente .
    Kodi PHP:
    /* Vini re qe ky program eshte provuar vetem
     * ne ambiente programim *nix.
     * Ne Windows mund te duhen disa modifikime.
     */

    #include <stdio.h>
    #include <stdlib.h> /* Ne versionet e fundit te *nix malloc() deklarohet ketu */
    #include <errno.h> /* vlerat e gabimeve */
    #include <string.h>


    #define MAX_STR_LEN 1024

    /* Prototipet e funksioneve qe me shume 
     * na ruajne nga gabimet tona.
    */
    charBinToDec(char*);
    int DecToBin(char*, char**);
    void PrintHelp(char*);


    void PrintHelp(char *progname) {
      
    printf ("Perdorimi : %s [MUNDESI] [NUM]\n"progname);
      
    printf ("\tMUNDEISTE mund te jene [-b | -d | -h]\n");
      
    printf (" -b\tKonverton nga binare ne dhjetor.\n");
      
    printf (" -d\tKonverton nga dhjetor ne binare.\n");
      
    printf (" -h\tShfaq kete mesazh.\n");
      
    printf ("-------------------");
      
    printf ("Bazuar ne nje program te shkruar nga Eni Bundo\n");
      
    printf ("Modifikuar nga Ermal Luēi\n");
    }


    charBinToDec (char *bin) {
      
    unsigned int value 0;
      
    char *temp bin/* na jep mundesi per te perdorur
                         * strlen(bin) me vone.
                         */
       /* Gjithe kjo eshte pak e ngaterruar per 
        * here te pare por ne C kjo eshte plotesisht
        * e ligjshme dhe e rregullt, pasi 
        * karakteret ne C prezantohen nga int. (Pse?)
        * Megjithese gjate perpilimit
        * merret nje "warning" per krahasim te 
        * char* me int.
        */
       
    while ( *temp != NULL )       
       {
          
    value *= 2;          
          
    value += *temp '0'
          ++
    temp;               
       }

      
    temp = (char*)malloc(strlen(bin));
      if (!
    temp) {
         
    errno ENOMEM;            
         return (
    char*) NULL;
      }
      
    /* Edhe ketu perdoret funksioni snprintf() ne vend te 
       * sprintf() per te eliminuar problemet e ashtequajtura
       * "buffer overflow"
       */
       
    snprintf(tempstrlen(bin), "%d"value);
       
    /* XXX: Mbase duhet te kontrollojme per gabime?!
        * Menyra do te shfrytezonte errno. Ne fillim ruajme vleren 
        * para se te therrasim funksionin dhe pastaj e krahasojme
        * ate me vleren pas funksionit. Ne Windows me e rregullt do
        * te ishte te perdorej funksioni
        * GetLastError() != NO_ERROR dhe pastaj
        * perdorim FormatMessage().
        */
       
    temp[strlen(bin)] = '\0'
       
    /* Rezultat nuk tregon nje memorie lokale
        * te funksionit ne fjale pasi u krijua
        * me malloc() ;).
        */
       
    return temp;
    }

    /* Ky funksion eshte shkruar ndryshe per te paraquitur dhe
     * menyren tjeter per funksionet. Pra duke kthyer gabimin 
     * me vleren e funksionit dhe llogartijen me ane te nje 
     * parametri te funksionit qe sigurisht kerkon me shume 
     * pergjegjesi nga thirresi pasi duhet te krijoje vete
     * memorien ku do te ruhet llogaritja.
     */
    int DecToBin (char *decchar **rez ) {
      
    int counter;
      
    char *rezultat;
      
    long RealDec=0;
      
      if (*
    rez == NULL) {
         
    errno ENOSPC/* deklaruar ne errno.h */
         
    return -1;
      }
      
    /* Rezultati perfundimtar maksimum 
       * qe mund te shprehim eshte 2**255+....+2**0
       * megjithese logjike do te ishte 
       * LONG_MAX nga limits.h. 
       */
      
    if ( (RealDec strtol(dec, (char **)NULL10)) == 
           
    && ( errno == EINVAL || errno == ERANGE) ) {
           
    errno EFAULT;
           return -
    1;
      }
      
      
    counter 0;
      do {
           if (
    RealDec%2)
               
    strncpy(&rezultat[counter], "0"1);
           else
               
    strncpy(&rezultat[counter], "1"1);
       
    /* Sigurisht qe humbim informacion por
        * kjo eshte ne interes tonin pasi pjesa 
        * pas presjes dhjetore nuk na intereson.
        * Per me shume shikoni URI me poshte
        * http://en.wikipedia.org/wiki/Binary_numeral_system
        */
        
    RealDec /= 2;
        
    counter += 1;
        if ( 
    counter MAX_STR_LEN) {
             
    memset(rezultat0counter);
             
    errno E2BIG;
             return -
    1;
        }
      } while(
    RealDec >= 1);  
      
    /* Do mendoni pse nuk e risetojme dhe errno!
       * Por rregullat thone qe s'duhet te preket
       * vlera e meparshme e saj nese s'ka gabime
       * per arsyen e thjeshte pasi mund te perdoren 
       * ne teknika si ajo shpjeguar ne BinToDec()
       * pas snprintf().
       */
      
    return 0;
    }


    int main (int argcchar *argv[]) {
        
    /* Shtojme 1 per te rezervuar 
         * vend per karakterin '\0' ose NULL
         * qe perfundon te gjithe vektoret me 
         * karaktere ne C.
         * Sigurisht e gjithe kjo mund te behet 
         * dinamike me perdorimin e malloc()
         * PSH: char *progname = 
         *               malloc(strlen(argv[0]);
         */
        
    char progname[MAX_STR_LEN 1];
        
    char *rezultat;    
        
    int i;
        
      if (
    argc != 3)
        goto 
    help;
      else {
         switch (
    argv[1][1]) {
            case 
    'b':
            case 
    'B':
              for (
    0strlen(argv[2]); i++) 
                  
    /* Kontrollojme nese me te vertete 
                   * kemi te bejme me numer binar.
                   */
                   
    if (argv[2][i] < '0' && argv[2][i] > '1')
                            
    /* Numrat pas return na japin mundesi
                             * te marrim vendime kur ky program
                             * perdoret ne skripte "shell" ose
                             * "batch mode" ne Windows.
                             */
                            
    return 1;
                            
              if ((
    rezultat BinToDec(argv[2])) == NULL) {
                 
    printf("Gabim i brendshem ne program\n");
                 
    printf("%s\n"strerror(errno));
                 return 
    2;
              }
              
    printf("Konvertimi nga Bin(%s) => Dhjetor(%s)\n",
                                 
    argv[2], rezultat);
              break;
            case 
    'd':
            case 
    'D':
              for (
    0strlen(argv[2]); i++) 
                 
    /* Kontrollojme nese me te vertete 
                  * kemi te bejme me numra
                  */
                 
    if (argv[2][i] < '0' && argv[2][i] > '9')
                            return 
    3;
              
              
    /* Mbase pak e ekzagjerim ne memorie
               */
              
    rezultat = (char*) malloc(MAX_STR_LEN 1);
              
    memset(rezultat0MAX_STR_LEN 1);
              if (!
    rezultat
                 return 
    4;
              
              if (
    DecToBin(argv[2], &rezultat) < 0) {
                 
    printf("Gabim i brendshem ne program\n");
                 
    printf("%s\n"strerror(errno));
                 return 
    5;
              }
              
    printf("Konvertimi nga Dhjetor(%s) => Bin("argv[2]);
              
    printf("%s)\n"rezultat);
              
    printf("\n");
              break;
            default:
              
    // per efekte sigurie perdorim strncpy
              // qe limiton sasione e karaktereve me gjatesine
              //vektorit tone      
    help:
              
    strncpy(prognameargv[0], MAX_STR_LEN);
              
    PrintHelp(progname);
              break;
          }
      }
      return 
    0;

    Ndryshuar pėr herė tė fundit nga qoska : 07-04-2006 mė 11:38

  5. #5
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Funksioni BindtoDec

    Nė gcc 3.4.2
    while ( *temp != NULL )
    nxjerr paralajmėrimin "32 [Warning] comparison between pointer and integer"
    pėr arsyen se NULL nuk ėshtė njė char '\0' por int 0 ose tregues void * 0.
    Korrigjimi: while ( *temp != '\0' )

    NULL duhet pėrdorur pėr treguesit (pointer), ndėrsa pėr krahasimet me int pėrdor 0 dhe pėr krahasimet me char pėrdor '\0'. Nė kėte mėnyrė nuk ka probleme dhe programi ėshtė mė i lehtė pėr t'u lexuar nga programuesit.

    Gjithashtu, nė C ANSI nuk ka komente me dy vija tė pjerrėta //. C lejon /* */ ndėrsa C++ lejon /* */ dhe //. Nėse e pėrpilon kodin mė lart me opsionin -ansi tė gcc-sė, do tė nxjerrė gabim nė sintaksė pėr komentet e rreshtit 138 (pas default: ).

    Ti vėrtet po pėrdor unsigned int, por nė snprintf() po e printon vlerėn me formatin %d qė ėshtė pėr "signed integer". Kjo rezulton nė rezultat tė gabuar pėr vlerat mė tė mėdha se MAX_INT edhe pse pėrfshihen nė MAX_UINT. \
    Korrigjimi: snprintf(temp, strlen(bin), "%u", value);


    Funksioni ka dhe njė problem me tejkalimin e hapėsirės sė rezervuar tė memorjes:

    Kodi PHP:
    temp = (char*)malloc(strlen(bin));
    if (!
    temp) {
      
    errno ENOMEM;            
      return (
    char*) NULL;
    }
      
    snprintf(tempstrlen(bin), "%u"value);
       
    temp[strlen(bin)] = '\0'


    Nėse bin ka gjatėsi prej 10 gėrmash, malloc do rezervojė 10 gėrma pėr temp. PRa, kufiri i temp ėshtė nga temp[0] deri nė temp[9], por rreshti i fundit nė kodin mė lart shkruan nė temp[strlne(bin)] ose temp[10]. Kėtu ke kaluar kufirin e hapėsirės sė rezervuar nga malloc dhe po shkruan njė pjesė tė memorjes ku nuk ke leje.
    Korrigjimi: temp[strlen(bin) - 1] = '\0';

    Edhe pa problemet e mėsipėrm, programi po rezervon log2(value) shifra, kur nė fakt i duhen vetėm (log10(value) + 1) karaktere pėr shifrat dhe 1 karakter mė shumė pėr '\0'. Njė zgjidhje mė e mirė do ishte tė shkruhej si mė poshtė:

    Kodi PHP:
    charBinToDec (char *bin) {
        
    unsigned int value 0;
        
    char *temp bin;

        while ( *
    temp != '\0' )
        {
          
    value *= 2;
          
    value += *temp '0';
          ++
    temp;
        }

        
    short nrShifrave = (shortlog10((double)value) + 2;

        
    temp = (char*)malloc(nrShifrave);
        if (!
    temp) {
         
    errno ENOMEM;
         return (
    char*) NULL;
        }

        
    snprintf(tempnrShifrave"%u"value);

        
    temp[nrShifrave 1] = '\0';

        return 
    temp;

    Ndryshuar pėr herė tė fundit nga edspace : 07-04-2006 mė 19:34
    Edi

  6. #6
    Larguar Maska e cunimartum
    Anėtarėsuar
    07-06-2002
    Vendndodhja
    Canada
    Postime
    678
    C'e ke ate goto more
    Hiqe se na more ne qafe

  7. #7
    mos e luaj; I DEBUAR! Maska e qoska
    Anėtarėsuar
    17-05-2004
    Vendndodhja
    tirane
    Postime
    837
    edspace,
    po ta shohesh mire ka dhe gabime te tjera ne ate programin siper :P.


    nejse ja dhe nje i plote them(shpresojme mos te kem gabime ) qe lexon dhe nga nje skedar i dhene ne komande si psh konverto -d < filemenumra.txt.

    E kam vene ne tage CODE pasi taget PHP sikur fshijne komentet.

    Kodi:
    /* Vini re qe ky program eshte provuar vetem
     * ne ambiente programim *nix.
     * Ne Windows mund te duhen disa modifikime.
     */
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #ifndef perror 
    #       define perror(s) printf(s);
    #endif
    
    #define MAX_STR_LEN 1024
    
    /* Prototipet e funksioneve qe me shume 
     * na ruajne nga gabimet tona.
    */
    char* BinToDec(char*);
    int DecToBin(char*, char**);
    void PrintHelp(char*);
    int kontrollo(char *, int *);
    void konverto(char **, int, int);
    
    
    void PrintHelp(char *progname) {
      printf ("Perdorimi : %s [MUNDESI] [NUM]\n", progname);
      printf ("\tMUNDEISTE mund te jene [-b | -d | -h]\n");
      printf (" -b\tKonverton nga binare ne dhjetor.\n");
      printf (" -d\tKonverton nga dhjetor ne binare.\n");
      printf (" -h\tShfaq kete mesazh.\n");
      printf ("-------------------");
      printf ("Bazuar ne nje program te shkruar nga Eni Bundo\n");
      printf ("Modifikuar nga Ermal Luēi\n");
    }
    
    
    char* BinToDec (char *bin) {
      long long value = 0;
      char *temp = bin; /* na jep mundesi per te perdorur
                         * strlen(bin) me vone.
                        */
      int len;
       /* Gjithe kjo eshte pak e ngaterruar per 
        * here te pare por ne C kjo eshte plotesisht
        * e ligjshme dhe e rregullt, pasi 
        * karakteret ne C prezantohen nga int. (Pse?)
        * Megjithese gjate perpilimit
        * merret nje "warning" per krahasim te 
        * char* me int.
        */
       while ( *temp != '\0' )       
       {
          value *= 2;          
          value += *temp - '0'; 
          ++temp;               
       }
    
      len = strlen(bin);
      if (len < 2) 
         len = 2;
      
      temp = (char*)malloc(len);
      if (!temp) {
         errno = ENOMEM;            
         return (char*) NULL;
      }
      
      if ( len == 2) {
        if (*bin == '0' ) 
               temp[0] = '0';
        else 
               temp[0] = '1';
         temp[1] = '\0';
      } else
      /* Edhe ketu perdoret funksioni snprintf() ne vend te 
       * sprintf() per te eliminuar problemet e ashtequajtura
       * "buffer overflow"
       */
       
       snprintf(temp, len, "%lld", value);
       /* XXX: Mbase duhet te kontrollojme per gabime?!
        * Menyra do te shfrytezonte errno. Ne fillim ruajme vleren 
        * para se te therrasim funksionin dhe pastaj e krahasojme
        * ate me vleren pas funksionit. Ne Windows me e rregullt do
        * te ishte te perdorej funksioni
        * GetLastError() != NO_ERROR dhe pastaj
        * perdorim FormatMessage().
        */
        
        if (len > 2)
           temp[len - 1] = '\0'; 
       /* Rezultat nuk tregon nje memorie lokale
        * te funksionit ne fjale pasi u krijua
        * me malloc() ;).
        */
       return temp;
    }
    
    /* Ky funksion eshte shkruar ndryshe per te paraquitur dhe
     * menyren tjeter per funksionet. Pra duke kthyer gabimin 
     * me vleren e funksionit dhe llogartijen me ane te nje 
     * parametri te funksionit qe sigurisht kerkon me shume 
     * pergjegjesi nga thirresi pasi duhet te krijoje vete
     * memorien ku do te ruhet llogaritja.
     */
    int DecToBin (char *dec, char **rez ) {
      int counter = 0;
      int i = 0, j = 1;
      char *rezultat = *rez, *tmp;
      unsigned long RealDec=0;
      
      if (*rez == NULL || dec == NULL) {
         errno = EINVAL; /* deklaruar ne errno.h */
         return -1;
      }
    
        tmp = dec;
        while(*tmp++ != '\0') i++;
        while (--i > 0 ) j *= 10;
        tmp = dec;
        do {
            RealDec += (*tmp - '0') *  j;
            j /= 10;
        } while (*++tmp  != '\0');
        if ( RealDec > (ULONG_MAX - 1)) {
           errno = E2BIG;
           return -1;
        }
        do {
             if (RealDec%2)
                      rezultat[counter] = '1';
             else
                      rezultat[counter] = '0';
          /* Sigurisht qe humbim informacion por
           * kjo eshte ne interes tonin pasi pjesa    
           * pas presjes dhjetore nuk na intereson.
           * Per me shume shikoni URI me poshte
           * http://en.wikipedia.org/wiki/Binary_numeral_system
           */
            RealDec /= 2;
            counter++;
            /* XXX: E teper?! */
            if ( counter >= MAX_STR_LEN) {
                 errno = ENOMEM;
                 return -1;
            }
        } while(RealDec >= 1);  
      
     rezultat[counter] = '\0';
      /* Do mendoni pse nuk e risetojme dhe errno!
       * Por rregullat thone qe s'duhet te preket
       * vlera e meparshme e saj nese s'ka gabime
       * per arsyen e thjeshte pasi mund te perdoren 
       * ne teknika si ajo shpjeguar ne BinToDec()
       * pas snprintf().
       */
      return counter;
    }
    
    
    int kontrollo(char *string, int *type) {
        int lloji = 0;
    
          if (!string)
    	return -1; 
    
    	do {
              switch (*string) {
                       case '0':
                       case '1':
                            if ( *type == 1 ) lloji = 1;
                            break;
                       /* XXX: Ka menrya me te mira per kete! */
                       case '2':
                       case '3':
                       case '4':
                       case '5':                   
                       case '6':
                       case '7':
                       case '8':
                       case '9':
                            lloji = 1;
                            break;
                       default:
                               *type = -1;
                               return -1;
                }
        } while(*++string != '\0');
    
        if (lloji == 1 && *type == 0)
            return -1;
        return 0;                                               
    }                            
    
    void konverto(char **input, int numstring, int binapodec) {
      int sahere = numstring, tmp2;
      char *rezultat, *tmp;  
      
      if (numstring < 1) {
         perror("Gabim i brendshem(i cuditshem)");
         exit(9);
      }    
    
       while (sahere--) {
                if ( kontrollo(input[sahere], &binapodec) < 0 || binapodec < 0) {
                     perror("Lejohen vetem numra binare ose decimale");
                     exit(5);
                }
                
                if (!binapodec) {
                   if ((rezultat = BinToDec(input[sahere])) == NULL) {
                      printf("Gabim i brendshem ne program\n");
                      printf("%s\n", strerror(errno));
                      exit(6);
                   }
                   printf("Bin(%s) Dhjetor(%s)\n",
                                 input[sahere], rezultat);
    	       free(rezultat);
                } else {
                  /* Mbase pak e ekzagjerim ne memorie
                   */
                  rezultat = (char*) malloc(MAX_STR_LEN + 1);
                  memset(rezultat, 0, MAX_STR_LEN + 1);
                  if (!rezultat) 
                     exit(7);
              
                  if ((tmp2 = DecToBin(input[sahere], &rezultat)) < 0) {
                           printf("Gabim i brendshem ne program\n");
                           printf("%s\n", strerror(errno));
                           exit(8);
                  }
                  printf("Dhjetor(%s) Bin(", input[sahere]);
                  tmp = rezultat;
                  while (tmp2--) printf("%c", tmp[tmp2]);
                  printf(")\n");
                  free(rezultat);     
    	}
              }   
              return;
    } 
    
    int main (int argc, char *argv[]) {
        /* Shtojme 1 per te rezervuar 
         * vend per karakterin '\0' ose NULL
         * qe perfundon te gjithe vektoret me 
         * karaktere ne C.
         * Sigurisht e gjithe kjo mund te behet 
         * dinamike me perdorimin e malloc()
         * PSH: char *progname = 
         *               malloc(strlen(argv[0]);
         */
        char progname[MAX_STR_LEN + 1];
        char *input = (char*)malloc((MAX_STR_LEN + 1));
        int binapodec = 2, i = 0;
        int c, status;
        
      if (argc == 1)
    	goto help;
    
      if (argc > 1) {
               if (!strncmp(argv[1], "-b", 2)) 
                  binapodec = 0;
               else  if(!strncmp(argv[1], "-d", 2))
                    binapodec = 1;
               else  if(!strncmp(argv[1], "-h", 2))
                      goto help;
               else  { status = 2; goto exit; }
      }
      if (argc >= 3) {
          konverto(argv + 2, argc - 2, binapodec);
      } else {
          while( (c = getchar()) != EOF) {       
             if ( c >= 'a' && c <= 'z' )
                break;
             if (c >= 'A' && c <= 'Z') 
                break;
             if ( c >= '0' && c <= '9') {
                   input[i] = c;
                   i++;
                   if ( i > MAX_STR_LEN) 
                       /* XXX: Realloc() ?! */
                       goto exit;
             } else if (c == ' ' || c == '\t' || c == '\n' || c == '\r') {
             	input[i] = '\0';
             	konverto(&input, 1, binapodec);
             	i = 0;
              
    	     }else {
                    printf("karaktrere jo ascii ne dokument\n"); 
                    continue;
             }
           }
      }
      status = 0;
      goto exit;  
                
          /* per efekte sigurie perdorim strncpy
           * qe limiton sasione e karaktereve me gjatesine
           * vektorit tone      
           */
    help:
              strncpy(progname, argv[0], MAX_STR_LEN);
              PrintHelp(progname);
    exit:
              free(input);
              return status;
    }
    Ndryshuar pėr herė tė fundit nga qoska : 12-04-2006 mė 10:33

  8. #8
    linux user Maska e eni_
    Anėtarėsuar
    13-03-2005
    Postime
    67
    edspace,
    kodin e kam shkruar ne anglisht, pasi shumicen e kohes pasi shkruaj nje kod konektohem direkte (dial up), dhe kerkoj ndihme ne kanale per programmim ne te cilat gjuha e folur eshte anglishjta. Sa per komentet ke te drejte, por kur programoj nuk shkruaj komente pasi me pengojne ne editimin e kodit me vone..
    Sa per te dhenat :
    per te shkruar kodin perdor "vim ose gvim [gnome-vim]"
    per te perpiluar perdor gcc version 4.0.2
    per ndihme shoh K & R : "The c proramming language" dhe nja dy libra te tjere per C
    qe kam ne hard-drive.
    Phuck windows, Think Linux

Tema tė Ngjashme

  1. Pėrgjigje: 2
    Postimi i Fundit: 22-05-2010, 17:16
  2. Konvertime te muslimaneve ne te krishtere :D
    Nga tulipanonero nė forumin Komuniteti musliman
    Pėrgjigje: 27
    Postimi i Fundit: 27-06-2009, 10:34
  3. Konvertime te njesive Online
    Nga benseven11 nė forumin Mentori akademik
    Pėrgjigje: 1
    Postimi i Fundit: 16-04-2006, 20:53

Regullat e Postimit

  • Ju nuk mund tė hapni tema tė reja.
  • Ju nuk mund tė postoni nė tema.
  • Ju nuk mund tė bashkėngjitni skedarė.
  • Ju nuk mund tė ndryshoni postimet tuaja.
  •