problem sayfasi
// temperatures // yasin tasan - may 2018 #include <stdlib.h> #include <stdio.h> #include <string.h> void print_temperatures(int sicaklik[], int n); void sifirdan_farklari_bul(int std_sapma[],int sicaklik[], int eksi_ptr[], int n); void eksi_ptr_leri_ekrana_bas(int n, int eksi_ptr[]); void sifirdan_farklari_ekrana_bas(int n, int std_sapma[]); int std_sapma_min_bul(int n, int std_sapma[]); int std_sapma_min_index_bul(int n, int min, int std_sapma[]); _Bool birbirinin_tersi_var_mi(int n, int sicaklik[]); int gerekenleri_tersle(_Bool flag, int min, int sicaklik[], int min_index); void sonucu_yazdir(int min); int main() { int n; // the number of temperatures to analyse scanf("%d", &n); fprintf(stderr, "n = %d\n",n); int *sicaklik; sicaklik = (int *)calloc(n, sizeof(int)); int *std_sapma; std_sapma = (int *)calloc(n, sizeof(int)); int *eksi_ptr; eksi_ptr= (int *)calloc(n, sizeof(int)); for (int i = 0; i < n; i++) { int t; // a temperature expressed as an integer ranging from -273 to 5526 scanf("%d", &t); sicaklik[i] = t; eksi_ptr[i] = 0; } print_temperatures(sicaklik,n); fprintf(stderr, "---\n"); sifirdan_farklari_bul(std_sapma, sicaklik, eksi_ptr, n); eksi_ptr_leri_ekrana_bas(n, eksi_ptr); fprintf(stderr, "---\n"); sifirdan_farklari_ekrana_bas(n, std_sapma); int min = std_sapma_min_bul(n, std_sapma); int min_index = std_sapma_min_index_bul(n, min, std_sapma); fprintf(stderr, "---\n"); _Bool flag = birbirinin_tersi_var_mi(n, sicaklik); fprintf(stderr, "---\n"); min = gerekenleri_tersle(flag, min, sicaklik, min_index); sonucu_yazdir(min); return 0; } void print_temperatures(int sicaklik[], int n) { for(int i=0; i< n; i++) fprintf(stderr, "sicaklik[%d] = %d\n",i,sicaklik[i]); } void sifirdan_farklari_bul(int std_sapma[],int sicaklik[], int eksi_ptr[], int n) { for (int i=0; i < n; i++) { if(sicaklik[i] > 0) { std_sapma[i] = sicaklik[i]; eksi_ptr[i] = 0; } else { std_sapma[i] = -sicaklik[i]; eksi_ptr[i] = 1; } } } void eksi_ptr_leri_ekrana_bas(int n, int eksi_ptr[]) { for (int i=0; i < n; i++) { fprintf(stderr, "eksi_ptr[%d] = %d\n",i,eksi_ptr[i]); } } void sifirdan_farklari_ekrana_bas(int n, int std_sapma[]) { for(int i=0; i< n; i++) fprintf(stderr, "std_sapma[%d] = %d\n",i,std_sapma[i]); } int std_sapma_min_bul(int n, int std_sapma[]) { int min = std_sapma[0]; for (int i=0; i < n; i++) { if( std_sapma[i] < min) { min = std_sapma[i]; } } fprintf(stderr, "min = %d\n",min); return min; } int std_sapma_min_index_bul(int n, int min, int std_sapma[]) { int min_index; for(int i=0; i<n ; i++) { if(min == std_sapma[i]) { min_index = i; } } fprintf(stderr, "min_index = %d\n",min_index); return min_index; } _Bool birbirinin_tersi_var_mi(int n, int sicaklik[]) { _Bool flag = 0; for(int i=0; i<n; i++) { for(int j=0; j<i; j++) { if(sicaklik[i] == -sicaklik[j]) { flag = 1; } } } if(flag == 1) fprintf(stderr, "ters var\n"); else fprintf(stderr, "ters yok\n"); return flag; } int gerekenleri_tersle(_Bool flag, int min, int sicaklik[], int min_index) { if(flag == 1 && min<0) { min = -min; fprintf(stderr, "birinci\n"); } if(flag==0 && min>0 && sicaklik[min_index] <0) { min = -min; fprintf(stderr, "ikinci\n"); } return min; } void sonucu_yazdir(int min) { printf("%d\n",min); } »