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

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

Войти
Регистрация
Восстановить пароль
 
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
#1

Переписать в новый массив - C++

05.10.2009, 19:59. Просмотров 798. Ответов 9

Дан массив а(10). Надо из этого массива элементы, которые делятся на 2 переписать в массив в, а которые делятся на 3 - в массив с. Программа работает, но при выводе ответа не получается матрица, всё в строчку и выглядить примерно так(что не есть правильно):
Input 10 number:
5 9 -4 9 1 -5 9 3 -4 8
-858993460-858993460-858993460-858993460-858993460-858993460

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
// Lab4. Задача 3.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "conio.h"
#define SIZE_10
 
int _tmain(int argc, _TCHAR* argv[])
{ int a[10], b[10], c[10], k1,k2,i;
  
  printf("Input 10 numbers, \n");
  for(i=0;i<10;i++)
      scanf("%d", &a[i]);
      k1=0;
      k2=0;
 
  for(i=0;i<10;i++)
  { if(a[i]%2==0)
    b[k1]=a[i];
    k1=k1+1;
  }
  { if(a[i]%3==0)
    c[k2]=a[i];
    k2=k2+1;
  }
 
  for(i=0;i<k1;i++)
  printf("%d", b[i]);
  printf("\n");
 
  for(i=0;i<k2;i++)
  printf("%d", c[i]);
  
  getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2009, 19:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переписать в новый массив (C++):

Дан массив A(23). Переписать в новый массив все элементы, расположенные после последнего отрицательного. - C++
Задача Дан массив A(23). Переписать в новый массив все элементы, расположенные после последнего отрицательного. В новом массиве...

Переписать в новый массив в зависимости от условия - C++
Функция Test проверяет элементы массива на простоту, и возвращает true/false Если в начальном массиве сначала идут простые числа, то...

Элементы заданного массива b(n) переписать в новый массив a(n) в обратном порядке. - C++
Помогите пожалуйста!! 2. Элементы заданного массива b(n) переписать в новый массив a(n) в обратном порядке.

Переписать в новый массив элементы по модулю не большие заданного числа - C++
Ввести массив из 12 вещественных чисел. Создать новый массив из элементов исходного, в который не включать элементы, которые по модулю...

5. Элементы заданного массива b(n) переписать в новый массив a(n) в обратном порядке - C++
5. Элементы заданного массива b(n) переписать в новый массив a(n) в обратном порядке.

Переписать в новый целочисленный массив B все элементы с порядковыми номерами, кратными трем - C++
Дан целочисленный массив A размера N(&lt;=15). Переписать в новый целочисленный массив B все элементы с порядковыми номерами, кратными трем...

9
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
05.10.2009, 20:20 #2
какой у вас язык используется? С или С++

Добавлено через 8 минут
позвольте пару замечаний к коду.
1. #define SIZE_10 - поставьте пробел вот так #define SIZE_ 10 или замените на #define N 10
и во всех for(i=0;i<10;i++) поставьте for(i=0;i<N;i++), а так же int a[N], b[N], c[N],
почитайте в любой книге по С\C++ про define, очень полезная штука. это для вашего самосовершентсвования
2. подобная структура k1=k1+1; заменяется на k1++; - то же аккуратненько
3. у вас ошибка в расстовлении скобок
C
1
2
3
4
5
6
7
8
9
 for(i=0;i<10;i++)
  { if(a[i]%2==0)
    b[k1]=a[i];
    k1=k1+1;
  }
  { if(a[i]%3==0)
    c[k2]=a[i];
    k2=k2+1;
  }
замените на
C
1
2
3
4
5
6
7
8
 for(i=0;i<10;i++)
  { 
    if(a[i]%2==0)
    { b[k1]=a[i]; k1++;}
  
   if(a[i]%3==0)
   { c[k2]=a[i];  k2++;}
  }
0
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
05.10.2009, 20:51  [ТС] #3
TanT, С++

хм...у меня выводиться так:
Input 10 number:
3 7 -9 8 1 4 -6 3 7 3

84- 6

опять же, это не является матрицей чисел...что я не правильного задаю? надо, чтобы после выводилиьс массивы-матрицы чисел а, в и с
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.10.2009, 20:55 #4
во первых printf и scanf - это не С++, а С. У С++ вместо этого есть std::cout и std::cin.
Далее. Вы объявляете и работаете с одномерным массивом, а матрица - это двумерный массив. Значит и объявлять надо как двумерный массив, т.е.
C++
1
int a[10][10];
0
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
05.10.2009, 21:01 #5
Цитата Сообщение от NastiKor Посмотреть сообщение
TanT, С++

хм...у меня выводиться так:
Input 10 number:
3 7 -9 8 1 4 -6 3 7 3

84- 6

опять же, это не является матрицей чисел...что я не правильного задаю? надо, чтобы после выводилиьс массивы-матрицы чисел а, в и с
выложите код с учётом замечаний и всё встанет на свои места
0
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
05.10.2009, 21:09  [ТС] #6
Изменила так:

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
#include "conio.h"
#define N 10
 
int _tmain(int argc, _TCHAR* argv[])
{ int a[N], b[N], c[N], k1,k2,i;
  
  printf("Input 10 numbers, \n");
  for(i=0;i<10;i++)
      scanf("%d", &a[i]);
      k1=0;
      k2=0;
  for(i=0;i<10;i++)
      if(a[i]%2==0)
       b[k1++]=a[i];
      if(a[i]%3==0)
      c[k2++]=a[i];
  for(i=0;i<k1;i++)
   printf("%d ", b[i]);
   printf("\n");
  for(i=0;i<k2;i++)
   printf("%d ", c[i]);
    getch();
  return 0;
    }
Теперь ввожу след. числа:
1 1 2 23 33 60 -15 4 21 7
потом получаю числа, которые делятся на 2:
2 60 4
потом по идеи он должен показать числа, которые деляться на 3,т.е. 33 60 -15 21, но сразу закрывается окно программы...хм...м.б. гетч поставить где-то между двумя матрицами?

P/S Да, матрица должна получиться одномерной
0
Rififi
2359 / 1052 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
05.10.2009, 21:15 #7
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
#include <algorithm>
#include <functional>
#include <iterator>
#include <iostream>
 
/*
    Дан массив а(10).
    Надо из этого массива элементы, которые делятся на 2 переписать в массив в,
    а которые делятся на 3 - в массив с.
*/
 
template <typename T>
struct divider : public std::unary_function<T, bool>
{
    divider(T x) : x_(x) {}
    bool operator()(T val) const
    { return (val % x_) == 0; }
    T x_;
};
 
template <typename It>
void out(It begin, It end)
{
    typedef typename std::iterator_traits<It>::value_type value_type;
    std::copy(begin, end, std::ostream_iterator<value_type>(std::cout, " "));
    std::cout << std::endl;
}
 
 
int main()
{
    const size_t N = 10;
    const int a[N] = {1,2,3,4,5,6,7,8,9,10};
    int b[N] = {0}, c[N] = {0};
 
    out(b, std::remove_copy_if(a, a+N, b, std::not1(divider<int>(2))));
    out(c, std::remove_copy_if(a, a+N, c, std::not1(divider<int>(3))));
 
    return 0;
}
проверка: http://codepad.org/9sY5r8OT
1
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
05.10.2009, 21:18 #8
C
1
2
3
4
5
6
7
8
9
for(i=0;i<10;i++)
         {
 
if(a[i]%2==0)
           b[k1++]=a[i];
          if(a[i]%3==0)
          c[k2++]=a[i];
 
}
Добавлено через 51 секунду
скобки опять забыли, и не все 10 заменили на N
1
NastiKor
1 / 1 / 0
Регистрация: 05.10.2009
Сообщений: 101
05.10.2009, 21:24  [ТС] #9
Спасибо, снова мне помогли
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
05.10.2009, 21:26 #10
Цитата Сообщение от NastiKor Посмотреть сообщение
TanT, С++
вот решение
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
#include <iostream>
 
int main()
{
    setlocale (LC_ALL, "Russian");
    int a[10], b[10], c[10], i, bi(0), ci(0);
 
    std::cout<<"Введите массив из 10 элементов:\n";
    for(i = 0; i < 10; ++i)
        std::cin>>a[i];
 
    for(i = 0; i < 10; ++i)
    {
        if(a[i] % 2 == 0)
            b[bi++] = a[i];
        if(a[i] % 3 == 0)
            c[ci++] = a[i];
    }
 
    std::cout<<"Элементы которые делятся на 2:\n";
    for(i = 0; i < bi; ++i)
        std::cout<<b[i]<<' ';
    std::cout<<"\nЭлементы которые делятся на 3:\n";
    for(i = 0; i < ci; ++i)
        std::cout<<c[i]<<' ';
    std::cout<<std::endl;
    system("pause");
    return 0;
}

Матрица по определению не может быть одномерной
0
05.10.2009, 21:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2009, 21:26
Привет! Вот еще темы с ответами:

Все элементы заданной матрицы, попадающие в интервал [2, 9] переписать в новый массив. Подсчитать количество элементов в новом массиве - C++
Дана матрица G . Все элементы, попадающие в интервал переписать в новый массив. Подсчитать количество элементов в новом массиве.

В новый файл переписать каждую строку наоборот - C++
12 . В новый файл переписать каждую строку наоборот.

Из строк все цифры переписать в новый файл - C++
Из строк все цифры переписать в новый файл.

Переписать в новый файл строки по возрастанию длины - C++
Переписать из файла f1 (содержащего строки разной длинны) строки по возрастанию длинны в файл f2. Запуталась с циклами конкретно :( ...


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

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

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