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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2009, 13:35   #11
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Неизвестный ' N '
Ну так сделайте его известным! Объявите где-нибудь.

Дальше. Зачем вы запихнули инициализацию массивов в функцию?
И в main'е
Код:
iteration(a,b,x);
a,b,x не объявлены (по той же причине).

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 13:44   #12
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Вот так правильно будет в функции мэин.
Код:
double main()
{
double a,b,x;
iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}
А насчёт :
Код:
a[0][0] = -1.01; a[0][1] = 0.02; a[0][2] = -0.62; a[0][3] = 0.08; b[0] = 1.3;
a[1][0] = -1.03; a[1][1] = 0.28; a[1][2] = 0.33; a[1][3] = -0.07; b[1] = -1.1;
a[2][0] = -1.09; a[2][1] = 0.13; a[2][2] = 0.42; a[2][3] = 0.28; b[2] = 1.7;
a[3][0] = -1.19; a[3][1] = -0.23; a[3][2] = 0.08; a[3][3] = 0.37; b[3] = 1.5;
В каком месте программы необходимо вставить?

И проблемма в том,что где б я не объявил например double N,всё равно его не видет, и выдаёт неизвестный идентификатор.
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 14:05   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Все, что я написал в 5-м посте должно находиться в main'е.
И объявление, и инициализация.
Цитата:
И проблемма в том,что где б я не объявил например double N,всё равно его не видет, и выдаёт неизвестный идентификатор.
Объявите его перед всеми функциями. Можете так:
Код:
#define N 4
или
Код:
const int N=4;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 14:20   #14
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Попробывал вот так, но останавлмвается на 11 строке, пишет что нет закрывающейся квадратной и фигурной скобки, хотя она там есть.
Код:

#include "stdafx.h"
#include <iostream>
#include <cmath>
#define eps 0.0001 //требуемая точность вычислений
#define N 4;
using namespace std;


//----------------------------------------------------------------------------------
void iteration(double a[N][N], double b[N],double x[N])
{
 int i,j;
 double N;
 double norma; //чебышевская норма вектора
 double xn[N]={0};//вектор для текущей итерации, начальное значение
       //должно быть равно начальному приближению
 

 do{
  norma=0.0;h
  for(i=0;i < N;i++)
  {
   xn[i]=-b[i];

   for(j=0;j < N;j++)
   {
    if(i!=j)
     xn[i]+=a[i][j]*x[j];
   }

   xn[i]/=-a[i][i];
  }

  for(i=0;i < N;i++)
  {
   if(fabs(x[i]-xn[i]) > norma)
    norma=fabs(x[i]-xn[i]); //Вычисление нормы вектора
   x[i]=xn[i];
  }
  
 }
 while(norma > eps); //проверка на необходимую точность вычислений


 return ;
}


double main()
{
double a,b,x;
double a[N][N],b[N],x[N];
int i;

a[0][0] = -1.01; a[0][1] = 0.02; a[0][2] = -0.62; a[0][3] = 0.08; b[0] = 1.3;
a[1][0] = -1.03; a[1][1] = 0.28; a[1][2] = 0.33; a[1][3] = -0.07; b[1] = -1.1;
a[2][0] = -1.09; a[2][1] = 0.13; a[2][2] = 0.42; a[2][3] = 0.28; b[2] = 1.7;
a[3][0] = -1.19; a[3][1] = -0.23; a[3][2] = 0.08; a[3][3] = 0.37; b[3] = 1.5;


iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 14:26   #15
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да выучите вы, наконец, синтаксис!
Код:
#define N 4;
У вас строчкой выше еще один дефайн определен. Вы хоть бы по нему сверились что-ли. Не нужно точки запятой после него.
Код:
void iteration(double a[N][N], double b[N],double x[N])
{
 int i,j;
 double N;
Зачем объявляете N?
Код:
 do{
  norma=0.0;h
Что за 'h'?

Код:
double main()
main должна возвращать int.
Код:
double a,b,x;
double a[N][N],b[N],x[N];
Двойное объявление.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 14:35   #16
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо что подсказали что после #define не ставится точка с заяптой, не знал.
Попробывал изменить по вашим советам так, но что-то не выходит.
Выдаёт вот такое: double [4] [4] ......

Код:

#include "stdafx.h"
#include <iostream>
#include <cmath>
#define eps 0.0001 //требуемая точность вычислений
#define N 4
using namespace std;


//----------------------------------------------------------------------------------
void iteration(double a[N][N], double b[N],double x[N])
{
 int i,j;
 double norma; //чебышевская норма вектора
 double xn[N]={0};//вектор для текущей итерации, начальное значение
       //должно быть равно начальному приближению
 

 do{
  norma=0.0;
  for(i=0;i < N;i++)
  {
   xn[i]=-b[i];

   for(j=0;j < N;j++)
   {
    if(i!=j)
     xn[i]+=a[i][j]*x[j];
   }

   xn[i]/=-a[i][i];
  }

  for(i=0;i < N;i++)
  {
   if(fabs(x[i]-xn[i]) > norma)
    norma=fabs(x[i]-xn[i]); //Вычисление нормы вектора
   x[i]=xn[i];
  }
  
 }
 while(norma > eps); //проверка на необходимую точность вычислений


 return ;
}


int main()
{
int a,b;
double a[N][N],b[N],x[N];

int i;

a[0][0] = -1.01; a[0][1] = 0.02; a[0][2] = -0.62; a[0][3] = 0.08; b[0] = 1.3;
a[1][0] = -1.03; a[1][1] = 0.28; a[1][2] = 0.33; a[1][3] = -0.07; b[1] = -1.1;
a[2][0] = -1.09; a[2][1] = 0.13; a[2][2] = 0.42; a[2][3] = 0.28; b[2] = 1.7;
a[3][0] = -1.19; a[3][1] = -0.23; a[3][2] = 0.08; a[3][3] = 0.37; b[3] = 1.5;


iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 14:46   #17
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от prikolist
Выдаёт вот такое: double [4] [4] ......
Код:
int a,b;
double a[N][N],b[N],x[N];
Внимательно смотрите на названия переменных и ищите ошибку.

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 14:53   #18
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Не могу въехать,вроде, всё правильно написанно в этом коде:

Код:
int main()
{
int a,b,x;
double a[N][N],b[N],x[N];

int i;

a[0][0] = -1.01; a[0][1] = 0.02; a[0][2] = -0.62; a[0][3] = 0.08; b[0] = 1.3;
a[1][0] = -1.03; a[1][1] = 0.28; a[1][2] = 0.33; a[1][3] = -0.07; b[1] = -1.1;
a[2][0] = -1.09; a[2][1] = 0.13; a[2][2] = 0.42; a[2][3] = 0.28; b[2] = 1.7;
a[3][0] = -1.19; a[3][1] = -0.23; a[3][2] = 0.08; a[3][3] = 0.37; b[3] = 1.5;


iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}
Ну в названиях вроде всё всё верно, такие же в заголовке функции используются, я про эту строку:
double a[N][N],b[N],x[N];

И a,b,x как вы говорили объявлено в мэине.

Последний раз редактировалось prikolist; 18.06.2009 в 14:55.
prikolist вне форума Ответить с цитированием
Старый 18.06.2009, 15:00   #19
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от prikolist
Ну в названиях вроде всё всё верно, такие же в заголовке функции используются, я про эту строку:
Код:
int a,b,x;
double a[N][N],b[N],x[N];
Действительно думаете, что все верно? Я вам прямым текстом сказал, что у вас здесь двойное объявление. И что нельзя объявлять переменные с одинаковыми именами.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 18.06.2009, 15:04   #20
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Вот так что ли вы имеет ввиду.

Код:

int main()
{
int a1,b1,x1;
int a1[N][N],b1[N],x1[N];

int i;

a1[0][0] = -1.01;    a1[0][1] = 0.02;  a1[0][2] = -0.62;   a1[0][3] = 0.08;     b1[0] = 1.3;
a1[1][0] = -1.03;    a1[1][1] = 0.28;  a1[1][2] = 0.33;    a1[1][3] = -0.07;    b1[1] = -1.1;
a1[2][0] = -1.09;    a1[2][1] = 0.13;  a1[2][2] = 0.42;    a1[2][3] = 0.28;     b1[2] = 1.7;
a1[3][0] = -1.19;    a1[3][1] = -0.23; a1[3][2] = 0.08;    a1[3][3] = 0.37;     b1[3] = 1.5;


iteration(a,b,x);
for(i=0; i<N; i++)
 cout<<"Rezyltat metoda iterasiy = "<<x[i]<<endl;
}
prikolist вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод итераций и комбинированный метод prikolist Общие вопросы C/C++ 2 16.06.2009 20:51
Метод простых итераций church Общие вопросы C/C++ 3 06.06.2009 15:26
метод Зейделя на Паскале(график) Neznau Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 20:02