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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2010, 18:07   #1
Bastino
Новичок
Джуниор
 
Регистрация: 28.03.2010
Сообщений: 2
По умолчанию Сложение двух квадратных матриц

Но ничего не нашел чтобы мне помогло. Задача первого курса ВУЗа, написать программу, реализующую сложение двух квадратных матриц. Хочется сделать ее универсальной через динамическую память, код написал, но компилятор ругается, а я не знаю где я допустил ошибку. Предполагаю только что в месте где я выделяю память...

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>



float **matrsum(float **a, float **b,float **c, int n, int m) /* m - stroki, n - stolbci*/
{
 int x,y,z;
 a = (float**)malloc(m*sizeof(float*));
 b = (float**)malloc(m*sizeof(float*));       /*zadanie matric*/
 c = (float**)malloc(m*sizeof(float*));
 for (z=1;z<m;z++)
 {
  a[z] = (float*)malloc(n*sizeof(float*));
  b[z] = (float*)malloc(n*sizeof(float*));
  c[z] = (float*)malloc(n*sizeof(float*));
 }
/*_______________________________________________________*/
 printf("Vvedite matricu A:");
 for (x=0;x<m;x++)
 {
   for(y=0;y<n;y++)
    {
      scanf("%f",&a[x][y]);                    /* zapolnenie matric*/
    }
   printf("\n");
 }

   printf("\n");
   printf("\n");

  printf("Vvedite matricu B:");
 for (x=0;x<m;x++)
 {
   for(y=0;y<n;y++)
    {
      scanf("%f",&b[x][y]);
    }
   printf("\n");
 }

/*_______________________________________________________*/
   printf("\n");
   printf("\n");

 for(x=0;x<m;x++)
{
  for(y=0;y<n;y++)
{
    c[x][y] = a[x][y] + b[x][y];
     printf("%f ",c[x][y]);
}
 printf("\n");
}
 return a,b;
}

/*______________________________________________________________*/
int main ()
{ float m1[3][3];
  float m2[3][3];
  float m3[3][3];
  matrsum(m1,m2,m3,3,3);
 clrscr();
 getch();
return 0;
}
Вот собственно код, поскажите пожалуста где ошибка, и как исправить, рылся в учебниках, но все равно ничего не нашел. Пишу в borland C.

Последний раз редактировалось Stilet; 29.03.2010 в 17:19.
Bastino вне форума Ответить с цитированием
Старый 28.03.2010, 19:06   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

да в общемто ошибок у тебя нет, а вот недочеты я исправил:
в функции лучше не создавать дин. массив и не забывай освобождать память:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>



float **matrsum(float **a, float **b,float **c, int n, int m) /* m - stroki, n - stolbci*/
{
int x,y,z;
/*__________________________________ _____________________*/
printf("Vvedite matricu A:");
for (x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
scanf("%f",&a[x][y]); /* zapolnenie matric*/
}
printf("\n");
}

printf("\n");
printf("\n");

printf("Vvedite matricu B:");
for (x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
scanf("%f",&b[x][y]);
}
printf("\n");
}

/*__________________________________ _____________________*/
printf("\n");
printf("\n");

for(x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
c[x][y] = a[x][y] + b[x][y];
printf("%f ",c[x][y]);
}
printf("\n");
}
return a,b;
}

/*__________________________________ ____________________________*/
int main ()
{
 int n=3, z;
 float **a = (float**)malloc(n*sizeof(float));
 float **b = (float**)malloc(n*sizeof(float)); /*zadanie matric*/
 float **c = (float**)malloc(n*sizeof(float));
 for (z=0;z<n;z++)
 {
   a[z] = (float*)malloc(n*sizeof(float));
   b[z] = (float*)malloc(n*sizeof(float));
   c[z] = (float*)malloc(n*sizeof(float));
 }
matrsum(a,b,c,3,3);

for(z=0; z<n; z++) {
    free(a[z]);
    free(b[z]);
    free(c[z]);
}
    free(a);
    free(b);
    free(c);


getch();
return 0;
}
NiCola999 вне форума Ответить с цитированием
Старый 29.03.2010, 15:55   #3
Bastino
Новичок
Джуниор
 
Регистрация: 28.03.2010
Сообщений: 2
По умолчанию

Спасибо за исправление! Решил очищать память в самой функции, но программа закрывается, когда в отладке я дохожу до самой функции... Попытался сделать функцию программой, капилятор говорит что ошибка в объявлении динамического массива, но ошибки я там не вижу. (

Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>



float **matrsum(float **a, float **b,float **c, int n, int m) /* m - stroki, n - stolbci*/
{
int x,y,z;
/*__________________________________ _____________________*/
printf("Vvedite matricu A:");
for (x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
scanf("%f",&a[x][y]); /* zapolnenie matric*/
}
printf("\n");
}

printf("\n");
printf("\n");

printf("Vvedite matricu B:");
for (x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
scanf("%f",&b[x][y]);
}
printf("\n");
}

/*__________________________________ _____________________*/
printf("\n");
printf("\n");

for(x=0;x<m;x++)
{
for(y=0;y<n;y++)
{
c[x][y] = a[x][y] + b[x][y];
printf("%f ",c[x][y]);
}
printf("\n");
}
getch();

for(z=0; z<n; z++) {
    free(a[z]);
    free(b[z]);
    free(c[z]);
}
    free(a);
    free(b);
    free(c);

return a,b;
}

/*__________________________________ ____________________________*/
int main ()
{
 int n=3, z;
 float **a = (float**)malloc(n*sizeof(float));
 float **b = (float**)malloc(n*sizeof(float)); /*zadanie matric*/
 float **c = (float**)malloc(n*sizeof(float));
 for (z=0;z<n;z++)
 {
   a[z] = (float*)malloc(n*sizeof(float));
   b[z] = (float*)malloc(n*sizeof(float));
   c[z] = (float*)malloc(n*sizeof(float));
 }
matrsum(a,b,c,3,3);



getch();
return 0;
}

Последний раз редактировалось Stilet; 29.03.2010 в 17:18.
Bastino вне форума Ответить с цитированием
Старый 29.03.2010, 16:29   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
float **a = (float**)malloc(n*sizeof(float*));
В двух последующих аналогично.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить программу умножения двух квадратных матриц gnom 62 Помощь студентам 15 06.05.2012 14:52
сложение матриц daimonTM Помощь студентам 4 24.03.2010 20:39
добавить сложение двух матриц miha815 Помощь студентам 2 28.11.2009 20:06
Сложение двух матриц Аркадий Помощь студентам 5 26.04.2008 15:22
Сравнение 2-ух квадратных матриц размер 3*3 Artem1987 Помощь студентам 2 23.03.2008 16:16