2 / 2 / 1
Регистрация: 05.01.2014
Сообщений: 82
1

Использование указатель без индексов

13.05.2015, 18:58. Показов 1297. Ответов 11
Метки нет (Все метки)

Прошу подкорректировать программу, указать на ошибки (не критичные) или просто недочеты. И еще вопрос : учитель приказал не использовать индексы. Это как вообще? Массив так и так с индексами будет. Я ему показал этот вариант, но сказал, что ему не нравятся строчки с 27 по 30, 38
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
85
86
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <clocale>
#include <string.h>
#include <istream>
#include <ctime>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
    double **matr, *str;
    int N, M, CHIS;
    int j = 0, i = 0;   
    int count = 0, max = 0;
    cout << "Введите кол-во строк = ";
    cin >> N;
    cout << "Введите кол-во столбцов = ";
    cin >> M;
    cout << "Введите кол-во наибольшее число матрицы (10 - веществ. число до 1, 100 - до 10 и 1000 - до 100) = ";
    cin >> CHIS;
    str = new double[M];
        matr = new double*[N];
            for (i = 0; i < N; i++)
                matr[i] = new double[M];
    double*mas;
    double*mas1=str;
    srand(time(NULL));
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            mas=&matr[i][j];
            cout<<"Введите элемент матрицы = ";
            cin>>*mas++;
        }
    }
    for (i = 0; i < N; i++)
    {
        cout << endl;
        mas = matr[i];
        for (j = 0; j < M; j++)
            cout << setw(5) << *mas++;
        cout << endl;
    }
    for (j = 0; j < M; j++)
    {   
        for (i = 0; i < N; i++)
        {
            mas=&matr[i][j];
            if (*mas++ > N && M)
                count++;
        }
        *(str+j) = count;       
        if (*(str+j) >= max)
            max = *(str+j);
        count = 0;
    }
    cout << endl;
    for (j = 0; j < M; j++)
        cout << "В " << j << " кол-во элементов со значениями больше заданного размера матрицы = "<< *(mas1++) << endl;
    cout << endl;
    for (j = 0; j < M; j++)
    {
        
        if (max)
        {
            if (*(str+j) == max)
            {
                for (int i = 0; i < N; i++)
                {
                    mas=&matr[i][j];
                    cout <<"\n"<<setw(5)<< *mas++;
                }
                cout << endl;
            }
        }
    }
    system("pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2015, 18:58
Ответы с готовыми решениями:

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct...

Использование массива индексов при сортировке
Задали задачку отсортировать обычный одномерный массив. Так же, нужно использовать массив...

Как обратиться к элементам массива БЕЗ применения индексов
Есть динамический массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...

Использование команды system(); Без всяких окон (без dos и т.д)
Вообще реально сделать чтобы обратиться к системе в фоновом режиме. Без отрытия dos. Без всякой...

11
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
13.05.2015, 19:17 2
C++
1
2
3
    
            cout<<"Введите элемент матрицы = ";
            cin>>matr[i][j];
Добавлено через 3 минуты
Цитата Сообщение от textyreee Посмотреть сообщение
учитель приказал не использовать индексы
Может речь шла об указателях?
0
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
13.05.2015, 19:18 3
Цитата Сообщение от textyreee Посмотреть сообщение
38
Зачем там этот mas? И, вообще, зачем он в коде?
0
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
13.05.2015, 19:21 4
Без индексов, так без индексов:
C++
1
2
for(double**pos=matr;pos<matr+N;++pos)
    *pos=new double[M];
1
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
13.05.2015, 19:22 5
Цитата Сообщение от textyreee Посмотреть сообщение
Массив так и так с индексами будет.
Необязательно, есть ещё арифметика указателей.
0
2 / 2 / 1
Регистрация: 05.01.2014
Сообщений: 82
13.05.2015, 19:50  [ТС] 6
Цитата Сообщение от lss Посмотреть сообщение
Зачем там этот mas? И, вообще, зачем он в коде?
Это переменная с указателем, я ей передаю значение матрицы и вывожу mas. Нас учили так использовать указатели для массивов, если есть другие решения, то подскажите.

Добавлено через 44 секунды
Цитата Сообщение от UnsKneD Посмотреть сообщение
Может речь шла об указателях?
Нет, о индексах. Программа должна быть только с указателями

Добавлено через 5 минут
Цитата Сообщение от lss Посмотреть сообщение
Необязательно, есть ещё арифметика указателей.
Такого мы не изучали

Добавлено через 1 минуту
Цитата Сообщение от Renji Посмотреть сообщение
Без индексов, так без индексов:
А дальше у меня в форах тоже используются i & j, можно ли тоже исользовать pos? Именно этот pos?
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,708
13.05.2015, 19:53 7
ну вот например так можно
C++
1
2
3
int a[10]
for(int i=0;i<10;i++)
  *(a+i)=0; //аналогично a[i]=0
самое смешное вот что
a[i]=>*(a+i) => *(i+a)=> i[a]

напиши своему учителю вот так
C++
1
2
3
int a[10]
for(int i=0;i<10;i++)
  i[a]=0; //аналогично a[i]=0
ведь имя массива трудно индексом назвать
1
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
13.05.2015, 19:55 8
Цитата Сообщение от textyreee Посмотреть сообщение
А дальше у меня в форах тоже используются i & j, можно ли тоже исользовать pos? Именно этот pos?
Если вы в смысле "можно ли скопировать цикл без изменений", то да. Если писать как у меня, то pos существует только в пределах цикла и ни с чем за пределами цикла конфликтовать не должно. Но для вложенных циклов придется все же поменять pos на какое-то другое имя. Надо же как-то отличать какой указатель для основного цикла, какой для вложенного.
1
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
13.05.2015, 20:02 9
Цитата Сообщение от textyreee Посмотреть сообщение
если есть другие решения, то подскажите.
Подсказали уже:
Цитата Сообщение от UnsKneD Посмотреть сообщение
C++
1
2
cout<<"Введите элемент матрицы = ";
cin>>matr[i][j];
1
2 / 2 / 1
Регистрация: 05.01.2014
Сообщений: 82
13.05.2015, 20:19  [ТС] 10
Цитата Сообщение от lss Посмотреть сообщение
Подсказали уже:
Так подсказали же с индексами, я так тоже писал, но препод возразил и потребовал вводить элементы матрицы через указатель, что я и написал ему.

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
Код C++
C++
1
2
3
int a[10]
for(int i=0;i<10;i++)
* i[a]=0; //аналогично a[i]=0
Я, конечно, не гуру C++, но это разве не ошибка?
0
алкокодер
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
13.05.2015, 20:26 11
Лучший ответ Сообщение было отмечено textyreee как решение

Решение

textyreee,
C++
1
*(matr+i) = new double[M];
Добавлено через 1 минуту
C++
1
std::cin >> *( *( matr+ i ) + j )
Добавлено через 2 минуты
Цитата Сообщение от textyreee Посмотреть сообщение
Я, конечно, не гуру C++, но это разве не ошибка?
Нет. Вам уже показывали.
Цитата Сообщение от ValeryS Посмотреть сообщение
самое смешное вот что
a[i]=>*(a+i) => *(i+a)=> i[a]
Компилятору всё равно.
1
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
13.05.2015, 22:41 12
Цитата Сообщение от textyreee Посмотреть сообщение
Так подсказали же с индексами, я так тоже писал, но препод возразил и потребовал вводить элементы матрицы через указатель, что я и написал ему.
Про индексы я понял. Но mas и с индексами не нужен.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2015, 22:41
Помогаю со студенческими работами здесь

Указатель: всегда ли использование указателей хорошо?
У меня своего рода вопрос: всегда ли использование указателей хорошо, например каждый адрес...

Использование функций, возвращающих указатель на указатель
Здравствуйте. Есть несколько функций, которые возвращают указатель на указатель. Вот одна из них:...

Использование индексов
Дана задача,в которой известно какие индексы у нас существуют. &gt; db.products.getIndexes()...

Использование индексов массива
В MathCad использую индексы в циклах допустим sin(x) c индексом i как этот индекс использовать в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru