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