Advertisement
machkovskitomche

odbosko datoteka1

Aug 9th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAKS_IME_DATOTEKE 20
  5.  
  6. int MEJNIKI[] = {230,  200,   180,  160,  130,  100,   70,   50      };
  7. char ZNAKI[] =  {' ',  '.',  '\'',  ':',  'o',  '&',  '8',  '#', '@' };
  8.  
  9. void pretvori(FILE* vhod, FILE* izhod, int velikostKvadrata, char* sivinaVZnak) {
  10.     int nTemp = 10;
  11.     char* temp = malloc((nTemp + 1) * sizeof(char));
  12.     int sirina, visina;
  13.    
  14.     fgets(temp, nTemp, vhod);
  15.     fscanf(vhod, "%d%d\n", &sirina, &visina);
  16.     fgets(temp, nTemp, vhod);
  17.  
  18.     // preberi podatke o pikah
  19.     unsigned char* pike = malloc(3 * visina * sirina * sizeof(unsigned char));
  20.     fread(pike, sizeof(unsigned char), 3 * visina * sirina, vhod);
  21.  
  22.     int stKvadratovPoVisini = visina / velikostKvadrata;
  23.     int stKvadratovPoSirini = sirina / velikostKvadrata;
  24.    
  25.     int** vsoteVKvadratih = malloc(stKvadratovPoVisini * sizeof(int*));
  26.     for (int i = 0;  i < stKvadratovPoVisini;  i++) {
  27.         vsoteVKvadratih[i] = calloc(stKvadratovPoSirini, sizeof(int));
  28.     }
  29.    
  30.     int k = 0;
  31.     for (int i = 0;  i < visina;  i++) {
  32.         for (int j = 0;  j < sirina;  j++) {
  33.             int vsota = pike[k] + pike[k + 1] + pike[k + 2];
  34.             k += 3;
  35.             vsoteVKvadratih[i / velikostKvadrata][j / velikostKvadrata] += vsota;
  36.         }
  37.     }
  38.      
  39.     int stElementovVKvadratu = 3 * velikostKvadrata * velikostKvadrata;
  40.     for (int i = 0;  i < stKvadratovPoVisini;  i++) {
  41.         for (int j = 0;  j < stKvadratovPoSirini;  j++) {
  42.             int povprecje = vsoteVKvadratih[i][j] / stElementovVKvadratu;
  43.             fputc(sivinaVZnak[povprecje], izhod);
  44.         }
  45.         fputc('\n', izhod);
  46.     }
  47.    
  48.     free(pike);
  49.     for (int i = 0;  i < stKvadratovPoVisini;  i++) {
  50.         free(vsoteVKvadratih[i]);
  51.     }
  52.     free(vsoteVKvadratih);
  53. }
  54.  
  55. int main() {
  56.     char* imeVhodneDatoteke = malloc((MAKS_IME_DATOTEKE + 1) * sizeof(char));
  57.     char* imeIzhodneDatoteke = malloc((MAKS_IME_DATOTEKE + 1) * sizeof(char));
  58.     int velikostKvadrata;   // <n> v navodilih naloge
  59.     scanf("%s%s%d", imeVhodneDatoteke, imeIzhodneDatoteke, &velikostKvadrata);
  60.    
  61.     char* sivinaVZnak = malloc(256 * sizeof(char));
  62.  
  63.     int stMejnikov = sizeof(MEJNIKI) / sizeof(int);
  64.     int m = 0;
  65.     for (int s = 255;  s >= 0;  s--) {
  66.         sivinaVZnak[s] = ZNAKI[m];
  67.         if (m < stMejnikov && s == MEJNIKI[m]) {
  68.             m++;
  69.         }
  70.     }
  71.    
  72.     FILE* vhod = fopen(imeVhodneDatoteke, "rb");
  73.     FILE* izhod = fopen(imeIzhodneDatoteke, "wt");
  74.     pretvori(vhod, izhod, velikostKvadrata, sivinaVZnak);
  75.     fclose(vhod);
  76.     fclose(izhod);
  77.    
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement