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

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

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

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

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

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

C++ Написать программу для обработки двумерного массива.
Написать программу обработки файла, состоящего из структур C++
Разработайте программу обработки массивов. Входные данные введите с клавиатуры. C++
C++ Написать программу для обработки массивов
Алгоритмы с неразветвленным телом цикла Разработать алгоритм и программу с единственным циклом для обработки одномерных массивов. C++
Написать программу обработки двумерных массивов, используя динамическое размещение данных C++
C++ Составить программу на языке C++ для обработки двумерных массивов с использованием указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Infinity3000
1057 / 576 / 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;
}
MrGluck
Ворчун
Эксперт CЭксперт С++
6399 / 3597 / 446
Регистрация: 29.11.2010
Сообщений: 9,517
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;
}
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,
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,944
Записей в блоге: 17
12.05.2012, 02:46     Не получается написать программу обработки массивов #5
ser4ega, забыл про
C++
1
2
delete[] arr;
delete[] arr2;
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
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 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;
}
MrGluck
Ворчун
Эксперт CЭксперт С++
6399 / 3597 / 446
Регистрация: 29.11.2010
Сообщений: 9,517
12.05.2012, 04:22     Не получается написать программу обработки массивов #8
Цитата Сообщение от ser4ega Посмотреть сообщение
Добавлено через 3 минуты
MrGluck,
к чему это?

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

Да даже если это просто new BYTE[], не убирать за собой.... это все равно что в общественном туалете не смывать за собой...
SK>"процесс заврешится и все очистится само"
Ну это ясно. Уборщица придет и всяко твое г.. уберет... Дело в какйо-то культуре хотя бы.
Не удалять - пологаться на то что это сделает за вас ОС
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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 там самое место, а не циклом по вектору.
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
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++;}
}
Avazart
7044 / 5221 / 259
Регистрация: 10.12.2010
Сообщений: 22,944
Записей в блоге: 17
12.05.2012, 20:20     Не получается написать программу обработки массивов #12
тут массив забивается рандомно
Числами в диапазоне от 0 до 100
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
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++;}
 }
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,383
Завершенные тесты: 1
12.05.2012, 20:28     Не получается написать программу обработки массивов #14
% - это операция вычисления остатка от деления. То есть в данном случае мы получаем остаток после деления на 10, что дает нам последнею цифру числа.
Функция rand() возвращает число от 0 до RAND_MAX, которое обычно равно максимальному знаковому числу, которое помещается в 4 байта, иногда в 2 байта. Когда функция возвращает число, мы делим его на 100 и берем остаток от этого деления.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 20:31     Не получается написать программу обработки массивов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
SuLLeN
23 / 23 / 4
Регистрация: 27.12.2011
Сообщений: 785
12.05.2012, 20:31  [ТС]     Не получается написать программу обработки массивов #15
Toshkarik, спасибо! Совсем из головы вылетело...
Yandex
Объявления
12.05.2012, 20:31     Не получается написать программу обработки массивов
Ответ Создать тему
Опции темы

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