Programozás I. Horváth Ernő 1
Elérhetőségek Bauer Péter Horváth Ernő Tanszéki honlap 2
Feladat Készítsen int toi(char s[]) függvényt, mely tizenegynél kisebb alapú számrendszerbeli számjegyekből álló karakterláncból előállít egy egész számot! A számrendszer alapja legyen fordítási időben változtatható! 3
Algoritmus Billentyűzetről karakterlánc beolvasása - getline Karakterlánc ellenőrzése – megnézzük, számot adott-e be a felhasználó – karakterek ‘0’ és ‘9’ közé esnek (csak 10es számrendszer) Karakterlánc átalakítása számmá 4
toi int toi(char s[]){ int i, eredmeny = 0; for(i=0; s[i]!=0; ++i) eredmeny = eredmeny * ALAP + s[i] - '0'; return eredmeny; } 5
toi printf("%d", '0'); ASCII 48 = '0' 49 = '1' 50 = '2' = 'A' 6
toi for(i=0; s[i]!=0; ++i) eredmeny = eredmeny * ALAP + s[i] - '0'; "1264" [0] >> 0 * = 1 [1] >> 1 * = 12 [2] >> 12* = 126 [3] >> 126* =
szame //"Az s karakterlanc ALAP alapu szam-e?" kerdesre ad logikai valaszt a fuggveny. int szame(char s[]){ int i; // Ha 10-es szamrendszert kellene vizsgálni isdigit() for(i=strlen(s)-1; i && s[i]>='0' && s[i]<ALAP+'0'; --i); if(s[i]>='0' && s[i]<ALAP+'0') return 1; else return 0; } 8
stlib.h 9 FüggvényLeírása atoi Stringet konvertál integerré, a fehér karaktereket figyelmen kívül hagyva. –32768 és között atol Stringet konvertál long int típussá, a fehér karaktereket figyelmen kívül hagyva. −2,147,483,648 és +2,147,483,647 között atof Stringet konvertál lebegőpontos double-é, a fehér karaktereket figyelmen kívül hagyva. ±1.7* –16 decimális jegy pontosság
atoi // string --> decimalis int atoi(char st[]){ int decimal = 0; int i = 0; char neg=0; while(st[i]==' ' || st[i]=='\t' || st[i]=='\n') ++i; if(st[i]=='-') ++neg; if(st[i]=='-' || st[i]=='+') ++i; for(;st[i];++i) decimal = decimal*10+st[i]-'0'; if(neg) decimal = -decimal; return decimal; } 10
atoi char string[]="-2147"; printf("Ez egy sima string: %s \n", string); printf("Ez decimalis szam : %d", atoi(string)); Ez egy sima string: Ez decimalis szam :
Köszönöm a figyelmet! 12