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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
student-zki09
0 / 0 / 0
Регистрация: 11.02.2010
Сообщений: 4
#1

Динамическая память - C++

11.02.2010, 07:13. Просмотров 2242. Ответов 6
Метки нет (Все метки)

Кто сможет помочь?
Дана матрица А[N][M]. Упорядочить элементы каждой строки в порядке не убывания.
(нужно составить 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
/*Дана матрица А[N,M]. Упорядочить элементы каждой строки в порядке неубывания*/
#include <conio.h>
#include<iostream>
#include<cstdlib>                               //использование индексов
using namespace std;
int main()
{
    
    int n,m,  //число строк и число столбцов
        i,j, //индексы
        d,    //вспомогательная переменная перестановки
        fl; //флаг перестановки
    int    **a;  //указатель на массив А[][]
    
        
    cout<<"Sozdaem matricu A[n,m]\n"<<"Vvedite chislo strok: n = ";cin>>n;
    cout<<"\n"<<"Vvedite chislo stolbcov: m = "; cin >> m; cout<<"\n";
 
    a=new int *[n]; //выделение памяти по двумерный массив
 
    for(i=0;i<n;i++)
    {
        a[i]=new int[m]; //выделение памяти под строку матрицы
        for(j=0;j<m;j++)
            a[i][j]=(-40 + rand()%90);//присвоение матрице случайных чисел
    }
                                                   //cin>>a[i][j];
    cout<<"Sformirovannaja matrica A[N,M]:\n";
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
           cout<<" "<<a[i][j];
           cout<<"\n";
    }
    do
    {
        fl=1;  //флаг поднят
    for(i=0;i<n;i++)
        {
            for(j=0;j<m-1;j++)
                if(a[i][j]>a[i][j+1])
                {
                    fl=0; //флаг опущен
                    d=a[i][j];
                    a[i][j]=a[i][j+1];
                    a[i][j+1]=d;
 
                }
        }
    }
    while(!fl); //пока флаг поднят делаем цикл
        
    cout<<"\n"<<"Posle perestanovki elementov v strokah massiv = \n";
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
           cout<<" "<<a[i][j];
           cout<<"\n";
    }
 
    //освобождение памяти
 
    for(i=0;i<n;i++)
    delete a[i];
    delete []a;
    
    getch();
  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2010, 07:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическая память (C++):

Статическая память,Динамическая память. - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Динамическая память - C++
Создать одномерный массив в котором хранятся года рождения людей (года вводятся в массив в ручную, размер массива не менее 5). Определить...

Динамическая память - C++
Народ, если кому не сложно помогите переделать вот эту программу со структурами нужно сделать так чтобы для хранения данных она...

Динамическая память - C++
Дано натуральное число n и целые числа{a}_{1},{a}_{2},...,{a}_{n}. Выяснить, есть ли среди цифр {a}_{1},{a}_{2},...,{a}_{n}совпадающие и...

Динамическая память. - C++
Всем привет! Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их большем количестве в программе вечно...

динамическая память.... - C++
Ввести двухмерном массив, для работы с массивом использовать указатель. Массив разместить в динамической памяти. Определение суммы...

6
Yurii_74
paladin
280 / 180 / 3
Регистрация: 25.02.2009
Сообщений: 592
11.02.2010, 13:40 #2
Цитата Сообщение от student-zki09 Посмотреть сообщение
Одна с индексами, а другая через указатели
Это как?
Во втором случае требуется использовать int* вместо int**? Тогда вместо a[i][j] нужно будет написать a[i*n + j].

Или же вместо a[i][j] требуется использовать что-то наподобие:
C++
1
2
3
d=*(*(a+i)+j);
*(*(a+i)+j)=*(*(a+i)+(j+1));
*(*(a+i)+(j+1))=d;
1
student-zki09
0 / 0 / 0
Регистрация: 11.02.2010
Сообщений: 4
11.02.2010, 17:58  [ТС] #3
до вашего совета у меня получилось.....вот:(но она вычесляет по всей матрице и меняет местами, а надо чтоб в каждой строке)
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
*Дана матрица А[N,M]. Упорядочить элементы каждой строки в порядке неубывания*/
#include <conio.h>
#include<iostream>
#include<cstdlib>
 
using namespace std;
void main()
{
    
    int n,m, //число строк и число столбцов
        i, //индексы
        d,    //вспомогательная переменная перестановки
        fl; //флаг перестановки
    int *a,*ptr;  //указатель на массив А[][]
    
        
    cout<<"Sozdaem matricu A[n,m]\n"<<"Vvedite chislo strok: n = ";cin>>n;
    cout<<"Sozdaem matricu A[n,m]\n"<<"Vvedite chislo stolbcov: m = ";cin>>m;
 
    a=new int[n*m]; //выделение памяти по двумерный массив
   
    for(i=0,ptr=a;i<n*m;ptr++,i++)
    {
            *ptr=(-3 + rand()%10);
            
        
                                                        
    }
 
                                       
    
    cout<<"Sformirovannaja matrica A[N,M]:\n";
    for(i=0,ptr=a;i<n*m;ptr++,i++)
    {
       if(i%m==0)
           cout<<"\n"; 
       cout<<"  "<<*ptr;
    }
    
    do
    {
        fl=1;  //флаг поднят
    for(i=1,ptr=a;i<n*m;ptr++,i++)
        {
                        
            if(*ptr > *(ptr+1))
                {
                    fl=0; //флаг опущен
                    d=*ptr;
                    *ptr=*(ptr+1);
                    *(ptr+1)=d;
 
                }
            
            
        }
     }
    
    while(!fl); //пока флаг поднят делаем цикл
        
    cout<<"\n"<<"Posle perestanovki elementov v strokah massiv = \n";
    for(i=0,ptr=a;i<n*m;ptr++,i++)
    {if(i%m==0)
           cout<<"\n";
           cout<<"  "<<*ptr;
    }
 
    //освобождение памяти
 
 
 
    delete []a;
getch();
  
    }
0
Yurii_74
paladin
280 / 180 / 3
Регистрация: 25.02.2009
Сообщений: 592
12.02.2010, 06:49 #4
Это условие нужно немного усложнить:
C++
1
if((*ptr > *(ptr+1)) && (i%m!=0))
Вроде бы так.
1
student-zki09
0 / 0 / 0
Регистрация: 11.02.2010
Сообщений: 4
12.02.2010, 07:03  [ТС] #5
блин....вот я тупил....оказывается все просто....а я думал код неправильно составил, а надо было только добавить (i%m!=0).... все заработало....
не подскажите ...какие помимо этого метода еще есть методы работы с указателями?
0
Yurii_74
paladin
280 / 180 / 3
Регистрация: 25.02.2009
Сообщений: 592
12.02.2010, 07:23 #6
Указатель - это всего лишь адрес памяти, ссылка на место хранения данных (либо ссылка на массив ссылок на ... и т. д.). Методы работы - использование трех операций: *, +, -. Обычно используются так, чтобы все было относительно просто и понятно (в данном примере использование еще одного указателя - далеко не очевидный метод работы). Используются в тех случаях, когда стека может не хватить или когда не известен размер используемых данных (что, в принципе, одно и то же). Используются при создании большинства интересных структур: списков, деревьев, графов и т. п. Чрезвычайно полезная вещь при попытке реализовать очень глубокую рекурсию.
1
student-zki09
0 / 0 / 0
Регистрация: 11.02.2010
Сообщений: 4
12.02.2010, 07:53  [ТС] #7
спасибо вам вы мне очень помогли
0
12.02.2010, 07:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2010, 07:53
Привет! Вот еще темы с ответами:

Динамическая память - C++
Как создать массив A через динамическую память ???

Динамическая память - C++
Помогите перевести массивы в динамическую память пожалуйста + почему-то не работает запись в файл(не перезаписывает). #include &lt;iostream&gt;...

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

Динамическая память с++ - C++
Как использовать динамическую память в с++


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

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

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