Перейти к содержимому

Как умножать строки в c

  • автор:

Как умножать строки в c

Правило умножения строки на столбец представляет собой естественное обобщение правила скалярного произведения векторов, согласно которому соответствующие координаты векторов перемножаются, а полученные произведения суммируются (с учетом знаков).
Однако — в отличие от трехмерных векторов — число элементов в строке (расположенной слева) может быть любым целым положительным числом, которое должно совпадать с число элементов в столбце (расположенном справа). Это число и определяет количество слагаемых.
Примеры:

.

Формула (1) называется правилом умножения строки на столбец. Если матрица A содержит m строк, а матрица Bn столбцов, то произведениt AB представляет собой m×n матрицу, i,j-ый элемент которой вычисляется по правилу умножения i-ой строки матрицы A на j-ый столбец матрицы B. Например, при умножении двухстроковой матрицы на матрицу-столбец каждая из строк (A1 и A2) матрицы A поочередно умножается на столбец B.

Результатом произведения AB является матрица размера 2×1:

(2)

Операторы умножения в C

Мультипликативные операторы выполняют операции умножения ( * ), деления ( / ) и вычисления остатка ( % ).

Синтаксис

multiplicative-expression : cast-expression multiplicative-expression * cast-expression multiplicative-expression / cast-expression multiplicative-expression % cast-expression

Операнды оператора вычисления остатка ( % ) должны быть целочисленными. Операторы умножения ( * ) и деления ( / ) могут принимать операнды целочисленного типа и операнды с плавающей запятой, при этом допускаются операнды разных типов.

Мультипликативные операторы выполняют обычные арифметические преобразования над операндами. После преобразования тип результата совпадает с типом операндов.

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

Мультипликативные операторы C описаны в следующей таблице:

Оператор Описание
* Оператор умножения выполняет умножение двух операндов.
/ Оператор деления выполняет деление первого операнда на второй. Если два целочисленных операнда разделены, а результат не является целым, он усекается в соответствии со следующими правилами:

— Согласно стандарту ANSI C результат деления на 0 не определен. Во время компиляции или выполнения компилятор Microsoft C выдает ошибку.

— Если оба операнда положительные или не имеют знака, дробная часть результата отбрасывается.

— Если правый операнд равен нулю, результат будет неопределенным.

— Если оба операнда положительные или не имеют знака, результат будет положительным.

Специально для систем Майкрософт

Если при делении один из операндов отрицательный, дробная часть результата отбрасывается.

Если при делении с использованием оператора вычисления остатка один из операндов отрицательный, знак результата совпадает со знаком делимого (первого операнда выражения).

Примеры

Приведенные здесь объявления используются в следующих примерах:

int i = 10, j = 3, n; double x = 2.0, y; 

В следующей инструкции используется оператор умножения.

y = x * i; 

В этом примере x умножается на i и получается значение 20.0. Результат имеет тип double .

n = i / j; 

В этом примере 10 делится на 3. Дробная часть результата отбрасывается и получается целое значение 3.

n = i % j; 

В этой инструкции переменной n присваивается значение целочисленного остатка (1) от деления 10 на 3.

Блок, относящийся только к системам Microsoft

Знак остатка совпадает со знаком делимого. Пример:

50 % -6 = 2 -50 % 6 = -2 

В каждом случае значения 50 и 2 имеют один и тот же знак.

Завершение блока, относящегося только к системам Майкрософт

Как умножать строки в c

Возник вопрос по реализации произведения строк в матрицы.Нужно сформировать вектор b из произведения элементов строк
К примеру матрица
2 3 4 1=2*3*4*1=24
2 2 1 4=2*2*1*4=8
1 1 1 2=1*1*1*2=2

#include #include void main() < int i,j,m,n,c; int a[4][4],b[4]; clrscr(); puts("Введите размерность матрицы:"); scanf("%d%d",&m,&n); printf("Введите элементы матрицы:\n"); for(i=0;iputs("Vector:"); for(i=0;i
sasha14486
Посмотреть профиль
Найти ещё сообщения от sasha14486

Пользователь
Регистрация: 10.10.2010
Сообщений: 24
как то давно такую функцию писал:

//******************************************* int **Function_Umnojenie(int **arr1, int **arr2, int MaxStolb1, int MaxStroka1, int MaxStolb2, int MaxStroka2) < int **arr3; int Result = 0; arr3 = new int *[MaxStolb1]; for(int J=0; J //само умножение for(int stolb=0; stolb < MaxStolb1; stolb++) < for(int stroka = 0; stroka < MaxStroka1; stroka++) < Result = 0; for (int y = 0; y < MaxStroka1; y++) Result += arr1[y][stroka] * arr2[Curent_Stolb][y]; arr3[Curent_Stolb][stroka] = Result; >> return arr3; >

Последний раз редактировалось Exeil; 02.05.2011 в 19:05 .
Пользователь
Регистрация: 09.04.2011
Сообщений: 30

Если Вы используете условие типа «Введите размерность матрицы».
То Ваш вектор произведения необходимо будет задавать динамически, в духе:
int* Vect = (int*) new int[RAZMER]

Пользователь
Регистрация: 13.01.2009
Сообщений: 19

Exeil, сильно не вчитывался, но по-моему вы описали функцию перемножения матриц, а не строк одной матрицы.

То что нужно автору до боли банально

double a[n][n]; double b[n]; int i,j; double pr=1; for (i=0; i

Пользователь
Регистрация: 11.05.2009
Сообщений: 23

double a[n][n]; double b[n]; int i,j; double pr=1; for (i=0; i

Кампилятор что-то ругается на эту строчку b[i]=pr;
Lvalue required

Уже все ок, испривил, вроде работает програма

#include #include void main() < int i,j,m,n; int a[50][50]; int b[50]; double pr=1; clrscr(); puts("Вводим размерность:"); scanf("%d%d",&m,&n); printf("Vvedite a\n"); for(i=0;ifor(i=0;i for(i=0;i

Только програма не всегда правильно работает

Последний раз редактировалось sasha14486; 03.05.2011 в 12:50 .

sasha14486
Посмотреть профиль
Найти ещё сообщения от sasha14486

Как работает умножение строки на целое?

Как эта хрень работает? Тут же буква на число умножается.

str = jSONObject.toString(); int i = 432412; int i2 = 0; int i3 = i2 + 1; i += str.charAt(i2) * i3; 

steemandlinux ★★★★★
15.03.20 00:37:19 MSK

если char совместим с целым, то его код рассматривается как число. и умножается. так видимо просто байт берут. если char там байт.

alysnix ★★★
( 15.03.20 00:40:59 MSK )
Ответ на: комментарий от alysnix 15.03.20 00:40:59 MSK

steemandlinux ★★★★★
( 15.03.20 00:42:19 MSK ) автор топика

обычно в python например такое умножению приводит к созданию новой строки в которой заданное число раз повторяется исходная. Про java не знаю.

Stremitelnyj
( 15.03.20 00:42:21 MSK )

Используется код соответствующей буквы (точней UTF-16 code unit-а).

Legioner ★★★★★
( 15.03.20 00:42:40 MSK )
Ответ на: комментарий от Legioner 15.03.20 00:42:40 MSK

Блин, придется жабу дрочить, чтобы написать аналог 🙁

steemandlinux ★★★★★
( 15.03.20 00:46:03 MSK ) автор топика
Ответ на: комментарий от steemandlinux 15.03.20 00:46:03 MSK

аналог там есть 100%. это стандартная функция для взятия символа из строки по индексу. ищи там в классе строка.

alysnix ★★★
( 15.03.20 01:04:31 MSK )
Ответ на: комментарий от alysnix 15.03.20 01:04:31 MSK

Я еще не знаю как выглядит строковой джейсон в жабке, в гадюке например это словарь с одиночными кавычками и пробелом после двоеточия.

steemandlinux ★★★★★
( 15.03.20 01:18:20 MSK ) автор топика
Ответ на: комментарий от steemandlinux 15.03.20 00:46:03 MSK

А что ты там дрочить собрался?

Тут строка, хз что там у тебя, жсон какой-то видимо.

int i = 432412; int i2 = 0;
int i3 = i2 + 1;

i += str.charAt(i2) * i3;

i = 432412 + str.charAt(0) * 1

Legioner ★★★★★
( 15.03.20 01:18:53 MSK )
Ответ на: комментарий от Legioner 15.03.20 01:18:53 MSK

А как джейсон строкой выглядит?

В питоне например:

>>> i = >>> str(i) "" 

Либо может выглядеть как сырой json в зависимости от того будет выполнен loads или нет.

>>> json.dumps(i) '' 

steemandlinux ★★★★★
( 15.03.20 01:21:10 MSK ) автор топика
Последнее исправление: steemandlinux 15.03.20 01:30:07 MSK (всего исправлений: 3)

Ответ на: комментарий от steemandlinux 15.03.20 01:21:10 MSK

Насчёт пробелов точно не скажу, но выглядит как-то так: . Что такое я не понял, это точно не JSON, в JSON разрешены только двойные кавычки.

Legioner ★★★★★
( 15.03.20 01:44:31 MSK )
Ответ на: комментарий от Legioner 15.03.20 01:44:31 MSK

Второе это json.loads() — json загруженный как словарь. Я хз toString делает словарь или тупо строку, вроде по логике должен строку сделать.

steemandlinux ★★★★★
( 15.03.20 02:20:52 MSK ) автор топика
Последнее исправление: steemandlinux 15.03.20 02:22:21 MSK (всего исправлений: 1)

Ответ на: комментарий от steemandlinux 15.03.20 01:21:10 MSK

в пузане у некоторых обьектов магический метод __str__ один и тот же с __repr__

а в задачу repr входит вот что: eval(repr(obj)) == obj

а т.к. пузану пофигу на формат кавычек для выражений, если соблюдены вложенности. поэтому str выдал двойные снаружи и одиночные внутри. (т.к. двойные чутка предпочтительнее). поэтому пример с созданием словаря заработал.

а жсону не пофиг на виды ковычек

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *