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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Ghostlydog, 12 июн 2008.

Статус темы:
Закрыта.
  1. Ghostlydog

    Ghostlydog Гость

    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..

    Код (Text):
    #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) так же у меня есть еще одно задание по строкам
    программма считывает текс из файла и выводит на экран только предложени, состоящие из заданного количества слов

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

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


    помогите плизз с этими
     
  2. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    По-первому: не понятно, что этот код делает. Я так понимаю, что если задаётся исходная матрица из целых чисел, то должна быть матрица-результат из дробных чисел, скажем, double b[nrow][ncol];
    Вообще, мне кажется алгоритм "сглаживания" совсем не годится. Думаю, для каждого элемента матрицы надо вычислить количество "соседей" по горизонтали и вертикали. После этого (в этом-же цикле) надо их просуммировать и разделить на общее количество "соседей". После чего присвоить соответствующему элементу новой матрицы. Определить количество для элемента a[j] можно, например, проверкой на выход за пределы массива. Скажем, так:
    Код (Text):
    ...
    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.
     
  3. Valsador

    Valsador Гость

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

    Код (Text):
    #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;
    }
    }
     
  4. Ghostlydog

    Ghostlydog Гость

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

Поделиться этой страницей