Другие языки программирования и технологии

Помогите написать программу на С. Тема Составление программ с использованием массивов

Написать программу на С. Дана действительная матрица 7x7. Найти сумму элементов в заштрихованной области. Сформировать новую матрицу путем прибавления полученного значения к каждому элементу из не заштрихованной области исходной матрицы.
1. Непонятно, элементы главной диагонали принадлежат заштрихованной области, или незаштрихованной, или обеим областям, или не принадлежат ни одной? . Про вторую диагональ - то же самое. Для определенности предполагаю, что диагонали принадлежат обеим областям.

2. Если предположение в п. 1 верно, то заштрихованная область в терминах индексов описывается:

если l - номер строки, k - номер столбца (т. е. элемент a с индексами lk)

k<=l&&(l+k)<=7 - верхний треугольник
k>=l&&(l+k)>=7 - нижний треугольник;

соответственно

k>=l&&(l+k)<=7 - левый треугольник
k<=l&&(l+k)>=7 - правый треугольник;

<=7 и >=7 т. к. индексы массивов в Си начинаются с 0, т. е. первый элемент матрицы с индексами матрицы 1 1 будет n[0][0]. Ну, или можно циклы задавать for(l=1;l<8;l++) и for(k=1;k<8;k++) и тогда сравнивать с 8.

Предполагаю, что массив double n[7][7] уже заполнен (не указано, как реализовать - считывание из файла, ввод с клавиатуры, или заполнение случайными числами) , а массив m[7][7] - объявлен

массивы double n[7][7], m[7][7] - глобальные
переменные int l,k - глобальные

double summ(void)
{
double s=0;
for(l=0;l<7;l++)
{
for(k=0;k<7;k++)
{
if((k<=l&&(l+k)<=7)||(k<=l&&(l+k)>=7)) s+=n[l][k];
}
}
return s;
}

int change(void)
{
double s;
s=summ();
for(l=0;l<7;l++)
{
for(k=0;k<7;k++)
{
if((k>=l&&(l+k)<=7||(k<=l&&(l+k)>=7)) m[l][k]=n[l][k]+s;
esle m[l][k]=n[l][k];
}
}
}

Дальше, видимо, как-то выдать массив m - либо в файл, либо на экран
Николай Краснов
Николай Краснов
30 035
Лучший ответ
А для меня это космос. Молодцы, пацаны!!!
C_
Chelsea _Fan
4 888
да ужя помочь не могу
Hasan Karadeniz
Hasan Karadeniz
2 511
алгоритм простой, в 1 варианте нужно циклом вайл увеличивать на 1 начальный столбец и уменьшать на 1 конечний, пока значения индексов столбцов не будет равно, потом увеличивать, если размер известен (тут 7*7) то можна просто описать построчно
прибавлять значение так же, тока изменять значения начальных и конечных рядов
какие неленивые программисты вам попались :D
тогда сумму найти раз плбнуть0 int s=0,k=0,s=0; ждём когда будем вводить номера (i j) while(cin>>i>>g) {s+=A[j];,A[k]=i;B[k]=j;k++;} это пока что то вводится он читает а потоми забйот =) а потом //*что то*// int h,g; for(int l=0;l++;l< k) h=A[l];g=B[l];N[h][g]+=s;/*где N - искомая матрица*/ Вот и ВСЁ! =) вроде бы...
Владимир Мартынов ввод осуществляется генератором случайных чисел, но впринципе как его задать это понятно, но как дальше делать, непонятно
Владимир Мартынов а можешь полностью прогу написать