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

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

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

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

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

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

я совсем запуталась... напишите, пожалуйста, правельный код какой-нибудь функции, например, которая находит сумму, а то функции формирования не очень понятно...

да и для чего нужны операторы new, delete? может с ними программа будет проще?
aka_faith вне форума Ответить с цитированием
Старый 25.05.2009, 02:51   #12
aka_faith
Пользователь
 
Аватар для aka_faith
 
Регистрация: 15.05.2009
Сообщений: 74
По умолчанию

очень Вас прошу, очень хочется разобраться со всем этим)))
aka_faith вне форума Ответить с цитированием
Старый 25.05.2009, 02:53   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот функция для нахождения суммы всех элементов матрицы:

Код:
float Summ(float **M, int n) // принимаем указатель на матрицу и размерность
{
int i,j;
float S=0;
for(i=0; i<n; i++)
 for(j=0; j<n; j++)
  S += M[i][j];
return S;
}
Цитата:
да и для чего нужны операторы new, delete? может с ними программа будет проще?
Это операторы для работы с памятью в C++. Вы, как я понял, пишете программу на Си.

Функция формирования:
Код:
float **Form_Matrix(int M, int N)
{
float **M1;
M1= (float**)malloc(M*sizeof(float*));
for(int i=0;i<M; i++)
 {
 M1[i] = (float*)malloc(N*sizeof(float));
 for(int j=0; j<N; j++)
  M1[i][j] = random(10);
 }
return M1; // возвращаем указатель на наш массив
}
В главной функции использовать вот так:
Код:
float **M;
int n=3; //размерность
M = Form_Matrix(n,n);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

А такой вариант тоже содержит много ошибок??
Код:
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
#include<stdlib.h>

//формируем матрицу
float **Form_Matrix(int M, int N)
{
float **M1;
M1= (float**)malloc(M*sizeof(float*));
for(int i=0;i<M; i++)
 {
 M1[i] = (float*)malloc(N*sizeof(float));
 for(int j=0; j<N; j++)
  M1[i][j] = random(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]);
}

//находим максимальный элемент матрицы
float Max_Matrix(float **M1, int n) 
{
int i,j;
float max=-1000;
for(i=0; i<n; i++)
 for(j=0; j<n; j++)
   {
	if (M1[i][j]>M1[i][j]) max=M1[i][j];
        }
printf("%3.1f", max);
      return max;
}

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

//находим номер столбца матрицы с суммой элементов, большей К
float Sum_Matrix(int M, int N,float **M1)
{
 float summa;
 int i,j,num_j; 
  for(j=0;j<N;j++)
   { summa=0;
    for(i=0;i<M;i++)
      summa+=M1[i][j];
     }if (summa>n) num_j=j;
  }
printf("%3.1f", num_j);
 return num_j;
}

//находим M3=M1<M2-M3=M1, если матрица М1 содержит больше положительных элементов, чем М2 и наоборот
void Min_Max(float **M1,float**M2,float **M3, int N, int M)
{
  int i,j;
  for (i=0; i<M; i++)
     for (j=0; j<N; j++)
        M3[i]=M1[i][j]-M2[i][j];
}

void main ()
float **M1, **M2, **M3;
int n=3;
M1 = Form_Matrix(n,n);
Print_Matrix(n,n,&M1);
M2 = Form_Matrix(n,n);
Print_Matrix(n,n,&M2);
  for (i=0; i<n; i++)
      for (j=0; j<n; j++)
      {
        if (num_j=Sum_Matrix(X,n1)<>k) M1[i][j]=M1[i][j]*(-(max=Max));
      }
  if (Kol(M1,k)>Kol(M2,k)) Min_Max(&M1,&M2,k,M3);
  printf("matriza M3\n");
  Print_Matrix(&M3[0][0],k);
  getch();}
aka_faith вне форума Ответить с цитированием
Старый 25.05.2009, 03:36   #15
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
А такой вариант тоже содержит много ошибок??
А зачем вы спрашиваете? Компилятор говорит вам о большей части ошибок.
Во-первых, исправьте синтаксические ошибки.
Объявите необъявленные переменные, где надо.
Обо всем этом вам скажет компилятор.

Во-вторых, что это?
Код:
Print_Matrix(n,n,&M2);
У вас функция (не только эта) принимает указатель на указатель на float. Вот и дайте ей то, что она хочет:
Код:
Print_Matrix(n,n,M2);
Отдельно добавлю по Min_Max:
У вас M3 - что такое? Матрица, или одномерный массив? Мне лично непонятно. Если массив, то и в аргументах он будет значиться, как
Код:
float **M3
--------------
Напоследок повторюсь: исправьте синтаксические и прочие ошибки, на которые вам указывает компилятор. Это вы можете сделать сами, т.к. это не затрагивает логику работы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

вот то, что я смогла исправить
Код:
#include <stdio.h>
#include <alloc.h>
#include <conio.h>
#include<stdlib.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] = random(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]);
}

//находим максимальный элемент матрицы
float Max_Matrix(float **M1, int n) 
{
int i,j;
float max=-1000;
for(i=0; i<n; i++)
 for(j=0; j<n; j++)
   {
	if (M1[i][j]>M1[i][j]) max=M1[i][j];
        }
printf("%3.1f", max);
      return max;
}

float 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("%3.1f",g);
      return g;
 }

//находим номер столбца матрицы с суммой элементов, большей К
float Sum_Matrix(int M, int N,float **M1)
{
 float summa;
 int i,j,num_j; 
  for(j=0;j<N;j++)
   { summa=0;
    for(i=0;i<M;i++)
      summa+=M1[i][j];
     }if (summa>N) num_j=j;
  
printf("%3.1f", num_j);
 return num_j;
}

//находим M3=M1<M2-M3=M1, если матрица М1 содержит больше положительных элементов, чем М2 и наоборот
float **Form_M3(int M, int N, float **M1, float **M2)
{
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]-M2[i][j];
 }
return M3;
}

void main ()
float **M1, **M2, **M3;
int i,j,n=3;
float num_j;
M1 = Form_Matrix(n,n);
Print_Matrix(n,n,M1);
M2 = Form_Matrix(n,n);
Print_Matrix(n,n,M2);
  for (i=0; i<n; i++)
      for (j=0; j<n; j++)
      {
        if (num_j=Sum_Matrix(X,n1)<>k) M1[i][j]=M1[i][j]*(-(max=Max));
      }
  if (Kol(M1,n)>Kol(M2,n)) M3=float **Form_M3(n,n,M1,M2);
  printf("matriza M3\n");
  Print_Matrix(n,n,M3);
  getch();}
но начиная с основной программы компилятор издает такие ошибки, как:
Код:
 Compiling C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT:
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 87: Declaration syntax error
•Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 90: Type name expected
 Warning C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 90: Nonportable pointer conversion
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 90: Illegal initialization
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 91: Multiple declaration for 'n'
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 91: Multiple declaration for 'Print_
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 91: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 92: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 93: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 94: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 94: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 94: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 95: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 95: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 100: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 101: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: Declaration was expected
 Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: Type mismatch in redeclaration
 Warning C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: Function should return a valu
 Warning C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: Parameter 'n' is never used
 Warning C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: Parameter 'M1' is never used
Как их исправить?
aka_faith вне форума Ответить с цитированием
Старый 25.05.2009, 18:24   #17
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

После main не поставлена фигурная скобка. Компилятор вам об этом сказал.

X и n1 не объявлены.
Вот тут:
Код:
 if (num_j=Sum_Matrix(X,n1)<>k) M1[i][j]=M1[i][j]*(-(max=Max));
Нет такого оператора в сях. Есть "!=".

max - не объявлена (а ниже вообще в другом регистре написана).

Что вы пытались сделать здесь, не понял.
Код:
if (Kol(M1,n)>Kol(M2,n)) M3=float **Form_M3(n,n,M1,M2);
Может, так?
Код:
if (Kol(M1,n)>Kol(M2,n)) M3=Form_M3(n,n,M1,M2);
Функция Kol принимает 3 аргумента, а вы ей посылаете 2.
+ не те данные даете.( посмотрите на прототип).
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

а с таким кодом:
Код:
void main ()
{float **M1, **M2, **M3;
int i,j,n=3;
float num_j,max;
M1 = Form_Matrix(n,n);
Print_Matrix(n,n,M1);
M2 = Form_Matrix(n,n);
Print_Matrix(n,n,M2);
  for (i=0; i<n; i++)
      for (j=0; j<n; j++)
      {
	if (num_j=Sum_Matrix(M1,n)!=n) M1[i][j]=M1[i][j]*(-(max=Max_Matrix));
      }
  if (Kol(n,n,M1)>Kol(n,n,M2)) M3=Form_M3(n,n,M1,M2);
  printf("matriza M3\n");
  Print_Matrix(n,n,M3);
  getch();}
компилятор ругается вот так:
Код:
Compiling C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT:
Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 97: Type mismatch in parameter 'M' in call to 'Sum_Matrix'
Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 97: Too few parameters in call to 'Sum_Matrix'
Warning C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 97: Possibly incorrect assignment
Error C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 97: Illegal use of floating point
Warning C:\DOCUME~1\ADMIN\0016~1\(5)~1.TXT 102: 'num_j' is assigned a value that is never used
Как теперь исправить?
aka_faith вне форума Ответить с цитированием
Старый 25.05.2009, 19:54   #19
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
if (num_j=Sum_Matrix(M1,n)!=n) M1[i][j]=M1[i][j]*(-(max=Max_Matrix));
У вас num_j - целого типа. А функция возвращает float.
И количество аргументов у функции должно быть 3.

И посмотрите на функцию Sum_Matrix.
Код:
//находим номер столбца матрицы с суммой элементов, большей К
Какое K? Не принимает функция никакого K.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

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

а функции хоть соответствуют заданию? если честно, то само задание не оч понятно:
Цитата:
A<B<(C & A[B[2]])
M[K]-возвращает номер столбца матрицы с суммой элементов, большей К.
M&K-все элементы, сумма индексов которых не равна К, умножаются на отрицательное значение максимального элемента матрицы М.
M3=M1<M2-M3=M1, если матрица М1 содержит больше положительных элементов, чем М2 и наоборот.
посмотрите, пожалуйста, спасите человека))
aka_faith вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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