Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » помощь студенту

Модерирует : ShIvADeSt

ShIvADeSt (23-06-2014 14:34):  Версия для печати • ПодписатьсяДобавить в закладки

   

nwhta

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
всем привет!
прошу помочь студенту(то есть мне).
 
Ниже приводится определение:
Разреженной матрицей является матрица, где нулей 60% или более.
 
задача такая:
 
Написать функцию, которая принимает матрицу мат [] [] и проверяет, если это разряженная матрица.
Если это так - возвращает указатель на одномерный массив, представляя ее.
Если нет - печатает соответствующее сообщение и возвращает NULL.
 
вот что я написал:
(подскажите что не так, чем дополнить?)
#include <stdio.h>
#include <stdlib.h>
#define ROW 4
#define COLUMN 5
void f2(int mat[][COLUMN])
{
    int arr[100], **mat2;
    int i, j;
    int z;
    int cnt = -1; //why cnt must be -1?
    int cnt2 = 0;
    for (i = 0; i < ROW; i++)
    {
        for (j = 0; j < COLUMN; j++)
        {
            if (mat[i][j])
            {
                cnt = cnt + 3;
                arr[cnt - 2] = mat[i][j];
                arr[cnt - 1] = i;
                arr[cnt] = j;
            }
        }
    }
    **mat2 = (int*)malloc((cnt / 3)*sizeof(int));
    for (j = 0; j < cnt / 3; j++)
    {
 
        mat2[0][j] = arr[cnt2];
        mat2[1][j] = arr[cnt2 + 1];
        mat2[2][j] = arr[cnt2 + 2];
        cnt2 += 3;
    }
}
void main()
{
    int i, j;
    int mat[ROW][COLUMN] = { 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 2, 0, 3, 0 };
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 10; j++)
        {
            printf("%d",mat);
        }
    }
}

Всего записей: 5 | Зарегистр. 22-03-2014 | Отправлено: 12:26 22-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
#include <stdio.h>
#include <stdlib.h>
#define ROW 4
#define COLUMN 5
 
int* f2(int* mat)
{
    int i, x;
 
    for(x = i = 0; i < ROW * COLUMN ; ++i)
        if(!mat[i])
            ++x;
 
    if((float)x / (ROW * COLUMN) < 0.60)
    {
        puts("sootvetsvujuscheje soobschenije");
        return NULL;
    }
 
    return mat;
}
 
int main()
{
    int mat[ROW][COLUMN] = {{0, 5, 0, 6, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 4}, {1, 2, 0, 3, 0}};
 
    printf("%p", f2((int*)mat));  
    return 0;
}

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 14:40 22-06-2014 | Исправлено: ne_viens, 14:55 22-06-2014
nwhta

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо но это не всё задание, ещё такой вопрос к вам как матрицу передать в функцию а потом из функции правильно?

Всего записей: 5 | Зарегистр. 22-03-2014 | Отправлено: 11:32 23-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А по моему всё- матрица передаётся в функцию f2 как одномерный int массив, a возвращаемый указатель печатается.

Всего записей: 1525 | Зарегистр. 01-11-2004 | Отправлено: 13:40 23-06-2014
   

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » помощь студенту
ShIvADeSt (23-06-2014 14:34):


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru