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

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

Войти
Регистрация
Восстановить пароль
 
Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
#1

Что не так в функции? Написать функцию вставки элемента в массив - C++

12.05.2013, 09:38. Просмотров 514. Ответов 4
Метки нет (Все метки)

Здравствуйте. Вообщем что то запутался, много вариантов уже перебрал. Вроде где выделено, там ошибка, а именно в том, что он у меня клонирует (или как это назвать) значения в конец массива, т.е присваивает следующему предыдущее значение, а этого быть не должно.. Если кто поможет, буду очень благодарен. n-число элементов в массиве, index-номер ячейки элемента (т.е куда вставить элемент)..

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
#include <iostream>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <iomanip>
#include <cstdlib>
using namespace std;
 
void insert(int* arr, int index, int elem, int n) // где то тут кажется
{
    for (int j = index; j <= n-1; j++)
    {
        arr[j+1] = arr[j];
    }
    arr[index] = elem;
}  // конец "где то тут"
 
int main()
{
    int *arr, n, index, elem = 2;
    cout<<"n=";
 cin>>n;
    cout<<"index=";
 cin>>index;
      if(index>n)
    return 0;
        arr=(int *)calloc(n + 1, sizeof(int));
     for(int i=0; i<n; i++)
         cin>>arr[i];
        insert(arr, index, elem, n);
      cout << "\n";
    for(int i = 0; i < n; i++)
    {
        cout << arr[i] << endl;;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 09:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что не так в функции? Написать функцию вставки элемента в массив (C++):

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

Помочь разобраться с программой. Написать функцию вставки элемента в массив - C++
Здравствуйте. Можете помочь разобраться в программе? Ну хоть комментарии какие поставить.. Заранее спасибо. Написать функцию вставки...

В программе написать функции: вставки элемента, поиска максимального элемента, определения среднего арифметического элементов массива - C++
В целочисленном массиве Х(N) после каждого четного числа вставить максимальный элемент массива. Найти среднее арифметическое элементов ...

подправить функцию вставки элемента - C++
вот весь листинг контрольной если скопировать в компилятор будет работать, не корректно работает функция вставки нового элемента,...

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

Как передать массив в функцию так, чтобы при выходе из функции он не изменялся? - C++
Задачка: есть строка, которая состоит из символов. Символы соединяються в слова, которые оттделены друг от друга одним или несколькими...

4
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,639
Записей в блоге: 3
Завершенные тесты: 1
12.05.2013, 10:30 #2
А теперь попробуйте это проделать на листе бумаги.
C++
1
arr[j+1] = arr[j];
У Вас следующий элемент становиться предыдущим, при этом затирается значение, которое там было до этого.
Поэтому когда переходим к следующему элементу, то предыдущим для него, уже оказывается то самое "клонированное" значение
1
Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
12.05.2013, 13:41  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
А теперь попробуйте это проделать на листе бумаги.
C++
1
arr[j+1] = arr[j];
У Вас следующий элемент становиться предыдущим, при этом затирается значение, которое там было до этого.
Поэтому когда переходим к следующему элементу, то предыдущим для него, уже оказывается то самое "клонированное" значение
Ну да, я нашел эту строчку.. Действительно причина тут. Нужно ведь сделать чтобы значения присваивались с конца массива к тому элементу, который мы вставили, чтобы избежать этого самого клонирования? Вот в этом я что то запутался.

Добавлено через 33 минуты
А еще. Как правильно будет arr[index] = elem; или arr[index-1] = elem;? Ведь массив идет с нулевого элемента.. Так вот считать как с нулевого или с первого?

Добавлено через 1 час 49 минут
Что то наколдовал, вышло -

C++
1
2
3
4
5
6
7
8
9
void insert(int* arr, int index, int elem, int n) // где то тут кажется
{
    int j;
    for (j = index; j > n; j--)
    {
      arr[j] = arr[j-1];
    }
    arr[index] = elem;
}  // конец "где то тут"
Теперь элементы не клонируются, но элемент который вставляешь заменяет элемент в массиве, а должен быть сдвиг. Помогите, кто нибудь, а то реально пол дня как дурачек просидел и не в том направлении
0
Croessmah
Эксперт CЭксперт С++
13416 / 7570 / 855
Регистрация: 27.09.2012
Сообщений: 18,639
Записей в блоге: 3
Завершенные тесты: 1
12.05.2013, 13:56 #4
C++
1
2
3
4
5
6
7
8
void insert(int* arr, int index, int elem, int n) // где то тут кажется
{
    for (int j = n-1; j >=index; --j)
    {
        arr[j] = arr[j-1];
    }
    arr[index] = elem;
}  // конец "где то тут"
1
Saddiel
7 / 7 / 0
Регистрация: 02.11.2012
Сообщений: 152
12.05.2013, 14:08  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
void insert(int* arr, int index, int elem, int n) // где то тут кажется
{
    for (int j = n-1; j >=index; --j)
    {
        arr[j] = arr[j-1];
    }
    arr[index] = elem;
}  // конец "где то тут"
спасибо добрый человек. чувствую себя ущербом, конечно, и давно уже понял, что программирование это не мое.. сейчас буду разбираться, почему сам не мог сделать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 14:08
Привет! Вот еще темы с ответами:

Алгоритм вставки элемента в массив - C++
Дана задача: Задан массив Y(k) целых чисел. Если он упорядочен, оставить его без изменения. Если массив не упорядоченный, то вставить после...

Функция для вставки элемента в массив - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; using namespace std; void insert(int *elem, int index,int *ptr,int *n) ...

Написать функцию, которая переставляет элементы массива типа int так, что все положительные элементы предшествуют отрицательным. - C++
Помогите плз написать... Написать функцию, которая переставляет элементы массива типа int так, что все положительные элементы...

Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив) - C++
Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый”...


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

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

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