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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sheldon-yura
30 / 30 / 7
Регистрация: 02.11.2011
Сообщений: 216
#1

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

06.11.2012, 16:43. Просмотров 246. Ответов 2
Метки нет (Все метки)

Всем привет. Нам дали сделать лабу:
Дана целочисленная прямоугольная матрица.
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");
}
тут все работает, кроме обмена строк через пузырек. помогите плиз. а то скоро ее сдавать.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2012, 16:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include&lt;iomanip&gt; using namespace std; void min_max(int*pa, int*pb,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - 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
0
sheldon-yura
30 / 30 / 7
Регистрация: 02.11.2011
Сообщений: 216
06.11.2012, 20:53  [ТС] #3
переделать можете?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2012, 20:53
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; //Сортировка &quot;пузырьком&quot;. ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Константные указатели и указатели на константу - C++
Чем они, собственно говоря, отличаются? Поясните, пожалуйста. Не знаю, как так получилось, что в разных источниках - разные...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru