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

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

Войти
Регистрация
Восстановить пароль
 
Элеонора
7 / 2 / 1
Регистрация: 20.09.2010
Сообщений: 39
#1

Динамический массив - C++

17.09.2012, 20:09. Просмотров 711. Ответов 3
Метки нет (Все метки)

Распечатать элементы динамического массива mas[][] в одномерный динамический a[].
1 по правым диагоналям, начиная с правого верхнего элемента
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
using std::cout;
#define N 5
#define M 5
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
   int i, j, n, tmp;
   unsigned char **mas;
   unsigned char *m;
   unsigned char *a;
   srand(time(NULL));
 
    mas = (unsigned char**) malloc(M * sizeof(unsigned char*));
    a = (unsigned char*) malloc(M * sizeof(unsigned char*));
    
    for (i=0; i<M; i++)
    {
        mas[i] = (unsigned char*) malloc(N * sizeof(unsigned char));
        a[i] = (unsigned char) malloc(M * sizeof(unsigned char));
    
        for (i=0; i<M; i++)
        {   mas[i] = (unsigned char*) malloc(N * sizeof(unsigned char));
            for (j=0; j<N; j++)
            { 
                
                 mas[i][j]=(rand()%100);
            }
        }
    }
                
     for (i=0; i<M; i++)
    {
        printf("\n\n");
        for (j=0; j<N; j++)
            printf("%7.1u", mas[i][j]);
    }
     printf("\n\n");
 
getch();
return 0;
 
}
Добавлено через 23 минуты
Help me, please ^_^
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2012, 20:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический массив (C++):

Можно ли в классе создавать массив переменной длинны. Например динамический массив? - C++
Динамические массивы привлекают больше. :)

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

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

Заполнить динамический массив из файла и записать массив обратно в файл - C++
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из файла и обратную которая этот массив запишет в файл=)

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

Как преобразовать массив в динамический? Массив вычисляет сумму элементов каждой диагонали матрицы - C++
Ошибка : Вызвано исключение по адресу 0x00BB2F4F в Проект6.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFE05. #...

3
RinatV
115 / 108 / 5
Регистрация: 15.05.2012
Сообщений: 318
Записей в блоге: 10
17.09.2012, 20:25 #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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
using std::cout;
#define N 5
#define M 5
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
   int i, j, n, tmp;
   unsigned char **mas;
   unsigned char *m;
   unsigned char *a;
   srand(time(NULL));
 
    mas = (unsigned char**) malloc(M * sizeof(unsigned char*));
    a = (unsigned char*) malloc(M * N * sizeof(unsigned char*)); // будет размером M*N
    
    for (i=0; i<M; i++)
    {
        mas[i] = (unsigned char*) malloc(N * sizeof(unsigned char));
/*        a[i] = (unsigned char) malloc(M * sizeof(unsigned char));  // не нужно его инициализировать каждый раз*/
    
/*        for (i=0; i<M; i++)
        {   mas[i] = (unsigned char*) malloc(N * sizeof(unsigned char)); // тоже не нужно*/
            for (j=0; j<N; j++)
            { 
                
                 mas[i][j]=(rand()%100);
            }
/*      } */
    }
                
     for (i=0; i<M; i++)
    {
        printf("\n\n");
        for (j=0; j<N; j++)
            printf("%7.1u", mas[i][j]);
    }
     printf("\n\n");
// тут должен быть код задач
// тут должен быть вывод массива a
getch();
return 0;
 
}
в итоге правильная заготовка
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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <iostream>
using std::cout;
#define N 5
#define M 5
 
 
int _tmain(int argc, _TCHAR* argv[])
{ 
   int i, j, n, tmp;
   unsigned char **mas;
   unsigned char *m;
   unsigned char *a;
   srand(time(NULL));
 
    mas = (unsigned char**) malloc(M * sizeof(unsigned char*));
    a = (unsigned char*) malloc(M * N * sizeof(unsigned char*));
    
    for (i=0; i<M; i++){
        mas[i] = (unsigned char*) malloc(N * sizeof(unsigned char));
        for (j=0; j<N; j++){ 
            mas[i][j]=(rand()%100);
        }
    }
 
 
    for (i=0; i<M; i++){
        printf("\n\n");
        for (j=0; j<N; j++)
            printf("%7.1u", mas[i][j]);
    }
    printf("\n\n");
 
// тут должен быть код задач
 
    printf("\n\n");
    for (i=0; i<N*M; i++)
        printf("%7.1u", a[i]);
    printf("\n\n");
    getch();
 
    return 0;
}
1
Элеонора
7 / 2 / 1
Регистрация: 20.09.2010
Сообщений: 39
17.09.2012, 20:31  [ТС] #3
А как быть с алгоритмами вывода по диагоналям?
0
RinatV
115 / 108 / 5
Регистрация: 15.05.2012
Сообщений: 318
Записей в блоге: 10
18.09.2012, 00:28 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int k=0;
int c=1;//количество элементов в диоганали
for(int i=M;i>0;i--){
        for(int n=0;n<c;n++){
                a[k]=mas[i+n][n];
                k++;
        }
        if(с<N)c++;     // увеличивается если не достигли дна
}
 
c=(N>M)?M:N; // выбирается минимальная длина стороны
for(int i=0;i<N;i++){
        if((i+c)>N)c--;// уменьшается если начнем упираться в дно
        for(int n=0;n<c;n++){
                a[k]=mas[n][i+n];
                k++;
        }
}
не проверено могут быть ошибки

логика: сперва выбираем данные спускаясь по диагоналям, увеличивая количество элементов в диоганали пока не начнем упиратся в дно в случае продолговаго массива

для нижней части уменьшаем количество элементов когда начинаем упиратся в дно

Добавлено через 1 час 54 минуты
спираль

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
/*
для того чтобы выбрать элементы из массива по спирали можно придумать робот 
работающей по следующей логике
вначале робот находится в некой позиции 
и известны 4 ограничения координат сверху справа снизу всерху 
они равны начальным координатам
в каждом цикле робот забирает элемент под собой 
и двигается в заданном направлении
если он вдруг оказывается выше ограничения направления 
то должен сменить направление и записать новое ограничение направления
таким образом создается спираль
 
робот забирает элементы если они находятся в поле, 
заканчивает работу если собраны все элементы
*/
 
int rn=0,ri=M/2,rj=N/2,ru=ri,rd=ri,rr=rj,rl=rj;
int k=0;
 
while(k<(M*N)){
    if((ri>=0)&&(ri<M)&&(rj>=0)&&(rj<N)){
        a[k]=mas[ri][rj];
        k++;
    }
    switch(rn){
        case 0:
            ri--;
            if(ri<ru){
                ru=ri;
                rn=1;
            }
            break;
        case 1:
            rj++;
            if(rj>rr){
                rr=rj;
                rn=2;
            }
            break;
        case 2:
            ri++;
            if(ri>rd){
                rd=ri;
                rn=3;
            }
            break;
        case 3:
            rj--;
            if(rj<rl){
                rl=rj;
                rn=0;
            }
            break;
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 00:28
Привет! Вот еще темы с ответами:

Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) - C++
Создать динамический массив из 8 случайных целых чисел из отрезка и вывести его на экран . Если в массиве чётных чисел оказалось...

Двумерный массив (поменять статический массив на динамический) - C++
Нужно поменять статический массив на динамический с выделением памяти #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; ...

Массив и память. Как создать динамический массив? - C++
не могу исправить ошибки. И нужен динамический массив я что-то попробовала для его создания но ничего не вышло #include &quot;stdafx.h&quot; ...

Переделать динамический массив на статический массив - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main() { int dim, counter_1 = 1, counter_2 =...


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
18.09.2012, 00:28
Ответ Создать тему
Опции темы

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