Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2013, 14:53   #1
C++Student
 
Регистрация: 10.09.2013
Сообщений: 3
По умолчанию Вызов подпрограммы. Си

Написать функцию вычисления произведения прямоугольной матрицы A размера k*m на прямоугольную матрицу B размера m*n. В главной программе обратиться к этой функции.
C++Student вне форума Ответить с цитированием
Старый 10.09.2013, 14:58   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Наработки какие-нибудь имеются?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 10.09.2013, 15:03   #3
C++Student
 
Регистрация: 10.09.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Наработки какие-нибудь имеются?
Делал не я, так что за правильность не ручаюсь, программа состаленна для квадратной матрицы. Просто я даже не знаю как из нее сделать подпрограмму.
Код:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
void multiply(int** result, int** m1, int** m2, size_t size)
{
    size_t i, j;
    
    for(i = 0; i < size; ++i)
    for(j = 0; j < size; ++j)
    {
        size_t k;
        
        result[i][j] = 0;
        
        for(k = 0; k < size; ++k)
        result[i][j] += m1[i][k] * m2[k][j];
    }
}
 
void dump(int** matrix, size_t size, const char* prompt)
{
    size_t i, j;
 
    if(prompt != NULL)
    puts(prompt);
    
    for(i = 0; i < size; ++i, putchar('\n'))
    for(j = 0; j < size; ++j)
        printf("%5d", matrix[i][j]);
}
 
void generate(int** matrix, size_t size, int left, int right)
{
    size_t i, j;
    
    for(i = 0; i < size; ++i)
    for(j = 0; j < size; ++j)
        matrix[i][j] = rand() % (right - left + 1) + left;
}
 
int** allocate_matrix(size_t size)
{
    size_t i;
    
    int** matrix;
            
    matrix = malloc(size * sizeof(int*));
    assert(matrix != NULL);
    
    for(i = 0; i < size; ++i)
    {
    matrix[i] = malloc(size * sizeof(int));
 
    assert(matrix[i] != NULL);
    }
 
    return matrix;
}
 
void free_matrix(int** matrix, size_t size)
{
    size_t i;
 
    for(i = 0; i < size; ++i)
    free(matrix[i]);
 
    free(matrix);
}
 
int main(void)
{
    size_t size;
    int** m1;
    int** m2;
    int** m3;
    
    srand((size_t) time(NULL));
 
    printf("Input the size of matrices: ");
    scanf("%zd", &size);
 
    m1 = allocate_matrix(size);
    m2 = allocate_matrix(size);
    m3 = allocate_matrix(size);
    
    generate(m1, size, -5, 5);
    generate(m2, size, -5, 5);
 
    dump(m1, size, "First matrix:");
    dump(m2, size, "Second matrix:");
 
    multiply(m3, m1, m2, size);
 
    dump(m3, size, "Resulting matrix:");
    
    free_matrix(m3, size);
    free_matrix(m2, size);
    free_matrix(m1, size);
 
    exit(0);
}
From Stilet: Убрал дуальность.

Последний раз редактировалось Stilet; 10.09.2013 в 16:15.
C++Student вне форума Ответить с цитированием
Старый 10.09.2013, 15:07   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

И что Вас смущает, код работает???? Немного адоптировать под свою задачу и в бой...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 10.09.2013, 15:12   #5
C++Student
 
Регистрация: 10.09.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
И что Вас смущает, код работает???? Немного адоптировать под свою задачу и в бой...
не могли бы вы сделать её подпрограммой основной некой программы?
C++Student вне форума Ответить с цитированием
Старый 10.09.2013, 15:18   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

1) Вы вставили один и тот же код два раза.
2) Некая программа (main) и подпрограмма (multiply) уже представлены в коде.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов подпрограммы (C++Builder 6) vale4ka_1989 Помощь студентам 9 11.04.2012 18:01
Вызов подпрограммы (C++Builder 6) vale4ka_1989 Помощь студентам 0 29.03.2012 13:09
Подпрограммы superDmitry Помощь студентам 1 10.12.2010 19:10
Подпрограммы-процедуры, подпрограммы-функции в Pascal rishikesh Помощь студентам 19 18.05.2010 23:05
Вызов рисующих методов сцены из подпрограммы. jojahti Общие вопросы C/C++ 6 20.08.2009 11:50