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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
Frainet
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 4
#1

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

04.06.2012, 16:34. Просмотров 2772. Ответов 14
Метки нет (Все метки)

Здравствуйте,у меня вот такое задание: Из одномерного динамического массива удалить элемент с заданным номером
Написал программу,но выдает ошибки и я не знаю как их убрать
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"
Не существует контекста, в котором такое преобразование возможно

Зарание спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2012, 16:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из массива удалить элемент с заданным номером (C++):

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

Указатели . Удалить из одномерного массива элемент с заданным номером, добавить К элементов, начиная с заданного номера - C++
Сформировать одномерный массив. Удалить из него элемент с заданным номером, добавить К элементов, начиная с заданного номера

Сформировать двунаправленный список. Удалить из него элемент с заданным ключом, добавить элемент с указанным номером - C++
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить из него элемент с...

Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером - C++
Структура &quot;Информация&quot;: - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить...

Доработка структуры (удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером) - C++
//--------------------------------------------------------------------------- ЗАДАНИЕ:Создать двоичный файл из элементов , заданных...

Бинарное дерево заданное структурой, удалить элемент с заданным номером - C++
Структура &quot;Пациент&quot;:фамилия, имя, отчество;домашний адрес;номер медицинской карты;номер страхового полиса. Удалить элемент с заданным...

14
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)
Хотя могу и ошибаться
0
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 ошибки
0
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;
0
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
04.06.2012, 16:58 #5
у вас функция del возвращает указатель (int*) , а в main вы его пытаетесь присвоить переменной o типа int.
0
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];
}
0
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
04.06.2012, 17:01 #7
последняя ошибка, по-моему, должна была пропасть после исправления из второго поста
0
Joke+R
41 / 41 / 3
Регистрация: 18.11.2011
Сообщений: 112
04.06.2012, 17:05 #8
antoha398 прав...
Цитата Сообщение от antoha398 Посмотреть сообщение
последняя ошибка, по-моему, должна была пропасть после исправления из второго поста
выложите еще раз список ошибок...
0
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 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;                                     // возвращаем новый массив.
}
0
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;// копируем ячейку из старого массива в новый
 
}
1
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;                                     // возвращаем новый массив.
}
0
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.06.2012, 17:24 #12
Цитата Сообщение от zss Посмотреть сообщение
Трудно до конца сообразить, что в конечном итоге надо получить.
В коде почти в каждой строчке ошибки
C++
1
код
судя по интерфейсу как бы не совсем похоже на ввод одномерного массива
0
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;// копируем ячейку из старого массива в новый
 
}
Вот так работает,но это же вроде не динамический массив
0
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
04.06.2012, 18:56 #14
Цитата Сообщение от Frainet Посмотреть сообщение
Вот так работает,но это же вроде не динамический массив
int *a=new int [n];
это не динамический массив?
0
Frainet
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 4
06.06.2012, 02:48  [ТС] #15
Цитата Сообщение от Alt_Shift Посмотреть сообщение
int *a=new int [n];
это не динамический массив?
Извиняюсь,не заметил) Спасибо,все работает)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 02:48
Привет! Вот еще темы с ответами:

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

Сформировать одномерный массив. Удалить из него элемент с заданным номером - C++
Сформировать одномерный массив. Удалить из него столбец с заданным номером

Удалить из списка элемент с заданным номером и добавить элементфы, начиная с заданного номера. - C++
Помогите написать программу, в которой создаются динамические структуры, я не знаю как :-|:( Записи в линейном списке содержат ключевое...

Удалить элемент структуры с заданным номером медицинской карты, добавить 2 элемента в начало файла - C++
1. Структура &quot;Пациент&quot;: - Фамилия, имя, отчество; - Домашний адрес; - Номер медицинской карты; - Номер страхового полиса. Удалить...


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

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

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