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

указатель - C++

Восстановить пароль Регистрация
 
student888
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 21
14.01.2013, 16:25     указатель #1
как сделать эту программу с использованием указателя?

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
#include <iostream.h>
#include<conio.h>
void main()
{
clrscr();
int a[100][100],b[100], i, j, m,n;
cout«"Vvedite mxn\n";
cin»m»n;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
cin»a[i][j];
cout«"Matritsa A:\n";
for (i=0; i<m; i++)
{for (j=0; j<n; j++)
cout«a[i][j];
cout«"\n";
}
for (j=0;j<n; j++)
{
b[j]=0;
for( i=0; i<m; i++)
if (a[i][j]>0)
b[j]+=a[i][j];
}
for(j=0; j<n; j++)
cout«" "«b[j];
getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
14.01.2013, 16:48     указатель #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
#include <iostream>
#include <conio.h>
using namespace std;
int main() {
    setlocale(LC_ALL,"rus");
    int * a;
    int * b;
    int i, j, m,n;
    cout << "Ввудите mxn\n";
    cin>>m>>n;
    a=new int[m*n];
    b=new int[n];
    for (i=0;i<m;i++)
        for (j=0;j<n;j++)
            cin>>a[i*n+j];
    cout<<"Матриаца A:\n";
    for (i=0; i<m; i++) {
        for (j=0; j<n; j++)
            cout<<a[i*n+j] << " ";
        cout<<"\n";
    }
    for (j=0;j<n; j++) {
        b[j]=0;
        for( i=0; i<m; i++)
            if (a[i*n+j]>0)
                b[j]+=a[i*n+j];
    }
    for(j=0; j<n; j++)
        cout<<" "<<b[j];
    getchar();
    getchar();
}
student888
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 21
14.01.2013, 16:52  [ТС]     указатель #3
а если не затруднит, можно построчные комментарии?
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
14.01.2013, 17:30     указатель #4
При выделении памяти оператором new, можно рассматривать матрицу как одномерный массив, в котором строки матрици с определенным шагом идут, как например одномерный: 1 2 3 4 5 6 7 8 9, можно рассматривать как матрицу 3*3, при этом чтобы обратиться например к элементу a22(центральный) нужно умножить номер(нумерацию считать с нуля, еще нужно учитывать что в программировании нумерация массивов с нуля идет) строки(i) на количество эл-тов строки(так мы найдем нужную нам строку) и добавить положение в строке(j).
1*3+2=5й эл-т.
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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main() {
    setlocale(LC_ALL,"rus");
    int * a; // указатель под массив a(указатель - это переменная содержащая адрес на участок памяти)
    int * b; // указатель под массив б
    int i, j, m,n; // просто целочисленные переменные
    cout << "Ввудите mxn\n"; // печать текста
    cin>>m>>n; // ввод параметров массива
    a=new int[m*n]; // выделяем оператором new память под m*n элементов, и адрес этого массива помещаем в указатель a
    b=new int[n];   // аналогично
    // теперь в a и b адреса наших массивов, под которые выделилась память.
    for (i=0;i<m;i++) // заполняем массив - цикл по строкам
        for (j=0;j<n;j++) // цикл по столбцам
            cin>>a[i*n+j]; // вводим элемент на i-й на j-m месте
    cout<<"Матриаца A:\n"; // печать текста
    for (i=0; i<m; i++) { // цикл по стокам
        for (j=0; j<n; j++) // цикл по стобцам
            cout<<a[i*n+j] << " "; // печатаем элемент на i-й на j-m месте
        cout<<"\n"; // переходим на новую строку
    }
    for (j=0;j<n; j++) { // цикл по столбцам 
        b[j]=0;          // обнуляем первый эл-т массива b перед подсчетом положительных эл-тов столбца
        for( i=0; i<m; i++) //цикл по строкам этого столбца
            if (a[i*n+j]>0) // если эл-т положителен
                b[j]+=a[i*n+j]; // добавляем к общей сумме в b[j] - соответствующей j-му столбцу
    }
    for(j=0; j<n; j++) // печатаем что получилось(т.е. суммы положительных эл-тов столбцов из массива b[j])
        cout<<" "<<b[j];
 
    getchar(); // задержка перед завершением программы
    getchar(); // задержка перед завершением программы
}
student888
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 21
14.01.2013, 17:42  [ТС]     указатель #5
а если использовать такой указатель? но только здесь ошибки.. немного не разобрался, как на данном примере поправить программу?

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
#include <iostream.h>
#include<conio.h>
void main()
{
clrscr();
int a[100][100],b[100], i, j, m,n,*P;
cout«"Vvedite mxn\n";
cin»m»n;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
cin»a[i][j];
cout«"Matritsa A:\n";
for (i=0; i<m; i++)
{for (j=0; j<n; j++)
cout«a[i][j];
cout«"\n";
}
for (j=0;j<n; j++)
{
P=&a[0][j];
for( i=0; i<m; i++)
if (*P>0)
b[j]+=*P;
;}
for(i=0; i<m; i++)
cout«" "«b[j];
getch();
}
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
14.01.2013, 18:03     указатель #6
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
#include <iostream>
#include<stdlib.h>
using namespace std;
 
int main()
{
    int a[100][100],b[100], i, j, m,n,*P;
    cout<<"Vvedite mxn\n";
    cin>>m>>n;
 
    for (i=0;i<m;i++);
    for (j=0;j<n;j++);
 
    cin>>a[i][j];
 
    cout<<"Matritsa A:\n";
 
    for (i=0; i<m; i++)
    {
        for (j=0; j<n; j++)
            cout<<a[i][j];
        cout<<"\n";
    }
 
    for (j=0;j<n; j++)
    {
        P=&a[0][j];
        for( i=0; i<m; i++)
            if (*P>0)
                b[j]+=*P;
    }
    for(i=0; i<m; i++)
        cout<<" "<<b[j];
 
    return 0;
}
вот подправил, выражаю свое мнение:
Программа не будет работать так,как ты хочешь, не было времени разбирать код, но собрав проект в эклипсе и прогнав его, ничего путного не увидел(точнее только одни 0,содержащиеся в матрице)

Не по теме:


Vvedite mxn
4
3
0
Matritsa A:
000
000
000
000
0 0 0 0

Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
14.01.2013, 18:22     указатель #7
Цитата Сообщение от Pakisan Посмотреть сообщение
ничего путного не увидел(точнее только одни 0
Это потому что у вас зачем-то точки с запятой в 12 и 13 строках добавились.


Цитата Сообщение от Pakisan Посмотреть сообщение
if (*P>0)
А тут на каждой итерации сравнивается одно и то же значение (P не меняется)
student888
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 21
14.01.2013, 18:39  [ТС]     указатель #8
не как не могу с этим указателем разобраться..

Добавлено через 14 минут
где тут ошибка?

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
#include <iostream.h>
#include<conio.h>
void main()
{
clrscr();
int a[100][100],b[100], i, j, m,n,*p;
cout«"Vvedite mxn\n";
cin»m»n;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
cin»a[i][j];
cout«"Matritsa A:\n";
for (i=0; i<m; i++)
{for (j=0; j<n; j++)
cout«a[i][j];
cout«"\n";
}
for (j=0;j<n; j++)
{
b[j]=0;
for( i=0; i<m; i++)
p=&a[i][j];
if (*p>0)
b[j]+=*p;
 
}
for(j=0; j<n; j++)
cout«" "«b[j];
getch();
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
14.01.2013, 18:46     указатель #9
C++
1
2
3
4
5
6
for(i=0; i<m; i++)
{
    p=&a[i][j];
    if (*p>0)
    b[j]+=*p;
}
Фигурные скобки вокруг тела цикла нужны.

При выводе элементов матрицы разделяйте их как-нибудь, пробелом или табуляцией.

C++
1
cout << a[i][j] << " ";
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
14.01.2013, 18:53     указатель #10
Schizorb, Извиняюсь, не прав. Не вчитываясь в код, замкнул циклы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2013, 19:07     указатель
Еще ссылки по теме:

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
Расскажите, как здесь работает указатель на указатель? C++
Почему указатель на указатель объявляется как float **A; C++

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

Или воспользуйтесь поиском по форуму:
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
14.01.2013, 19:07     указатель #11
student888, Если хотите двумерный массив динамически создавать, во время выполнения программы, то тогда вот так можно:
C++
1
2
3
4
5
6
7
8
9
int **a;
int m, n;
 
cout << "Введите mxn" << endl;
cin >> m >> n;
 
a = new int*[m];
for (int i=0; i<m; i++)
    a[i] = new int[n];
Yandex
Объявления
14.01.2013, 19:07     указатель
Ответ Создать тему
Опции темы

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