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

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

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

Массив: Вставить элемент с номером к. - C++

12.03.2013, 15:31. Просмотров 855. Ответов 11
Метки нет (Все метки)

Задание состояло в том,чтобы написать программу выполняющую 5 действий:
1.Удаление элемента с заданым номером.
2.Вставить элемент с номером к.
3.Поставить парные элементы в начало массива, а непарные в конец.
4.Вывести элемент равный среднему арифметическому суме всех чисел массива.
5.Выполнить сортировку простой вставкой.
Так вот я реализовал эту программу по функциям, функции каждую написал, но во второй функции трабла.
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
 
int arr[100];//масив макс.100 элементов
 
void destroyElem(int n,int m);
void vstavka(int m,int k);
void Random(int* p,int n);
void vuvod(int* p,int n);
void SortElement(int n);
void swap(int* p1,int* p2);
void sort(int n);
int Search(int* j,int n);
 
 
void main()//основная функция
{
    SetConsoleCP(1251);
    SetConsoleOutputCP (1251);
    srand((unsigned)time(NULL));
    cout<<"Введите количество элементов в одномерном масиве"<<endl;
    int n;
    cin>>n;
    if (n!=0)
    {
        Random(arr, n);
        vuvod(arr, n);}
    else
    {
        cout<<"Вы решили покинуть программу";
        return;
    }
    cout<<"Введите номер элемента который хотите удалить";
    int m;
    cin>>m;
    if (m!=0){
        destroyElem(n,m);
        vuvod(arr,--n);}
    cout<<"Задайте место для нового элемента"<<endl;
    cin>>m;
    if (m!=0){
     vstavka(arr,n,m,k);
     vuvod(arr,n+=m);
    }
      sort(n);
      vuvod(arr,n);
      int j=0;
      if ( Search(&j,n)!=0)
          cout << arr[j];
      cout<<"Отсортированый масив\n";
      SortElement(n);
      vuvod(arr,n);
}
 
 void Random (int* p, int n) {
    while (n-->0) {
        *p= -50 +  rand () % 100;
        p++;
    }
}
 
void vuvod  (int* p, int n) {
    while (n-->0) {
        cout << *p<< " ";
        p++;
        }
    cout << endl;
}
 
  void SortElement(int n){//функция сортировки  простой вставкой
      int i,j,low;
      for(i=0;i<n-1;i++){//Поиск найменшего элемента от 0 до n-1
    low=i;
    for (j=i+1;j<n;j++)
        if (arr[j]<arr[low])
            low=j;
    if (i!=low)
        swap (&arr[i],&arr[low]);
      }
  }
 
  void swap (int* p1, int* p2) {//функция обмена значений
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
  }
 
 
 
     void destroyElem(int n,int m) {//функция для уничтожения элемента с заданым номером
         int i;
         for (i=m-1;i<n-1;i++){
             arr[i]=arr[i+1];
         }
         arr[i]=NULL;
     }
 
     void vstavka(int n,int m){//вставка элемента с к номером
        for (int i=0;i<m;i--){
        swap(&arr[i],&arr[m-1]);
        int k;
        cout<<"vvedite";
        cin>>k;
        arr[m-1]=k;
         }
     }
 
     int Search(int* j,int n){//элемента равному среднему арифметическому суме всех значений
         int suma=0;
      for (int i=0;i<n;i++){
        suma+=arr[i]; 
        }
      suma/=n;
     int flag=0;
     for ( int i=0;i<n;i++){
         if (arr[i]==suma)
         {
             flag++;
             *j=i;
             break;
         }
        }
     if (flag==0)
          return 0;
     else
         return 1;
     }
 
void sort (int n) {    //перестановка парных в начало,непарных
    for (int i=1,j=0;i<n;i++) {
        if(arr[i]%2 == 0) {
            swap (&arr[i],&arr[j]);
            j++;
        }
    }
}
Подскажите пожалуйста в чем ошибка,а то никак не пойму.Заранее благодарен.1 и последняя функции работают без погрешностей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 15:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив: Вставить элемент с номером к. (C++):

Вставить элемент в массив со значением 0 после элемента с номером N - C++
Массив А из 10 элементов заполнен случайными числами от 2 до 7. Вставить элемент со значением 0 после элемента с номером N. Вывести на...

Перед элементом массива с порядковым номером K вставить новый элемент - C++
Дан массив размера N и целое число K (1 ≤ K ≤ N). Перед элементом массива с порядковым номером K вставить новый элемент с нулевым...

Перед элементом массива с порядковым номером K вставить новый элемент с нулевым значением - C++
Дан массив размера N и целое число K (1 ≤ K ≤ N). Перед элементом массива с порядковым номером K вставить новый элемент с нулевым...

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

Вставить число k в массив после элемента с номером n - C++
Вставить число k в массив после элемента с номером n. Входные данные Сперва вводят количество элементов массива, затем сами элементы. ...

Вычесть из положительных элементов массива элемент с номером k1, а к отрицательным прибавить элемент с номером k2, нулевые элементы оставить без измен - C++
Вычесть из положительных элементов массива элемент с номером k1, а к отрицательным прибавить элемент с номером k2, нулевые элементы...

11
egor2116
341 / 372 / 42
Регистрация: 20.01.2013
Сообщений: 1,130
12.03.2013, 16:52 #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
38
39
40
41
42
43
44
45
46
47
48
int* add(int * a,int index,int number,const int size){//a - исходный массив, index- индекс вставл. эл.
//number - вставляемое значение, size - размер исходного массива
 bool check=true;
  int *c= new int[size+1];
  int temp=0;
 
    for(int i=0;i<size;i++){
        if(i==index && check){
            check=false;
            c[temp]=number;
            temp++;
        }
         c[temp]=a[i];
         temp++;
    }
 
    delete []a;
 
    return c;
}
 
int main(){//ПРИМЕР ИСПОЛЬЗОВАНИЯ
    const int size=10;
    int * a=new int[size];
 
       for(int i=0;i<10;i++)
           a[i]=i;
 
       int *d=new int[size+1];
       d=add(a,3,99,size);
 
       cout<<"Исходный массив"<<endl;
       for(int i=0;i<size;i++)
           cout<<a[i]<<" ";
 
       cout<<endl;
       cout<<"Увеличенный массив"<<endl;
       for(int i=0;i<size+1;i++)
           cout<<d[i]<<" ";
 
       cout<<endl;
 
       delete []d;
       return 0;
 
 
    return 0;
}
Вывод

Исходный массив
0 1 2 3 4 5 6 7 8 9
Увеличенный массив
0 1 2 99 3 4 5 6 7 8 9
1
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
12.03.2013, 18:10  [ТС] #3
Цитата Сообщение от egor2116 Посмотреть сообщение
Могу предложить свой вариант
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
int* add(int * a,int index,int number,const int size){//a - исходный массив, index- индекс вставл. эл.
//number - вставляемое значение, size - размер исходного массива
 bool check=true;
  int *c= new int[size+1];
  int temp=0;
 
    for(int i=0;i<size;i++){
        if(i==index && check){
            check=false;
            c[temp]=number;
            temp++;
        }
         c[temp]=a[i];
         temp++;
    }
 
    delete []a;
 
    return c;
}
 
int main(){//ПРИМЕР ИСПОЛЬЗОВАНИЯ
    const int size=10;
    int * a=new int[size];
 
       for(int i=0;i<10;i++)
           a[i]=i;
 
       int *d=new int[size+1];
       d=add(a,3,99,size);
 
       cout<<"Исходный массив"<<endl;
       for(int i=0;i<size;i++)
           cout<<a[i]<<" ";
 
       cout<<endl;
       cout<<"Увеличенный массив"<<endl;
       for(int i=0;i<size+1;i++)
           cout<<d[i]<<" ";
 
       cout<<endl;
 
       delete []d;
       return 0;
 
 
    return 0;
}
Вывод

Исходный массив
0 1 2 3 4 5 6 7 8 9
Увеличенный массив
0 1 2 99 3 4 5 6 7 8 9
спасибо,но мне необходимо каждое задание выполнить именно функциями
0
radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
12.03.2013, 18:16 #4
ближе по стилю будет так наверное
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
#include <iostream>
#include <math.h>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
void vstavka(int []  , int *, int );
 
int main()
{
    int n=2;
    int arr[3];
    arr[0]=1;
    arr[1]=2;
    vstavka(arr,&n,2);//на второе МЕСТО (не индекс) поставится введенное число
    for (int i= 0;i<n;i++)
    cout<<arr[i];
    system("pause");
    return 0;
}
 
void vstavka(int  arr [], int *n, int m)
{
    cout<<"vvedite";
    int k;
    cin>>k;
    (*n)+=1;
    for (int i=*n-1;i>=m;i--)
    {
        arr[i]=arr[i-1];
    }
    arr[m-1]=k;
}
желательно конечно сделать проверку на дурака еще, мол чтобы введенное место было корректным
1
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
12.03.2013, 23:44  [ТС] #5
Цитата Сообщение от radamaerl Посмотреть сообщение
ближе по стилю будет так наверное
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
#include <iostream>
#include <math.h>
#include <iomanip>
#include <stdlib.h>
using namespace std;
 
void vstavka(int []  , int *, int );
 
int main()
{
    int n=2;
    int arr[3];
    arr[0]=1;
    arr[1]=2;
    vstavka(arr,&n,2);//на второе МЕСТО (не индекс) поставится введенное число
    for (int i= 0;i<n;i++)
    cout<<arr[i];
    system("pause");
    return 0;
}
 
void vstavka(int  arr [], int *n, int m)
{
    cout<<"vvedite";
    int k;
    cin>>k;
    (*n)+=1;
    for (int i=*n-1;i>=m;i--)
    {
        arr[i]=arr[i-1];
    }
    arr[m-1]=k;
}
желательно конечно сделать проверку на дурака еще, мол чтобы введенное место было корректным
когда я вставил этот код у меня почему-то возникла проблема с cout.,Он почему-то не является однозначным
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
13.03.2013, 10:13 #6
C++
1
2
3
4
5
6
7
int *insertElement (int *array, int sizeOfArray, int element, int position)
{
    for (int i = sizeOfArray; i > position; i--)
        array[i] = array[i - 1];
    array[position] = element;
    return array;
}
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 <cstdlib>
#include <ctime>
 
int *insertElement (int *, int , int, int );
 
int main ()
{
    srand(time(0));
    const int size = 25;
    int array[size];
 
    std::cout << "Array: " << std::endl;
    for (int i = 0; i < size; i++)
        std::cout << (array[i] = rand() % 25) << " ";
    std::cout << std::endl;
 
    int element;
    std::cout << "Input the element: ";
    std::cin >> element;
    int position;
    std::cout << "Position for insert: ";
    std::cin >> position;
 
    insertElement(array, size, element, position);
    std::cout << "Array: " << std::endl;
    for (int i = 0; i < size + 1; i++)
        std::cout << array[i] << " ";
 
    return 0;
}
 
int *insertElement (int *array, int sizeOfArray, int element, int position)
{
    for (int i = sizeOfArray; i > position; i--)
        array[i] = array[i - 1];
    array[position] = element;
    return array;
}
1
radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
13.03.2013, 22:55 #7
когда я вставил этот код у меня почему-то возникла проблема с cout.,Он почему-то не является однозначным
Dev-C++ приведенный код работает
0
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
13.03.2013, 22:57  [ТС] #8
Цитата Сообщение от radamaerl Посмотреть сообщение
Dev-C++ приведенный код работает
он работает но выбивает ошибку в выводах,за код спасибо большое
0
radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
13.03.2013, 23:23 #9
ну то гдето в комплексе уже
функций то не две
и походу чуток надо разобраться аккуратнее с параметрами функций то бишь указатели ссылки
массив то обычный, меняется только количество элементов, то есть от 0 до n
ну это ИМХО
я подробно другие ф-ции не смотрел
1
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
14.03.2013, 00:33  [ТС] #10
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
C++
1
2
3
4
5
6
7
int *insertElement (int *array, int sizeOfArray, int element, int position)
{
    for (int i = sizeOfArray; i > position; i--)
        array[i] = array[i - 1];
    array[position] = element;
    return array;
}
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 <cstdlib>
#include <ctime>
 
int *insertElement (int *, int , int, int );
 
int main ()
{
    srand(time(0));
    const int size = 25;
    int array[size];
 
    std::cout << "Array: " << std::endl;
    for (int i = 0; i < size; i++)
        std::cout << (array[i] = rand() % 25) << " ";
    std::cout << std::endl;
 
    int element;
    std::cout << "Input the element: ";
    std::cin >> element;
    int position;
    std::cout << "Position for insert: ";
    std::cin >> position;
 
    insertElement(array, size, element, position);
    std::cout << "Array: " << std::endl;
    for (int i = 0; i < size + 1; i++)
        std::cout << array[i] << " ";
 
    return 0;
}
 
int *insertElement (int *array, int sizeOfArray, int element, int position)
{
    for (int i = sizeOfArray; i > position; i--)
        array[i] = array[i - 1];
    array[position] = element;
    return array;
}
спасибо

Добавлено через 1 час 4 минуты
Цитата Сообщение от Kinroom Посмотреть сообщение
спасибо
а чему здесь равен SizeOfArray?
0
Ev[G]eN
iOS/Android Developer
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
14.03.2013, 09:28 #11
в тот параметр вы передаете размер вашего массива
1
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
14.03.2013, 12:55  [ТС] #12
Цитата Сообщение от Ev[G]eN Посмотреть сообщение
в тот параметр вы передаете размер вашего массива
так я же каждый раз задаю его размер, вообще максимум 100 элементов,пользователь сам вводит размер, тогда мне нужно задать его как 99 или n+1?

Добавлено через 47 минут
Цитата Сообщение от Kinroom Посмотреть сообщение
так я же каждый раз задаю его размер, вообще максимум 100 элементов,пользователь сам вводит размер, тогда мне нужно задать его как 99 или n+1?
все работает кроме одного,как и в твоей программе нельзя вставить элемент на первую позицию(

Добавлено через 29 минут
все работает спасибо)
0
14.03.2013, 12:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 12:55
Привет! Вот еще темы с ответами:

Из всех положительных элементов вычесть элемент с номером k1, из остальных — элемент с номером k2 - C++
Дан массив вещественных чисел. Из всех положительных элементов вычесть элемент с номером k1, из остальных — элемент с номером k2.Помогите...

Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на3,вставить.... - C++
Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на 3,...

С++ \ Одномерный массив: Добавить элемент с номером К. - C++
Здравствуйте: нужно помоч переделать. Она полностью рабочая. Но без процедур и вся в МЕЙНЕ, переделать что бы в МЕЙНЕ был только вывод...

Как добавить элемент с заданным номером в динамический массив? - C++
Добавить элемент с заданным номером в динамический массив. Как это сделать?


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

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

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