М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Саша5841
Саша5841
16.04.2023 08:53 •  Информатика

Язык программирования си. С частью задания мне здесь же, но так получилось, что нужна и со 2 частью. Вот такой код мне написать:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
structure bigint
{
char *data;
size_t size;
int neg;
} bigint;
bigint createBigintFromUnsInt(unsigned long int *n)
{
bigint b = {0};
b.neg = 0;
b.size = 0;
b.data = malloc(sizeof(char));
if (*n == 0)
{
b.size = 1;
b.data[0] = 0;
return b;
}
while (*n > 0)
{
b.data = realloc(b.data, ++b.size*sizeof(char));
b.data[b.size - 1] = *n%10; мой
*n / =10;
}
return b;
}
bigint createBigintFromInt(long int *n)
{
bigint b = {0};
if (*n < 0)
{
b = createBigintFromUnsInt((unsigned long int*)n);
b.neg = 1;
}
else
{
b = createBigintFromUnsInt((unsigned long int*)n);
}
return b;
}
bigint createBigintFromBI(bigint *bi)
{
bigint b = {0};
b.neg = bi->neg;
b.size = bi->size;
b.data = malloc(b.size * sizeof(char));
memcpy(b.data, bi->data, b.size * sizeof(char))
return b;
}
bigint createBigintFromChar(char *str)
{
bigint b = {0};
if (str[0]=='-')
{
b.neg = 1;
str++;
}
else
{
b.neg = 0
}
b.size = strlen(str);
b.data = malloc(b.size * sizeof(char));
for (size_t i =0; i < b.size; i++)
{
b.data[i] = str[b.size - 1 - i] - '0';
}
return b;
}
bigint createBigint()
{
bigint b = {0};
b.neg = 0;
b.size = 1;
b.data = malloc(sizeof(char));
b.data[0] = 0;
return b;
}
(если человек, который мне с написанием первой части это видит мне и со 2, это очень важно)

👇
Ответ:
yourname7
yourname7
16.04.2023

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct bigint

{

char *data;

size_t size;

int neg;

} bigint;

bigint createBigintFromUnsInt(unsigned long int *n)

{

bigint b = {0};

b.neg = 0;

b.size = 0;

b.data = malloc(sizeof(char));

if (*n == 0)

{

b.size = 1;

b.data[0] = 0;

return b;

}

while (*n > 0)

{

b.data = realloc(b.data, ++b.size*sizeof(char));

b.data[b.size - 1] = *n%10;

*n /= 10;

}

return b;

}

bigint createBigintFromInt(long int *n)

{

bigint b = {0};

if (*n < 0)

{

b = createBigintFromUnsInt((unsigned long int*)n);

b.neg = 1;

}

else

{

b = createBigintFromUnsInt((unsigned long int*)n);

}

return b;

}

bigint createBigintFromBI(bigint *bi)

{

bigint b = {0};

b.neg = bi->neg;

b.size = bi->size;

b.data = malloc(b.size * sizeof(char));

memcpy(b.data, bi->data, b.size * sizeof(char));

return b;

}

bigint createBigintFromChar(char *str)

{

bigint b = {0};

if (str[0]=='-')

{

b.neg = 1;

str++;

}

else

{

b.neg = 0;

}

b.size = strlen(str);

b.data = malloc(b.size * sizeof(char));

for (size_t i =0; i < b.size; i++)

{

b.data[i] = str[b.size - 1 - i] - '0';

}

return b;

}

bigint createBigint()

{

bigint b = {0};

b.neg = 0;

b.size = 1;

b.data = malloc(sizeof(char));

b.data[0] = 0;

return b;

}

bigint add(const bigint* left, const bigint* right) {

   bigint result = createBigint();

   result.neg = left->neg;

   if (left->neg == right->neg) {

       result.size = max(left->size, right->size) + 1;

       result.data = malloc(result.size * sizeof(char));

       int carry = 0;

       for (size_t i = 0; i < result.size; i++) {

           int left_digit = (i < left->size) ? left->data[i] : 0;

           int right_digit = (i < right->size) ? right->data[i] : 0;

           result.data[i] = (left_digit + right_digit + carry



Конечно, вот пример функции вывода, которую вы можете использовать для печати значений, хранящихся в bigint struct:

void output(const bigint* b) {

   if (b->neg) {

       printf("-");

   }

   for (int i = b->size - 1; i >= 0; i--) {

       printf("%d", b->data[i]);

   }

   printf("\n");

}

Эта функция принимает в качестве аргумента указатель на bigint struct и проверяет поле neg, чтобы узнать, является ли число отрицательным. Если да, то перед цифрами печатается знак минус. Затем он перебирает цифры в поле data, начиная с последней, и печатает каждую цифру. Наконец, она добавляет новую строку к выводу.

Эту функцию можно использовать, например, для вывода результата сложения:

bigint a = createBigintFromInt(5);

bigint b = createBigintFromInt(3);

bigint sum = add(&a, &b);

output(&sum);



Это выведет: "8"



Вот пример функции divide, которую можно использовать для деления двух структур bigint:

bigint divide(const bigint* left, const bigint* right) {

   bigint quotient = createBigint();

   quotient.neg = (left->neg != right->neg);

   bigint dividend = createBigintFromBI(left);

   bigint divisor = createBigintFromBI(right);

   if (divisor.size == 1 && divisor.data[0] == 0) {

     // обрабатывать деление на ноль

   }

   while (compare(&dividend, &divisor) >= 0) {

       bigint tmp = createBigint();

       tmp.size = dividend.size - divisor.size + 1;

       tmp.data = malloc(tmp.size * sizeof(char));

       for (size_t i = 0; i < tmp.size; i++) {

           tmp.data[i] = 0;

       }

       while (compare(&dividend, &divisor) >= 0) {

           dividend = subtract(&dividend, &divisor);

           tmp = add(&tmp, &one);

       }

       quotient = add(&quotient, &tmp);

   }

   return quotient;

}

Эта функция принимает в качестве аргументов два указателя на bigint-структуры и использует функцию createBigintFromBI для создания копий входных структур так, чтобы исходные значения не были изменены.

Затем она инициализирует делитель как bigint struct со значением 0 и полем neg, которое противоположно полю neg левого операнда.

Затем проверяется, равен ли делитель нулю, если да, то функция должна обработать деление на ноль.

Затем она выполняет алгоритм деления, который заключается в многократном вычитании делителя из делимого до тех пор, пока делимое не станет меньше делителя. При каждом вычитании делителя делимое увеличивается на 1.

Для сравнения величин двух bigint используется функция compare, а для вычитания двух bigint - функция subtract.

Функции сравнения и вычитания и один bigint также должны быть реализованы.

Также вы можете использовать функцию output для вывода на печать коэффициента после выполнения деления:

bigint a = createBigintFromInt(5);

bigint b = createBigintFromInt(3);

bigint quotient = divide(&a, &b);

output(&quotient);

Это приведет к выводу: "1"


4,6(32 оценок)
Открыть все ответы
Ответ:
Локи301
Локи301
16.04.2023
Последовательности длиной 7, содержащей 5 букв А могут быть следующими:
** (* - любой из символов В или С)
*А*
ААА*АА*
АА*ААА*
А**
** (пока 6 вариантов)
Далее - аналогично:
**А
ААА*А*А
АА*АА*А
А*ААА*А
**А (ещё 5 вариантов)
ААА**АА
АА*А*АА
А*АА*АА
*ААА*АА (ещё 4 варианта)
АА**ААА
А*А*ААА
*АА*ААА (ещё 3 варианта)
А**
*А* (ещё 2)
** (ещё 1)
Итого: 6+5+4+3+2+1=21
Так как на месте * могут быть любые из 2 символов В или С, то это даст ещё по 4 варианта для каждого случая.
Можно здесь, конечно, комбинаторику вспомнить.
Итого: 21*4 = 84
4,5(15 оценок)
Ответ:
stanstan199
stanstan199
16.04.2023
В позиционной системе каждый разряд стоит на своей позиции.
Например, в 10-ной системе, число 235 означает, что в нем 2 сотни, 3 десятка и 5 единиц.
В 2-ной системе число 10010 означает, что в нем 1 число 2^4 = 16 и
1 число 2^1 = 2. Таким образом, эта запись означает число 16 + 1 = 18.
В непозиционной системе разные единицы могут быть в разных местах, а их значение определяется взаимным расположением.
Самая известная непозиционная система - это римские цифры.
Запись IV означает 5 - 1 = 4, запись VI означает 5 + 1 = 6.
Запись IX означает 10 - 1 = 9, запись XI означает 10 + 1 = 11.
То есть значение значка I означает то +1, то -1, в зависимости от того, стоит он перед или после более старшего значка.
4,6(44 оценок)
Это интересно:
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ