Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C] Операции с элементами массива и его сжатие

75K
22 марта 2012 года
Rilanor
3 / / 17.02.2012
Задача такая:

Цитата:
В одномерном массива, состоящем из n вещественных элементов, вычислить:
  • Сумму элементов массива с нечетными номерами
  • Сумму элементов массива, расположенных между первым и последним отрицательным элементом
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.



Написал программу, компилятор выдал пачку ошибок в 8 строке, не могу понять почему, вот код:

Код:
#include <stdio.h>
#include <conio.h>

int main(void)

{
    int n=10;
    float array[n] = {4,8,-11,2,3,9,-4,2,-11,2};
    int i;
    int sum_odd;
    for ( i=0, sum_odd=0; i=n; i+2)
    {
        sum_odd += a[i];
    }
    int sum_between,k,l;
    for ( i=0, sum_between=0; i=n; i++)
    {
        if ( a[i]<0 )
        {
             k = a[i] + 1;
             for ( i=0; i=n; i++)
             {
                 if (a[i]<0)
                 {
                     l = a[i] + 1;
                     for ( i=k; i<l; i++)
                     {
                         sum_between += a[i];
                         }
                         }
                         }
                         }
                         }
    printf ("Summary of odd elements of the array: %d", sum_odd);
    printf (" Summary of all elements between the first and last negative element from the array: %d", sum_between);
    getch();
   
}
Вот список ошибок. Менял флоат на инт, ничего не изменилось, воз и ныне там.

Можете указать, где что не так?
И еще вопрос, что такое сжатие массива, и как оно проводится? Ничего не смог нагуглить.
67K
23 марта 2012 года
NoXCode
64 / / 11.03.2012
Код:
int main(int argc, char* argv[])
{
    printf("Enter the number of elements x = ");
    int d = 0; scanf("%d",&d); printf("\n");

    float* pn = new float[d];
    for (int i = 0; i < d; i++)
    { printf("n[%d]=",i); scanf("%f",&pn[i]); };

    float s1 = 0;
    for (int i = 0; i < d; i++)
        if (i % 2) s1+=pn[i];

    int k = 0, j = d-1;
    while (pn[k] > 0) k++;
    while (pn[j] > 0) j--;
   
    float s2 = 0;
    if (k < j)
    {
       for (int i = k; i <= j; i++)
           s2+=pn[i];
    }

    printf("s1=%4.2f s2=%4.2f\n",s1,s2);

    return 0;
}
316
22 марта 2012 года
Alm3n
889 / / 29.05.2009
1) Размер массива должен быть константой(const),
2) a действительно нигде не объявлен, видимо, это должен быть array.
3) i+2 не имеет эффекта. стоит подучить с++. оператор, который запишет изменённое значение в i - "+=", то есть, i+=2 нужно писать.
4) Вторым параметром цикла нужно писать предикат. Выражение i=n - это присваивание. Предикатом будет i==n.
10K
23 марта 2012 года
Cybernetic
106 / / 22.07.2009
И писать предикат все-таки стоит не "==", а "<". Иначе цикл даже не запустится. Цикл работает, пока условие цикла for равно значению true.
А под "сжать массив" видимо подразумевается удаление ненужных элементов с сохранением числа элементов массива, а на свободные ячейки в конце записать нули.

И проверь алгоритм решения задачи нахождения суммы. В таком виде он не даст нужного результата.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог