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

Из массива удалить элемент с заданным номером - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
Frainet
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 4
04.06.2012, 16:34     Из массива удалить элемент с заданным номером #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
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>
#include <cstdio>
#include <locale.h>
 
using namespace std;
const int n=5;
int InArr(int*[],int);
int del(int*[],int,int);
void main()
{ 
  setlocale(LC_CTYPE,"Russian");
  system ("cls");
  int o,m,p;
  int *a=new int [n];
  InArr(a,m);
  o=del(a,m,p);
  cout<<"Конечный массив:\n"<<o;
  system("pause");
}
int InArr(int* a[],int m)
{
 for(int i=0;i<n;i++)     
 {
 a[i]=new int[m]; 
 } 
 cout<<"Введите массив:\n";
      for(int k=0;k<n;k++)
      cin>>a[0][k];
}
 
int del(int* a[], int m, int p)     // передаем в функцию указатель на массив, его длину, номер удаляемого элемента
{
cout<<"Введите номер элемента который нужно удалить:\n";
cin>>p;
int j = -1;                                          // заводим темповый счетчик
int* temp = new int[m-1];             // заводим темповый массив, который меньше предыдущего на 1 ячейку
for (int i=0; i<m; i++)                // понеслась
{
if (i!=p)                                 // если номер ячейки исходного массива не равен той, которую надо удалить
{
j++;                                 // наращиваем темповый счетчик
temp[j] = a[i];                 // копируем ячейку из старого массива в новый
} 
}
return temp;                                     // возвращаем новый массив.
}
-c:\users\Frainet\documents\visual studio 2010\projects\l2\l2\l2.cpp(21): error C2664: InArr: невозможно преобразовать параметр 1 из "int *" в "int *[]"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
-c:\users\Frainet\documents\visual studio 2010\projects\l2\l2\l2.cpp(22): error C2664: del: невозможно преобразовать параметр 1 из "int *" в "int *[]"
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
-c:\users\Frainet\documents\visual studio 2010\projects\l2\l2\l2.cpp(48): error C2440: =: невозможно преобразовать "int *" в "int"
Не существует контекста, в котором такое преобразование возможно
-c:\users\Frainet\documents\visual studio 2010\projects\l2\l2\l2.cpp(51): error C2440: return: невозможно преобразовать "int *" в "int"
Не существует контекста, в котором такое преобразование возможно

Зарание спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2012, 16:34     Из массива удалить элемент с заданным номером
Посмотрите здесь:

Сформировать одномерный массив. Удалить из него элемент с заданным номером C++
C++ Указатели . Удалить из одномерного массива элемент с заданным номером, добавить К элементов, начиная с заданного номера
C++ Доработка структуры (удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером)
C++ Удалить из списка элемент с заданным номером и добавить элементфы, начиная с заданного номера.
C++ Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
04.06.2012, 16:50     Из массива удалить элемент с заданным номером #2
Цитата Сообщение от Frainet Посмотреть сообщение
int InArr(int*[],int);
int del(int*[],int,int);
Мне кажется что здесь что-то лишнее есть. Или скобки квадратные убрать или *
Вот так
Код
int InArr(int *, int);
int del(int *, int, int)
Хотя могу и ошибаться
Frainet
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 4
04.06.2012, 16:54  [ТС]     Из массива удалить элемент с заданным номером #3
Цитата Сообщение от g-h Посмотреть сообщение
Мне кажется что здесь что-то лишнее есть. Или скобки квадратные убрать или *
Вот так
Код
int InArr(int *, int);
int del(int *, int, int)
Хотя могу и ошибаться
О,спасибо,убрал,теперь остались последние 2 ошибки
g-h
67 / 67 / 1
Регистрация: 03.06.2012
Сообщений: 176
04.06.2012, 16:57     Из массива удалить элемент с заданным номером #4
Цитата Сообщение от Frainet Посмотреть сообщение
a[i]=new int[m];
Тут непонятно.
a - это одномерный массив, значит a[i] это какое-то число. Может быть
Код
a[i] = m;
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
04.06.2012, 16:58     Из массива удалить элемент с заданным номером #5
у вас функция del возвращает указатель (int*) , а в main вы его пытаетесь присвоить переменной o типа int.
Joke+R
 Аватар для Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
04.06.2012, 17:01     Из массива удалить элемент с заданным номером #6
Цитата Сообщение от Frainet Посмотреть сообщение
int *a=new int [n];
вы объявили одномерный массив

а здесь хотите сделать его двумерным - так нельзя
Цитата Сообщение от Frainet Посмотреть сообщение
for(int i=0;i<n;i++)
{
a[i]=new int[m];
}
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
04.06.2012, 17:01     Из массива удалить элемент с заданным номером #7
последняя ошибка, по-моему, должна была пропасть после исправления из второго поста
Joke+R
 Аватар для Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
04.06.2012, 17:05     Из массива удалить элемент с заданным номером #8
antoha398 прав...
Цитата Сообщение от antoha398 Посмотреть сообщение
последняя ошибка, по-моему, должна была пропасть после исправления из второго поста
выложите еще раз список ошибок...
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
04.06.2012, 17:06     Из массива удалить элемент с заданным номером #9
Трудно до конца сообразить, что в конечном итоге надо получить.
В коде почти в каждой строчке ошибки
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
#include <iostream>
using namespace std;
const int n=5;
void InArr(int**,int);
int* del(int**,int,int);
void main()
{ 
  setlocale(LC_CTYPE,"Russian");
  system ("cls");
  int* o;
  int **a=new int*[n];
  for(int i=0;i<n;i++)     
    a[i]=new int[n]; 
  InArr(a,n);
  o=del(a,n,7);
  cout<<"Конечный массив:\n";
  for(int i=0;i<n*n-1;i++)
    cout<<o[i]<<" ";
  for(int i=0;i<n;i++)
    delete[] a[i];
  delete[] a;
  delete[] o;
  system("pause");
}
void InArr(int** a,int n)
{
    cout<<"Введите массив:\n";
    for(int k=0;k<n;k++)
        for(int j=0;j<n;j++)
        {
            cout<<"a["<<k<<"]["<<j<<"]:";
            cin>>a[k][j];
        }
}
 
int* del(int** a, int m, int p)     // передаем в функцию указатель на массив, его длину, номер удаляемого элемента
{
    int k = -1;                                          // заводим темповый счетчик
    int* temp = new int[m*m-1];             // заводим темповый массив, который меньше предыдущего на 1 ячейку
    for (int i=0; i<m; i++)                // понеслась
    for (int j=0; j<m; j++)                // понеслась
    {
        if (i*m+j!=p)                                 // если номер ячейки исходного массива не равен той, которую надо удалить
        {
            k++;                                 // наращиваем темповый счетчик
            temp[k] = a[i][j];                 // копируем ячейку из старого массива в новый
        } 
    }
    return temp;                                     // возвращаем новый массив.
}
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.06.2012, 17:19     Из массива удалить элемент с заданным номером #10
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <cstdio>
#include <locale.h>
 
using namespace std;
const int n=5;
void InArr(int*,int);
void del(int*,int,int);
void main()
{ 
  setlocale(LC_CTYPE,"Russian");
  system ("cls");
  int o,m=5,p;
  int *a=new int [n];
 
  InArr(a,m);
  cout<<"введите номер удаляемого элемента"<<endl;
  cin>>p;
  p--;
 
  cout<<"Конечный массив:\n";
   del(a,m,p);
  system("pause");
}
void InArr(int* a,int m)
{
 
 
 
 cout<<"Введите массив:\n";
      for(int k=0;k<n;k++)
      cin>>a[k];
}
 
void del(int* a, int m, int p)     // передаем в функцию указатель на массив, его длину, номер удаляемого элемента
{
   
    int *temp=new int[m-1]; 
             
for (int i=0; i<m-1; i++)
{// понеслась
if (i>=p)
 temp[i]=a[i+1]; 
else
temp[i]=a[i];
}
for(int i=0;i<m-1;i++)
cout<<temp[i]<<" "<<endl;// копируем ячейку из старого массива в новый
 
}
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
04.06.2012, 17:22     Из массива удалить элемент с заданным номером #11
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <cstdio>
#include <locale.h>
 
using namespace std;
const int n=5;
void InArr(int*);
int *del(int*);
int main()
{
  setlocale(LC_CTYPE,"Russian");
  //system ("cls");
  int *o=0;//,m,p;
  int *a=new int [n];
  InArr(a);
  o=del(a);
  cout<<"Конечный массив:\n";
  for (int i=0;i<n-1;i++)
      cout<<o[i]<< " ";
  //system("pause");
  return 0;
}
void InArr(int *a)
{
 cout<<"Введите массив:\n";
      for(int k=0;k<n;k++)
      cin>>a[k];
}
 
int* del(int* a)     // передаем в функцию указатель на массив, его длину, номер удаляемого элемента
{
int p;
    cout<<"Введите номер элемента который нужно удалить:\n";
cin>>p;
int j = -1;                                          // заводим темповый счетчик
int *temp = new int[n-1];             // заводим темповый массив, который меньше предыдущего на 1 ячейку
for (int i=0; i<n; i++)                // понеслась
{
if (i!=p)                                 // если номер ячейки исходного массива не равен той, которую надо удалить
{
++j;                  // наращиваем темповый счетчик
temp[j] = a[i];                 // копируем ячейку из старого массива в новый
}
}
return temp;                                     // возвращаем новый массив.
}
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.06.2012, 17:24     Из массива удалить элемент с заданным номером #12
Цитата Сообщение от zss Посмотреть сообщение
Трудно до конца сообразить, что в конечном итоге надо получить.
В коде почти в каждой строчке ошибки
C++
1
код
судя по интерфейсу как бы не совсем похоже на ввод одномерного массива
Frainet
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 4
04.06.2012, 18:16  [ТС]     Из массива удалить элемент с заданным номером #13
Цитата Сообщение от Alt_Shift Посмотреть сообщение
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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <cstdio>
#include <locale.h>
 
using namespace std;
const int n=5;
void InArr(int*,int);
void del(int*,int,int);
void main()
{ 
  setlocale(LC_CTYPE,"Russian");
  system ("cls");
  int o,m=5,p;
  int *a=new int [n];
 
  InArr(a,m);
  cout<<"введите номер удаляемого элемента"<<endl;
  cin>>p;
  p--;
 
  cout<<"Конечный массив:\n";
   del(a,m,p);
  system("pause");
}
void InArr(int* a,int m)
{
 
 
 
 cout<<"Введите массив:\n";
      for(int k=0;k<n;k++)
      cin>>a[k];
}
 
void del(int* a, int m, int p)     // передаем в функцию указатель на массив, его длину, номер удаляемого элемента
{
   
    int *temp=new int[m-1]; 
             
for (int i=0; i<m-1; i++)
{// понеслась
if (i>=p)
 temp[i]=a[i+1]; 
else
temp[i]=a[i];
}
for(int i=0;i<m-1;i++)
cout<<temp[i]<<" "<<endl;// копируем ячейку из старого массива в новый
 
}
Вот так работает,но это же вроде не динамический массив
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.06.2012, 18:56     Из массива удалить элемент с заданным номером #14
Цитата Сообщение от Frainet Посмотреть сообщение
Вот так работает,но это же вроде не динамический массив
int *a=new int [n];
это не динамический массив?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 02:48     Из массива удалить элемент с заданным номером
Еще ссылки по теме:

Сформировать двунаправленный список. Удалить из него элемент с заданным ключом, добавить элемент с указанным номером C++
Удалить элемент структуры с заданным номером медицинской карты, добавить 2 элемента в начало файла C++
Бинарное дерево заданное структурой, удалить элемент с заданным номером C++

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

Или воспользуйтесь поиском по форуму:
Frainet
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 4
06.06.2012, 02:48  [ТС]     Из массива удалить элемент с заданным номером #15
Цитата Сообщение от Alt_Shift Посмотреть сообщение
int *a=new int [n];
это не динамический массив?
Извиняюсь,не заметил) Спасибо,все работает)
Yandex
Объявления
06.06.2012, 02:48     Из массива удалить элемент с заданным номером
Ответ Создать тему
Опции темы

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