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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2009, 02:55   #31
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

ну да, не присваевала я

ошибка то не в основной программе, а в функции
aka_faith вне форума Ответить с цитированием
Старый 29.05.2009, 11:54   #32
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Функция работает верно.

Вот нашел ошибку в Max_Matrix:
Код:
float Max_Matrix(int M, int N,float **M1)
{
int i,j;
float max=-1000;
for(i=0; i<M; i++)
 for(j=0; j<N; j++)
   if (M1[i][j]>max) max=M1[i][j];
printf("max = %3.1f\n", max);
return max;
}
Полный листинг:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <alloc.h>

float **Form_Matrix(int M, int N)
{
int i,j;
float **M1;
M1= (float**)malloc(M*sizeof(float*));
for(i=0;i<M; i++)
 {
 M1[i] = (float*)malloc(N*sizeof(float));
 for(j=0; j<N; j++)
  M1[i][j] = rand()%10;
 }
return M1;
}

void Print_Matrix(int M, int N, float **M1)
{
  int i,j;
    for(i=0;i<M;i++,printf("\n"))
      for(j=0;j<N;j++)
      printf(" %3.1f ",M1[i][j]);
}

int Sum_Matrix(int M, int N,float **M1, int K)
{
float summa;
int i,j,num_j=0;
 for(j=0;j<N;j++)
  {
   summa=0;
   for(i=0;i<M;i++)
     summa+=M1[i][j];
   if (summa>K) num_j=j;
   }
printf("%d\n", num_j);
return num_j;
}

float Max_Matrix(int M, int N,float **M1)
{
int i,j;
float max=-1000;
for(i=0; i<M; i++)
 for(j=0; j<N; j++)
   if (M1[i][j]>max) max=M1[i][j];
printf("max = %3.1f\n", max);
return max;
}

void Sum_Index(int M, int N, float ***M1, int K, float max)
{
float summa;
int i,j,num;
 for(i=0;i<M;i++)
   for(j=0;j<N;j++)
    {
     summa=i+j;
     if (summa!=K) (*M1)[i][j]=-((*M1)[i][j]*max);
    }
return;
}

int Kol(int M, int N,float **M1)
{
int i,j,g=0;
for (i=0; i<M; i++)
 for (j=0; j<N; j++)
   if (M1[i][j]>0) g++;
printf("%d",g);
return g;
}

float **Form_M3(int M, int N, float **M1)
{
int i,j;
float **M3;
M3= (float**)malloc(M*sizeof(float*));
 for(i=0;i<M;i++)
 {
  M3[i] = (float*)malloc(N*sizeof(float));
    for(j=0; j<N; j++)
     M3[i][j]=M1[i][j];
   }
 return M3;
}

int main ()
{
int i,j,num_j,g1,g2, M=3,N=3,K=5;
float **M1, **M2, **M3;
float max1,max2;

printf ("matriza M1\n");
M1 = Form_Matrix(M,N);
Print_Matrix(M,N,M1);

num_j=Sum_Matrix(M,N,M1,K);

max1=Max_Matrix(M,N,M1);

Sum_Index(M,N,&M1,K,max1);

printf("\n");
Print_Matrix(M,N,M1);
g1=Kol(M,N,M1);

printf ("\nmatriza M2\n");
M2 = Form_Matrix(M,N);
Print_Matrix(M,N,M2);
num_j=Sum_Matrix(M,N,M2,K);
max2=Max_Matrix(M,N,M2);

Sum_Index(M,N,&M2,K,max2);

Print_Matrix(M,N,M2);
g2=Kol(M,N,M1);

printf ("\nmatriza M3\n");
if (g1>g2) M3=Form_M3(M,N,M1);
else M3=Form_M3(M,N,M2);
Print_Matrix(M,N,M3);

getch();
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 21:25   #33
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

<font size="+3"><font color="navy"><center>СПАСИБО ОГРОМНОЕ !!!</center></font></font>

Но разве эти требования:
Цитата:
а)функцию, в которой определяется размер матрицы. На основании заданных размеров выделяется место в «куче» и вызывается функция формирования элементов матрицы с помощью генератора случайных чисел. Указатель на выделенный участок памяти возвращается через параметр функции;

3. Функции должны содержать проверку соответствия размеров массивов, участвующих в операции (если необходимо). В случае различия доопределять массивы до максимального размера нулями (либо усекать до минимального размера).
выполняются?
Как сделать, чтобы они выполнялись??
aka_faith вне форума Ответить с цитированием
Старый 30.05.2009, 21:41   #34
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от aka_faith
Функции должны содержать проверку соответствия размеров массивов, участвующих в операции (если необходимо). В случае различия доопределять массивы до максимального размера нулями (либо усекать до минимального размера).
Не вижу у вас функций, которые принимали бы 2 матрицы, чтобы там можно было что-то сравнивать.

А первое условие - это и есть функция создания матрицы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 30.05.2009, 22:43   #35
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

А если бы сравнивали матрицы, то как все таки усекать и доопределять нулями??
aka_faith вне форума Ответить с цитированием
Старый 30.05.2009, 22:49   #36
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от aka_faith
А если бы сравнивали матрицы, то как все таки усекать и доопределять нулями??
В функцию нужно передавать матрицы по ссылке. Сравниваем размерности. Если кто-то больше, то сравниваем их. Выделяем память под новую матрицу. Заполняем ее значениями той, что меньше, при этом последнюю строку/столбец заполняем нулями. После этого освобождаем память под меньшую матрицу и указатель на нее направляем на только что выделенную память.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.06.2009, 03:07   #37
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

омг, какой кошмар!!! и как в этом можно разбираться?? у меня уже на первом курсе мозги завязываются в бантик, а сколько лет необходимо учить, чтоб так знать ЭТО??

у меня просто возник еще вопрос, вот:
как можно ф-цию Max_Matrix вызвать внутри Sum_Index?? и все условия формирования 3-ей матрицы сделать в какой-то ф-ции, что в основной программе осталось лиш A<B<(C & A[B[2]])??
aka_faith вне форума Ответить с цитированием
Старый 11.06.2009, 03:16   #38
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от aka_faith
омг, какой кошмар!!! и как в этом можно разбираться?? у меня уже на первом курсе мозги завязываются в бантик, а сколько лет необходимо учить, чтоб так знать ЭТО??

Цитата:
Сообщение от aka_faith
как можно ф-цию Max_Matrix вызвать внутри Sum_Index??
У вас в функции Sum_Index есть все необходимое: M, N и указатель на матрицу (*M1);
То есть внутри функции вызов будет примерно таким:
Код:
max1=Max_Matrix(M,N,*M1);
и тогда max1 можно объявить внутри функции.
Цитата:
Сообщение от aka_faith
и все условия формирования 3-ей матрицы сделать в какой-то ф-ции, что в основной программе осталось лиш A<B<(C & A[B[2]])??
Ну вот создали вы матрицы, получили указатели. Теперь смотрим, какие переменные из main'а посылаются в разные функции. И все это добро, вместе с указателями на матрицы и ее размерами, посылаем в эту 3-ю функцию.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 11.06.2009, 03:33   #39
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

а освобождение памяти забыли!! ф-ция так будет выглядеть или как-то по другому??
Код:
void osvobogd(float**a,int n)
{int i;
for(i=0;i<n;i++)
free(a[i]);
free (a);
}
именно для этой программы?
aka_faith вне форума Ответить с цитированием
Старый 11.06.2009, 03:34   #40
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да. Притом посылать нужно количество строк.
То есть, например:
Код:
osvobogd(M1,M);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память. Пaвeл Помощь студентам 16 31.05.2009 21:16
Динамическая память liver1981 Общие вопросы C/C++ 5 22.04.2009 09:16
Динамическая память.Списки. Гвендолин Помощь студентам 6 31.03.2009 11:12
Динамическая память MadDog__ Помощь студентам 2 22.11.2007 00:05