// This is a modified version of the dm that sticks with what // we are allowed to do (no fancy pointer arithmetic) #include #include #include #include #include double fraction(int a, int b) { return (double)a / (double)b; } bool bissextile(int year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); } double evalue(double coef[], int size, double x) { double res = 0; while (size > 0) { size -= 1; res *= x; res += coef[size]; } return res; } int ecartmin(int t[], int size) { int min = abs(t[size - 1] - t[size - 2]); while (size > 2) { size -= 1; int ecart = abs(t[size - 1] - t[size - 2]); if (ecart < min) { min = ecart; } } return min; } // Returns 0 if no integer has been detected int extraire(char str[]) { int i = 0; while ((str[i] != '-' || (str[i + 1] < '0' || str[i + 1] > '9')) && (str[i] < '0' || str[i] > '9')) { if (str[i] == 0) { return 0; } i += 1; } int signe = 1 - (2 * (str[i] == '-')); i += str[i] == '-'; int res = 0; while (str[i] >= '0' && str[i] <= '9') { res *= 10; res += str[i] - '0'; i += 1; } return res * signe; } double sommemajo(double t[], int size) { int signe = 0; double pos = 0.; double neg = 0.; while (size > 0) { size -= 1; double x = t[size]; if (x > 0) { signe += 1; pos += x; } else if (x < 0) { signe -= 1; neg += x; } } return (pos * (signe > 0)) + (neg * (signe < 0)); } // Only works with ASCII int nbdiff(char str[]) { bool chars[126] = {false}; int i = 0; while (str[i]) { chars[str[i] - 1] = true; i += 1; } int count = 0; char c = 1; while (c < 126) { count += chars[c]; c += 1; } return count; } bool palindromeint(int a) { int temp = a; int rev = 0; while (temp) { rev *= 10; rev += temp % 10; temp /= 10; } return a == rev; } // Only works with alphabetical strings bool palindrome2(char str[]) { int size = strlen(str); int i = 0; while (size > 1) { char c1 = str[i]; c1 += ('a' - 'A') * (c1 <= 'Z'); char c2 = str[i + size - 1]; c2 += ('a' - 'A') * (c2 <= 'Z'); if (c1 != c2) { return false; } i += 1; size -= 2; } return true; } int sommeentiers(char str[]) { int count = 0; int i = 0; while (true) { while ((str[i] != '-' || (str[i + 1] < '0' || str[i + 1] > '9')) && (str[i] < '0' || str[i] > '9')) { if (str[i] == 0) { return count; } i += 1; } int signe = 1 - (2 * (str[i] == '-')); i += str[i] == '-'; int res = 0; while (str[i] >= '0' && str[i] <= '9') { res *= 10; res += str[i] - '0'; i += 1; } count += signe * res; } } int main() { printf("-21/50 = %f\n\n", fraction(-21, 50)); printf("2004 %s bissextile\n", bissextile(2004) ? "est" : "n'est pas"); printf("2042 %s bissextile\n", bissextile(2042) ? "est" : "n'est pas"); printf("2077 %s bissextile\n", bissextile(2077) ? "est" : "n'est pas"); printf("2100 %s bissextile\n", bissextile(2100) ? "est" : "n'est pas"); printf("2400 %s bissextile\n\n", bissextile(2400) ? "est" : "n'est pas"); printf("Avec x=-3.716309026, 2.5x² - 2x + 0.04=%f\n\n", evalue((double[3]){0.04, -2., 2.5}, 3, -3.716309026)); printf("equartmin([324, 47, 89, 9]) = %d\n\n", ecartmin((int[4]){324, 47, 89, 9}, 4)); printf("Le premier nombre dans " "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " "est %d\n\n", extraire("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); printf("sommemajo([30.5, -2, -1, 10.5, 0, 1])=%f\n\n", sommemajo((double[6]){30.5, -2., -1., 10.5, 0., 1.}, 6)); printf("\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" a %d " "caractères " "différents\n\n", nbdiff("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); printf("42 %s un palindrome\n", palindromeint(42) ? "est" : "n'est pas"); printf("123454321 %s un palindrome\n\n", palindromeint(123454321) ? "est" : "n'est pas"); printf("\"eiasnteius\" %s un palindrome\n", palindrome2("eiasnteius") ? "est" : "n'est pas"); printf("\"Kayak\" %s un palindrome\n\n", palindrome2("Kayak") ? "est" : "n'est pas"); printf( "La somme des entiers dans " "\"eia42snt-118eius34)jze_([up=%%>]{}\\EBIU,dCLKw*eBPYZJ\" " "est %d\n", sommeentiers("eia42snt-118eius34)jze_([up=%>]{}\\EBIU,dCLKw*eBPYZJ")); }