Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
-1 / 9 / 2
Регистрация: 22.01.2010
Сообщений: 67
1

Вставка столбцов в массиве, после каждого четного столбца. Ошибка в коде.

10.02.2010, 12:28. Показов 1719. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые!

Сначала суть:
Дан двухмерный массив целых из 20 столбцов. Вставить в него столбец из 10 элементов после всех четных столбцов.

Написал программу. Сделал алгоритм через присвоение второму массиву. Ошибка, в общем не получается. Кто делал уже, помогите пожалуйста, скинув самую главную часть в коде программы. Буду весьма признателен!

Добавлено через 14 часов 9 минут
Ответьте пожалуйста !
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2010, 12:28
Ответы с готовыми решениями:

Добавить столбцы после каждого четного столбца матрицы
Дан двумерный динамический массив. И надо добавить столбцы после каждого четного столбца матрицы. Я...

В одномерном динамическом массиве после каждого четного элемента добавить 0
Добрый день. Есть такая задача в одномерном динамическом массиве после каждого четного элемента...

В целочисленном массиве после каждого четного числа вставить максимальный элемент массива
В целочисленном массиве X(N) после каждого четного числа вставить максимальный элемент массива....

В целочисленном массиве после каждого четного числа вставить максимальный элемент массива
В целочисленном массиве X(N) после каждого четного числа вставить максимальный элемент массива....

11
11 / 11 / 2
Регистрация: 09.12.2009
Сообщений: 56
10.02.2010, 15:32 2
Т.е. был массив 20х10, а должен стать 30х10??
0
-1 / 9 / 2
Регистрация: 22.01.2010
Сообщений: 67
14.02.2010, 01:33  [ТС] 3
Т.е. был массив 10х20, а стал 10х30
Помогите, это последняя 31я задача (
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
14.02.2010, 01:35 4
Цитата Сообщение от Abortmaher007 Посмотреть сообщение
Написал программу. Сделал алгоритм через присвоение второму массиву. Ошибка, в общем не получается.
Выложите ваши наработки пожалуйста, я не совсем понял где затруднение
0
-1 / 9 / 2
Регистрация: 22.01.2010
Сообщений: 67
14.02.2010, 01:36  [ТС] 5
Хорошо, просто я что-то не правильно делал, выложу
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
14.02.2010, 01:42 6
Смотрите, сначало просто копируете из того что 10х20 в 10х30. Второй больше - в него все влезет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for (int i = 0; i < 10; i++)
   for (int j = 0; j < 21)
   { // B - второй более крупный массив
       if ( j == 20 )
       {
           type* C = &B[j];
           for (int k = 0; k < 10; k++)
           {
               // то что мы тут сделаем с C отразится на B
               // редактируя C[0] мы редактируем B[20]
           }
       continue;
       }
       B[i][j] = A[i][j];
   }
Хм... но в вашем случае нужно найти четный столбец и после него уже что то делать с С... что то я не смекну как сделать задачку. Может вы что попробуете? Иль сложно то что выше?
1
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
14.02.2010, 09:20 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int j = 0, j_a = 0; j < 30; j++)
{
   for (int i = 0; i < 10; i++)
   {
      if ((j+1) % 2 ==0)
         b[i][j] = c[i];
      else
         b[i][j] = a[i][j_a]
   }
   if ((j+1) % 2 != 0)
      j_a++;
}
a[10][20] - исходный массив
b[10][30] - получаемый массив
c[10] - массив содержащий вставляемый столбец
1
-1 / 9 / 2
Регистрация: 22.01.2010
Сообщений: 67
14.02.2010, 20:34  [ТС] 8
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<stdio.h>
#include<math.h>
main()
{
int a[10][20]={{1,1,1,4},
             {1,1,4,1},
             {1,4,1,1},
             {4,1,1,1}};
int d[10][30];
int i=0, j=0;
int n=2;
int s;
 
for(i=0;i<10;i++)
{
for(j=0;j<30;j++)
{
if(j==n)
{
n=n+3;
d[i][j]=10;
d[i][j+1]=a[i][j];
}
else
d[i][j]=a[i][j];
printf(" d[%d][%d]=%d\n ", i, j, d[i][j]);
}
}
getch();
return;
}
}
Мне нужно на Турбо Си, уважаемые! Где здесь ошибка ?
Присваивает не во всех строках!
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
14.02.2010, 20:56 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    for(int i = 0; i < 10; i++) // i - строка
    {
        for(int j = 0; j < 30; j++) // j столбец
        {
            if( (j & 1) == 0 )
            // вставлять надо после четных столбцов
            // т.е. в нечетный
            {
                d[i][j] = 10; // не знаю что вставлять, пусть 10
            }
            else
            {
                d[i][j] = a[i][j];
            }
            printf("%d ", d[i][j]);
        }
        printf("\n");
    }
Турбо Си нету, но думаю это запустится. А присваивается может т.к. вы не заполнили весь массив?
1
-1 / 9 / 2
Регистрация: 22.01.2010
Сообщений: 67
14.02.2010, 21:02  [ТС] 10
В массиве на Си при не полной инициализации все забытые элементы приравниваются нулю. Ошибки в этом нет. Сейчас посмотрим Ваше

Добавлено через 3 минуты
Тут совсем не такой алгоритм, извините, но даже запустить если - будет совсем другая программа. Вставка - не замена. Алгоритм проводится через n, строки в массиве и столбцы считаются от нуля
0
Автор FAQ
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
14.02.2010, 21:22 11
Прошу прощения, тяжело понять что вы хотите. Напишите исходные данные и те которые должны получиться. Кстати "Вставка - не замена" конечно, но о какой замене может идти речь когда массив d вообще заполняется с нуля? Считать четный не четный столбец можно заменяя ноль на один, как вам угодно...
if( (j & 1) == 0 )
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
15.02.2010, 13:15 12
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
int main()
{
   int a[10][20];
   int b[10][30];
   int i, j, j_a;
 
   /*srand(time(NULL)); */
 
   for (i = 0; i < 10; i++)
   {
      for (j = 0; j < 20; j++)
      {
         a[i][j] = rand() % 3 +2;
         printf("%2i", a[i][j]);
      }
      printf("\n");
   }
   printf("\n");
   j_a = 0;
   for (j = 0, j_a = 0; j < 30; j++, j_a++)
   {
      if (j_a % 2 == 0 && j_a != 0)
      {
         for (i = 0; i < 10; i++)
         {
            b[i][j] = 1;
            b[i][j+1] = a[i][j_a];
         }
         j++;
      }
      else
         for (i = 0; i < 10; i++)
         {
            b[i][j] = a[i][j_a];
         }
   }
   for (i = 0; i < 10; i++)
   {
      for (j = 0; j < 30; j++)
      {
         printf("%2i", b[i][j]);
      }
      printf("\n");
   }
   getch();
   return 0;
}
0
15.02.2010, 13:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2010, 13:15
Помогаю со студенческими работами здесь

В массиве из 4 строк и 3 столбцов найти наименьший элемент каждого столбца
В массиве из 4 строк и 3 столбцов найти наименьший элемент каждого столбца

Первый элемент каждого четного столбца матрицы заменить суммой простых чисел этого столбца
Надо решить такую задачу,помогите,а то не шарю що делать: Задана матрица A(n,n). Первый элемент...

Произведение каждого четного столбца массива
Помогите, кому не сложно, пожалуйста) В двумерном массиве чисел подсчитать произведение каждого...

Среднее арифметическое каждого (четного) столбца матрицы
Дано натуральное число n, действительная матрица размером n*9. Найти среднее арифметическое: а)...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru