|
/////////////////////////////////////////////////////////////////////// // ITS - Visoka Škola Strukovnih Studija Za Informacione Tehnologije // http://www.its.edu.rs/ // Predmet: Osnovi Programiranja - Programski jezik C // // Primer: Program za konverziju pozitivnih celih brojeva iz dekadnog // brojnog sistema u binarni, heksadecimalni i oktalni brojni // sistem. Tabelarni prikaz. /////////////////////////////////////////////////////////////////////// #include <stdio.h> #include <windows.h> // WinApi header, potreban za promenu boje // funkcija za pretvaranje decimalnog sistema u binarni char* dec2bin(long dec, char *binNiz); // funkcija za pretvaranje decimalnog sistema u oktalni char* dec2okt(long dec, char *oktNiz); // funkcija za pretvaranje decimalnog sistema u heksadecimalni char* dec2hex(long dec, char *hexNiz); int Boja(); // definisanje funkcije za promenu boje int inverznaBoja(); // inverzna boja za tablicu void zaglavlje2(); // ispis linija int main() { long i,min,max,dec,zamena; int dx = 0, pauza = 0, ekran = 1, ver = 186, hor=205, krst=206; char nastavak = '1', progPonovo=0; char binNiz[80]; char oktNiz[80]; char hexNiz[80];
// konverzacija sa korisnikom radi prikupljanja podatka printf("\n\n Unesite pozitivan ceo broj od koga zelite da prikazete brojne sisteme: "); scanf("%ld",&min); if(min<=0) { printf("Potrebno je da broj bude pozitivan!\n"); return 1; } printf("\n Unesite pozitivan ceo broj do koga zelite da prikazete brojne sisteme: "); scanf("%ld",&max); if(max<=0) { printf("Potrebno je da broj bude pozitivan!\n"); return 1; } // provera i eventualna zamena ukoliko je OD vece od DO while(max<min) { printf("\n Uneli ste vrednost manju od pocetne, vrednosti ce biti zamenjene"); zamena=max; max=min; min=zamena; } // provera da li je prirastaj pozitivan i veci od nule while (dx<=0) { printf("\n Unesite pozitivan ceo decimalni broj za prirastaj brojnih sistema: "); scanf("%d",&dx); } inverznaBoja(); // inverzna boja za ispis tabele //prvo zaglavlje tabele printf("\n %c dec %c bin %c okt %c hex %c ",ver,ver,ver,ver,ver); // zaglavlje zaglavlje2(krst,hor); // pozivanje linije for (i=min;i<=max;i=i+dx) // brojac koraka { dec=i; pauza++; // pauzu koristimo za ispis jednog po jednog ekrana dec2bin(dec,binNiz); // pozivanje izracunavanja binarnog broja dec2okt(dec,oktNiz); // pozivanje izracunavanja oktalnog broja dec2hex(dec,hexNiz); // pozivanje izracunavanja heksadecimalnog broja printf(" %c%12ld %c%32s %c%13s %c%10s %c ",ver,dec,ver,binNiz,ver,oktNiz,ver,hexNiz,ver); // ispis reda if (pauza==22 && ekran==1) // u slucaju prvog prolaska ENTER ostaje stisnuto pa trebaju dva getchar() { getchar(); getchar(); pauza=0; ekran++; printf("\n %c dec %c bin %c okt %c hex %c ",ver,ver,ver,ver,ver); // zaglavlje zaglavlje2(krst,hor); } if (pauza==22 && ekran!=1) // u slucaju da nije prvi prolaz { getchar(); pauza=0; ekran++; printf("\n %c dec %c bin %c okt %c hex %c ",ver,ver,ver,ver,ver); // zaglavlje zaglavlje2(krst,hor); } } Boja(); // promena boje system("PAUSE"); // poruka press any key... return 0; } // prihvata dekadni broj i vraca binarni niz char* dec2bin(long dec, char *binNiz) { int k = 0, n = 0; int ostatak; int stariDec; //test char temp[80]; do { stariDec = dec; // test ostatak = dec % 2; // deljenje sa dva dec = dec / 2; // smesta 0 ili 1 u niz temp[k++] = ostatak + '0'; } while (dec > 0); // okrece niz while (k >= 0) binNiz[n++] = temp[--k]; binNiz[n-1] = 0; // kraj sa NULL return binNiz; } // prihvata dekadni broj i vraca oktalni niz char* dec2okt(long dec, char *oktNiz) { int k = 0, n = 0; int ostatak; int stariDec; //test char temp[80]; do { stariDec = dec; // test ostatak = dec % 8; // deljenje sa osam dec = dec / 8; // smesta ostatak u niz temp[k++] = ostatak + '0'; } while (dec > 0); // okrece niz while (k >= 0) oktNiz[n++] = temp[--k]; oktNiz[n-1] = 0; // kraj sa NULL return oktNiz; } // prihvata dekadni broj i vraca heksadecimalni niz char* dec2hex(long dec, char *hexNiz) { int k = 0, n = 0; int ostatak; int stariDec; //test char temp[80]; do { stariDec = dec; // test ostatak = dec % 16; // deljenje sa 16 dec = dec / 16; // dodeljivanje vrednosti clanu u zavisnosti od ostatka // prvih 10 su mogli ici pod default vrednosti ali je ovako preglednije switch (ostatak) { case 0: temp[k++] = ostatak + '0'; break; case 1: temp[k++] = ostatak + '0'; break; case 2: temp[k++] = ostatak + '0'; break; case 3: temp[k++] = ostatak + '0'; break; case 4: temp[k++] = ostatak + '0'; break; case 5: temp[k++] = ostatak + '0'; break; case 6: temp[k++] = ostatak + '0'; break; case 7: temp[k++] = ostatak + '0'; break; case 8: temp[k++] = ostatak + '0'; break; case 9: temp[k++] = ostatak + '0'; break; case 10: temp[k++] = 'A'; break; case 11: temp[k++] = 'B'; break; case 12: temp[k++] = 'C'; break; case 13: temp[k++] = 'D'; break; case 14: temp[k++] = 'E'; break; case 15: temp[k++] = 'F'; break; } // smesta ostatak u niz } while (dec > 0); // okrece niz while (k >= 0) hexNiz[n++] = temp[--k]; hexNiz[n-1] = 0; // kraj sa NULL return hexNiz; } Boja() // funkcija za promenu boje { // menjanje boje HANDLE hConsole; hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, 10); return 0; // povratak } inverznaBoja() // funkcija za menjanje boje u inverznu { // menjanje boje HANDLE hConsole; hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole, 160); return 0; // povratak } void zaglavlje2(krst,hor) // ispisivanje linije { int j; printf(" %c",krst); for (j=1;j<=13;j++) { printf("%c",hor); } printf("%c",krst); for (j=1;j<=33;j++) { printf("%c",hor); } printf("%c",krst); for (j=1;j<=14;j++) { printf("%c",hor); } printf("%c",krst); for (j=1;j<=11;j++) { printf("%c",hor); } printf("%c ",krst); } 
Broj mesta je ograničen! Prijavite se na vreme.
|