Народ помогите разобратся с массивами и строковыми данными

  • Автор темы Ghostlydog
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Ghostlydog

#1
1) такое мне было задано задание:

Соседями элемента A(i,j) в матрице назовём новые элементы A(k,l), где i-1<=k<=i+1, j-1<=l<=j+1, (k,l)<>(i,j). Операция сглаживания матрицы даёт новую матрицу того же размера, каждый элемент которого получается как среднее арифметическое имеющихся соседей соответсвующего элемента исходной матрицы. Построить результат сглаживания заданной вещественной матрицы размером 10х10 (оформить в виде процедуры); также в сглаженной матрице найти сумму модулей элементов, расположенных ниже главной диагонали (оформить в виде функции).

т.е. надо провести сглаживание матрицы
была 1 2 3
4 5 6
7 8 9
должна стать что 1 элемент заменяется средней арифметической соседних примерно таким 5 будет =(1+2+3+4+6+7+8+9)/8
после получается 3,666.. 3,8 4,333..
4,6 5 5,4
5,66.. 6,2 6,33..

Код:
#include <iostream.h>
#include <iostream.h>
int main(){
int nrow=3,ncol=3;
int a[nrow][ncol];
int i,j,k,l;
cout << "Enter element"<< endl;
for (i=0;i<nrow;i++)
for(j=0;j<ncol;j++) cin a[i][j];
for(i=0;i<nrow;i++){
for(j=0;j<ncol;j++) cout << setw(4) << a[i][j] << ' ';
cout << endl;
}
// cглаживание
for(i=0;i<nrow;i++){ k((i-1)*3+i*2+(i+1)*3)/8 // надо как ниб сделать чтобы деление зависело от количество чилес в скобке на я не знаю как
for(j=0;j<ncol;j++)l=((j-1)*3+j*2+(j+1)*3)/8}
for(k=0;k<nrow;k++){
for(l=0;l<ncol;l++) cout << setw(4) << a[i][j] << ' ';
cout << endl;
}
retupn 0;
}
вот вместо результаты у меня тут выходят цыфры означающие что тип числа не правльно выбран,а я не знаю как по другому


2) так же у меня есть еще одно задание по строкам
программма считывает текс из файла и выводит на экран только предложени, состоящие из заданного количества слов

незнаю как сделать чтобы считывалось количество слов в предложение

есть еще пару заданий но на них я постараюсь сделать сам


помогите плизз с этими
 

shisik

Well-known member
26.08.2007
154
0
#2
По-первому: не понятно, что этот код делает. Я так понимаю, что если задаётся исходная матрица из целых чисел, то должна быть матрица-результат из дробных чисел, скажем, double b[nrow][ncol];
Вообще, мне кажется алгоритм "сглаживания" совсем не годится. Думаю, для каждого элемента матрицы надо вычислить количество "соседей" по горизонтали и вертикали. После этого (в этом-же цикле) надо их просуммировать и разделить на общее количество "соседей". После чего присвоить соответствующему элементу новой матрицы. Определить количество для элемента a[j] можно, например, проверкой на выход за пределы массива. Скажем, так:
Код:
...
int hor_count = 0, vert_count = 0;
for (k = i - 1; k <= i + 1; k++)
if (k >=0 && k < nrow)
vert_count++;
for (l = j - 1; l <= j + 1; l++)
if (l >=0 && l < ncol)
hor_count++;
...
(написано "на коленке", поэтому за качество не ручаюсь)
По-второму: количество слов в строке равно количеству пробелов в этой строке + 1.
 
V

Valsador

#3
Процедуру для матрицы N*N можно написать так:

Код:
#define N 10

void proc(double A[N][N], double B[N][N])
{
double temp;
int num;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
temp=0.;
num=0;
for(int k=i-1;k<i+2;k++)
{
if(k>-1 && k<N)
for(int l=j-1;l<j+2;l++)
if(l>-1 && l<N && (k!=i || l!=j))
{
temp+=A[k][l];
num++;
}
}
B[i][j]=temp/=num;
}
}
 
G

Ghostlydog

#4
спс что ответили, но в обоих случаях цифры в матрице одинково, у каждого своих выходят но одни и те же
 
Статус
Закрыто для дальнейших ответов.