====== Plus code ====== [[nsi:tds:divers:plus_code|Fiche du problème]] #include #include #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; }