c

temperatures

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);
}