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
É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
[Szerkesztve]