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

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

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

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

12.03.2013, 15:31. Просмотров 810. Ответов 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 и последняя функции работают без погрешностей.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 15:31     Массив: Вставить элемент с номером к.
Посмотрите здесь:
C++ Вставить элемент в массив со значением 0 после элемента с номером N
Перед элементом массива с порядковым номером K вставить новый элемент C++
Перед элементом массива с порядковым номером K вставить новый элемент с нулевым значением C++
C++ Вставить число k в массив после элемента с номером n
C++ Динамический массив строк (вставить строку с номером к)
C++ Вычесть из положительных элементов массива элемент с номером k1, а к отрицательным прибавить элемент с номером k2, нулевые элементы оставить без измен
C++ Из всех положительных элементов вычесть элемент с номером k1, из остальных — элемент с номером k2
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
339 / 370 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
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
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
спасибо,но мне необходимо каждое задание выполнить именно функциями
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;
}
желательно конечно сделать проверку на дурака еще, мол чтобы введенное место было корректным
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.,Он почему-то не является однозначным
Ev[G]eN
Эксперт С++
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;
}
radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
13.03.2013, 22:55     Массив: Вставить элемент с номером к. #7
когда я вставил этот код у меня почему-то возникла проблема с cout.,Он почему-то не является однозначным
Dev-C++ приведенный код работает
Kinroom
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 99
13.03.2013, 22:57  [ТС]     Массив: Вставить элемент с номером к. #8
Цитата Сообщение от radamaerl Посмотреть сообщение
Dev-C++ приведенный код работает
он работает но выбивает ошибку в выводах,за код спасибо большое
radamaerl
27 / 6 / 1
Регистрация: 20.12.2012
Сообщений: 39
13.03.2013, 23:23     Массив: Вставить элемент с номером к. #9
ну то гдето в комплексе уже
функций то не две
и походу чуток надо разобраться аккуратнее с параметрами функций то бишь указатели ссылки
массив то обычный, меняется только количество элементов, то есть от 0 до n
ну это ИМХО
я подробно другие ф-ции не смотрел
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?
Ev[G]eN
Эксперт С++
5097 / 1535 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
14.03.2013, 09:28     Массив: Вставить элемент с номером к. #11
в тот параметр вы передаете размер вашего массива
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2013, 12:55     Массив: Вставить элемент с номером к.
Еще ссылки по теме:
C++ Дан двумерный массив размером 5 * 8, заполненный случайным образом. Вставить перед всеми строками, первый элемент которых делится на3,вставить....
С++ \ Одномерный массив: Добавить элемент с номером К. C++
Как добавить элемент с заданным номером в динамический массив? C++
Сформировать одномерный массив. Удалить из него элемент с заданным номером C++
Вставить в массив элемент C++

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

Или воспользуйтесь поиском по форуму:
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 минут
все работает спасибо)
Yandex
Объявления
14.03.2013, 12:55     Массив: Вставить элемент с номером к.
Ответ Создать тему
Опции темы

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