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

Указатели - C++

Восстановить пароль Регистрация
 
sheldon-yura
30 / 30 / 7
Регистрация: 02.11.2011
Сообщений: 214
06.11.2012, 16:43     Указатели #1
Всем привет. Нам дали сделать лабу:
Дана целочисленная прямоугольная матрица.
1) Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.
2) Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик.
Вот готовый вариант.
C++
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
#include "stdafx.h"
#include "iostream"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{   int i,j,n,m,t,l;
    int a[10][10]={{0},{0}};
    int b[10]={0};
    setlocale(LC_ALL,"Russian");
    cout <<"n=";
    cin >> n;
    cout <<"m=";
    cin >> m;
    cout <<"\n";
    
    cout <<"введите элементы массива:\n";
    for (int i=0; i<n; i++){
      for (int j=0; j<m; j++)
         cin >> a [i][j];}
    cout <<"\n";
 
   cout << "Текущий массив: \n";
   for (int i=0; i<n; i++){
      for (int j=0; j<m; j++){
          cout << a[i][j];
          cout << " ";}
          cout << "\n";}
 
   int q;
   q=0;
   cout << "\n";
 
    for (int i=0; i<n; i++)
      for (int j=0; j<m; j++)
          if (a[i][j]==0){
              q=j+1;              
          break;
      break;}
 
    if (q==0)
        cout <<"нули не обнаружены";
    else{
        cout << "ноли обнаружены в строке - ";
        cout << q;}
 
    cout <<"\n";
    cout <<"\n";
 
    for (int i=0; i<n; i++)
      for (int j=0; j<m; j++)
          if ((a[i][j]%2==0) && (a[i][j]<0) )
              b[i]=b[i]+a[i][j];
 
   for (int i=0; i<n; i++)
       for (int l=i+1; l<n; l++)
           if (b[i]<b[l]){
               for (int j=0; j<m; j++){
                   t=a[i][j];
                   a[i][j]=a[l][j];
                   a[l][j]=t;}}
   cout <<"отсортированный массив: \n";
 
   for (int i=0; i<n; i++){
      for (int j=0; j<m; j++){
          cout << a[i][j];
          cout << " ";}
          cout << "\n";}
 
    system("pause");
    return 0;
}
потом нам сказали сделать ее через указатели:
C++
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
#include "stdafx.h"
#include "iostream"
using namespace std;
 
 
void main()
{   int i,j,n,m,l,k=0;;
    int *b[10]={0}, *t={0};
    setlocale(LC_ALL,"Russian");
    cout <<"n=";
    cin >> n;
    cout <<"m=";
    cin >> m;
    cout <<"\n";
    
    cout <<"введите элементы массива:\n";
    int ** a = new int*[n];
    for (int i=0;i<n;i++)
        a[i]=new int[m];
    for (int i=0;i<n;i++) 
        for (int j=0;j<m;j++)
            cin>>a[i][j];
    for (int i=0;i<n;i++) 
        for (int j=0;j<m;j++)
            if (a[j][i]==0) {
                k++;
                break;
            }
 
   cout << "Текущий массив: \n";
   for (int i=0; i<n; i++){
      for (int j=0; j<m; j++){
          cout << a[i][j];
          cout << " ";}
          cout << "\n";}
 
   int q;
   q=0;
   cout << "\n";
 
    for (int i=0; i<n; i++)
      for (int j=0; j<m; j++)
          if (a[i][j]==0){
              q=j+1;              
          break;
      break;}
 
    if (q==0)
        cout <<"нули не обнаружены";
    else{
        cout << "ноли обнаружены в строке - ";
        cout << q;}
 
    cout <<"\n";
    cout <<"\n";
 
    for (int i=0; i<n; i++)
      for (int j=0; j<m; j++)
          if ((a[i][j]<0) && (a[i][j]%2==0))
              b[i]=b[i]+a[i][j];
 
    for (int i=0; i<n; i++)
       for (int l=i+1; l<n; l++)
           if (b[i]<b[l]){
               for (int j=0; j<m; j++){
                   t=&a[i][j];     //вот тут
                   a[i][j]=a[l][j];    //вот тут
                   a[l][j]=*t;       //вот тут
                   /*(*(t+i)+j)=(*(a+i)+j);
                   *(*(a+i)+j)=*(*(a+l)+j);
                   *((a+l)+j)=*(*(t+i)+j);    */}}
 
   cout <<"отсортированный массив: \n";
 
   for (int i=0; i<n; i++){
      for (int j=0; j<m; j++){
          cout << a[i][j];
          cout << " ";}
          cout << "\n";}
   for (int i=0; i<n; i++)
    delete [] a[i];
   delete [] a;
    system("pause");
}
тут все работает, кроме обмена строк через пузырек. помогите плиз. а то скоро ее сдавать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 16:43     Указатели
Посмотрите здесь:

C++ Указатели
Указатели C++
Указатели C++
Указатели C++
C++ указатели
C++ Указатели
Указатели С++ C++
C++ Указатели

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
wtf?
19 / 19 / 0
Регистрация: 03.10.2010
Сообщений: 48
06.11.2012, 18:01     Указатели #2
В первом примере у тебя
C++
1
int b[10]={0};
масив b типа int
Во втором примере у тебя
C++
1
int *b[10]={0}
масив b типа указатель на int
и вот сдесь вот хочешь записать в указатель на int просто число
C++
1
2
3
4
for (int i=0; i<n; i++)
      for (int j=0; j<m; j++)
          if ((a[i][j]<0) && (a[i][j]%2==0))
              b[i]=b[i]+a[i][j];
Сортировка по этому и не работает потомучто у тебя в этом масиве все елементы 0
sheldon-yura
30 / 30 / 7
Регистрация: 02.11.2011
Сообщений: 214
06.11.2012, 20:53  [ТС]     Указатели #3
переделать можете?
Yandex
Объявления
06.11.2012, 20:53     Указатели
Ответ Создать тему
Опции темы

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