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

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

Войти
Регистрация
Восстановить пароль
 
student888
0 / 0 / 0
Регистрация: 07.12.2012
Сообщений: 21
#1

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

14.01.2013, 16:25. Просмотров 400. Ответов 10
Метки нет (Все метки)

как сделать эту программу с использованием указателя?

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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 16:25     указатель
Посмотрите здесь:

Освободить указатель на указатель - C++
class Interface { }; class Test : public Interface { }; void main() { Interface** s = new Interface*; for (int i =...

Про указатель *, указатель на указатель **, и про new - C++
#include &quot;stdafx.h&quot; class neuro { public: double *inputs; int inputs_count; neuro(int uc, double ii ) { ...

Указатель - C++
Имеется код: // header #ifndef DMA_H_ #define DMA_H_ #include &lt;iostream&gt; class abs { private:

Указатель - C++
const int MAX = 5; void f(double*); int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); double array = { 10.0,...

указатель на this - C++
Если в описании метода класа написать list n = *this; list - имя класса, то в n будет содержаться указатель на текущий обьект, ссылка...

Указатель - C++
Можете объяснить устройство работы ,мне казалось что если вызвать просто ptr то должен возвратиться адрес,а если * ptr ,то значение,здесь...

Указатель((( - C++
Составить программу, которая подсчитывает для из массивов А и В количество различных по значению элементов в каждом из этих массивов....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
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
509 / 461 / 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
509 / 461 / 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++
unsigned short b=0xffff; char *a=malloc(65536); for(int i=0;i&lt;65536;i+=2) { *(a+i)=b; } free(a); Добрый день! ...

Указатель на указатель - C++
Всем доброго времени! Совсем недавно начал использовать технику двойных указателей типа Obj ** obj, поэтому путаюсь. Для удобного...

Указатель на указатель - C++
Есть задача: Дана динамическая строка размер массива символов которой точно соответствует строке. написать функцию которая добавляет...

указатель - C++
собственно смысл ссылки я понял, грубо говоря передача в функцию адреса переменной что бы функция меняла не копию, а сам передаваемый...

Указатель this - C++
Каждый объект поддерживает указатель на самого себя - называемый указателем this - который является неявным аргументом во всех ссылках на...


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

Или воспользуйтесь поиском по форуму:
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     указатель
Ответ Создать тему
Опции темы

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