Plus code

Fiche du problème

#include <stdio.h>
#include <stdlib.h>

#define N 5

const char *SYMBOLES = "23456789CFGHJMPQRVWX";

void set_doublet(float latitude, float longitude, char* code, int rang, float angle){
    /*
    latitude, longitude: position
    code: chaine contenant le code plus
    rang: position du doublet
    angle: angle correspondant au rang en cours
    */
    int i = int((latitude + 90) / angle) % 20;
    int j = int((longitude + 180) / angle) % 20;
    code[2*rang] = SYMBOLES[i];
    code[2*rang+1] = SYMBOLES[j];
}

void plus_code(float latitude, float longitude, char*code){
    code[2*N] = '\0';
    float angle = 20;
    for (int rang = 0; rang < N; rang++){
        set_doublet(latitude, longitude, code, rang, angle);
        angle = angle / 20;
    }
}

int main(int argc, char *argv[]) {
    // exemple de Paris
    // latitude = 48.866669
    // longitude = 2.33333
    if (argc != 3) {
        printf("Vous devez préciser latitude et longitude en argument.\nExemple : %s 48.866669 2.33333\n", argv[0]);
        return 1;
    }
    float latitude = atof(argv[1]);
    float longitude = atof(argv[2]);
    char code[2*N+1];
    plus_code(latitude, longitude, code);
    printf("Pour (latitude = %f, longitude = %f) le plus code est %s.\n", latitude, longitude, code);
    return 0;
}