|
|
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
Программеры, помогите разобраться!!! У меня лаба про двухмерные массивы: Задача №1: Последний отрицательный элемент каждого столбца двумерного массива заменить нулём. Задача №2: Вставить второй столбец после первого столбца, в котором все элементы положительны. Если такого столбца нет, то сообщить об этом. Вот решение: #include<iostream.h> #include<conio.h> #include<stdlib.h> int **ar,i,j,k1,k2,s,est,*st,**mar,ip,jp,found; int n,m; int** first(int **ar) { int num; for (j=0;j<n;j++) { num=-1; for (i=0;i<m;i++) if (ar [j]<0) num=i; if (num!=-1) ar[num][j]=0;} return ar;} int** second(int **ar) { found=0; for (j=0;j<n;j++) { est=0; for (i=0;i<m;i++) if (ar[j]<0) est=1; if (est==0) { found=1; est=j; break; } } if (found==1) { for (i=0;i<m;i++) st=ar[1]; for (j=n;j>est;j--) for (i=0;i<m;i++) ar[j]=ar[j-1]; for (i=0;i<m;i++) ar[est]=st; } return ar;} int choice; int main() { clrscr(); while (choice!=3) { randomize; cout<<"Выполнить первое задание"<<endl; cout<<"Выполнить второе задание"<<endl; cout<<"Выполнить третье задание"<<endl; cin>>choice; if (choice!=3) { cout<<"Введите n\n"; cin>>n; cout<<"Введите m\n"; cin>>m; ar=(int **)calloc(m,sizeof(int *)); for (i=0;i<m;i++) ar=(int *)calloc(n+1,sizeof(int)); st=(int *)calloc(m,sizeof(int)); for (i=0;i<m;i++) for (j=0;j<n;j++) ar[j]=random(12)-2; cout<<"Исходный массив:\n"<<endl; for (i=0;i<m;i++) {for (j=0;j<n;j++) cout<<ar[j]<<" "; cout<<endl;} cout<<endl; } if (choice==1) { mar=first(ar); for (ip=0;ip<m;ip++) {for (jp=0;jp<n;jp++) cout<<mar[ip][jp]<<" "; cout<<endl;} } if (choice==2) { mar=second(ar); if (found==1) { for (ip=0;ip<m;ip++) {for (jp=0;jp<=n;jp++) cout<<mar[ip][jp]<<" "; cout<<endl;} } else cout<<"Нет такого столбца \n"; } for (i=0;i<m;i++) free(ar); free(ar);free(st); } return 0;} //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Вот решение с комментами: #include<iostream.h> #include<conio.h> #include<stdlib.h> int **ar,i,j,k1,k2,s,est,*st,**mar,ip,jp,found; int n,m; int** first(int **ar) { int num; {номер последнего отриц.элемента} {} for (j=0;j<n;j++) {Идем по столбцам} { num=-1; {Считаем, что нет такого элемента} for (i=0;i<m;i++) if (ar[j]<0) num=i; {Если есть такой элемент заменяем нулем} if (num!=-1) ar[num][j]=0;} return ar;} int** second(int **ar) { found=0; {Считаем, что нет такого столбца} for (j=0;j<n;j++) { est=0; {Беря столбец считаем, что все его элементы положительными} for (i=0;i<m;i++) if (ar[j]<0) est=1; {Если находим находим отриц. Est присваиваем 1} if (est==0) {Но если Est по-прежнему равна 0} { found=1; {Считаем, что нашли такой столбец} est=j; {Записываем его номер} break; {И выходим из цикла} } } if (found==1) {Если такой столбец найден} { for (i=0;i<m;i++) st=ar[1]; for (j=n;j>est;j--) for (i=0;i<m;i++) ar[j]=ar[j-1]; {Сдвигаем эти элементы постолбцово} for (i=0;i<m;i++) ar[est]=st; {А на их место ставим второй} } return ar;} int choice; int main() { clrscr(); while (choice!=3) { randomize; cout<<"Выполнить первое задание"<<endl; cout<<"Выполнить второе задание"<<endl; cout<<"Выполнить третье задание"<<endl; cin>>choice; if (choice!=3) { cout<<"Введите n\n"; cin>>n; cout<<"Введите m\n"; cin>>m; ar=(int **)calloc(m,sizeof(int *)); for (i=0;i<m;i++) ar=(int *)calloc(n+1,sizeof(int)); st=(int *)calloc(m,sizeof(int)); for (i=0;i<m;i++) for (j=0;j<n;j++) ar[j]=random(12)-2; cout<<"Исходный массив:\n"<<endl; for (i=0;i<m;i++) {for (j=0;j<n;j++) cout<<ar[j]<<" "; cout<<endl;} cout<<endl; } if (choice==1) { mar=first(ar); for (ip=0;ip<m;ip++) {for (jp=0;jp<n;jp++) cout<<mar[ip][jp]<<" "; cout<<endl;} } if (choice==2) { mar=second(ar); if (found==1) { for (ip=0;ip<m;ip++) {for (jp=0;jp<=n;jp++) cout<<mar[ip][jp]<<" "; cout<<endl;} } else cout<<"Нет такого столбца \n"; } for (i=0;i<m;i++) free(ar); free(ar);free(st); } return 0;} ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Теперь вопрос: Мне не очень-то понятно, что делается дальше...т.е. вот этот кусок: int choice; Понимаю int main() Понимаю { clrscr(); Понимаю while (choice!=3) Понимаю { randomize; (((((((А зачем здесь рэндомайз?))))))))))))))))) cout<<"Выполнить первое задание"<<endl; Понимаю cout<<"Выполнить второе задание"<<endl; Понимаю cout<<"Выполнить третье задание"<<endl; Понимаю cin>>choice; Понимаю if (choice!=3) Понимаю { cout<<"Введите n\n"; Понимаю cin>>n; Понимаю cout<<"Введите m\n"; Понимаю cin>>m; Понимаю ar=(int **)calloc(m,sizeof(int *)); ((((((((((Для чего здесь выделяеться память? Для чего именно? что такое ar?)))))))))))))))))))))))))))) for (i=0;i<m;i++) ar=(int *)calloc(n+1,sizeof(int)); что делает цикл фо? st=(int *)calloc(m,sizeof(int)); ??????????????????? for (i=0;i<m;i++) ???????????????? for (j=0;j<n;j++) ar[j]=random(12)-2; ?????????????????? cout<<"Исходный массив:\n"<<endl; понимаю for (i=0;i<m;i++) для чего цикл? {for (j=0;j<n;j++) cout<<ar[j]<<" "; ?????????????? cout<<endl;} понимаю cout<<endl; понимаю } if (choice==1) понимаю { mar=first(ar); для чего такое присвоение? for (ip=0;ip<m;ip++) цикл??????? {for (jp=0;jp<n;jp++) cout<<mar[ip][jp]<<" "; cout<<endl;} цикл??????? } if (choice==2) { mar=second(ar); if (found==1) { for (ip=0;ip<m;ip++) Здесь цикл идет по циклу? {for (jp=0;jp<=n;jp++) cout<<mar[ip][jp]<<" "; cout<<endl;} Распечатывается измененный массив??? } else cout<<"Нет такого столбца \n"; } for (i=0;i<m;i++) free(ar); free(ar);free(st); Цикл, очистка памяти, а зачем????? } return 0;} Пожалуйста, профессионалы своего дела, помогите юному программисту разобраться во всем этом. Заранее огромный респект и человеческое спасибо!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2007, 20:30 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
программа сама по себе написана очень криво. сейчас быстренько чиркну нормальный вариант с комментариями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2007, 20:39 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2007, 21:16 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
п.с. если после моих комментариев что-то не понято - то почитайте лучше какую-нибудь книгу по С++. Потому что основы (типа что такое цикл for и как объявлять переменную) я думаю вряд ли вам кто-то здесь станет объяснять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2007, 21:19 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
огромное спасибо за предоставленную помощь! программирование вас не забудет! только один вопрос: что такое using namespace std;? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2007, 23:24 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
Homoerro number 2огромное спасибо за предоставленную помощь! программирование вас не забудет! только один вопрос: что такое using namespace std;? использование (поиск литер в) пространства имен std ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 09:42 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
Akh Homoerro number 2огромное спасибо за предоставленную помощь! программирование вас не забудет! только один вопрос: что такое using namespace std;? использование (поиск литер в) пространства имен std ну, а для чего здесь это используется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 20:48 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
А потому что cout и endl определены в пространстве имен std/ И чтобы можно было писать cout вместо std::cout и написали using ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 20:58 |
|
||
|
Прямые ???????????????
|
|||
|---|---|---|---|
|
#18+
любые стандартные функции находятся в некотором пространстве имет. т.е. для того, чтобы вызвать функцию нужны две вещи - указать пространство имен, в котором она определена и указать собственно имя функции. Это можно сделать двумя способами 1) напрямую при вызове функции так: пространство_имен::имя_функции(список параметров) 2) сразу для всех функций: using namespace пространство_имен; имя_функции(список параметров); Подробнее - читать учебники про пространства имен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2007, 20:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34522039&tid=2028879]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
199ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 557ms |

| 0 / 0 |
