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

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

Войти
Регистрация
Восстановить пароль
 
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 794
#1

Не получается написать программу обработки массивов - C++

11.05.2012, 07:19. Просмотров 705. Ответов 14
Метки нет (Все метки)

Доброго времени суток!
Помогите пожалуйста составить програму по заданию:
Дан массив, состоящий из n натуральных чисел. Образовать новый массив, элементами которого будут элементы исходного, оканчивающиеся на цифру k.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2012, 07:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается написать программу обработки массивов (C++):

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

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

Разработайте программу обработки массивов. Входные данные введите с клавиатуры. - C++
Здравствуйте уважаемые любители и ценители языка С++! У меня к вам огромная просьба. На днях нужно сдать контрольную работу по предмету...

Составить программу на языке C++ для обработки двумерных массивов с использованием указателей - C++
Дана матрица порядка n. Найти в последнем столбце max и min. Если в матрице есть нули, то заменить их суммой max и min последнего столбца. ...

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

Оформить программу в виде функций обработки массивов (ввод, заполнение, вывод, упорядочение и т.п.) - C++
помогите, пожалуйста, с программой, не могу никак разобраться с функциями, сколько уже отмучалась с ними! вот я тут что-то мутила с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
12.05.2012, 01:19 #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
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main(void)
{
    srand(time(0));
    const int n = 20;
    int k, count = 0, j = 0;
    int *mas = new int [n];
    cout << "Enter k - ";
    cin >> k;
    for(int i = 0; i < n; i++)
    {
        cout << (mas[i] = rand() % 100) << " ";
        if(mas[i] % 10 == k)
        {
            count++;
        }
    }
    cout << endl;
    int *mas1 = new int [count];
    for(int i = 0; i < n; i++)
    {
        if(mas[i] % 10 == k)
        {
            mas1[j] = mas[i];
            cout << mas1[j] << " ";
            j++;
        }
    }
    delete [] mas;
    delete [] mas1;
    system("pause >> null");
    return 0;
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
12.05.2012, 01:53 #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
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <iterator>
#include <random>
#include <vector>
 
bool myfunction(int x, int k)
{
    return x % 10 == k;
} 
 
int main()
{
   std::random_device rd;
   std::mt19937 gen(rd());
   std::uniform_int_distribution<> urd(0, 99);
   const int N = 15; 
   int arr[N], *arr2, k = 4;
   std::vector <int> v;
   std::generate(arr, arr + N, [&urd, &gen] { return urd(gen); }); 
   std::copy(arr, arr + N, std::ostream_iterator<int>(std::cout, " "));
   for(int i=0; i < N; i++)
       if (myfunction(arr[i], k)) v.push_back(arr[i]);
   arr2 = new int[v.size()];
   std::copy(v.begin(), v.end(), &arr2[0]);
   std::cout<< std::endl; 
   std::copy(arr2, arr2 + sizeof(arr2) / sizeof(arr2[0]), std::ostream_iterator<int>(std::cout, " "));
   return 0;
}
1
ser4ega
27 / 27 / 3
Регистрация: 15.11.2009
Сообщений: 143
12.05.2012, 02:13 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdlib>
#include <iostream.h>
 
 
int main()
{
    srand(time(0));
    int k,n,j=0;
    cin>>n;
    while(k>9||k<0)cin>>k;
    int *arr=new int[n];
    int *arr2=new int[n];
    for(int i=0;i<n;i++)
    {arr[i]=rand()%100;
if(arr[i]%10==k) {arr2[j]=arr[i]; j++;}
}    
     for(int i=0;i<j;i++)
     cout<<arr2[i]<<", ";
    cout<<endl;
    system("PAUSE");
    return 0;
}
Добавлено через 3 минуты
MrGluck,
1
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,673
Записей в блоге: 17
12.05.2012, 02:46 #5
ser4ega, забыл про
C++
1
2
delete[] arr;
delete[] arr2;
1
ser4ega
27 / 27 / 3
Регистрация: 15.11.2009
Сообщений: 143
12.05.2012, 03:12 #6
Avazart, ты веришь в жизнь после returna?) http://www.rsdn.ru/forum/cpp/3623123.flat.aspx
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
12.05.2012, 04:18 #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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <ctime>
 
 
int main() {
   const std::size_t size = 20;
   
   int array1[ size ] = { 0 },
       array2[ size ] = { 0 },
       k = 0;
   
   unsigned int count = 0;
   
   std::srand( std::time( 0 ));
   
   std::cout << "Enter 'k':";
   std::cin >> k ;
   
   std::cout << "Original array: " << std::endl;
   for ( std::size_t i = 0; i < size; i++ ) {
      array1[ i ] = std::rand() % 100;
      
      std::cout << std::setw( 2 ) << array1[ i ] << ' ';
      
      if( array1[ i ] % 10 == k )
         array2[ count++ ] = array1[ i ];
   }
   
   std::cout << "\n\nProcessed array:" << std::endl;
   for ( std::size_t i = 0; i < count; i++ )
      std::cout << std::setw( 2 ) << array2[ i ] << ' ';
   
   std::cout << std::endl;
   
   return 0;
}
Добавлено через 14 минут
Можно вот так с динамической памятью:
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <ctime>
 
 
int main() {
   std::size_t size = 0,
               count = 0;
   
   int *array1 = 0,
       *array2 = 0,
        k = 0;
   
   std::srand( std::time( 0 ));
   
   std::cout << "Enter size of array: ";
   std::cin >> size;
   
   std::cout << "Enter 'k':";
   std::cin >> k ;
   
   array1 = new int [ size ],
   array2 = new int [ size ],
   
   std::cout << "Randomized array: " << std::endl;
   for ( std::size_t i = 0; i < size; i++ ) {
      array1[ i ] = std::rand() % 100;
      
      std::cout << std::setw( 2 ) << array1[ i ] << ' ';
      
      if( array1[ i ] % 10 == k )
         array2[ count++ ] = array1[ i ];
   }
   
   if ( 0 < count && count < size ) {
      int *temp = array2;
      
      array2 = new int [ count ];
      memcpy( array2, temp, count * sizeof( array2[ 0 ]));
      
      delete [] temp;
   }
   
   std::cout << "\n\nProcessed array:" << std::endl;
   for ( std::size_t i = 0; i < count; i++ )
      std::cout << std::setw( 2 ) << array2[ i ] << ' ';
   
   std::cout << std::endl;
   
   delete [] array1;
   delete [] array2;
   
   return 0;
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
12.05.2012, 04:22 #8
Цитата Сообщение от ser4ega Посмотреть сообщение
Добавлено через 3 минуты
MrGluck,
к чему это?

Цитата Сообщение от ser4ega Посмотреть сообщение
Avazart, ты веришь в жизнь после returna?) http://www.rsdn.ru/forum/cpp/3623123.flat.aspx
Avazart сделал правильное замечание, память нужно освобождать.
0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,673
Записей в блоге: 17
12.05.2012, 04:52 #9
От тудва Же

Да даже если это просто new BYTE[], не убирать за собой.... это все равно что в общественном туалете не смывать за собой...
SK>"процесс заврешится и все очистится само"
Ну это ясно. Уборщица придет и всяко твое г.. уберет... Дело в какйо-то культуре хотя бы.
Не удалять - пологаться на то что это сделает за вас ОС
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
12.05.2012, 11:14 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
 
int main()
{
   const int k = 5;
   std::vector<int> vec = {1, 15, 25, 3, 4, 55};
   std::vector<int> res;
   std::copy_if(vec.begin(), vec.end(), std::back_inserter(res), [k](const int value) { return value % 10 == k; });
   std::copy(res.begin(), res.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
MrGluck, Код - адище конечно. Использованы фичи С++11, но при этом не использована лямбда, которая там смотрелась куда лучше бы, зачем-то динамический массив, хотя копировать в вектор на мой взгляд куда удобнее и логичнее. copy_if там самое место, а не циклом по вектору.
1
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 794
12.05.2012, 20:12  [ТС] #11
Подскажите пожалуйста,
C++
1
2
3
4
5
6
7
int *arr=new int[n];
int *arr2=new int[n];
for(int i=0;i<n;i++)
{arr[i]=rand()%100; - тут массив забивается рандомно на 100% ( каждая выделенная ячейка )?
if(arr[i]%10==k) - что это значит?
{arr2[j]=arr[i]; j++;}
}
0
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,673
Записей в блоге: 17
12.05.2012, 20:20 #12
тут массив забивается рандомно
Числами в диапазоне от 0 до 100
0
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 794
12.05.2012, 20:25  [ТС] #13
Значит %10 - это диапазон от 0 до 10?
Тогда не понимаю код программы:
C++
1
2
3
4
5
6
7
int *arr=new int[n]; //создает массив arr
 int *arr2=new int[n]; //создает массив arr2
 for(int i=0;i<n;i++)
 {arr[i]=rand()%100; //забивает числами от 0 до 100
 if(arr[i]%10==k) // и тут ступор=)
 {arr2[j]=arr[i]; j++;}
 }
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
12.05.2012, 20:28 #14
% - это операция вычисления остатка от деления. То есть в данном случае мы получаем остаток после деления на 10, что дает нам последнею цифру числа.
Функция rand() возвращает число от 0 до RAND_MAX, которое обычно равно максимальному знаковому числу, которое помещается в 4 байта, иногда в 2 байта. Когда функция возвращает число, мы делим его на 100 и берем остаток от этого деления.
1
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 794
12.05.2012, 20:31  [ТС] #15
Toshkarik, спасибо! Совсем из головы вылетело...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 20:31
Привет! Вот еще темы с ответами:

Алгоритмы с неразветвленным телом цикла Разработать алгоритм и программу с единственным циклом для обработки одномерных массивов. - C++
При заданных координатах C1,C2,...,Cn одной точки и ко-ординатах B1,B2,...,Bn другой точки n-мерного пространства найти расстояние между...

написать и отладить программу обработки строк - C++
Проверить, имеется ли в заданном тексте баланс открывающихся и закрывающихся скобок.

Написать программу для обработки символьных данных - C++
Предусмотрите ввод с клавиатуры произвольной строки символов. На экран вывести введенную строку и результат ее обработки. Найти пару...

Написать программу для обработки информации об автомобилях - C++
Написать программу для обработки информации об автомобилях, сдаваемых на прокат (марка автомобиля, год выпуска, километраж). Программа...


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

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

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