Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 13.08.2014
Сообщений: 5
1

Одномерный массив - удаление элементов

12.04.2012, 01:02. Показов 5669. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Одномерный массив
Удалить все элементы с нечетными индексами
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2012, 01:02
Ответы с готовыми решениями:

Одномерный массив. Вычислить произведение нечетных элементов.
Вот такая задача: Массив содержит 7 элементов целого типа.Вычислить произведение нечетных...

Сформировать одномерный массив, состоящий из отрицательных элементов заданных матриц
Заданы два массива B(10,10), C(10,10). Сформировать одномерный массив D, состоящий из отрицательных...

Сформировать одномерный массив, как сумму элементов столбцов матрицы (не работает на RAD 2010)
//--------------------------------------------------------------------------- #include <vcl.h>...

Дан одномерный целочисленный массив А из N элементов. Найти в нём максимальное значение среди простых чисел
Здравствуйте,уважаемые программисты!) Помогите решить,пожалуйста, данную задачку в С++: Дан...

2
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.04.2012, 01:16 2
А наброски кода есть?
0
0 / 0 / 1
Регистрация: 13.08.2014
Сообщений: 5
12.04.2012, 01:25 3
Лучший ответ Сообщение было отмечено как решение

Решение

Нотация для указателей в языке Си++ следующая. Символ операции &, поставленный перед некоторой переменной, показывает, что нам нужен адрес этой переменной, а не ее текущее значение. Например, выражение &var1 означает адрес переменной var1, а не значение, которое эта переменная имеет. Следовательно, оператор присваивания вида
C++
1
ptr=&var1;
означает «взять адрес переменной var1 и присвоить его значение переменной с именем ptr». Переменная ptr называется переменной-указателем. Зачем это делается? Так как переменная var1 содержит некоторое значение данных (пусть это будет значение x), после такой операции значение x становится доступно программе через переменную-указатель ptr, поскольку ptr теперь содержит адрес значения x. Операция & называется операцией получения адреса.
Операция * в языке Си++ отсылает к содержимому ячейки памяти, на которую указывает переменная, стоящая после символа *. Например, *ptr можно описать словами как «то, что содержится в ячейке с адресом, хранящимся в ptr». Операция * называется операцией доступа по указателю.

Пример
Два оператора присваивания
C++
1
2
ptr=&var1;
var2=*ptr;
выполняют то же самое, что и один оператор
C++
1
var2=var1;
Рассмотрим программу, демонстрирующую использование указателей. Эта программа печатает символ 'X'.
C++
1
2
3
4
5
6
7
8
9
#include <iostream.h>
main()
{
    char a, *b, c;
    a='X';
    b=&a;
    c=*b;
    cout<<c;
}
Результат: X.

Указателям могут присваиваться строки.

Пример
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
main()
{
    char *ptr1="Привет", *ptr2;
    ptr2=ptr1;
    while(*ptr2!='\0')
    {
        ++ptr2;
        cout<<*ptr2;
    }
}
Результат: Привет.

С помощью указателей осуществляется доступ к участкам динамической памяти, которые называются динамическими переменными. Динамические переменные создаются с помощью специальных функций и операций. Они существуют либо до конца работы программ, либо до тех пор, пока не будут уничтожены с помощью специальных функций или операций.
Для создания динамических переменных используют операцию new, определенную в C++:
C++
1
указатель = new имя_типа[инициализатор];
Операция new позволяет выделить и сделать доступным участок динамической памяти, который соответствует заданному типу данных. Если задан инициализатор, то в этот участок будет занесено значение, указанное в инициализаторе.

Пример
C++
1
int* x=new int(5);
Для удаления динамических переменных используется операция delete, определенная в C++:
C++
1
delete указатель;
где указатель содержит адрес участка памяти, ранее выделенный с помощью операции new.
Пример
C++
1
delete x;
Операция new при использовании с массивами имеет следующий формат:
C++
1
new тип_массива
Такая операция выделяет для размещения массива участок динамической памяти соответствующего размера, но не позволяет инициализировать элементы массива. Операция new возвращает указатель, значением которого служит адрес первого элемента массива. При выделении динамической памяти размеры массива должны быть полностью определены.

Пример
C++
1
2
//выделение динамической памяти 100*sizeof(int) байт
int* a = new int[100];
При формировании матрицы сначала выделяется память для массива указателей на одномерные массивы, а затем в цикле с параметром выделяется память под n одномерных массивов.

Пример
C++
1
2
3
4
5
6
7
8
9
10
/*выделение динамической памяти под двумерный динамический массив*/
int** form_matr(int n,int m)
{
    int **matr=new int*[n];//выделение памяти под
          //массив указателей
    for(int i=0;i<n;i++) //выделение памяти
    //для массива значений
    matr[i]=new int [m];
    return matr;//возвращение указателя на массив указателей 
}
Изменять значение указателя на динамический массив надо аккуратно, т. к. этот указатель затем используется при освобождении памяти с помощью операции delete.
C++
1
*matr[0]    *matr[1]    *matr[2]    …..   *matr[n]
Рис. 9

Пример
C++
1
2
/*освобождает память, выделенную под массив, если а адресует его начало*/
delete[] a;
Удаление из динамической памяти двумерного массива осуществляется в порядке обратном его созданию, т. е. сначала освобождается память, выделенная под одномерные массивы с данными, а затем память, выделенная под одномерный массив указателей.

Пример
C++
1
2
3
4
5
6
int find(int **matr,int m,int I)
{
    for(int i=0;i<m;i++)
        if(matr[I][i]<0) return 1;
    return 0;
}
При удалении из динамической матрицы строк или столбцов создается новая матрица нужного размера, в которую переписываются данные из старой матрицы. Затем старая матрица удаляется.
Пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int **del(int **matr,int &n,int m)
{
//удаление четных строк
    int k=0,t=0;
    for(int i=0;i<n;i++)
        if(i % 2!=0) k++; //количество нечетных строк
//выделяем память под новую матрицу
    int **matr2=form_matr(k,m);
    for(i=0;i<n;i++)
        if(i % 2!=0)
            {
//если строка нечетная, то переписываем ее в новую матрицу
                for(int j=0;j<m;j++)
                    matr2[t][j]=matr[i][j];
                t++;
            }
            n=t; //изменяем количество строк
//возвращаем указатель на новую матрицу как результат //функции
    return matr2;
}
0
12.04.2012, 01:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2012, 01:25
Помогаю со студенческими работами здесь

Одномерный массив: удаление и вставка элементов
Помогите пожалуста написать программу. Дан массив целых чисел (N=15), заполненный случайным...

Одномерный массив.Удаление четных элементов
Ребят,подскажите плз, как удалять из массива элементы с четными индексами Вот само задание -...

Одномерный массив. Поиск, замена, удаление элементов
Одномерный массив. Исходный массив должен быть выведен на экран. Все преобразования производить с...

Одномерный массив, удаление элементов более трех
Доброго времени суток ув. форумчане! Подтолкните пожалуйста в решении задачи. Звучит следующим...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru