Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. unsigned int convert(char *hodnota)//funkce, ktera pretypuje N (vstup char a vystup unsigned int
  7. {
  8. unsigned int cislo=0,preteceni=0;
  9. unsigned int i=0;
  10. while(hodnota[i]!='\0')
  11.   {
  12.   if (hodnota[i]<='0' && hodnota[i]>'9') //osetreni, ze N je cislo (osetreni i pro to, ze cilo je kladne)
  13.     {
  14.     return 0;
  15.     }
  16.   hodnota[i]=hodnota[i]-'0';    //zaskani presne hodnoty cisla z nejake ascii hodnoty
  17.  
  18.   preteceni=cislo;
  19.   cislo=cislo*10;
  20.   cislo=cislo+hodnota[i]; //pokud uz proslo pripocte k 10tinasobku predchoziho cila prave nastene cislo
  21.   i++;
  22.   if(preteceni>cislo)   //doslo k preteceni - jednicka vypadla ven a jede se od nuly   
  23.     {
  24.     return 0;       //kdyz vrati nulu - doslo k chybe (zde z duvodu preteceni)
  25.     }
  26.   }  
  27. return cislo;
  28. }
  29.  
  30.  
  31. /*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
  32. /*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
  33. /*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
  34. /*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
  35. /*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
  36. /*------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
  37.  
  38.  
  39. int komprimace(unsigned int N)
  40. {
  41. printf("Komprimace %d \n",N);
  42.  
  43. char *buffer1 = malloc((N+1) * sizeof(char));//definice bufferù a jejich dynamické alokování
  44.  
  45. if(buffer1==NULL)
  46. {
  47. free(buffer1);
  48. return 1;
  49. }
  50.  
  51. char *buffer2 = malloc((N+1) * sizeof(char));
  52.  
  53. if (buffer2==NULL)
  54. {
  55. free(buffer2);
  56. free(buffer1);
  57. return 1;
  58. }
  59. memset(buffer1, 0, (N+1) * sizeof(char));
  60. memset(buffer2, 0, (N+1) * sizeof(char));
  61. putchar(buffer1[0]);putchar(buffer1[1]);putchar(buffer1[2]);putchar(buffer2[0]);putchar(buffer2[1]);putchar(buffer2[2]);
  62. printf("\nMem test\n");
  63. unsigned int i=0; //vlozeni pomocnych promenych (pocet je promena, do ktere se bude vkladat pocet shodujicich se blokù znakù)
  64. char c=0;
  65.  
  66. while((c = getchar()) != EOF && i!=(2*N))
  67. if (isspace(c)== ' ')
  68. {
  69.   unsigned int k=0, l=0;
  70.   while(k < N)
  71.       {
  72.       putchar (buffer1[l%N]);
  73.       k++;
  74.       l++;
  75.       printf ("K je : %d",k);
  76.       while((k>=N) && k < (2 * (N-1)))
  77.         {
  78.         putchar (buffer2[l%N]);
  79.         k++;
  80.                 l++;
  81.         }
  82.       }
  83.  
  84. memset(buffer1, 0, (N+1) * sizeof(char));
  85. memset(buffer2, 0, (N+1) * sizeof(char));
  86. i=0;
  87.  
  88. }
  89.   {
  90.     if(i < N)               //prvotní nacteni do bufferu ze vstupu
  91.       {
  92.       buffer1[i%N] = c;
  93.       i++;
  94.       }
  95.       else if(i < 2 * N)
  96.         {
  97.         buffer2[i%N] = c;
  98.         i++;
  99.         }
  100.  
  101. putchar(buffer1[0]);putchar(buffer1[1]);putchar(buffer1[2]);putchar(buffer2[0]);putchar(buffer2[1]);putchar(buffer2[2]);
  102. printf("\nnad timto radkem je prvotni nactenido bufferu\n");
  103.   while((c = getchar()) != EOF)             //vytisknuti prvniho znaku a posunuti znaku o jeden a nacteni dalsiho znaku
  104.     {
  105.     unsigned int j=0;
  106.     putchar(buffer1[j%N]);
  107.         printf("\n");
  108.     while(j<(N-1))
  109.       {
  110.       buffer1[j%N]=buffer1[(j+1)%N];
  111.       j++;
  112.       }  
  113.  
  114.         while(j==(N-1))
  115.       {
  116.       buffer1[j%N]=buffer2[(j+1)%N];     // PRESUNUTI PRVNIHO ZNAKU Z BUFFERU2 NA POSLEDNI ZNAK BUFFERU 1
  117.             j++;      
  118.       }
  119.  
  120.     while ((j>(N-1)) && (j<((2*N)-1)))
  121.       {
  122.       buffer2[j%N]=buffer2[(j+1)%N];
  123.       j++;
  124.       }
  125.         c=getchar();
  126.         j++;    
  127.         c=buffer2[j%N];
  128.         putchar (c);
  129.         printf("\n");
  130.     putchar(buffer1[0]);putchar(buffer1[1]);putchar(buffer1[2]);putchar(buffer2[0]);putchar(buffer2[1]);putchar(buffer2[2]);
  131.         printf("\nnad timto radkem je posunuti o jeden\n");
  132.     }  
  133.  
  134.   unsigned int k=0, l=0;
  135.   while(k < N)
  136.       {
  137.       putchar (buffer1[l%N]);
  138.       k++;
  139.       l++;
  140.       printf ("K je : %d",k);
  141.       while((k>=N) && k < (2 * (N-1)))
  142.         {
  143.         putchar (buffer2[l%N]);
  144.         k++;
  145.                 l++;
  146.         }
  147.       }
  148.         }
  149. free(buffer1);
  150. free(buffer2);
  151. return 0;
  152. }
  153.  
  154.  
  155. int main(int argc, char *argv[])
  156. {
  157. unsigned int N=(convert(argv[1]));
  158. komprimace(N);
  159. return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement