[C] Операции с элементами массива и его сжатие
Цитата:
В одномерном массива, состоящем из n вещественных элементов, вычислить:
- Сумму элементов массива с нечетными номерами
- Сумму элементов массива, расположенных между первым и последним отрицательным элементом
Написал программу, компилятор выдал пачку ошибок в 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();
}
#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();
}
Можете указать, где что не так?
И еще вопрос, что такое сжатие массива, и как оно проводится? Ничего не смог нагуглить.
Код:
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;
}
{
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;
}
2) a действительно нигде не объявлен, видимо, это должен быть array.
3) i+2 не имеет эффекта. стоит подучить с++. оператор, который запишет изменённое значение в i - "+=", то есть, i+=2 нужно писать.
4) Вторым параметром цикла нужно писать предикат. Выражение i=n - это присваивание. Предикатом будет i==n.
А под "сжать массив" видимо подразумевается удаление ненужных элементов с сохранением числа элементов массива, а на свободные ячейки в конце записать нули.
И проверь алгоритм решения задачи нахождения суммы. В таком виде он не даст нужного результата.