Невозможно указать начальную и конечную строки в умножении матриц

Я написал программу на языке C для умножения матриц. Теперь я хочу разделить количество строк на 5 блоков N/5. Функция должна вычислить первый блок строк в первой итерации, вторую часть во второй и так далее. Как указать начальную и конечную строки в каждой итерации? Я пробовал это ниже. Может ли кто-нибудь помочь мне исправить это.

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i, m, n, p, q, c, d, k,g, sum = 0,start=0,end=m/5;
    int **first, **second, **multiply;
    printf("Enter the number of rows and columns of first matrix\n");
    scanf("%d%d", &m, &n);
    printf("Value entered %d%d \n",m,n);
    first = malloc(m*sizeof(int*));
    for ( i =0;i <m; i++)
        first[i] =malloc(n*sizeof(int));
    printf("Enter the number of rows and columns of second matrix \n");
    scanf("%d%d", &p,&q);
    printf("value entered %d%d \n",p,q);
    second = malloc(p*sizeof(int*));
    for( i=0;i<p;i++)
        second[i] = malloc(q*sizeof(int));
    multiply = malloc(m*sizeof(int*));
    for ( i=0;i<m;i++)
        multiply[i] = malloc(q*sizeof(int));
    printf("Enter the elements of first matrix\n");
    for( c = 0 ; c < m ; c++ )
        for ( d = 0 ; d < n ; d++ )
            scanf("%d", &first[c][d]);
    if ( n != p )
        printf("Matrices with entered orders can't be multiplied with each other.\n");
    else {
        printf("Enter the elements of second matrix\n");
        for ( c = 0 ; c < p ; c++ ){
            for ( d = 0 ; d < q ; d++ )
                scanf("%d", &second[c][d]);
        }
        for(g=0;g<5;g++){
            for ( c = start ; c < end ; c++ ) {
                for ( d = 0 ; d < q ; d++ ) {
                    for ( k = 0 ; k < p ; k++ ) {
                        sum = sum + first[c][k]*second[k][d];
                    }
                    multiply[c][d] = sum;
                    sum = 0;
                }
            }
            start=start+m/5+1;
            end=end+m/5;
        }

        printf("Product of entered matrices:-\n");
        for ( c = 0 ; c < m ; c++ ) {
            for ( d = 0 ; d < q ; d++ )
                printf("%d\t", multiply[c][d]);
            printf("\n");
        }
        for ( i = 0; i < p; i++)
            free(second[i]);
        free(second);
        for ( i = 0; i < m; i++)
            free(multiply[i]);
        free(multiply);
    } 
    for ( i = 0; i < m; i++)
        free(first[i]);
    free(first);
    return 0;
}

person Adamant Argh    schedule 19.03.2013    source источник
comment
Я бы начал с чего-то, что компилируется.   -  person WhozCraig    schedule 20.03.2013
comment
Я отредактировал его, не могли бы вы сказать мне, правильно ли я это делаю?   -  person Adamant Argh    schedule 20.03.2013


Ответы (1)


Начальные индексы обычно равны 0 (читай всегда), но что касается конечных индексов,

Вы должны сохранить их в переменных rows/cols, когда вы выделяете/конструируете матрицу.

person masoud    schedule 19.03.2013