mrnn_

4303 Bináris és decimális számrendszerek közötti átváltás

Nov 23rd, 2014
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.11 KB | None | 0 0
  1. // 4303 - Bináris és decimális számrendszerek közötti átváltás törtekkel együtt - Bíró: 20 pont
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. typedef struct {
  5.     int egeszresz;
  6.     int tortresz;
  7. } hossz;
  8. long long int hatvany (int alap, int kitevo) {
  9.     int i;
  10.     long long int ertek=1;
  11.     for (i=0;i<kitevo;i++) {
  12.         ertek=alap*ertek;
  13.     }
  14.     return ertek;
  15. }
  16. hossz szetvalaszt (char *szam, char *egeszresz, char *tortresz) {
  17.     int i,j;
  18.     hossz h;
  19.     h.tortresz=h.egeszresz=0;
  20.     for (i=0;(szam[i]!='.') && (szam[i]!=0);i++) {
  21.         egeszresz[i]=szam[i];
  22.     }
  23.     egeszresz[i]=0;
  24.     h.egeszresz=i;
  25.     if (szam[i]=='.') {
  26.         j=0;
  27.         for (i=i+1;szam[i]!=0;i++) {
  28.             tortresz[j]=szam[i];
  29.             j++;
  30.         }
  31.         tortresz[j]=0;
  32.         h.tortresz=j;
  33.     }
  34.     return h;
  35. }
  36. void tizesbe (char *szam, char *atvaltott) {
  37.     int i,szamjegy;
  38.     char egeszresz[61], tortresz[61], torteredmenys[19];
  39.     long double eredmeny=0.0, torteredmeny=0.0, tortjegy;
  40.     hossz h;
  41.     h=szetvalaszt(szam, egeszresz, tortresz);
  42.     for (i=0;egeszresz[i]!=0;i++) {
  43.         szamjegy=egeszresz[i]-48;
  44.         eredmeny+=szamjegy*hatvany(2,h.egeszresz-i-1);
  45.     }
  46.     if (h.tortresz!=0) {
  47.         for (i=0;tortresz[i]!=0;i++) {
  48.             tortjegy=tortresz[i]-48;
  49.             if (tortjegy!=0) {
  50.                 torteredmeny+=tortjegy/hatvany(2,i+1);
  51.             }
  52.         }
  53.     }
  54.     // HACK!!!
  55.     sprintf(torteredmenys,"%.16Lf",torteredmeny);
  56.     for (i=0;i<15;i++) { torteredmenys[i]=torteredmenys[i+2]; }
  57.     torteredmenys[15]=0;
  58.     sprintf(atvaltott,"%.0Lf.%s",eredmeny,torteredmenys);
  59. }
  60. void tizesbol (char *szam, char *atvaltott) {
  61.     int i,j,szamjegy,kitevo=1;
  62.     char egeszresz[19], tortresz[19];
  63.     long long int maradek=0;
  64.     long double tortmaradek=0, tortszamjegy;
  65.     hossz h;
  66.     h=szetvalaszt(szam, egeszresz, tortresz);
  67.     for (i=0;i<h.egeszresz;i++) {
  68.         szamjegy=egeszresz[i]-48;
  69.         maradek=maradek*10+szamjegy;
  70.     }
  71.     while (maradek/2!=0) {
  72.         maradek/=2;
  73.         kitevo++;
  74.     }
  75.     maradek=0;
  76.     for (i=0;i<h.egeszresz;i++) {
  77.         szamjegy=egeszresz[i]-48;
  78.         maradek=maradek*10+szamjegy;
  79.     }
  80.     for (i=0;i<kitevo;i++) {
  81.         szamjegy=maradek/hatvany(2,kitevo-i-1);
  82.         maradek=maradek%hatvany(2,kitevo-i-1);
  83.         atvaltott[i]=48+szamjegy;
  84.     }
  85.     if (h.tortresz!=0) {
  86.         atvaltott[i]='.';
  87.         i++;
  88.         for (j=0;j<h.tortresz;j++) {
  89.             tortszamjegy=tortresz[j]-48;
  90.             if (tortszamjegy!=0) {
  91.                 tortmaradek+=tortszamjegy/hatvany(10,j+1);
  92.             }
  93.         }
  94.         for (j=0;j<30;j++) {
  95.             tortmaradek*=2;
  96.             if (tortmaradek>=1) {
  97.                 szamjegy=1;
  98.                 tortmaradek-=1;
  99.             } else {
  100.                 szamjegy=0;
  101.             }
  102.             atvaltott[i]=48+szamjegy;
  103.             i++;
  104.         }
  105.     } else {
  106.         atvaltott[i]='.';
  107.         i++;
  108.         for (j=0;j<30;j++) {
  109.             atvaltott[i]='0';
  110.             i++;
  111.         }
  112.     }
  113.     atvaltott[i]=0;
  114. }
  115. int main () {
  116.     FILE *be, *ki;
  117.     int szamrendszer;
  118.     char szam[121],atvaltott[121];
  119.     if(!(be=fopen("be.txt", "r"))) {
  120.         printf("HIBA: Hiányzik a `be.txt'!\n");
  121.         return 1;
  122.     }
  123.     if(!(ki=fopen("ki.txt", "w"))) {
  124.         printf("HIBA: A `ki.txt' nem írható!\n");
  125.         return 1;
  126.     }
  127.     fscanf(be,"%d %s\n",&szamrendszer,szam);
  128.     if (szamrendszer==2) {
  129.         tizesbe(szam,atvaltott);
  130.         szamrendszer=10;
  131.     } else {
  132.         tizesbol(szam,atvaltott);
  133.         szamrendszer=2;
  134.     }
  135.     fprintf(ki,"%d %s\n",szamrendszer,atvaltott);
  136.     fclose(be);
  137.     fclose(ki);
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment