Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAKS_IME_DATOTEKE 20
- int MEJNIKI[] = {230, 200, 180, 160, 130, 100, 70, 50 };
- char ZNAKI[] = {' ', '.', '\'', ':', 'o', '&', '8', '#', '@' };
- void pretvori(FILE* vhod, FILE* izhod, int velikostKvadrata, char* sivinaVZnak) {
- int nTemp = 10;
- char* temp = malloc((nTemp + 1) * sizeof(char));
- int sirina, visina;
- fgets(temp, nTemp, vhod);
- fscanf(vhod, "%d%d\n", &sirina, &visina);
- fgets(temp, nTemp, vhod);
- // preberi podatke o pikah
- unsigned char* pike = malloc(3 * visina * sirina * sizeof(unsigned char));
- fread(pike, sizeof(unsigned char), 3 * visina * sirina, vhod);
- int stKvadratovPoVisini = visina / velikostKvadrata;
- int stKvadratovPoSirini = sirina / velikostKvadrata;
- int** vsoteVKvadratih = malloc(stKvadratovPoVisini * sizeof(int*));
- for (int i = 0; i < stKvadratovPoVisini; i++) {
- vsoteVKvadratih[i] = calloc(stKvadratovPoSirini, sizeof(int));
- }
- int k = 0;
- for (int i = 0; i < visina; i++) {
- for (int j = 0; j < sirina; j++) {
- int vsota = pike[k] + pike[k + 1] + pike[k + 2];
- k += 3;
- vsoteVKvadratih[i / velikostKvadrata][j / velikostKvadrata] += vsota;
- }
- }
- int stElementovVKvadratu = 3 * velikostKvadrata * velikostKvadrata;
- for (int i = 0; i < stKvadratovPoVisini; i++) {
- for (int j = 0; j < stKvadratovPoSirini; j++) {
- int povprecje = vsoteVKvadratih[i][j] / stElementovVKvadratu;
- fputc(sivinaVZnak[povprecje], izhod);
- }
- fputc('\n', izhod);
- }
- free(pike);
- for (int i = 0; i < stKvadratovPoVisini; i++) {
- free(vsoteVKvadratih[i]);
- }
- free(vsoteVKvadratih);
- }
- int main() {
- char* imeVhodneDatoteke = malloc((MAKS_IME_DATOTEKE + 1) * sizeof(char));
- char* imeIzhodneDatoteke = malloc((MAKS_IME_DATOTEKE + 1) * sizeof(char));
- int velikostKvadrata; // <n> v navodilih naloge
- scanf("%s%s%d", imeVhodneDatoteke, imeIzhodneDatoteke, &velikostKvadrata);
- char* sivinaVZnak = malloc(256 * sizeof(char));
- int stMejnikov = sizeof(MEJNIKI) / sizeof(int);
- int m = 0;
- for (int s = 255; s >= 0; s--) {
- sivinaVZnak[s] = ZNAKI[m];
- if (m < stMejnikov && s == MEJNIKI[m]) {
- m++;
- }
- }
- FILE* vhod = fopen(imeVhodneDatoteke, "rb");
- FILE* izhod = fopen(imeIzhodneDatoteke, "wt");
- pretvori(vhod, izhod, velikostKvadrata, sivinaVZnak);
- fclose(vhod);
- fclose(izhod);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement