Нужно удалить из массива все четные элементы, но сделать это в функциях.. .Без функций все работает.. .А как стал в функции делать.. .Ошибки выдает.. .Помогите разобраться? !
http://pastebin.com/iN2sDcdQ -вот прога
Другие языки программирования и технологии
В чем ошибка программы? ? C++
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
void remove_even(int *, size_t &);
void show(int *, size_t);
int main() {
locale::global(locale(""));
srand(unsigned(time(0)));
cout << " Введите размер массива: ";
size_t size;
cin >> size;
cout << "\n Исходный массив: \n";
int * vector = new int [size];
for (rsize_t n = 0; n < size; n++) vector[n] = 1 + rand() % 99;
show(vector, size);
remove_even(vector, size);
cout << "\n Массив после удаления чётных элементов: \n";
show(vector, size);
delete[] vector;
vector = NULL;
cin.get(); cin.get();
return 0;
}
void show(int * _vector, size_t _size) {
for (rsize_t n = 0; n < _size; n++) cout << setw(4) << _vector[n];
cout << endl;
}
void remove_even(int * _vector, size_t & _size) {
size_t newsize = _size;
for (rsize_t n = 0; n < _size; n++) if (~_vector[n] & 1) --newsize;
if (newsize < _size) {
int * temp = new int [_size];
for (rsize_t n = 0; n < _size; n++) temp[n] = _vector[n];
delete[] _vector;
_vector = NULL;
_vector = new int [newsize];
rsize_t m = 0;
for (rsize_t n = 0; n < _size; n++) if (temp[n] & 1) _vector[m++] = temp[n];
delete[] temp;
temp = NULL;
_size = newsize;
}
}
#include <iomanip>
#include <ctime>
using namespace std;
void remove_even(int *, size_t &);
void show(int *, size_t);
int main() {
locale::global(locale(""));
srand(unsigned(time(0)));
cout << " Введите размер массива: ";
size_t size;
cin >> size;
cout << "\n Исходный массив: \n";
int * vector = new int [size];
for (rsize_t n = 0; n < size; n++) vector[n] = 1 + rand() % 99;
show(vector, size);
remove_even(vector, size);
cout << "\n Массив после удаления чётных элементов: \n";
show(vector, size);
delete[] vector;
vector = NULL;
cin.get(); cin.get();
return 0;
}
void show(int * _vector, size_t _size) {
for (rsize_t n = 0; n < _size; n++) cout << setw(4) << _vector[n];
cout << endl;
}
void remove_even(int * _vector, size_t & _size) {
size_t newsize = _size;
for (rsize_t n = 0; n < _size; n++) if (~_vector[n] & 1) --newsize;
if (newsize < _size) {
int * temp = new int [_size];
for (rsize_t n = 0; n < _size; n++) temp[n] = _vector[n];
delete[] _vector;
_vector = NULL;
_vector = new int [newsize];
rsize_t m = 0;
for (rsize_t n = 0; n < _size; n++) if (temp[n] & 1) _vector[m++] = temp[n];
delete[] temp;
temp = NULL;
_size = newsize;
}
}
Функция должна принимать указатель на массив. Т. е напиши int funct(int *C,int l); *С-массив, l-его длина, Обращатся: funct(C,l); Т. е функция Меняет массив, который находится в другой функции. Имя массива в функции может быть любым, все равно он будет менять тот, который передается функции. Главное - звездочка.
Функции нужны, чтобы действия, которые вы часто делаете не писали их снова и снова, а чтобы один раз объявить и потом просто использовать. Когда вы передаете параметры в функцию, создаются их копии и программа работает с КОПИЯМИ переменных, а не оригиналами, поэтому любые действия, которые вы делаете не сохраняются.
Чтобы ваши значения, которые функция посчитала сохранились, вам надо их вернуть и записать в эту переменную. Для этого вместо:
void mass(int i, ..)
{}
напишите так:
int mass (int i,...)
{
//какие-то вычисления
return i; // возвращаем результат вычислений
}
int i = mass(30, 60) ; // например функция складывала 30 + 60 и в переменную запишется //результат вычисления, а именно - 90
Прошу заметить, что вернуть можно только одну переменную. Если вам нужно больше, то либо используйте массив, либо указатели (тогда в параметры будут передаваться не копии, а оригиналы и все действия над переменными будут сохранятся, но такой подход не желателен).
Чтобы ваши значения, которые функция посчитала сохранились, вам надо их вернуть и записать в эту переменную. Для этого вместо:
void mass(int i, ..)
{}
напишите так:
int mass (int i,...)
{
//какие-то вычисления
return i; // возвращаем результат вычислений
}
int i = mass(30, 60) ; // например функция складывала 30 + 60 и в переменную запишется //результат вычисления, а именно - 90
Прошу заметить, что вернуть можно только одну переменную. Если вам нужно больше, то либо используйте массив, либо указатели (тогда в параметры будут передаваться не копии, а оригиналы и все действия над переменными будут сохранятся, но такой подход не желателен).
Похожие вопросы
- Помогите исправить ошибку в программе (c++).
- c++ ошибка программы
- Помогите найти ошибку в программе. C++
- написать программу C++
- Программа C++ Напишите программу которая переводит из десятичной в двоичную систему счисления (C++)
- Что не так с программой? C++
- В чем ошибка программы? ? с++. Выводит матрицу не полностью
- Помогите объяснить программу C++
- Свои иконки на свои программы c++ или ассемблер
- На каком языке программирования писать гостиничную программу? C++, C#, PHP, Java?