DSPSYSTEM Теория и практика цифровой обработки сигналов

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



переходы через "ноль"

Сообщений 1 страница 2 из 2

1

имеется массив double x = { 0.2, -0.02, 0.6, 0.98, 0.5, -0.35, 1.5};

необходимо создать код, который создает заполняет два массива
1-й массив типа инт содержит номера элементов окружающих положительный переход через ноль :
для данного массива int y[4] = {2, 3, 6, 7};
2-й массив типа double содержит значения по этим номерам
для данного случая double z[4] = {-0.02, 0.6, -0.35, 1.5};

причём необходимо учесть, что если в массиве x больше переходов через "0" чем 2 то в массивы y и z должны записаться только первые два перехода через ноль.
Т.е. длина массивов y и z должна быть всегда 4 независимо от того сколько раз меняется знак в массиве x.

пока что смог создать такую конструкцию:

#include <iostream.h>
int main()
{
   
    const int n = 7;
    double x[] = { 0.2, -0.02, 0.6, 0.98, 0.5, -0.35, 1.5};
    int y[4];
    double z[4];
    int k = 0;
    for(int i = 0; i < n - 1; ++i)
       { if(x[i] < 0 && x[i + 1] >= 0)
    {
     y[k] = i+1;
                      k++;
     y[k] = i+2;
     k++;
     }       
}
      cout << y[0] <<' ' << y[1]<<' ' << y[2]<<' ' << y[3] ;
        cin.get();
        cin.get();
    return 0;
}

но она заполняет только массив y = {2, 3 6, 7}. и не решена проблема когда перехожов через ноль больше чем два.

никак не могу подобрать конструкцию чтобы заполнить массив z соответствующими значениями.
как решить выше названные проблемы?

Буду очень благодарен за помощь.

Отредактировано Franky (2010-03-08 23:43:12)

0

2

ну во-первых необходимо выделить больше памяти под массивы y и z.
во вторых для заполнения z можно цикл немного изменить.
в третьих если количество переходов через ноль неизвестно, то можно применить динамическое выделение памяти к массивам y и z
ну и наконец в четвертых нумерация индексов массивах начинается с 0 а не с 1.

я бы написал так:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{

	const int n = 7;
	double x[] = { 0.2, -0.02, 0.6, 0.98, 0.5, -0.35, 1.5};
	int* y = (int*)malloc(n*sizeof(int));// динамически выделяю память под y
	double* z=(double*)malloc(n*sizeof(double));//динамически выделяю память под z
	int k = 0;
	for(int i = 1; i < n; ++i){ 
	if(x[i-1]< 0 && x[i] >= 0){
    	y[k] = i-1;    // заполняю y
    	z[k] = x[y[k]];	// заполняю z
    	k++;
    	y[k] = i;
    	z[k] = x[y[k]];
    	k++;
    }       
	}
	// изменяю размер выделенной памяти до k элементов (какбы отризаю лишнee)
	y = (int*)realloc(y,k*sizeof(int));
	z = (double*)realloc(z,k*sizeof(double)); 

	// печать результата:
	for(int i = 0; i<k; i++){
    printf("y[%d] = %d,\t z[%d] = x[%d] = %f\n",i,y[i],i,y[i],z[i]);
	}
	// чищу память
	free(y);
	free(z);
    return 0;
}

0