Форум программистов, компьютерный форум CyberForum.ru

конверт формулы на С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
08.10.2010, 05:41     конверт формулы на С++ #1
Привет всем

Помогите решить как правильно переложить такую задачу на С++. Запутался с п 2, 3 и 4. А точнее с вложенными циклами.

конверт формулы на С++

Заранее спасибо за полезные комментарии
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2010, 05:41     конверт формулы на С++
Посмотрите здесь:

C++ Формулы
C++ конверт кода
C++ Конверт Pascal в C++
Формулы C++
Написание формулы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
08.10.2010, 23:24  [ТС]     конверт формулы на С++ #2
Хоть идею подкиньте по п. 2 плз
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
08.10.2010, 23:53     конверт формулы на С++ #3
Цитата Сообщение от Читатель Посмотреть сообщение
Запутался с п 2, 3 и 4. А точнее с вложенными циклами.
Покажите, что сделали и с чем конкретно запутались.
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
09.10.2010, 00:04  [ТС]     конверт формулы на С++ #4
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
Покажите, что сделали и с чем конкретно запутались.
По п. 2 я сделал уже очень много всего, но не уверен, что это много - правильный подход...

Если представить, что матрица 5 на 5, то...
Код
for(int j=0; j<5; j++)
{
for(int i=0; i<5; i++)
{

s+=//тут запутался...

if(s<=I[j]){H[i][j]=0;}
}
}
Не пойму как правильно модифицировать H? Для каждого элемента по очереди считать сумму соответствующего столбца? То есть что должно на каждой итерации происходить с самой матрицей H?
Помогите плз
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
09.10.2010, 00:47     конверт формулы на С++ #5
Если я правильно понял 2-е задание, то нужно, чтобы сумма элементов по j-му столбцу была меньше или равна j-му элементу вектора I.
Можно делать так: заполнять матрицу размерами N-1 X M случайными числами. А каждый элемент N-1 строки вычислять как i-й элемент вектора I минус сумма элементов i-го столбца. Так сумма элементов i-го столбца будет в точности равна i-му элементу вектра I.
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
09.10.2010, 02:19  [ТС]     конверт формулы на С++ #6
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
Если я правильно понял 2-е задание, то нужно, чтобы сумма элементов по j-му столбцу была меньше или равна j-му элементу вектора I.
Можно делать так: заполнять матрицу размерами N-1 X M случайными числами. А каждый элемент N-1 строки вычислять как i-й элемент вектора I минус сумма элементов i-го столбца. Так сумма элементов i-го столбца будет в точности равна i-му элементу вектра I.
Дело в том, что массив до этого получает заполнение см п 1.
Но в п. 2 нужно его модифицировать...
Проблема в том, что я не пойму за время работы такого анализа в идеале может измениться только первый левый столбец или нужно как-то сделать так, чтобы модификация по данному условию могла коснуться каждого элемента массива H до i=4 и j=4?

Если я правильно понял 2-е задание, то нужно, чтобы сумма элементов по j-му столбцу была меньше или равна j-му элементу вектора I.
Вот этого я и не пойму ведь в массиве например 5 на 5 находится 25 элементов, а не только 5 В таком режиме можно под условие подставить только первый столбец? То есть если проиграть условие, то через него в идеале можно приравнять к нулю только один первый столбец матрицы или как? Или нужно как-то на п. 2 по всем столбцам пройтись - вот что меня путает...
Помогите понять плз

Добавлено через 16 минут
Тут получается, что нужно и по H[i][j] двигаться по i++ и сумму столбцов считать по j++
Помогите понять логику движения во втором цикле для правильного заполнения каждого элемента H[i][j]
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
09.10.2010, 02:21     конверт формулы на С++ #7
Матрица может быть не любой размерности, надо, чтобы количество столбцов совпадало с количеством элементов в векторе I.
Матрица должна иметь 3 столбца. Сумму надо считать по строкам в каждом отдельном столбце, т.е. сумма элементов 1-го столбца должна быть равна 1-му элементу вектора I, второго столбца 2-му, 3-го 3-му.
Если матрица H уже сгенерирована, то можно менять элементы только строки N-1 (N - количество строк матрицы).
Например, матрица 3 х 3. В 1-м столбце стоят числа {1, 2, 3}. Нам надо, чтобы их сумма была равна 1,2. Значит, можно изменить только 3-й элемент, т.е. он будет равен 1,2 - (1 + 2). Т.е. 3-й элемент 1-го столбца будет равен -1,8. Проверяем сумму: 1 + 2 - 1,8 = 1,2. Он равен 1-му элементу вектора I и т.д. для остальных столбцов.

Надеюсь, я правильно понял задание.

Добавлено через 2 минуты
Цитата Сообщение от Читатель Посмотреть сообщение
Тут получается, что нужно и по H[i][j] двигаться по i++ и сумму столбцов считать по j++
Сумму надо считать по i.
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
09.10.2010, 04:41  [ТС]     конверт формулы на С++ #8
Нет подгонять не нужно... Длина I вектора задается произвольно и равна длине G по х
то есть все упирается в размеры G, а она может быть любой - вот в чем проблема...

Дальше...

К моменту начала п. 2 массив Н предполагается, что содержит значения (получает на п. 1).

Попробую проиллюстрировать...

Вот например заполненная матрица Н (классическая матем запись)
{1,2,3}
{4,5,6}
{7,8,9}
Вот заполненный вектор I
{10,20,30}

Как будет меняться H после прогона через п. 2?
j=0

{1,2,3}
{0,5,6}
{0,8,9}

j=1

{1,0,3}
{0,0,6}
{0,0,9}

итд или как?

Добавлено через 6 минут
P.S. j в том значении как в моем коде.

Добавлено через 1 час 40 минут
Если матрица H уже сгенерирована, то можно менять элементы только строки N-1 (N - количество строк матрицы).
Например, матрица 3 х 3. В 1-м столбце стоят числа {1, 2, 3}. Нам надо, чтобы их сумма была равна 1,2. Значит, можно изменить только 3-й элемент, т.е. он будет равен 1,2 - (1 + 2). Т.е. 3-й элемент 1-го столбца будет равен -1,8. Проверяем сумму: 1 + 2 - 1,8 = 1,2. Он равен 1-му элементу вектора I и т.д. для остальных столбцов.
Это в смысле вот так?

до

Н
{1,2,3}
{4,5,6}
{7,8,9}
I
{10,20,30}

после
H
{1,2,3}
{0,5,6}
{0,8,9}

?

Добавлено через 16 минут
P.S. и в смысле дальше не пойдет если пропустить массив через п 2? На 1 элемент H анализировать 1 столбец и если столбцы заканчиваются, то уже не двигаться дальше?
А что если столбец окажется длиннее строки? Тогда как быть?

H
{1,2,3}
{4,5,6}
{7,8,9}
{2,8,0}
I
{10,20,30}

?
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
09.10.2010, 09:47     конверт формулы на С++ #9
1-й индекс матрицы номер строки, второй столбца. Например, H[5][6] 4-я строка 5-й столбец (т.к. нумерация элементов массиврв в C++ начинается с 0). Я вам приводил пример, где {1, 2, 3} столбец.
Я понимаю задание так: если есть матрица H {1, 4, 5}{2, 7, 0}{3, 0, 0}, то после обработки она будет выглядеть так: {1, 4, 5}{2, 7, 0}{-1.8, -10.4, -4.9}, чтобы сумма в столбце (а не в строке) j была равна j-му элементу в векторе I из примера.

Добавлено через 2 минуты
Цитата Сообщение от Читатель Посмотреть сообщение
А что если столбец окажется длиннее строки? Тогда как быть?
H
{1,2,3}
{4,5,6}
{7,8,9}
{2,8,0}
I
{10,20,30}
Главное, чтобы количество столбцов было равно количеству элементов вектора I. В вашем примере в матрице H 3 столбца, 4 строки. В векторе I 3 элемента, значит решить можно. А сумму в j-м столбце нужно считать по 4-м элементам, т.е. 1 + 4 + 7 + 2 и т.д.
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
09.10.2010, 10:00  [ТС]     конверт формулы на С++ #10
Спасибо - я понимаю, но для наглядности я просто сделал движение как в классической матрице если представить, что она записана так
1,2,3
4,5,6
7,8,9

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

Если например Н 7 на 9...

чтобы сумма в столбце (а не в строке) j была равна j-му элементу в векторе I из примера.
Нет, точнее сказать не "Чтобы равна", а "если равна". То есть на п. 2 Н может вообще не измениться если условие не совпадет.
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
09.10.2010, 10:23     конверт формулы на С++ #11
Во второй задаче про матицу G ничего не сказано. Там только есть условие, чтобы сумма по i (т.е. по строкам) была меньше или равна i-му элементу вектора I.
Во 2-м задании сказано, что 1<= j <= B.

Цитата Сообщение от Читатель Посмотреть сообщение
А на самом деле сторону у G могут быть любой длины соответственно и стороны у H тоже любой
А если в матрице H 4 солбца, а в векторе I 3 элемента, то с чем сравнивать сумму 4-го столбца?

Покажите, что вы сделали в 1-м задании.
Читатель
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 10
10.10.2010, 04:57  [ТС]     конверт формулы на С++ #12
главное как-то правильно проставить нули если условие п 2 совпадет, но я не совсем понял точно как их проставлять
j:
i:1, 2, 3
4, 5, 6
7, 8, 9

I {10,20,30}

п. 2

1, 2, 3
0, 5, 6
0, 8, 9

или сумму можно проигрывать для каждого H[i][j]?

P.S главное условие - это G = H (по масштабу в смысле)

Добавлено через 4 минуты
Вот более полная картина

http://www.freeimagehosting.net/uploads/80e4e8130e.gif

п 2 и 3 мне не понятны относительно того, что должно происходить с Н в процессе между получением сумм?

Добавлено через 14 минут
Я так полагаю, что может нужно 4 цикла
Просто если смотреть не предвзято, то может быть у H[i][j]=0 совсем отдельный индекс предполагается, чем тот с которым работает подсчет суммы?

Добавлено через 5 минут
я просто хочу понять правильно ли я понял....

Представим Н 7 на 5

Код
for(int j=0; j<5; j++)
{
for(int i=0; i<7; i++)
{
for(int k=j; k<(j+1); k++)
{
for(int l=0; l<7; l++)
{
s+=H[l][k];
}
}
if(s<=L[j]){H[i][j]=0; }
s=0;
}
}
Вот уже до чего мысли дошли
Помогите

Добавлено через 1 минуту
я просто хочу понять правильно ли я понял....

Представим Н 7 на 5

Код
for(int j=0; j<5; j++)
{
for(int i=0; i<7; i++)
{
for(int k=j; k<(j+1); k++)
{
for(int l=0; l<7; l++)
{
s+=H[l][k];
}
}
if(s<=L[j]){H[i][j]=0; }
s=0;
}
}
Вот уже до чего мысли дошли
Помогите

Добавлено через 7 часов 53 минуты
То есть вы считаете, что индексы должны быть привязаны? А что если у H[i][j]=0 свой индекс прохождения, а подсчет сумм свой? Ведь п. 2 говорит, что нужно двигаться сверху вниз по столбцам, но при этом H[i][j] застывает, чтобы получить или не получить значение 0 ?

Добавлено через 10 часов 4 минуты
Неужели это сверх сложно?

Дело в том, что H[i][j]=0 если п. 1, п. 2, итп

H
1, 2, 3
4, 5, 6
7, 8, 9
0, 1, 5
L
10, 20, 30

Ну хорошо представим, что мы взяли один первый элемент H [0][0] и начали подсчет суммы, тогда что происходит дальше?
Затем взяли последний элемент столбца H[3][0] , что получается нужно перескакивать опять на L[0][0] строка ведь закончилась?

Помогите понять?
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
15.10.2010, 22:17     конверт формулы на С++ #13
Допустим, матрица H = {1, 2, 3}{4, 5 , 6}{7, 8, 9}{10, 11, 12}, L = {10, 20, 30}
Рассмотрим на примере 1-го столбца (остальные аналогично).
Идём по первому столбцу до n-1 строки.
1 + 4 + 7 = 12. Т. к. это был первый столбец, смотрим первый элемент вектора L. Он равен 10. В качестве n-го элемента первой строки записываем 10 - 12 = -2. Теперь сумма элементов первого столбца равна первому элементу вектора L.
Здесь достаточно двойного цикла, т.е. один по столбцам, второй по строкам.
guest001
0 / 0 / 0
Регистрация: 18.03.2009
Сообщений: 4
15.10.2010, 23:04     конверт формулы на С++ #14
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
Допустим, матрица H = {1, 2, 3}{4, 5 , 6}{7, 8, 9}{10, 11, 12}, L = {10, 20, 30}
Рассмотрим на примере 1-го столбца (остальные аналогично).
Идём по первому столбцу до n-1 строки.
1 + 4 + 7 = 12. Т. к. это был первый столбец, смотрим первый элемент вектора L. Он равен 10. В качестве n-го элемента первой строки записываем 10 - 12 = -2. Теперь сумма элементов первого столбца равна первому элементу вектора L.
Здесь достаточно двойного цикла, т.е. один по столбцам, второй по строкам.
Вроде так, но почему нужно выполнять эту выражение 10 - 12 = -2?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2010, 02:59     конверт формулы на С++
Еще ссылки по теме:

Запись формулы C++
Конверт из Pascal в С++. Попробуйте перевести (хотя бы частями) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.10.2010, 02:59     конверт формулы на С++ #15
Тогда будут выполнятся условие из пункта 2.
Yandex
Объявления
16.10.2010, 02:59     конверт формулы на С++
Ответ Создать тему
Опции темы

Текущее время: 21:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru