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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2011, 17:05   #1
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию динамический массив

Здравствуйте.У меня не выходит решить задачу.Помогите
Нужно преобразовать массив так чтоб сначала располагались элементы модуль каких не превышает 1,а потом все остальные.Дополнить слева массив элементами меньше от введенного з клавиатуры числа А.
Код:
#include <stdio.h>
#include <math.h>
int main ()
{ 
	int i,x,n,imin=1,p;
	float *M;
printf ("vvedit i\n");
scanf ("%d",&i);
n=fmod(i,5)+10;
printf ("n=%d\n",n);
float *M=new float [n];
M=malloc(n*sizeof(int));
for (x=0; x<n; x++)
{
	M[x]=sin(x*x)-cos(x*x*x)-sin(x)+5;
	printf ("%d %4.2f\n",x,M[x]);
}
for (x=0;x<n;x++)
{
if(M[x]<M[imin])
imin=x;
}
printf ("Nomer minimalnogo elementy=%d\n",imin);
int n1 = 0, n2 = 0;
 
//определение номера первого отрицательного элемента
for (p = 0; p < n; p++) {
    if (M[p] < 0) {
        n1 = p;
        break;
    }
}
 
//определение номера второго отрицательного элемента
for (p= n1+1; p < n; p++) {
    if (M[p] < 0) {
        n2 = p;
        break;
    }
}

//проверка на существование границ отрицательных элементов
if ((n2 != 0) && (n1 != n2)) {
   float sum_mezhdu = 0;
    //нахождение суммы элементов между первым и последним отрицательным элементом
    for (p = n1+1; p < n2; p++) {
        sum_mezhdu += M[p];
    }
    printf("\n sums=%4.2f\n",sum_mezhdu);
} else 
   printf("\nERroR: Neg net\n");

for (p=0;p<n;p++)
{
if(M[p]>fabs (1))
{
printf ("%d",M[p]);
}}

return 0;
}
до этого задания что были я сделала.Надеюсь правильно)
Ну я написала условие а дальше не знаю.
помогите.Может советом?!
Заранее благодарна.

Последний раз редактировалось Stilet; 11.06.2011 в 17:31.
ordinary_smile вне форума Ответить с цитированием
Старый 12.06.2011, 17:18   #2
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

ребята,ну помогите хоть идеей((
ordinary_smile вне форума Ответить с цитированием
Старый 12.06.2011, 21:30   #3
Alex456
Пользователь
 
Регистрация: 11.06.2011
Сообщений: 10
По умолчанию

Как я понял, нужно сначала нули и единицы переместить влево, и потом поместить в массив слево от единиц и нулей все числа не превышающие A.

Так?
Alex456 вне форума Ответить с цитированием
Старый 12.06.2011, 21:52   #4
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

нет, нули и единицы должны располагаться вначале массива тоесть справа,потом оставшиеся еще + те элементы которые меньше от числа А(в конце массива).
ну по крайней мере я так поняла задание.
ordinary_smile вне форума Ответить с цитированием
Старый 12.06.2011, 22:35   #5
Alex456
Пользователь
 
Регистрация: 11.06.2011
Сообщений: 10
По умолчанию

Сделал так.

Цитата:
void func (float *m, int n)
{
int i,j,a;
for (i=1; i<n; i++)
{
if (fabsf(m[i])<=1)
{
for (j=i-1;; j>=0; j--)
{
if ( !(fabsf(m[j])<=1) )
{
//меняем местами
a=m[j];
m[j]=m[j+1];
m[j+1]=a;
}
}
}
}

//считываем в A, в Си незнаю как, в Си++ cin>>A;
//Подразумевается, что A - глобальная переменная, или можете сделать её третим аргументом.
scanf ("%d",&A);

//аналогично
for (i=1; i<n; i++)
{
if (m[i]<A)
{
for (j=i-1;; j>=0; j--)
{
if ( !(m[j]<A) )
{
//меняем местами
a=m[j];
m[j]=m[j+1];
m[j+1]=a;
}
}
}
}
//end of func
}
http://i080.radikal.ru/1106/da/b68ac6dec982.jpg

Последний раз редактировалось Alex456; 12.06.2011 в 22:48.
Alex456 вне форума Ответить с цитированием
Старый 12.06.2011, 22:49   #6
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

а что значит
PHP код:
void func (float *mint n)

??и где его писать?только в начале программы и тогда ж по идее вместо int main?
PHP код:
(fabsf(M[d])<=1
и что за f в фабс.опечатка?
что Вы за прием использовали?
ordinary_smile вне форума Ответить с цитированием
Старый 12.06.2011, 23:00   #7
Alex456
Пользователь
 
Регистрация: 11.06.2011
Сообщений: 10
По умолчанию

Цитата:
void func (float *m, int n)
{
я тебе написал функцию которую нужно вставить перед функцией main() и потом вызвать её в функции main() таким образом:
Цитата:
func (M, n);
fabsf() - функция модуля принимающая число типа float
abs() - функция модуля принимающая число типа int

//если что, пишите что непонятно Отвечу!!! Объясню!

Последний раз редактировалось Alex456; 12.06.2011 в 23:04.
Alex456 вне форума Ответить с цитированием
Старый 12.06.2011, 23:19   #8
ordinary_smile
Пользователь
 
Регистрация: 15.05.2011
Сообщений: 25
По умолчанию

проблема в том что Ваши переменные нужно согласовать с моими,у меня ж был объявлен массив
PHP код:
float *M
вставив Вашу кон струкцию в свою программу у мя выбивает 14 ошибок(
вот весь код глянь пожалуйста(
PHP код:
#include <stdio.h>
#include <math.h>
int main ()

    
int i,x,n,imin=1,p;
    
float *M;
printf ("vvedit i\n");
scanf ("%d",&i);
n=fmod(i,5)+10;
printf ("n=%d\n",n);
float *M=new float [n];
M=malloc(n*sizeof(int));
for (
x=0x<nx++)
{
    
M[x]=sin(x*x)-cos(x*x*x)-sin(x)+5;
    
printf ("%d %4.2f\n",x,M[x]);
}
for (
x=0;x<n;x++)
{
if(
M[x]<M[imin])
imin=x;
}
printf ("Nomer minimalnogo elementy=%d\n",imin);
int n1 0n2 0;
 
//определение номера первого отрицательного элемента
for (0np++) {
    if (
M[p] < 0) {
        
n1 p;
        break;
    }
}
 
//определение номера второго отрицательного элемента
for (pn1+1np++) {
    if (
M[p] < 0) {
        
n2 p;
        break;
    }
}

//проверка на существование границ отрицательных элементов
if ((n2 != 0) && (n1 != n2)) {
   
float sum_mezhdu 0;
    
//нахождение суммы элементов между первым и последним отрицательным элементом
    
for (n1+1n2p++) {
        
sum_mezhdu += M[p];
    }
    
printf("\n sums=%4.2f\n",sum_mezhdu);
} else 
   
printf("\nERroR: Neg net\n");
int d,j,a;
for (
d=1d<nd++)
{
if (
fabs(M[d])<=1)
{
for (
j=d-1;; j>=0j--)
{
if ( !(
fabs(M[j])<=1) )
{
//меняем местами
a=M[j];
M[j]=M[j+1];
M[j+1]=a;
}
}
}
}
printf ("vvedit A\n");

scanf ("%d",&A);

//аналогично
for (d=1d<nd++)
{
if (
M[d]<A)
{
for (
j=i-1;; j>=0j--)
{
if ( !(
M[j]<A) )
{
//меняем местами
a=M[j];
M[j]=m[j+1];
M[j+1]=a;
}
}
}
}
//end of func


return 0;

ordinary_smile вне форума Ответить с цитированием
Старый 12.06.2011, 23:53   #9
Alex456
Пользователь
 
Регистрация: 11.06.2011
Сообщений: 10
По умолчанию

Это программа делает вот, что(как я понял из условия) - Нужно преобразовать массив так чтоб сначала располагались элементы модуль каких не превышает 1,а потом все остальные. После, Дополнить слева от массива элементами меньше от введенного с клавиатуры числа А (то есть они будут стоять ещё левее чисел чьи модули меньше единицы).
Полный функциональный код на С++ (я Си не знаю):
Цитата:
#include <iostream>
using std::cin;
using std::cout;
#include <math.h>


void func (float *m, int n, int A)
{
int i,j;
float a;
for (i=1; i<n; i++)
{
if (fabsf(m[i])<=1)
{
for (j=i-1; j>=0; j--)
{
if ( !(fabsf(m[j])<=1) )
{
//меняем местами
a=m[j];
m[j]=m[j+1];
m[j+1]=a;
}
}
}
}
//считываем в A, в Си незнаю как, в Си++ cin>>A;
//Подразумевается, что A - глобальная переменная, или можете сделать её третим аргументом.
//scanf ("%d",&A);
//аналогично
for (i=1; i<n; i++)
{
if (m[i]<A)
{
for (j=i-1; j>=0; j--)
{
if ( !(m[j]<A) )
{
//меняем местами
a=m[j];
m[j]=m[j+1];
m[j+1]=a;
}
}
}
}
//end of func
}




int main ()
{
int n=5;
float *M;
float A=5.1;

M = new float [n];
M[0]=5.11111;
M[1]=111.55;
M[2]=11.8;
M[3]=-1.56;
M[4]=-6.987;
func (M, n, A);
int i;
for (i=0; i<n; i++)
cout<<M[i]<<'\n';
cin.ignore();
return 0;
}
мы создали функцию func(int *m, int n) которая принимает первым аргументом ссылку на массив(в данном случае M) и его размер n(в данном случае 5);

потом мы вызываем в эту функцию в main();

что ещё не понятное осталось?

Последний раз редактировалось Alex456; 12.06.2011 в 23:56.
Alex456 вне форума Ответить с цитированием
Старый 13.06.2011, 11:34   #10
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

ordinary_smile

Нужно преобразовать массив так чтоб сначала располагались элементы модуль каких не превышает 1,а потом все остальные

Код:
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>

#include <time.h>
#include <stdlib.h>

// Нужно преобразовать массив так чтоб сначала располагались элементы модуль каких не превышает 1,а потом все остальные.

struct R : public std::unary_function<void, bool>
{
	float operator()() const
	{
		return ((float) rand() / RAND_MAX - 0.5f) * 4.0f;
	}
};

struct Z : public std::unary_function<float, bool>
{
	bool operator()(float v) const
	{
		return fabs(v)  < 1.0f;
	}
};

void generate(float* arr, size_t N)
{
	std::generate_n(arr, N, R());
}

template <size_t N>
std::ostream& operator<<(std::ostream& os, const float (&arr)[N])
{
	typedef std::ostream_iterator<float> O;
	std::copy(arr, arr + N, O(os, " "));
	return os;
}

int main()
{
	setlocale(LC_ALL, "");

	srand((unsigned) time(NULL));

	float arr[10] = {0};
	generate(arr, 10);

	std::cout << arr << std::endl;
	
	std::partition(arr, arr + 10, Z());

	std::cout << arr << std::endl;

	return 0;
}
Пример работы программы: http://codepad.org/tvcp4tQ2
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив, массив указателей alexalisa Паскаль, Turbo Pascal, PascalABC.NET 4 22.04.2011 21:33
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
Динамический массив в С# Денис89 Общие вопросы .NET 7 09.09.2010 22:42
Динамический массив vvv-091 Фриланс 4 01.06.2010 00:31
Динамический массив Ueshua Общие вопросы C/C++ 7 28.12.2009 09:45