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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2012, 19:00   #1
Drago56
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 91
По умолчанию Работа с матрицами.Ошибка в коде.

Помогите исправить ошибку.Цель задачи создание 2 матрицы и найти у них средние арифметическое выше главной диагонали .Потом считает факториалы найденных значений и ищет корни уравнений по математической формуле через дискриминант и поиска корней.Ошибка появляется при подсчёте факториала,когда пытаюсь присвоить значение (а=s).
Код:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
typedef int mas[5][5];
int Matr(mas a,short g,char st) 
{
    cout<<"    Матрица "<<st<<"\n";
   for(int i=0;i<g;i++)
     {
     for(int j=0;j<g;j++)
       {
       a[i][j]=rand()%8-2;
         cout<<setw(5)<<a[i][j];
            }
            cout<<endl;
            }
      }
      
int factorial(int n,char st3) {
      int result = 1;
 
      for ( int i = 2; i <= n; i++ ) {
          result *= i;
      }
      return result;
      cout<<"Факториал чила"<<st3<<" = "<<result;
      }
      
int SrAr(mas a,short g,char st2) {
   int c=0;float s=0;
     for(int i=0;i<g;i++)
        for(int j=i++;j<g;j++)
          if (a[i][j]>=0) {
             s=s+a[i][j];
             c++;
         }
          s=s/c;
          s=round(s);
cout<<st2<<"-Целая часть среднего арифметического положительных элементов матрицы расположенных выше главной диагонали - "<<s<<"\n";
     }
     
main()
{
     float x1,x2,x3,dis;int a,b,k;
      mas t,d; 
cout<<Matr(t,4,'T'); cout<<Matr(d,5,'D');
cout<<"--------------------------\n";
SrAr(t,4,'T');
a=s;
SrAr(d,5,'D');
b=s;
k=a+b;
factorial(a,'a');a=result*2;
factorial(b,'b');b=result;
factorial(k,'c');k=result*3;
dis=sqrt(k*k-4*a*b);
x1=0;
x2=((-1)*k+dis)/(2*a);
x3=((-1)*k-dis)/(2*a);
cout<<"Ответ:\n";
cout<<"x1 = "<<x1<<"x2 = "<<x2<<"x3 = "<<x3;
getch();
}
Drago56 вне форума Ответить с цитированием
Старый 26.03.2012, 20:48   #2
S1av0k
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 87
По умолчанию

Уважаемый, у вас переменная s не объявлена.
Помог - жми весы
S1av0k вне форума Ответить с цитированием
Старый 26.03.2012, 20:58   #3
Drago56
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 91
По умолчанию

Я немного исправил, но всё ровно вылазиет ошибка несовместимости типов где я результат факториала пытаюсь присвоить переменной
Код:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
typedef int mas[5][5];
int Matr(mas a,short g,char st) 
{
    cout<<"    Матрица "<<st<<"\n";
   for(int i=0;i<g;i++)
     {
     for(int j=0;j<g;j++)
       {
       a[i][j]=rand()%8-2;
         cout<<setw(5)<<a[i][j];
            }
            cout<<endl;
            }
      }

long double factorial(int n,char st3) {
    if( n == 0 ) return 1;
    return n * factorial (n - 1);
}

      
int SrAr(mas a,short g,char st2) {
   int c=0;float s=0;
     for(int i=0;i<g;i++)
        for(int j=i++;j<g;j++)
          if (a[i][j]>=0) {
             s=s+a[i][j];
             c++;
         }
          s=s/c;
          s=round(s);
cout<<st2<<"-Целая часть среднего арифметического положительных элементов матрицы расположенных выше главной диагонали - "<<s<<"\n";
     }

main()
{

    float s,result,x1,x2,x3,dis;int a,b,k;
      mas t,d; 
cout<<Matr(t,4,'T'); cout<<Matr(d,5,'D');
cout<<"--------------------------\n";
SrAr(t,4,'T');
a=round(s);
SrAr(d,5,'D');
b=round(s);
k=round(a+b);
factorial(a,'a');
a=s*2;
cout<<"Факториал чила a = "<<a<<"\n";
factorial(b,'b');
b=s;
cout<<"Факториал чила b = "<<round(b)<<"\n";
factorial(k,'c');
k=s*3;
cout<<"Факториал чила c = "<<round(k)<<"\n";
dis=sqrt(k*k-4*a*b);
x1=0;
x2=((-1)*k+dis)/(2*a);
x3=((-1)*k-dis)/(2*a);
cout<<"Ответ:\n";
cout<<"x1 = "<<x1<<"  x2 = "<<x2<<"  x3 = "<<x3;
getch();
}
D:\Безымянный1.cpp:52: warning: converting to `int' from `float'
D:\Безымянный1.cpp:55: warning: converting to `int' from `float'
D:\Безымянный1.cpp:58: warning: converting to `int' from `float'

Последний раз редактировалось Drago56; 26.03.2012 в 21:06.
Drago56 вне форума Ответить с цитированием
Старый 26.03.2012, 21:23   #4
S1av0k
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 87
По умолчанию

Код:
D:\Безымянный1.cpp:52: warning: converting to `int' from `float'
D:\Безымянный1.cpp:55: warning: converting to `int' from `float'
D:\Безымянный1.cpp:58: warning: converting to `int' from `float'
Компилятор всё верно говорит, потому как нельзя переменной типа int присвоить значение переменной типа float. Советую привести переменные к одному типу.
И да, вы ищете среднее арифметическое, которое почти обязательно будет нецелым, однако ж после по заданию Вам нужно вычислить факториал от этих чисел, которые тоже будут нецелым. Таким образом, мне кажется целесообразным использовать переменные типа float, а не int.
Помог - жми весы
S1av0k вне форума Ответить с цитированием
Старый 26.03.2012, 21:44   #5
Drago56
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 91
По умолчанию

Не контачит чё то
Drago56 вне форума Ответить с цитированием
Старый 26.03.2012, 22:14   #6
Drago56
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 91
По умолчанию

Почему когда нахожу S -он не возвращает значение ,я потом вместо s ноль присваиваю?
Drago56 вне форума Ответить с цитированием
Старый 26.03.2012, 22:54   #7
S1av0k
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 87
По умолчанию

Покажите код, который вы получили после последних исправлений. Я ж не телепат.
Помог - жми весы
S1av0k вне форума Ответить с цитированием
Старый 26.03.2012, 23:14   #8
Drago56
Пользователь
 
Регистрация: 13.12.2010
Сообщений: 91
По умолчанию

Код:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
typedef int mas[5][5];
float Matr(mas a,short g,char st) 
{
    cout<<"    Матрица "<<st<<"\n";
   for(int i=0;i<g;i++)
     {
     for(int j=0;j<g;j++)
       {
       a[i][j]=rand()%8-2;
         cout<<setw(5)<<a[i][j];
            }
            cout<<endl;
            }
      }

int factorial(int n) {
      int result = 1;
 
      for ( int i = 2; i <= n; i++ ) {
          result *= i;
      }
      return result;
      
}
    
float SrAr(mas a,short g,char st2) {
   int c=0;float s=0;
     for(int i=0;i<g;i++)
        for(int j=i++;j<g;j++)
          if (a[i][j]>=0) {
             s=s+a[i][j];
             c++;
         }
          s=s/c;
          s=round(s);
cout<<st2<<"-Целая часть среднего арифметического положительных элементов матрицы расположенных выше главной диагонали - "<<s<<"\n";
     }

main()
{

    float s,x1=0,x2=0,x3=0,dis=0;int b=0,k=0,a=0,result,q;
      mas t,d; 
cout<<Matr(t,4,'T'); cout<<Matr(d,5,'D');
cout<<"--------------------------\n";
SrAr(t,4,'T');a=s;cout<<a;
SrAr(d,5,'D');b=s;
k=a+b;
factorial(a); a=a*2;   cout<<"Факториал чила a = "<<a<<"\n";
factorial(b);   cout<<"Факториал чила b = "<<b<<"\n";
factorial(k); k=k*3; cout<<"Факториал чила c = "<<k<<"\n";
dis=sqrt(k*k-4*a*b);
x1=0;
x2=((-1)*k+dis)/(2*a);
x3=((-1)*k-dis)/(2*a);
cout<<"Ответ:\n";
cout<<"x1 = "<<x1<<"  x2 = "<<x2<<"  x3 = "<<x3;
getch();
}
Drago56 вне форума Ответить с цитированием
Старый 27.03.2012, 00:55   #9
S1av0k
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 87
По умолчанию

Предлагаю поменять заголовки на
Код:
#include<iostream>
#include<iomanip>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
а также воспользоваться
Код:
using namespace std;
Помог - жми весы
S1av0k вне форума Ответить с цитированием
Старый 27.03.2012, 01:00   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
#include<iostream>
#include<iomanip>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
на
Код:
#include<iostream>
#include<iomanip>
#include<conio.h>//а его вообще надо выкинуть, заменив getch.
#include<cstdlib>
#include<cmath>
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицами Vera_0709 Помощь студентам 1 28.12.2011 05:47
Работа с матрицами Irina21 Общие вопросы C/C++ 32 29.03.2011 14:44
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58