Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
0 / 0 / 1
Регистрация: 04.04.2011
Сообщений: 35

указатели и выделение памяти массивам

05.01.2012, 18:57. Показов 4415. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дана действительная матрица размером m x n. Определить числа b1, b2, b3.... bn равные соответственно значениям средних арифметических элементов строк. Матрица размещается в динамической памяти, а все операции обработки выполняются через указатели.

мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int _tmain(int argc, _TCHAR* argv[])
{
    int m,n,i,j;
    //double mas[100];
 
    cout<<"vvedite razmernost' matrici: ";
    cin>>n>>m;
 
 
    int *mat=new int[n*m];                                        // правильно ?
 
    for (i=0;i<n;i++)                              
     for (j=0;j<m;j++)
      cin<<*(*(mat+i)+j);                                    // как сдесь поставить указатель на массив?    
 
    for (i=0;i<n;i++)
     for (j=0;j<m;j++)
     // a[i][j]
 
 
    return 0;
}

мне бы узнать как произвести ввод и вывод с помощью указателей, а остальное уж сам как-нибудь.

P.S хотелось бы и большую часть кода

P.S.S заранее спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2012, 18:57
Ответы с готовыми решениями:

Указатели (Выделение памяти в куче)
Чтобы создать в динамически распределяемой памяти переменную типа unsigned short необходимо написать следующее: unsigned short...

Указатели и динамическое выделение памяти
Нужно заполнить массив из 200 элементов числами на промежутке , и найти последовательность из 10 элементов у которых наибольшее срееднее...

Указатели С++. Динамическое выделение памяти
Не пойму, почему перед квадратными скобками нужна звездочка? int **memoryAddr = new int *; Звездочка при работе с указателями несет смысл...

35
05.01.2012, 21:17
Студворк — интернет-сервис помощи студентам

Не по теме:

alkagolik, да тут прикол в том чтобы индексация по указателю была

Цитата Сообщение от alkagolik Посмотреть сообщение
arr[ i ][ j ]
- а это прямое обрщние

1
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.01.2012, 21:18
-=ЮрА=-, не видя Вашу репутацию, подумал бы что новичок. Только легкий пример столько
мусолите.
Вот реализация.

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 <ctime>
 
int main ()
{
   srand (time(NULL));
   int rows = 5;
   int columns = 5;
   int *arr = new int [rows * columns];
   int i, j;
   double *b = new double [rows];
   double mid;
   
   for ( i = 0 ; i < rows ; ++i )
   {
      mid = 0.0;
      for ( j = 0 ; j < columns ; ++j )
      {
         *(arr + i*columns + j) =  rand () % 10;
         mid += *(arr + i*columns + j);
         std::cout <<  *(arr + i*columns + j) << " ";
      }
      *(b + i) = mid / columns;
      std::cout << std::endl;
   }
   
   for ( i = 0 ; i < rows ; ++i )
      std::cout << *(b + i) << " ";
      
   std::cout << std::endl;
   return 0;
}
Добавлено через 12 секунд
http://liveworkspace.org/code/... e890388e89
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
05.01.2012, 21:32
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
alkagolik, да тут прикол в том чтобы индексация по указателю была
пусть ТС и занимается разыменовыванием. а еще в нагрузку косвенной адресацией.

Добавлено через 1 минуту
go, по твоему подходу можно вообще так написать
C
1
2
3
4
while ( i < n * m ) {
    *arr++ =  rand () % 10;
    ++i;
}
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.01.2012, 21:35
Chif, вот в чём вся загвоздка была, указатель не тот на элемент строки был
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
*((*mat + i) + j)
а выходит вот так надо (*(*mat + i) + j), сейчас исправляю, см скрин дебага что есть что
go, реально отвянь со своей однострочной реализацией, двумерный массив это не одномерный, да можно решить через одномерный но задание стоит совершинно по иному
Цитата Сообщение от Chif Посмотреть сообщение
дана действительная матрица размером m x n
у тебя же вектор из m*n элементов. Не мешай работать
Миниатюры
указатели и выделение памяти массивам  
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.01.2012, 21:39
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
go, реально отвянь со своей однострочной реализацией, двумерный массив это не одномерный, да можно решить через одномерный но задание стоит совершинно по иному
Читайте внимательно. В задании ничего про двумерный массив не говорится. Эх, пустознон.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.01.2012, 21:44
go,
Цитата Сообщение от Chif Посмотреть сообщение
равные соответственно значениям средних арифметических элементов строк.
- это какой такой вектор со строками???
Цитата Сообщение от go Посмотреть сообщение
Эх, пустознон.
- ты сам о себе наверное...
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.01.2012, 21:55
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- это какой такой вектор со строками???
Это матрица, реализованная на одномерном массиве.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а выходит вот так надо (*(*mat + i) + j),
чего-чего? нет не так
Так и быть, чтобы Вы не мучелись
C++
1
*( *(arr + i) + j)
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
05.01.2012, 21:57
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Не мешай работать
1
05.01.2012, 22:05

Не по теме:

go,
alkagolik, это не сам Юра, это кто-то нагло пользуется его экаунтом на форуме.

1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
05.01.2012, 22:10
Chif, вот реализация
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
#include <iostream>
#include <iomanip> //setw
#include <cstdlib> //ввёл лишь для переносимости кода и на CodeBlocks
using namespace std;
 
int main()
{
    int i,j,m,n;
    //Вводим размерность матрицы mat
    cout<<"Enter number of rows : ";cin>>m;
    cout<<"Enter number of cols : ";cin>>n;
 
    int ** mat = new int * [m];//память под указатели на строки матрицы
    double * b = new double[m];//Память под средние арифметические
    for(i = 0; i < m; i++)
    {
        mat[i] = new int[n];//память под эдементы строки
        for(j = 0,b[i] = 0; j < n; j++)
        {
            cout<<"mat["<<i + 1<<"]["<<j + 1<<"] = ";
            cin>>mat[i][j];
            b[i] += (*(*mat + i) + j);//Накпливаем сумму єлементов строки
        }
        b[i] /= 1.0*n;//Вот тут и рассчитываем средние арифметические
    }
    //Вывод исходной матрицы и вектора ср арифметических на экран
    cout<<"Input matrix\n";
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
            cout<<setw(3)<<(*(*mat + i) + j)<<" ";
        cout<<endl;
    }
    cout<<"Vector b :\n";
    for(i = 0; i < m; i++)
        cout<<"b["<<i + 1<<"] = "
            <<b[i]
            <<endl;
    system("pause");
    return 0;
}
К сожалению cin>> ни в какую не хочет воспринимать (*(*mat + i) + j), поэтому ввод у меня всё же с прямой индаксацией cin>>mat[i][j], однако накопление суммы выполнено на базе указателей
b[i] += (*(*mat + i) + j);
Пока я вам не могу ответить почему ввод (*(*mat + i) + j); не поддерживается студией, хотя это тотже самый mat[i][j]
Миниатюры
указатели и выделение памяти массивам  
1
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
05.01.2012, 22:12
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Пока я вам не могу ответить почему ввод (*(*mat + i) + j); не поддерживается студией
это вроде как некорректно, так должно быть
C
1
*( *( mat + i ) +  j );
1
278 / 174 / 21
Регистрация: 10.07.2011
Сообщений: 441
05.01.2012, 22:14
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
К сожалению cin>> ни в какую не хочет воспринимать (*(*mat + i) + j)
C++
1
cin>>*( *(mat + i) + j);  //работает
з.ы. пока писал товарищ alkagolik ответил
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
05.01.2012, 22:14
C++
1
(*(*mat + i) + j)
это
C++
1
mat[0][i] + j
0
05.01.2012, 22:14

Не по теме:

greeezz, нет это я сам сижу на форуме не нужно переживать...;)

0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
05.01.2012, 22:19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
К сожалению cin>> ни в какую не хочет воспринимать (*(*mat + i) + j),
Да, ладно. Пробуйте (я же подсказывал Вам как надо, а Вы опять за свое)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main ()
{
   int rows = 5;
   int columns = 5;
   int **arr = new int* [rows];
   int i = 1, j = 1; //arr[1][1]
 
   for ( i = 0 ; i < rows ; ++i )
      *(arr + i) = new int [columns];
 
   i = 1;
   j = 1;
   std::cin >> *( *(arr + i ) + j);
 
 
   std::cout << arr[i][j];
 
   std::system("pause");
    return 0;
}

Не по теме:

Потешили меня на славу.

1
0 / 0 / 1
Регистрация: 04.04.2011
Сообщений: 35
05.01.2012, 22:52  [ТС]
целые дебаты вышли))

Всем спасибо кто помог, разобрался закомпилил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.01.2012, 22:52

Указатели, выделение памяти для матрицы
Ребята , nомогите nожалуйста , что означают эти заnиси, nросто не могу ни где найти обьяснения. Знаю что 1-е это выделяет nамять для...

Указатели на строки. Выделение и освобождение памяти
Всем добрый день. Есть два указателя на char. Для первого выделяется память а у второго просто делаем копию с первого. Для 1-го...

Указатели и функции. Динамическое выделение памяти
1) Напишите программу, которая позволяет вводить динамический одно-мерный целочисленный массив и посредством вызова функции опреде-лять...

Указатели, динамическое выделение памяти, работа с файлом
Программа должна предоставлять возможность нескольким пользователям работать с числовыми данными. Сведения о пользователях должны храниться...

Принцип работы кода: указатели, выделение памяти
Объясните мне что делает этот код: p = new int ; И вот этот, пожалуйста: struct DList{ int m; DList *p};


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru