Aktív témák

  • dzsessz

    csendes tag

    Sziasztok. Volna egy problémám. C-ben kellen írni egy programot, ami stringként tárolt hexadecimális számokat olvas be fájlból, amig '='-jelet nem kap. Valamit kapirgáltam, de sajnos több benne a hiba mint hajszál a fejemen. Nagyon megköszönném, ha valaki ki tudna segíteni. Pascalban eltudom küldeni a működő cuccot, ha az segít. THX

    #include <stdio.h>
    #include <string.h>

    FILE *fin, *fout;
    int carry; //az átvitel tárolására
    int osszeg[255] = {0}; //kinullázva deklarálunk 1 tömböt a decimális összegnek
    int szamlalo,lnh,hossz,ki,valami; //felhasznált ciklusváltozók
    char Hszam[255]; //bemenő adatnak
    char vosszeg[255]; //kimenő adatnak


    void atalakit(int osszeg; char vosszeg)
    {
    int veosszeg;
    {
    carry=osszeg/16;
    osszeg=osszeg%16;
    veosszeg=osszeg;

    switch (veosszeg) {
    case 10: vosszeg='A'; break;
    case 11: vosszeg='B'; break;
    case 12: vosszeg='C'; break;
    case 13: vosszeg='D'; break;
    case 14: vosszeg='E'; break;
    case 15: vosszeg='F'; break;
    case 1: vosszeg='1'; break;
    case 2: vosszeg='2'; break;
    case 3: vosszeg='3'; break;
    case 4: vosszeg='4'; break;
    case 5: vosszeg='5'; break;
    case 6: vosszeg='6'; break;
    case 7: vosszeg='7'; break;
    case 8: vosszeg='8'; break;
    case 9: vosszeg='9'; break;
    }
    }
    }

    int main(void)
    {
    fin =fopen(''be.txt'',''r'');
    fout =fopen(''ki.txt'',''w'');

    fgets(Hszam, 255, stdin); if (Hszam==''='') {break;}
    lnh=strlen(Hszam);
    do {
    for (szamlalo=strlen(Hszam), szamlalo>=1, szamlalo--)
    {
    switch (Hszam[szamlalo]) {
    case 'a': ki=10; break;
    case 'A': ki=10; break;
    case 'b': ki=11; break;
    case 'B': ki=11; break;
    case 'c': ki=12; break;
    case 'C': ki=12; break;
    case 'd': ki=13; break;
    case 'D': ki=13; break;
    case 'e': ki=14; break;
    case 'E': ki=14; break;
    case 'f': ki=15; break;
    case 'F': ki=15; break;
    case '0': ki=0; break;
    case '1': ki=1; break;
    case '2': ki=2; break;
    case '3': ki=3; break;
    case '4': ki=4; break;
    case '5': ki=5; break;
    case '6': ki=6; break;
    case '7': ki=7; break;
    case '8': ki=8; break;
    case '9': ki=9; break;
    default fprintf(fout,''Hibás input, a program leállt''); halt;
    }
    valami=strlen(Hszam)-szamlalo+1;
    osszeg[valami]=osszeg[valami]+ki;
    }
    szamlalo=0;
    do {
    ++szamlalo;
    atalakit(osszeg[szamlalo],vosszeg[szamlalo]);
    osszeg[szamlalo+1]=osszeg[szamlalo+1]+carry;
    if ((szamlalo=lnhn) && (carry>=1)) {lnh=lnh+1;}
    while (!szamlalo==lnh);
    }
    fgets(Hszam, 255, stdin);
    if (lnh<strlen(Hszam)) {lnh=strlen(Hszam);}
    while (!Hszam==''='');
    }
    for (lnh; lnh>=1, lnh--) {fprintf(fout,''%s'',vosszeg[lnh]);} //háturlól kezdve kiírjuk a hexaszámot

    }

    a és b kongruencia modulo n

  • GBX

    aktív tag

    válasz dzsessz #1 üzenetére

    Én egy kicsit máshogy csinálnám (ez csak más programtervezési megoldás)
    Megirod a következő függvényeket:
    HexToDec ,bejün egy char, visszamegy egy int (vagy short)
    DecToHex, bejön egy short kimegy egy string

    mainba beolvasod a filebol a tartalmat addig amig az =-t nem ad stb...
    minden beolvasott karakterre HexToDec aminek visszatárási értékét hozzáadod egy osszeg valtozohoz (ebben összegződnek az értékek )
    aztan erre az osszeg valtozoval meghivod a DecToHex -et és kiiratod a visszakapott stringet.

    Gondolom tucc Dec<-->Hex között konvertálni, több számjegy esetén is.

    HiTech 486 DX4 120Mhz AMD, 24MB 36bit RAM, 800 MB Conner HDD

  • QuarK

    senior tag

    int StringHexToInt(char *str)
    {
    int val;
    int c;

    val = 0;
    while (1)
    {
    c = *str++;
    if (c >= '0' && c <= '9')
    val = (val<<4) + c - '0';
    else if (c >= 'a' && c <= 'f')
    val = (val<<4) + c - 'a' + 10;
    else if (c >= 'A' && c <= 'F')
    val = (val<<4) + c - 'A' + 10;
    else
    return val;
    }
    return 0;
    }

    Ez bekap egy stringet, es visszaadja annak erteket. Pl.:

    StringHexToInt( ''FF'') visszateresi erteke 255 lesz. Talan ezzel a rutinnal konnyebb lesz. Beolvasod a hexa szamokat, odaadod ennek a fuggvenynek, majd szepen hozzaadod az eredmeny valtozodhoz. Visszafele konvertalast most hadd ne irjam már meg :)

    mod: Kicsit változtattam, de remélem most már nem értelmeztem semmit félre :DDD

    [Szerkesztve]

Aktív témák