М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Саша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 оценок)
Открыть все ответы
Ответ:
Mary200001313
Mary200001313
16.04.2023
Const nx=30;var i,j,p,n:integer;A:array[1..nx,1..nx] of integer;d,Sn,min:real;begin p:=1;write('Введите размер матрицы');Read(n);for i:=1 to n do beginfor j:=1 to n do beginA[i,j]:=random(3)-2;write(A[i,j]:4);end;writeln;end;writeln;writeln;for i:=1 to n do beginfor j:=1 to n do beginif i = j then begin if A[i,j]<> 0 then p:=p* A[i,j];write(A[i,j]:4);endelse write(' ':4);end;writeln;end;write('p =',p);writeln;writeln;for i:=1 to n do beginfor j:=1 to n do beginif (i= n -j +1) then begin if A[i,j]<> 0 then p:=p* A[i,j];write(A[i,j]:4);endelse write(' ':4);end;writeln;end;write('p =',p);end.
4,7(49 оценок)
Ответ:
Кирилл42352
Кирилл42352
16.04.2023
Const n = 5;
  m = 5;
var a:array[1..n,1..m] of integer;
i,j,s:integer;
begin
//Для теста заполним массив сл.числами
  for i:=1 to n do begin
    for j:=1 to m do begin
      a[i,j]:=random(21)-10; write(a[i,j]:4);
    end;
    writeln;writeln;
  end;
  //сумма всех элементов массива
  for i:=1 to n do
    for j:=1 to m do s:=s+a[i,j];
writeln('сумма всех элементов массива: ',s);
//сумма каждой строки
for i:=1 to n do begin
    s:=0;
    for j:=1 to m do begin
      s:=s+a[i,j];
    end;
    writeln ('Строка: ',i,' сумма:',s);
  end;   
end.
4,7(75 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
Полный доступ к MOGZ
Живи умнее Безлимитный доступ к MOGZ Оформи подписку
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ