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

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

Войти
Регистрация
Восстановить пароль
 
 
Алена_Коваленко
Заблокирован
#1

Дан массив. Удалить из него нули и после каждого числа, оканчивающегося на 5, вставить 1 - C++

20.02.2014, 00:34. Просмотров 1045. Ответов 23
Метки нет (Все метки)

Задание: Дан массив. Удалить из него нули и после каждого числа, оканчивающегося на 5, вставить 1.

Нули из массива удалила, и теперь не знаю как вставлять 1 в полученный массив.
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
//
#include <iostream>
#include <conio.h>
#include <ctime>
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian" );
    int n,i,k,j;
    cout << "Введите кол-во элементов массива: ";
    cin >> n;
    int a[n];
    srand(time(NULL)|clock());
    for (i=0; i<n; i++)
        a[i]=0+rand()%15;
    cout << "Получен массив из  " << n << " элементов. Диапазон [0;15]";
    for (i=0; i<n; i++)
        cout << a[i]<< endl;
    cout << endl;
    k=n;
    
    for (i=0; i<n; i++)
    {if (a[i]==0)
       {k--;}
       else cout << a[i] << " \n";}          //массив без нулей
    cout << k<< endl;  
    
    
 /*  for (i=0; i<k; i++)
      { if (a[i]==5)
          
          
          
          }
         */
 
    _getch(); 
    return 0;
       
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 00:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан массив. Удалить из него нули и после каждого числа, оканчивающегося на 5, вставить 1 (C++):

Одномерные массивы: Удалить из массива нули и после каждого числа, оканчивающегося на 5, вставить 1 - C++
Дан массив. Удалить из него нули и после каждого числа, оканчивающегося на 5, вставить 1.

Дан массив из n целых чисел. До и после каждого числа, кратного 7, вставить число, равное 5 - C++
через функцию Дан массив из n целых чисел. До и после каждого числа, кратного 7, вставить число, равное 5.

Дан массив из n целых чисел. До и после каждого числа, кратного 7, вставить число, равное 5 - C++
нужно сделать вставку в массив.

Дан массив из n целых чисел. До и после каждого числа, кратного 7, вставить число, равное 5 - C++
надо осуществлять в этом же массиве A, не знаю как это сделать.... using namespace std; void ShowArr(int *A,int N) { ...

Дан целочисленный массив, нужно исключить из него все нули - C++
Дан целочисленный массив, нужно исключить из него все нули. Если нулей нет-написать &quot;сжатие невозможно&quot;. Составить динамический массив и...

Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0 - C++
Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0.

23
zvoronz
271 / 239 / 21
Регистрация: 29.05.2012
Сообщений: 889
20.02.2014, 00:39 #2
Из самого массива вы ничего не удалили, вы только не выводите нули.
Так сделайте также, возьмите и если встретилось 5 то после того как выведете 5 выведите ещё и 1.
C++
1
2
3
4
5
6
7
8
9
10
........................
for (i=0; i<n; i++)
    {if (a[i]==0)
       {k--;}
       else cout << a[i] << " \n";}          //массив без нулей
      if (a[i]==5)
       {k++;
       cout << "1" << " \n";}          //массив без нулей и с 1 после 5-ки
    cout << k<< endl; 
.............
0
Алена_Коваленко
Заблокирован
20.02.2014, 00:44  [ТС] #3
zvoronz, а нули нужно удалять или просто их не выводить?
0
zvoronz
271 / 239 / 21
Регистрация: 29.05.2012
Сообщений: 889
20.02.2014, 00:49 #4
По условию задачи написано что вроде же как удалять. В принципе ваше решение тоже можно считать верным если как бы производится фильтрация вывода, то решение верное, если нужно передавать массив куда то дальше, то не верное.
0
Алена_Коваленко
Заблокирован
20.02.2014, 00:55  [ТС] #5
zvoronz, а как сделать чтоб удалять? Нужно сделать чтобы еще элементы сдвигались, я правильно поняла?
0
zvoronz
271 / 239 / 21
Регистрация: 29.05.2012
Сообщений: 889
20.02.2014, 00:57 #6
Да, вы абсолютно правы.
1
Алена_Коваленко
Заблокирован
20.02.2014, 01:08  [ТС] #7
zvoronz, сделала, теперь у меня элементы вроде как удаляются, но вот с добавлением... Получается мы берем массив, который получился, ищем 5 и ставим после него значение 1, и остальные элементы тоже сдвигаются. А как это реализовать, не могу понять.
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
//Г„Г*Г* Г¬Г*Г±Г±ГЁГў. ÓäГ*ëèòü ГЁГ§ Г*ГҐГЈГ® Г*óëè ГЁ ïîñëå ГЄГ*æäîãî Г·ГЁГ±Г«Г*, îêГ*Г*Г·ГЁГўГ*ГѕГ№ГҐГЈГ® Г*Г* 5, ГўГ±ГІГ*ГўГЁГІГј 1.
#include <iostream>
#include <conio.h>
#include <ctime>
 
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian" );
    int n,i,k,j;
    cout << "Ââåäèòå êîëè÷åñòâî ýëåìåГ*òîâ Г¬Г*Г±Г±ГЁГўГ*: ";
    cin >> n;
    int a[n];
    srand(time(NULL)|clock());
    for (i=0; i<n; i++)
        a[i]=0+rand()%15;
    cout << "Ïîëó÷åГ* ñëó÷Г*Г©Г*ûé öåëî÷èñëåГ*Г*ûé Г¬Г*Г±Г±ГЁГў ГЁГ§ " << n << " ýëåìåГ*òîâ Гў äèГ*ГЇГ*çîГ*ГҐ îò 0 äî 15:\n";
    for (i=0; i<n; i++)
        cout << a[i]<< endl;
    cout << endl;
    k=n;
    
    for (i=0; i<n; i++)
    {
        if (a[i]==0)
       {
           k--;
       for(j = i; j < k; j++) // ñäâèã âëåâî
            a[j] = a[j+1];
         i--;
         } }        
    for(i=0;i<k;i++)
    cout << a[i]<< endl;
    
    for(i=0;i<k;i++)    
    if (a[i]==5)
       {k++;
       cout << "1" << " \n";} 
 
    _getch(); 
    return 0;
       
}
0
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
20.02.2014, 01:30 #8
А никого не смущает то, что объявление статического массива происходит с помощью переменной, а не константы?

Добавлено через 1 минуту
В строке int a[n]; n должна быть константой. Я вообще не понимаю как это запускается.
0
Алена_Коваленко
Заблокирован
20.02.2014, 01:32  [ТС] #9
Arkaniy, я знаю, что массив не задается переменной, но в задании не указан размер массива и я думала что так можно делать. Я ведь ее определила, перед тем как использовать.
И что теперь с этим делать?
0
zvoronz
271 / 239 / 21
Регистрация: 29.05.2012
Сообщений: 889
20.02.2014, 01:35 #10
Arkaniy, стандарт C++11 допускает это.
0
DrOffset
7310 / 4406 / 998
Регистрация: 30.01.2014
Сообщений: 7,242
20.02.2014, 01:35 #11
Цитата Сообщение от Алена_Коваленко Посмотреть сообщение
zvoronz, сделала, теперь у меня элементы вроде как удаляются, но вот с добавлением... Получается мы берем массив, который получился, ищем 5 и ставим после него значение 1, и остальные элементы тоже сдвигаются. А как это реализовать, не могу понять.
У массива ведь фиксированный размер. Если менять его, то вставить больше единиц, чем удалено было нулей не получится. В худшем случае не получится вставить ни одной единицы.
То есть, как вариант, нужно создать массив бОльшего размера, чтобы он мог вместить в себя худший случай, когда все элементы исходного, например, пятерки. И записывать в этот массив отфильтрованный результат.
Ну и у вас в задании требуется проверять не пятерки, а числа оканчивающиеся на пять. То есть 15 тоже подходит.
Проверить можно вот такой функцией (для чисел от 0 до 99):
C++
1
2
3
4
5
6
7
8
9
int end_digit(int num)
{
    return num - num / 10 * 10;
}
 
//.....
 
if(end_digit(arr[i]) == 5)
   //...
1
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
20.02.2014, 01:40 #12
Алена_Коваленко, так нельзя делать. Если размер не задан, то можно его задать самостоятельно или использовать динамические структуры.
По поводу вставки элементов. Можно сделать так: для начала переписать под динамический массив - так и правильно, и необходимо.
Сначала подсчитать кол-во элементов равных 5, то есть тех, поле которых нужно поставить единицу. Затем выделяем память под еще 1 массив,но с учетом уже того количества единиц, которые нужно вставить.
И потом заполняем его элементами из первого массива и после каждой пятерки вставляем единицу.

Добавлено через 1 минуту
zvoronz, у меня 13 студия с поддержкой 11 стандарта.
Код
error C2057: expected constant expression
1
DrOffset
7310 / 4406 / 998
Регистрация: 30.01.2014
Сообщений: 7,242
20.02.2014, 01:45 #13
Цитата Сообщение от zvoronz Посмотреть сообщение
стандарт C++11 допускает это.
С чего бы?
8.3.4/1
In a declaration T D where D has the form
D1 [ constant-expression opt] attribute-specifier-seqopt
У ТС скорее всего mingw и там есть занятное расширение, которое позволяет так писать. Но это вне пределов стандарта.

Добавлено через 1 минуту
Цитата Сообщение от Arkaniy Посмотреть сообщение
Добавлено через 1 минуту
zvoronz, у меня 13 студия с поддержкой 11 стандарта.
Код
error C2057: expected constant expression
Все правильно, этого нет в стандарте. См. мой пост с пояснением откуда это взялось.
2
Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 453
20.02.2014, 01:50 #14
DrOffset, не был знаком с этим. Погуглю на досуге.
0
Алена_Коваленко
Заблокирован
20.02.2014, 01:51  [ТС] #15
Arkaniy, а где удаление нулей, динамический массив не нужен? и оставлять так как есть?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 01:51
Привет! Вот еще темы с ответами:

Дан массив целых, отсортированный по возрастанию. Удалить из него дубликаты - C++
Дан массив целых, отсортированный по возрастанию. Удалить из него дубликаты.

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив... - C++
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько...

Вставить после каждого непростого числа его наибольший делитель - C++
Дан массив из N целых чисел, где N&lt;=16, каждое число в диапазоне от –32000 до 32000. Вставить в массиве после каждого непростого числа...

Вставить после каждого непростого числа его наибольший делитель - C++
Дан массив из N целых чисел, где N&lt;=16, каждое число в диапазоне от –32000 до 32000. Вставить после каждого непростого числа его...


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

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

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