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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2010, 19:51   #1
v1le
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 13
Восклицание Ошибка в программе.

Программа удаляет из массива все отрицательные элементы.
Код:
#include "stdafx.h"
#include <time.h>
#include <stdlib.h>

void InArr (int *arr, int size);
void OutArr (int arr[], int size);
int GetSizeNegativ(int *arr, int size);
void FillNewArr(int *arr, int *NewArr, int size);

int main(){
	const int size=20;
	int arr[size];
	InArr(arr, size);
	OutArr(arr, size);
	printf("OldArr\n");
	int NewSize = GetSizeNegativ (arr, size);
	int *NewArr = new int (NewSize);
	FillNewArr(arr, size, NewArr); //error C2664: FillNewArr: невозможно преобразовать параметр 2 из 'const int' в 'int *'
	printf("New Array\n");
	OutArr(NewArr, NewSize);
	return 0;
}
void InArr (int *arr, int size){
	srand(time(NULL));//warning C4244: аргумент: преобразование 'time_t' в 'unsigned int', возможна потеря данных
	for (int i=0; i<size; i++)
		arr[i]=rand()%100-50;
}
void OutArr (int arr[], int size){
	for(int i=0; i<size; i++){
		printf("%d\t", arr[i]);
		if((i+1)%5==0)
			printf("\n");
	}
}
int GetSizeNegativ(int *arr, int size){
	int count=0;
	for (int i=0; i<size; i++)
		if (arr[i]<0) count++;
	return count;
}
void FillNewArr(int *arr, int *NewArr, int size){
	int j=0;
	for (int i=0; i<size; i++){
		if(arr[i]<0){
			NewArr[j]=arr[i];
			j++;
		}
	}
}
Как исправить ошибки, сколько бился, не могу исправить.
v1le вне форума Ответить с цитированием
Старый 04.12.2010, 20:48   #2
Chica Bond
Пользователь
 
Регистрация: 15.03.2010
Сообщений: 31
По умолчанию

а что из себя представляет параметр int *NewArr в функции void FillNewArr(int *arr, int *NewArr, int size);?? такое ощущение, что массив, а при вызове этой функции в качестве этого параметра подаётся просто число.. может в этом вся ошибка??
Chica Bond вне форума Ответить с цитированием
Старый 04.12.2010, 21:02   #3
v1le
Пользователь
 
Регистрация: 25.10.2010
Сообщений: 13
По умолчанию

Да, массив.
А тогда как лучше реализовать?
v1le вне форума Ответить с цитированием
Старый 04.12.2010, 21:14   #4
Chica Bond
Пользователь
 
Регистрация: 15.03.2010
Сообщений: 31
По умолчанию

Цитата:
Сообщение от v1le Посмотреть сообщение
Да, массив.
А тогда как лучше реализовать?
эм... попробуй в вызове функции FillNewArr поменять местами третий и второй аргументы))т.е. так FillNewArr(arr, NewArr, size,); просто аргументы перепутаны, поэтому типы не совпадают с прототипом))
Chica Bond вне форума Ответить с цитированием
Старый 04.12.2010, 21:17   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Перезапиши массив.
Посмотри сюда: http://www.programmersforum.ru/showthread.php?t=124684
Здесь я привожу пример перезаписи массива символов, без гласных
Возьми идею с подменой индексов и используй ее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе. ZeroCount Помощь студентам 2 18.12.2010 20:33
Ошибка пв программе aiktz Помощь студентам 0 24.10.2010 21:48
Ошибка в программе w6120w Общие вопросы C/C++ 3 04.10.2010 19:37
Ошибка в программе. T@tali Паскаль, Turbo Pascal, PascalABC.NET 15 25.05.2010 13:36
Ошибка в программе larin1974 Помощь студентам 7 06.03.2010 20:44