Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Помогите исправить а то я не очень понимаю как записать умножение матриц. Вот то что я сделал.Если что могу всю програму скинуть Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 18:54 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Armagedon4ukВот то что я сделал. StringGrid, как явствует из названия, хранит строки. Чего надо обкуриться чтобы пытаться умножать строку на строку?.. Приводи строки к значениям нужного (перемножательного) типа перед использованием. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 19:00 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, А как это сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 19:44 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Armagedon4ukА как это сделать? С помощью одной из функций StrTo* это обычно делается, но есть и другие способы. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 19:46 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Спасибо это помогло. Но теперь у меня другая проблема. Кажеться он неверно умножает. Посмотрите сами вот скрин и програма. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. [b]Модератор: Вложение удалено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2014, 21:17 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Armagedon4ukНо теперь у меня другая проблема. Кажеться он неверно умножает.Что значит "кажется"? Берешь свои матрицы, перемножаешь их вручную на бумажке и сравниваешь с результатом работы программы. И таким образом узнаешь верно умножает или неверно. И научись делать скриншоты - не нужно публиковать весь свой экран, достаточно маленькой картинки с тем что действительно нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 00:31 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Armagedon4uk, Переименуй свои кнопки. Button1, Button2 и так далее это забавно, но совершенно не понятно. Зачем у тебя в вычислениях три цикла? Вполне хватит двух. Добавь проверку на размерность матриц - не всякие две матрицы можно перемножать. Не забывай делать код "лесенкой" - будет намного удобнее читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 00:36 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Неправильно умножает но только на половину(верхнюю) а вторая половина(нижняя) правильная. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 09:20 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Умножение матриц - это Лаба на 1 курсе. Ею заполонили весь интернет. И даже если-ты не знаешь чё как можно просто скачать сорс, разрбрать его на атомы и потом уже подпилить для себя и своих нужд. http://www.algolib.narod.ru/Math/Matrix.html http://msdn.microsoft.com/ru-ru/library/hh873134.aspx Эх ты, тютя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2014, 10:54 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Собственно проблем с умножением матриц не наблюдал, меня больше интересовала реализация ввода данных. Программа ниже написана для целых чисел, ограничение идёт из-за ввода данных. И то ввод, видимо из-за буферизации не до конца корректно работает если ввести несколько символом, то он запишет нули в следующие элементы матрицы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 04:24 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Спасибо помогло. Теперь считает нормально. Но вознилка новая проблема! Когда программа умножает квадратные матрици все нормально как только матрицы не квадратные выдает ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2014, 18:50 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Судя по скриншоту, первопричина проблемы не в размерности матриц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 03:42 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Тогда в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 09:04 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я решил создать к этому примеру функцию, getmatrix, и предъявил к ней следующие требования. Она принимает: 1. Количество столбцов 2. Количество строк 3. Указатель на функцию, которая будет считывать данные для одного элемента. Моя get_number(выше) не идеальна, возможно я перепишу её или буду пользоваться другими функциями (вероятно уже есть стандартные). Эта функция будет возвращать тип, заранее мне неизвестный. В моём случае int, в другом случае double. Она должна возвращать матрицу (массив n x m). На самом деле я думаю она вернёт указатель на указатель, тут я должен сам разобраться как это сделать. Подскажите пожалуйста как реализовать пункт 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 07:39 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Да, и функция возвращает массив неизвестного типа. Тоже возникают проблемы. Написал так, но это скорее всего ересь Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 08:22 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Передавай в параметрах указатели (или ссылки) на переменные куда сохранить результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 08:39 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryvoid(*get_function)()[/SRC] У функции на которую указывает такой указатель сигнатура такая: Код: plaintext 1. Таким образом она ничего не возвращает - т.е. бесполезна :) Вообще этот пример неудачный для применения типа void. Тут же везде числа. Используйте double. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 15:15 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Спасибо. Код: plaintext 1. 2. 3. 4. Вот так ? Я передаю указатель на первый элемент двухмерного массива, и указатель на функцию через которую я буду записывать значения в каждый элемент массива. Но как мне узнать какая длина одной строки ? Передавать ещё один параметр ? Вот так например, всё окей Код: plaintext 1. 2. 3. 4. Но я хочу чтобы функция принимала любую матрицу. Так нельзя: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 03:58 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Но как мне узнать какая длина одной строки ? Передавать ещё один параметр ? А почему бы и нет ? Или сделай класс "Матрица", эти все параметры будут внутри этого объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 20:33 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Написал вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Но так нельзя, потому что функция не понимает что я передаю двухмерный массив, она возможно думает что я передаю указатель на указатель, и когда я её вызываю Код: plaintext 1. 2. она ругается. И ещё ругается на преобразование, так делать вероятно нельзя. Потому я испрашивал про то как указать функцию с неизвестным типом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 04:04 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Это не работает так как вы хотите. Тут вычисляется размер самого указателя. Размер переданного массива стандартными средствами вычислить нельзя. Вам надо передавать не только число столбцов но и строк, а также адрес первой ячейки в качестве адреса массива. И никаких явных приведений типа не должно быть. Просто типы нужно правильные назначать :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 04:31 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте :) Anatoly Moskovsky, до того что нужно передавать адрес первого элемента и количество столбцов и строк до меня дошло за это время самостоятельно, честно :) Но с функцией не получается. Ругается. Вот функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. А это её вызов Код: plaintext 1. Ниже get_number: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. Она возвращает int, а функция set_matrix принимает функцию возвращающую double. Собственно на это компилятор и ругается при попытке её вызвать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 06:11 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Несколько наблюдений. Ты как-то уж очень причудливо описал цикл for(..). Итерационное выражение i*=10 а проверка идёт по length > 0. Такой код трудно сопровождать и вносить изменения. Уж лучше-бы сделал через while(...). Тогда для двух итерационных выражений появится "смысл" когда они стоят рядом. От -48 скорее всего не уйти никак. Это смещение в кодовой странице. И его нужно вычислить до или после. Или работать со своей виртуальной кодовой страницей где первая десятка совпадает с кодом символов. Иногда цикл улучшается если его перевернуть наоборот. И вообще странно зачем писать свой аналог atoi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 12:51 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury Код: plaintext 1. Пиши '0' будет читабельнее. преобразование строки в число проще делается Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 13:22 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryОна возвращает int, а функция set_matrix принимает функцию возвращающую double. Собственно на это компилятор и ругается при попытке её вызвать Сделай функцию-обертку и давай ее: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 13:26 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Dima T, Зачем обертки? Изначально double возращать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 14:03 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
maytonИ вообще странно зачем писать свой аналог atoi. Тут даже не atoi нужен, а просто scanf и читать сразу в double. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 14:21 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskymaytonИ вообще странно зачем писать свой аналог atoi. Тут даже не atoi нужен, а просто scanf и читать сразу в double. Может лучше atof тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 15:04 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
maytonAnatoly MoskovskyТут даже не atoi нужен, а просто scanf и читать сразу в double. Может лучше atof тогда? Он там читает из stdin. Незачем читать в строку, потом преобразовывать, когда можно сразу в число считать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 15:21 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Всем спасибо :) Dima_T Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Всё-же мне кажется что лучше выделить отдельно проверку первого НЕпробела. Это будет быстрее, и код будет более читабельный. Но то что вы не сохраняете в отдельный буфер символы, очевидное преимущество. Я плохо подумал над алгоритмом. Немного переделал согласно вашему комментарию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. maytonИ вообще странно зачем писать свой аналог atoi. я забыл про эту функцию, и мне было самому интересно реализовать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 06:42 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
С вводом покончено. Сейчас напишу отдельную функцию для произведения матриц, и например для вычисления детерминанта и обратной матрицы. А можно мне хранить все функции эти в структуре например ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 06:44 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Я знаю что с С++ есть классы, и скорее всего для этого они и нужны. А на Си как сгруппировать эти функции ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 07:21 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Делал сейчас умножение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Закомментированная строчка очевидно некорректна, тк неизвестно сколько памяти выделять. Какая сигнатура должна быть у данной функции в рамках языка С ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 07:23 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
А мне так никто не помог. Печально :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 07:35 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Armagedon4uk, чем тебе должен помогать форум С++ ? В твоём коде есть ошибка. С нашей точки зрения она видна как попытка прочитать числовое значение из пустой ячейки. Почему ты лезешь в пустую ячейку - чёрт его знает. Наверное неправильный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 09:58 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗакомментированная строчка очевидно некорректна, тк неизвестно сколько памяти выделять. Какая сигнатура должна быть у данной функции в рамках языка С ? double *res = malloc( sizeof(double) * row1 * col1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2014, 18:06 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Спасибо. Прочитал про неё в стандарте, разобрался в целом. Вот функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 1. Функция void malloc(size_t size) возвращает void, и мне необходимо явное приведение к (double*). Вы в своём примере этого не сделали. Или дело в компиляторе ? 2. Обратите внимание, я делаю вывод на экран внутри функции. Понятно почему, я возвращаю только указатель на начало, нет размерности. Потому я пришёл к выводу: нужно создать структуру Матрица, и возвращать указатель на элемент данной структуры.Это верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 06:13 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
3. При объявлении переменных/массивов(да и вообще любых операций связанных с выделением памяти) скорее всего так-же происходит неявный вызов malloc ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 07:02 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
От объявления зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 07:07 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. Функция void malloc(size_t size) возвращает void, и мне необходимо явное приведение к (double*). Вы в своём примере этого не сделали. Или дело в компиляторе ? надо приводить Код: plaintext 1. и по окончании не забыть освободить память Код: plaintext 1. SashaMercury2. Обратите внимание, я делаю вывод на экран внутри функции. Понятно почему, я возвращаю только указатель на начало, нет размерности. Потому я пришёл к выводу: нужно создать структуру Матрица, и возвращать указатель на элемент данной структуры.Это верно ? Можно отдельно размерность вернуть, но удобнее структуру сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 07:37 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury3. При объявлении переменных/массивов(да и вообще любых операций связанных с выделением памяти) скорее всего так-же происходит неявный вызов malloc ?Нет. Объявление переменных идет либо на стеке (локальные) либо в сегменте данных (глобальные). А память выделяемая через malloc находится на куче. Автоматически на куче ничего не выделяется. Хотя если ты сделаешь функцию типа твоей последней, запихнешь ее в какую-то библиотеку, то можно будет говорить "при вызове этой функции неявно вызывается malloc". На самом деле есть много таких библиотечных функций, у них в документации всегда явно будет упомянуто что функция выделяет память которую потом надо будет вручную освободить. Dima TSashaMercury1. Функция void malloc(size_t size) возвращает void, и мне необходимо явное приведение к (double*). Вы в своём примере этого не сделали. Или дело в компиляторе ? надо приводить Код: plaintext 1. В С приводить не нужно. В С++ нужно. Приведение void* в любой другой ссылочный тип в C идет автоматом (и обратно тоже). Dima Tи по окончании не забыть освободить память Код: plaintext 1. Это не обязательно, зависит от задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.06.2014, 17:59 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
А, вот оно в чём дело. То есть дело в языке. Но если я освобожу память внутри функции, я не смогу по выходу из неё использовать значения полученные внутри функции. При завершении процесса программы вся запрошенная память освободится автоматически ? Сегодня создам структуру, и перепишу всё что сделал ранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 01:40 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПри завершении процесса программы вся запрошенная память освободится автоматически ?"А ты угадай" (ц) бандюган из х/ф "Бедная Саша". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 03:21 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПри завершении процесса программы вся запрошенная память освободится автоматически ? Зависит от платформы. Есть платформы, на которых у всех процессов общая память. Там завершение процесса не всегда освобождает память. К счастью вероятность встретиться с такими платформами стремится к нулю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 03:44 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо если я освобожу память внутри функции, я не смогу по выходу из неё использовать значения полученные внутри функции. Освобождать надо когда память уже не нужна, а где - без разницы. free() получает конкретный адрес, по которому была выделена память, а из какой переменной он взят - без разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 06:56 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
On 10.06.2014 02:40, SashaMercury wrote: > Но если я освобожу память внутри функции, я не смогу по выходу из неё > использовать значения полученные внутри функции. Нет, конечно же нет. При завершении процесса > программы вся запрошенная память освободится автоматически ? Как правило, да. Но надеяться на это нельзя, и стандарты языков (ни С, ни С++) это не гарантируют. Существуют операционные системы, где память по окончании процесса не освобождается автоматически, яркий пример -- MS DOS и её аналоги. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2014, 17:11 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Хочу хранить все элементы матрицы в структуре. Пытался так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Но судя по всему у меня ничего не получилось, проверил вот так: Код: plaintext 1. 2. 3. 4. 5. Можно ли хранить в структуре матрицу так как я хочу? Можно сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. И хранить матрицу в mat. Только я не понял как мне выделить на mat память в размерер double*row*column. Подскажите как решить данную проблему, если это возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2014, 04:46 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Например (если С++), выделять память в конструкторе, параметрами которого будут нужные row и column. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2014, 15:13 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury, в С++ стиле классикой жанра является определение класса Матрицы, перегрузка четырех операций, операции '=' и конструктора копирования. Этим мучают студентов обычно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2014, 15:36 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я ещё не знаю Си. Потому мне рано изучать С++. Нужно решить эту классическую задачу в рамках Си ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2014, 01:32 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Это все равно что сказать - Я ещё не научился ездить на автомобиле. Потому мне рано летать самолетами. Нужно решить эту классическую задачу поездки на Карибы в рамках езды на автомобиле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2014, 02:38 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Ну С так С. Вот схематично как это решается. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. Опционально, функции get/set можно объявить inline чтобы минимизировать оверхед от вызова функции при обращениях к ячейкам, как наиболее частой операции. Но поскольку задача учебная в этой оптимизации нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2014, 03:02 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо :) Меня собственно интересовал вопрос с выделением памяти для массива внутри структуры. Код: plaintext 1. 2. 3. 4. 5. Странно, я думал что если освобождаю память для матрицы, то я освобождаю память для всех связанных с ней элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 03:23 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСтранно, я думал что если освобождаю память для матрицы, то я освобождаю память для всех связанных с ней элементов. Нет. В С такое невозможно. Тут все ручками. В С++ возможно при использовании классов (например контейнеров стандартной библиотеки). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 03:43 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyОпционально, функции get/set можно объявить inline чтобы минимизировать оверхед от вызова функции при обращениях к ячейкам, как наиболее частой операцииАнатолий, а что, в С теперь и inline есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 11:50 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСтранно, я думал что если освобождаю память для матрицы, то я освобождаю память для всех связанных с ней элементов. Здесь, грубо говоря, такой принцип: на каждое выделение памяти, должно быть освобождение. Посмотри в create_matrix - malloc два раза вызывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 11:52 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
egorychАнатолий, а что, в С теперь и inline есть? Начиная с C99 официально. А GCC умел давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 14:17 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyegorychАнатолий, а что, в С теперь и inline есть? Начиная с C99 официально. А GCC умел давно.ясно, спасибо, давно я не писал на чистом С, оказывается )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2014, 15:32 |
|
||
|
Умножение матриц
|
|||
|---|---|---|---|
|
#18+
SashaMercuryAnatoly Moskovsky, спасибо :) Странно, я думал что если освобождаю память для матрицы, то я освобождаю память для всех связанных с ней элементов. В С ? Как бы это супернаивно. В С ничего не делается автоматом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2014, 18:24 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019285]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
88ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 458ms |

| 0 / 0 |
