Другие языки программирования и технологии

(Borland C++) Неизвестно откуда берет значение. Помогите, кто знает. Заранее спасибо!

cm - создает массив, sm - выводит, en - ввод количества элементов, uc - удаляет четные числа. Как правило, именно ТРЕТИЙ элемент принимает значения 38, 46 и др. В Чем проблема?

//---------------------------------------------------------------------------

#include <clx.h>

#include<iostream.h>

#include<math.h>

#include<conio.h>

#include<stdlib.h>

#include<time.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

int *cm(int K){

int *l=new int(K);

int D;

cout<<"Ukazhite maksimalnoe znachenie: ";

cin>>D;

for (int i=0;i<K;i++) *(l+i)=rand()%(D+1);

return l;}

void sm(int *M, int K) {

for(int i=0;i<K;i++) cout<<*(M+i)<<" ";

cout<<endl;}

int en() {

int K;

cout<<"Vash massiv: \nUkazhite kolichestvo elementov: ";

cin>>K;

return K; }

int uc(int *M,int K) {

int n=0;

for(int i=0;i<K;i++)

if((*(M+i))%2!=0) {*(M+n)=*(M+i);

n++;}

M=new int[n];

return (n); }

int main(int argc, char* argv[])

{

srand(time(0));

clrscr();

int k=en();

int *m=cm(k);

sm(m,k);

k=uc(m,k);

sm(m,k);

getch();

return 0;

}
#include <iostream>
#include <ctime>
using namespace std;
unsigned* random(size_t, unsigned short = 9);
void print(unsigned*, size_t);
unsigned* remove_even(unsigned*, size_t&);
int main() {
    setlocale(0, "");
    srand(static_cast<unsigned>(time(NULL)));
    cout > size;
    // при желании можно ввести и второй аргумент для максимального размера целого положительного числа
    unsigned* a = random(size);
    print(a, size);
    a = remove_even(a, size);
    print(a, size);
    if (a) {
        delete[] a;
        a = NULL;
    }
    cin.sync();
    cin.get();
    return 0;
}
unsigned* remove_even(unsigned* a, size_t& size) {
    unsigned* tmp = NULL;
    if (size) {
        if (tmp = new (nothrow) unsigned[size]) {
            size_t m = 0;
            for (size_t n = 0; n < size; ++n) {
                if (~a[n] & 1) {
                    tmp[m] = a[n];
                    ++m;
                }
            }
            delete[] a;
            size = m;
        }
    }
    return tmp;
}
unsigned* random(size_t size, unsigned short max_value) {
    unsigned* p = NULL;
    if (size && max_value > 1) {
        if (p = new (nothrow) unsigned[size]) {
            for (size_t n = 0; n < size; ++n) {
                p[n] = rand() % max_value;
            }
        }
    }
    return p;
}
void print(unsigned* a, size_t size) {
    for (size_t n = 0; n < size; ++n) cout
Игорь Шубин
Игорь Шубин
93 209
Лучший ответ
0. В коде есть 2 new и 0 delete. Утечки памяти.
1. Вместо *(M + n) пиши M[ n ] - значит то же самое, а читается легче.
убери какашку в функции uc:
M=new int[n];
ES
Erzhan Seidaliev
37 746
на информатику надо было хадить