Piscine C 00
Piscine C 00 ex00 (ft_putchar)
Задание:
• Write a function that displays the character passed as a parameter.
• It will be prototyped as follows : void ft_putchar(char c);
• To display the character, you must use the texttt write function as follows. write(1, &c, 1);
• Напишите функцию, которая отображает символ, переданный в качестве параметра.
• Функция должна быть объявлена следующим образом: void ft_putchar(char c);
• Чтобы отобразить символ, вы должны использовать в ней функцию записи текста в стандартный поток вывода, вот так: write(1, &c, 1);
Скомпилируй файл тест. В нем можно увидеть как работает эта функция вживую.
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex01 (ft_print_alphabet)
Задание:
• Create a function that displays the alphabet in lowercase, on a single line, by ascending order, starting from the letter ’a’. • Here’s how it should be prototyped : void ft_print_alphabet(void);
• Создайте функцию, которая отображает алфавит в нижнем регистре, на одной строке, в порядке возрастания, начиная с символа «а». • Функция должна быть объявлена следующим образом: void ft_print_alphabet(void);
Решение 1
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_alphabet(void) { char letter; letter = 'a'; while (letter <= 'z') { ft_putchar(letter); letter++; } }
Решение 2
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_alphabet(void) { int i; char c; i = 97; while (i <= 122) { c = i; ft_putchar(c); i++; } }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex02 (ft_print_reverse_alphabet)
Задание:
• Create a function that displays the alphabet in lowercase, on a single line, by descending order, starting from the letter ’z’. • Here’s how it should be prototyped : void ft_print_reverse_alphabet(void);
• Создайте функцию, которая отображает алфавит в нижнем регистре на одной строке в порядке убывания, начиная с символа «z». • Функция должна быть объявлена следующим образом: void ft_print_reverse_alphabet(void);
Решение 1
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_reverse_alphabet(void) { char letter; letter = 'z'; while (letter >= 'a') { ft_putchar(letter); letter--; } }
Решение 2
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_reverse_alphabet(void) { int i; char c; i = 122; while (i >= 97) { c = i; ft_putchar(c); i--; } }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex03 (ft_print_numbers)
Задание:
• Create a function that displays all digits, on a single line, by ascending order. • Here’s how it should be prototyped : void ft_print_numbers(void);
• Создайте функцию, которая отображает все цифры на одной строке в порядке возрастания. • Функция должна быть объявлена следующим образом: void ft_print_numbers(void);
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_numbers(void) { char number; number = '0'; while (number <= '9') { ft_putchar(number); number++; } }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex04 (ft_is_negative)
Задание:
• Create a function that displays ’N’ or ’P’ depending on the integer’s sign entered as a parameter. If n is negative, display ’N’. If n is positive or null, display ’P’. • Here’s how it should be prototyped : void ft_is_negative(int n);
• Создайте функцию, которая отображает символы «N» или «P» в зависимости от целочисленного знака, введенного в качестве параметра. Если n отрицательно, выведите символ «N». Если 'n' является положительным или нулевым, выведите символ «P». • Функция должна быть объявлена следующим образом: void ft_is_negative(int n);
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_is_negative(int n) { if (n < 0) ft_putchar('N'); else ft_putchar('P'); }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex05 (ft_print_comb)
Задание:
• Create a function that displays all different combinations of three different digits in ascending order, listed by ascending order - yes, repetition is voluntary. • Here’s the intended output :
gt;./a.out | cat -e
012, 013, 014, 015, 016, 017, 018, 019, 023, ..., 789gt;
• 987 isn’t there because 789 already is. • 999 isn’t there because the digit 9 is present more than once. • Here’s how it should be prototyped
void ft_print_comb(void);
• Создайте функцию, которая отображает все различные комбинации трех разных цифр в порядке возрастания, перечисленных в порядке возрастания - да,повторение является добровольным. • Вот предполагаемый результат:
gt;./a.out | cat -e
012, 013, 014, 015, 016, 017, 018, 019, 023, ..., 789gt;
• 987 не должно быть, потому что 789 уже есть. • 999 тоже, потому что цифра 9 присутствует более одного раза. • Функция должна быть объявлена следующим образом: void ft_print_comb(void);
Решение 1
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_commas(void) { ft_putchar(','); ft_putchar(' '); } void ft_print_comb(void) { int num[3]; num[0] = '0'; while (num[0] <= '9') { num[1] = '0'; while (num[1] <= '9') { num[2] = '0'; while (num[2] <= '9') { if (num[0] < num[1] && num[1] < num[2]) { ft_putchar(num[0]); ft_putchar(num[1]); ft_putchar(num[2]); if(!(num[0] == '7' && num[1] == '8' && num[2] == '9')) ft_commas(); } num[2]++; } num[1]++; } num[0]++; } }
Решение 2
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ad_print_numbers(char c, char d, char u) { ft_putchar(c); ft_putchar(d); ft_putchar(u); } void ad_print_space(void) { ft_putchar(','); ft_putchar(' '); } void ft_print_comb(void) { char c; char d; char u; c = '0'; while (c <= '9') { d = c + 1; while (d <= '9') { u = d + 1; while (u <= '9') { ad_print_numbers(c, d, u); if (!(c == '7' && d == '8' && u == '9')) { ad_print_space(); } u++; } d++; } c++; } }
Решение 3
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_comb(void) { char nbr1; char nbr2; char nbr3; nbr1 = '0' - 1; while (++nbr1 <= '9') { nbr2 = nbr1; while (++nbr2 <= '9') { nbr3 = nbr2; while (++nbr3 <= '9') { if (nbr1 != '0' || nbr2 != '1' || nbr3 != '2') ft_putchar(','); if (nbr1 != '0' || nbr2 != '1' || nbr3 != '2') ft_putchar(' '); ft_putchar(nbr1); ft_putchar(nbr2); ft_putchar(nbr3); } } } }
Решение 4
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_comb(void) { int numbers[3] = {'0', '0', '0'}; while (numbers[0] <= '9') { if ((numbers[0] < numbers[1]) && (numbers[1] < numbers[2])) { ft_putchar(numbers[0]); ft_putchar(numbers[1]); ft_putchar(numbers[2]); if (numbers[0] != '7') ft_putchar(','); if (numbers[0] != '7') ft_putchar(' '); } if (numbers[2]++ >= '9') { numbers[2] = '0'; numbers[1]++; } if (numbers[1] == ':') { numbers[1] = '0'; numbers[0]++; } } }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex06 (ft_print_comb2)
Задание:
• Create a function that displays all different combination of two digits between 00 and 99, listed by ascending order. • Here’s the expected output :
gt;./a.out | cat -e
00 01, 00 02, 00 03, 00 04, 00 05, ..., 00 99, 01 02, ..., 97 99, 98 99gt;
• Here’s how it should be prototyped :
void ft_print_comb2(void);
• Создайте функцию, которая отображает все различные комбинации двух цифр от 00 до 99, перечисленные в порядке возрастания. • Пример вывода:
gt;./a.out | cat -e
00 01, 00 02, 00 03, 00 04, 00 05, ..., 00 99, 01 02, ..., 97 99, 98 99gt;
• Скомпилируй файл тест. В нем можно увидеть как работает эта функция вживую
void ft_print_comb2(void);
Решение 1
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_comb2(void) { int i; int k; i = 0; k = 0; while (i < 100) { k = i + 1; while (k < 100) { ft_putchar(i / 10 + '0'); ft_putchar(i % 10 + '0'); ft_putchar(' '); ft_putchar(k / 10 + '0'); ft_putchar(k % 10 + '0'); if ((i / 10 != 9) || (i % 10 != 8)) { ft_putchar(','); ft_putchar(' '); } k++; } i++; } }
Решение 2
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_print_comb2(void) { int i; int k; i = 0; k = 0; while (i < 100) { k = i + 1; while (k < 100) { ft_putchar(i / 10 + '0'); ft_putchar(i % 10 + '0'); ft_putchar(' '); ft_putchar(k / 10 + '0'); ft_putchar(k % 10 + '0'); if ((i / 10 != 9) || (i % 10 != 8)) { ft_putchar(','); ft_putchar(' '); } k++; } i++; } }
Решение 3
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_makechars(int i) { ft_putchar(i / 10 + 48); ft_putchar(i % 10 + 48); } void ft_putthem(int x, int y) { if (x < 10) { ft_putchar(48); ft_putchar(x + 48); } else ft_makechars(x); ft_putchar(' '); if (y < 10) { ft_putchar(48); ft_putchar(y + 48); } else ft_makechars(y); if (!(x + y == 197)) { ft_putchar(','); ft_putchar(' '); } } void ft_print(int x, int y) { if (x < y) { ft_putthem(x, y); } } void ft_calc_numbers(int x[]) { while (x[0] < 100) { x[1] = 0; while (x[1] < 100) { ft_print(x[0], x[1]); x[1]++; } x[0]++; } } void ft_print_comb2(void) { int x[2]; x[0] = 0; x[1] = 1; ft_calc_numbers(x); }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex07 (ft_putnbr)
Задание:
• Create a function that displays the number entered as a parameter. The function has to be able to display all possible values within an int type variable. • Here’s how it should be prototyped : void ft_putnbr(int nb);
• For example: ft_putnbr(42)
displays "42"
• Создайте функцию, которая отображает число, введенное в качестве параметра. Функция должна иметь возможность отображать все возможные значения в переменной типа int. • Вот как это должно быть объявлено: void ft_putnbr(int nb);
• Например: ft_putnbr(42)
displays "42"
Решение 1
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_putnbr(int nb) { int temp; int size; size = 1; if (nb < 0) { ft_putchar('-'); nb = -nb; } if (nb == -2147483648) { ft_putchar('2'); nb = 147483648; } temp = nb; while ((temp /= 10) > 0) size *= 10; temp = nb; while (size) { ft_putchar((char)((temp / size)) + 48); temp %= size; size /= 10; } }
Решение 2
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_putnbr(int nb) { char c; if (nb < 0) { nb = -nb; ft_putchar('-'); } if (nb < 10) ft_putchar(nb + '0'); else { ft_putnbr(nb / 10); ft_putnbr(nb % 10); } }
Решение 3
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_putnbr(int nb) { if (nb >= 10) { ft_putnbr(nb / 10); ft_putnbr(nb % 10); } else { ft_putchar(nb + '0'); } }
Решение 4
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_printnbr(int x[]) { int i; int b; i = 0; b = 0; while (i < 10) { if (b == 1) { ft_putchar(x[i] + 48); } else { if (x[i] > 0) { b = 1; ft_putchar(x[i] + 48); } } i++; } } void ft_preventoverflow(void) { ft_putchar('-'); ft_putchar('2'); ft_putchar('1'); ft_putchar('4'); ft_putchar('7'); ft_putchar('4'); ft_putchar('8'); ft_putchar('3'); ft_putchar('6'); ft_putchar('4'); ft_putchar('8'); } void ft_fillarray(int x[], int nb) { int t; t = 9; while (t >= 0) { x[t] = nb % 10; nb /= 10; t--; } } void ft_putnbr(int nb) { int x[10]; if (nb == 0) ft_putchar('0'); else { if (nb == -2147483648) ft_preventoverflow(); else { if (nb < 0) { ft_putchar('-'); nb = nb + -2 * nb; } ft_fillarray(x, nb); ft_printnbr(x); } } }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out
Piscine C 00 ex08 (ft_putnbr)
Задание:
• Create a function that displays all different combinations of n numbers by ascending
order.
• n will be so that : 0 < n < 10.
• If n = 2, here’s the expected output :
gt;./a.out | cat -e
01, 02, 03, ..., 09, 12, ..., 79, 89gt;
• Here’s how it should be prototyped : void ft_print_combn(int n);
• Создайте функцию, которая отображает все различные комбинации из 'n' чисел в порядке возрастания. • n должно быть таким таким, чтоб: 0 < n <10 • сли n = 2, результат должен быть таким:
gt;./a.out | cat -e
01, 02, 03, ..., 09, 12, ..., 79, 89gt;
Разрешенные функции: write
• Скомпилируй файл тест : void ft_print_combn(int n);
Решение 1
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } void ft_check_print(int x[], int n) { int i; int yes; i = 0; yes = 1; while (i < n - 1) { if (!(x[i] < x[i + 1])) yes = 0; i++; } if (yes == 1) { i = 0; while (i < n) { ft_putchar(x[i]); i++; } if (x[0] != '9' - n + 1) { ft_putchar(','); ft_putchar(' '); } } } void create_while(int x[], int k, int n) { if (k == n - 1) { x[k] = '0'; while (x[k] <= '9') { if (n == 9 && x[0] > '1') break ; ft_check_print(x, n); x[k]++; } } else { x[k] = '0'; while (x[k] <= '9') { create_while(x, k + 1, n); x[k]++; } } } void ft_print_combn(int n) { int x[n]; create_while(x, 0, n); }
Решение 2
#include <unistd.h> void ft_putchar(char c) { write(1, &c, 1); } static void ft_me_cago_en_norminette(int *arr, int col, int n) { int i; while (col) { while (arr[col] == (9 + col - (n - 1)) && col >= 0) col -= 1; if (col < 0) break ; arr[col] += 1; i = (col + 1) - 1; while (i++ < n) arr[i] = arr[i - 1] + 1; col = n - 1; ft_putchar(','); ft_putchar(' '); i = 0; while (i < n) ft_putchar(arr[i++] + '0'); } } void ft_print_combn(int n) { int arr[n]; int i; int col; col = n - 1; i = -1; if (n <= 10) { while (i++ < n) arr[i] = i; i = 0; while (i < n) ft_putchar(arr[i++] + '0'); ft_me_cago_en_norminette(arr, col, n); ft_putchar('\n'); } }
Объяснения + проверка int main
Команда для компиляции и одновременного запуска:
gcc -Wall -Werror -Wextra названиефайла.c && chmod +x ./a.out && ./a.out