|
|
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Добрый день! Требуется в одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) второй (по величине) минимальный положительный нечетный элемент и его позицию. На первом проходе определяю минимальный элемент, а на втором уже определяю второй минимальный элемент и его позицию в массиве. Так вот, в первом проходе минимальный элемент нормально находится. А вот во втором значения переменным, содержащим информацию о самом элементе и его позиции, не присваиваются. Не посмотрите, в чем ошибка? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 22:59 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Одну минуту, что-то скриншот с текстом программы не прикрепляется, сейчас так набью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:00 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Одну строчку исправил Код: sql 1. Там переменная не на том месте стояла. Но это ничего не дало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:17 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Второй проход, он такой же как и первый, только пропуская найденный минимальный элемент. А в коде, есть разница: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:21 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
черт, не то подчеркнул :) нижняя красная линия слева, на одну строку выше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:23 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
alexander4321 Код: sql 1. а вот это зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:24 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
А это неопределенность в условии со словом "нечётный". ТС считает, что именно значение элемента должно быть нечётным. Да, и ещё я не обнаружил проверку на "положительность". Впрочем, по сравнению с исходным нарушением постановки задачи "n вещественных элементов" <-> array of integer - вышеперечисленное выглядит семечками... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:29 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
S.G., там в задании было сказано, что нужно вычислить "второй (по величине) минимальный положительный нечетный элемент и его позицию". Нечетный определяю Код: sql 1. , а т. к. нужен положительный, то оставляю просто Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:32 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
S.G., Код я исправил Код: sql 1. Но результат остался тем же. А как можно пропустить найденный в первом проходе минимальный элемент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:37 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
AndreTMА это неопределенность в условии со словом "нечётный". ТС считает, что именно значение элемента должно быть нечётным. Да, и ещё я не обнаружил проверку на "положительность". Впрочем, по сравнению с исходным нарушением постановки задачи "n вещественных элементов" <-> array of integer - вышеперечисленное выглядит семечками... Уже вижу, что не туда пошел, в том числе и с проверкой на положительность. Можете сказать, как во втором проходе пропустить найденный в первом проходе минимальный элемент? Сейчас буду все переписывать. По поводу нечетного элемента... Не буду себе даже голову забивать, буду проверять на нечетность значение элемента. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:42 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Во-первых, поскольку вам надо определить второй элемент по некоторому условию, то и первый элемент должен определяться сначала по тому же условию. То есть не просто минимальный, а первый минимальный положительный нечетный . Во-вторых, если вы не хотите выносить поиск по массиву в отдельную процедуру (это я по поводу пропуска предыдущего элемента) - то при втором поиске в основное условие добавляется ещё и сравнение индексов (с первым найденным). В-третьих, такая операция называется ранжированием. И я бы вам посоветовал сделать проще - сначала отсортировать массив... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2013, 23:53 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Поскольку понятие "четное число" применимо только к целым числам, то видимо в задании имелось в виду, что четным должно быть не само число, а его номер в массиве. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2013, 09:27 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
AndreTM И я бы вам посоветовал сделать проще - сначала отсортировать массив... Прикладываю скриншот сортировки массива. Согласен с MasterZiv, что за нечетный элемент правильно будет взять не само значение, а его номер в массиве. Тогда в отсортированном массиве нужно будет проверить элементы с нечетными порядковыми номерами (пропустив первый нечетный) до тех пор, пока не будет выполнено, что он больше нуля. Кстати, во всех примерах кода Паскаль пишут Код: sql 1. . Я до этого читал, что порядковые номера элементов в массивах начинаются с нуля, а не с единицы. Не подскажете, как начинать считать элементы? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 00:07 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Когда вы делаете сортировку - вы перемещаете элементы в массиве на другие позиции... и что тогда считать "нечетной позицией" - нечетный номер в отсортированном массиве? нечетный номер исходной позиции?.. Так что не всё в порядке в королевстве датском Если все же подойти строго, то алгоритм должен быть примерно таким: - завести одномерный массив Arr: array [1..n] of real, заполнить его исходными данными - завести одномерный массив с исходными номерами элементов ArrPos: array [1..n] of integer, заполнить его числами от 1 до N - отсортировать данные в Arr[] по возрастанию, одновременно изменяя данные в массиве позиций ArrPos[] - найти нужный элемент по условию: -- двигаясь по Arr[] слева направо, находим первый положительный элемент, такой, что его номер в ArrPos[] нечетный -- двигаясь дальше направо от найденного элемента в Arr[], находим такой элемент, что его номер в ArrPos[] тоже нечетный Найденное значение и будет нужным нам... Кстати, имеется много возможностей по оптимизации алгоритма, но всё зависит от исходных ограничений - на память, на быстродействие и т.п. Например, для "непосредственной работы" можно использовать массив структур; или список; можно условие наложить сразу - отобрать в отдельный массив только положительные значения с нечётных позиций исходного массива, и отсортировать уже его, получив ответ сразу; можно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 03:04 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Я понимаю, когда со студенческими задачами испытывают проблемы студенты, но куда более странно, когда отвечающие. AndreTMЕсли все же подойти строго, то алгоритм должен быть примерно таким: - завести одномерный массив Arr: array [1..n] of real, заполнить его исходными данными - завести одномерный массив с исходными номерами элементов ArrPos: array [1..n] of integer, заполнить его числами от 1 до N А если хоть чуть-чуть применить голову, то - не заводить никаких массивов - игнорировать каждое второе введённое число - в цикле ввода чисел заодно и определить искомый результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 09:11 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Спасибо за схему сортировки. Честно говоря, чтобы выполнить все правильно, у меня уйдет слишком много времени (пока каждую процедуру поймешь, как писать). Так как в задании все равно есть неопределенность, то этим и воспользуюсь: буду искать нечетное значение элемента больше нуля. К выложенному выше скриншоту программы дописал код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. downto использую потому, что предполагаю, что при таком переборе массива, программа остановится на последнем найденном элементе. В данном случае самом левом. Но при нажатии Alt+ F9 выдает, что "Operate types do not match operator". Прилагаю скриншот. Причем, когда комментирую приведенный выше код, то ошибок не выдает. Не подскажете, что не так с mod 2<> 0??? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 09:20 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
alexander4321, Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 09:45 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Олдфагalexander4321, Код: pascal 1. А можно целиком всю строку написать? У меня все равно выдает сообщение, что оператор не подходит операции. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 10:04 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
alexander4321А можно целиком всю строку написать? У меня все равно выдает сообщение, что оператор не подходит операции. код целиком выложи, пока время есть посмотрю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 10:12 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Код: sql 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. Вижу свою ошибку, что второй мин элемент будет равен просто минимальному (нужно будет сделать проверку, что позиции в массиве этих двух элементов не равны). Но до этого не могу еще добраться из-за ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 11:12 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
alexander4321, дарю. П.С. Написано в блокноте, не проверял. Копировать не обязательно, а вот идеи можете почерпнуть. Обратите внимание, что существует традиционная проблема со сравнением вещественных чисел на равенство, а также постановка задачи дырява в плане "что делать, если в массиве несколько одинаковых чисел", ну и нигде не специфицировано, индексируется ли массив с нуля или с единицы. Если препод умный, эти моменты стоит выделить в ответе - тот оценит вдумчивость к постановке. Если глупый, то обидится. Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 11:35 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
alexander4321Вижу свою ошибку Ошибок дохрена. Логику не смотрел вообще, довел до стадии успешной компиляцЫи и запуска. Тип элементов массива сменил на Integer. Код: pascal 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 11:40 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
Нарыл на диске прогу от 2010 года. За каким хреном писал - не помню. Сам проект. TestApp Код: pascal 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. Используемые модули. Конечно, можно было запихать все в один проект, но зачем-то разнес все по юнитам. То ли с dll хотел замутить, то ли еще чо-то, не помню уже :) uPoints Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. uMetricProcs Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. uMetricLessProcs Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. uSorting Код: pascal 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. До TJ7 не дотягивает, конечно, но что уж есть. Разбирайся, вопчем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 12:21 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
softwarer, спасибо за код! Вечером дома посмотрю. Там в конце кода на else выдает Error in statement. Попробую поэкспериментировать, может какими-нибудь другими способами выведу сообщения. Олдфаг, спасибо за помощь! Тоже вечерком посижу, покопаюсь. Один вопрос по исправленному тобой моему коду: код компилируется, но в процессе выполнения программы выводятся результаты только по сортировке массива. Не выводится сообщение о втором минимальном элементе. Более того, программа зависает на черном окне, т. е. не могу выйти из черного окна опять к коду программы. Приходится закрывать и по новой открывать. Не сталкивался, чем это может быть вызвано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 12:38 |
|
||
|
Pascal: обработка массива
|
|||
|---|---|---|---|
|
#18+
alexander4321softwarer, спасибо за код! Вечером дома посмотрю. Там в конце кода на else выдает Error in statement. Попробую поэкспериментировать, может какими-нибудь другими способами выведу сообщения. Олдфаг, спасибо за помощь! Тоже вечерком посижу, покопаюсь. Один вопрос по исправленному тобой моему коду: код компилируется, но в процессе выполнения программы выводятся результаты только по сортировке массива. Не выводится сообщение о втором минимальном элементе. Более того, программа зависает на черном окне, т. е. не могу выйти из черного окна опять к коду программы. Приходится закрывать и по новой открывать. Не сталкивался, чем это может быть вызвано? Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2013, 13:02 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38239491&tid=1341830]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
80ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 402ms |

| 0 / 0 |
