Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2010, 16:47   #1
TvYown
 
Регистрация: 23.12.2010
Сообщений: 3
По умолчанию Работа с одномерным массивом

Ребята,помогите найти ошибку.
Работает вроде всё,но не хочет выполнять последнее условие:Сжать массив,удалив из него элеме-ты,находящиеся в интервале [a;b].Освободившееся место заполнить 0.


Код получился вот такой.

Код:
#include"stdafx.h"
#include<iostream> 
#include<conio.h> 
#include<stdlib.h> 
#include<math.h>
#include"time.h"[/COLOR]
using namespace std;





int* mas_create(int n)
{
	int* p = new int[n];
	srand(time(NULL));
	for (int i=0;i<n;++i)  *(p+i)=rand()%100-50;
	return p;
}


void out_mass(int n, int* p)
{
	for (int i=0;i<n;++i) cout<<(i+1)<<"."<<"   "<<*(p+i)<<endl;
}


int max(int n, int* p)
{
	int max = *p; 
   for(int i=1; i<n; i++) 
      if(*(p+i)> max) max = *(p+i); 
   return max; 
}


int summa(int n, int* p)
{
	int k1=0,s=0;
	for(int i=n-1; i>=0; i--) 
   {   
      if(*(p+i)>=0) k1++; 
	   if(k1>=1) s+=*(p+i); 
      
   } 
   return s; 
}

int* honor(int n, int* p, int a, int b)
{
	int k=0;
	int* t = new int[n];
	for(int i=0;i<n;i++) 
   { 
      if((a >(abs(*(p+i)))) || ((abs(*(p+i)))>b)) 
      { 
         *(t+i)=*(p+i); 
         k++; 
      } 
   } 
   for(int i=k;i<n;i++) 
      *(t+i) = 0;
   return t;
}


int main()
{
	int n,a,b;
	cout<<"Enter n"<<endl;
	cin>>n;
	int* p = mas_create(n);
	out_mass(n,p);
	cout<<"Summa "<<summa(n,p)<<endl;
	cout<<"Max "<<max(n,p)<<endl;
	cout<<"Enter interval: a = "; cin>>a; 
	cout<<"b = "; cin>>b;
	out_mass(n,honor(n,p,a,b));
	return 0;
}

Последний раз редактировалось Stilet; 23.12.2010 в 17:06.
TvYown вне форума Ответить с цитированием
Старый 23.12.2010, 17:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мне кажется можно сжать массив попроще:
Код:
		
        int m[5]={1,2,3,4,5};
	int k=0,a=3,b=4;
	for(int i=0;i<5;i++) printf("%d\t",m[i]);printf("\n");
	for(int i=0;i<5;i++){
		m[k]=m[i];
		if ((m[i]<a)||(m[i]>b)) k++;
	}
	for(;k<5;k++) m[k]=0;
	for(int i=0;i<5;i++) printf("%d\t",m[i]);printf("\n");
	getchar();
	return 0;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.12.2010, 17:29   #3
TvYown
 
Регистрация: 23.12.2010
Сообщений: 3
По умолчанию

Да дело не в том что он сжат не очень рационально,просто я не могу понять,почему он там грязь выдает...
Я думаю что где-то потерял адрес,а вот найти ошибку не могу(
TvYown вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с одномерным массивом в СИ++ glagoff Помощь студентам 6 31.10.2010 21:02
Работа с одномерным массивом Roll1n Общие вопросы C/C++ 20 10.04.2010 18:35
работа с одномерным массивом и сортирокой Nitriyc Помощь студентам 0 22.11.2009 14:24
работа с одномерным массивом _Solomon_ Помощь студентам 1 07.06.2007 12:06