Форум программистов, компьютерный форум CyberForum.ru

Функция поиска модуля не получается( - C++

Восстановить пароль Регистрация
 
martik
Сообщений: n/a
29.09.2010, 15:56     Функция поиска модуля не получается( #1
как всегда у нас в институте все через одно место. начали проходить С++, только вот преподаватель не считает нужным нам что-либо объяснять. только задает и спрашивает. так вот. я уже неделю мучаюсь,помогите,пожалуйста.
ЗАДАНИЕ: Сформировать матрицу А ,элементы которой определяются формулой a (ij)= cos ((i+j)*x). Из матрицы А сформировать матрицу В, переставляя в каждой строке наибольший по модулю элемент(первый,если их несколько) с элементом на главной диагонали. Все это сделать с использованием адресов и выделением памяти new.

Пользователь должен вводить размерность матрицы и собственно Х.
у меня никак не получается функция поиска максимального по модулю элемента. вот то, что у меня есть... при компиляции выдает 2 ошибки,которые я никак не могу исправить.не нравится ему объявление функции максАбсол((
буду очень признательна, если кто-то исправит=)

вот текст мой

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/* Sredstva razrabotki: Turbo C++ */
/*Zadanie:
Sformirovat' matrix A[i,j], elementi kotoroy opredelyautsya
 formuloy a[i,j]=cos(i+j)*x.
 Iz matrix A sformirovat' matrix B, perestavlaya v kajdoy stroke
 naibol'shiy po modulu element s elementom na glavnoy diagonali.*/
 
  #include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
 /*Vnewnie peremennie*/
 int m,n,x,k,l;
 float **a,**b;
 float absol,max;
 
[B] /*Funkcia vvoda*/[/B]
 void vvod(void)
 {
 cout<<"VVedite razmernosti matrici - N:";
 cin>>n;
 cout<<"VVedite razmernosti matrici - M:";
 cin>>m;
 cout<<"Vvedite x:";
 cin>>x;
 //Sozdanie matrici
a= new float *[n];
 for (int j=0;j<m;j++)
  a[j]= new float [m];
{ for (int i=0;i<n;i++)
{ for(int j=0;j<m;j++)
 a[i][j]=cos((i+j)*x);
 }
 }
 //vivodim na ekran
 for (int i=0;i<n;i++)
 {
 for (int j=0;j<m;j++)
 cout<<a[i][j]<<" ";
 cout<<"\n";
 }
 
 [B]/* Funkcia poiska max abs*/[/B]
void maxabsol(void)
 {
  for (int i=0;i<n;i++)
   {
   absol[i][j]=double fabs(a[i][j]);
   for (int j=0;j<m;j++)
   if (absol[i][j+1]>absol[i][j])
   absol[i][j+1]=max[i];
   i=k;
   j+1=l;
   }
   return;
   }
 
  [B] /* Funkcia vivoda resultata*/[/B]
   void vivod(void)
   {
  b= new float *[n];
   for (int j=0;j<m;j++)
   b[j]= new float [m];
    {
    for (int i=0;i<n;i++)
     {for (int j=0;j<n;j++)
     if (i==j)
    b[i][i]=a[k][l];
    b[k][l]=a[i][i];
    else b[i][j]=a[i][j];
      }
    }
    { for (int i=0;i<n;i++)
     {for (int j=0;j<n;j++)
    cout<<"Matrica B:";
    cout<<b[i][j]<<" ";
    }
    }
  [B]  /***********************/[/B]
    void main(void)
    {
    clrscr();
    vvod();
    maxabsol();
    vivod();
    cprintf("\n\n Press any key.";
    getch();
    return;
    }
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2010, 15:56     Функция поиска модуля не получается(
Посмотрите здесь:

C++ Функция сортировки и поиска
C++ Функция поиска максимального значения
C++ Функция поиска символа
Строки(функция поиска подстроки) C++
C++ Функция поиска в файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
29.09.2010, 16:04     Функция поиска модуля не получается( #2
Цитата Сообщение от martik Посмотреть сообщение
/* Funkcia poiska max abs*/
void maxabsol(void)
{
for (int i=0;i<n;i++)
{
absol[i][j]=double fabs(a[i][j]);
for (int j=0;j<m;j++)
if (absol[i][j+1]>absol[i][j])
absol[i][j+1]=max[i];
i=k;
j+1=l;
}
return;
}
У Вас же void ф-ция, а void ф-ции ничего не возвращают

и перед
Цитата Сообщение от martik Посмотреть сообщение
/* Funkcia poiska max abs*/
нужно еще одну
C++
1
}
чтобы ф-цию void vvod(void) закрыть
и в
C++
1
2
3
4
5
void maxabsol()
{
for (int i=0;i<n;i++)
{
absol[i][j]=double fabs(a[i][j])//j не определенно
Добавлено через 1 минуту
и все фигурные скобки проверьте, у Вас с ними много проблем =)
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
29.09.2010, 16:05     Функция поиска модуля не получается( #3
Ф-цию перед maxabsol нужно закрыть скобочкой }. Внутри функции так вообще интересные вещи: absol - переменная типа float, а не массив, как вы обращаетесь к absol [i][j]? Тем более что j нигде не объявлена.
martik
Сообщений: n/a
29.09.2010, 16:17     Функция поиска модуля не получается( #4
Цитата Сообщение от dihlofos Посмотреть сообщение
Ф-цию перед maxabsol нужно закрыть скобочкой }. Внутри функции так вообще интересные вещи: absol - переменная типа float, а не массив, как вы обращаетесь к absol [i][j]? Тем более что j нигде не объявлена.
\эээм. ну я подразумеваю, что absol[i][j]- это модуль элемента a(ij)

получается, если я пишу absol[i][j], то это значит, что я пытаюсь обратиться к матрице absol[i][j], которой нет??)
я вот в гугле нашла, что ,если я хочу обратиться к ЭЛЕМЕНТУ, то надо писать a[i*n+j), так?? только у меня в этом месте все равно выдает ошибки.(

и заголовок функции void maxabsol(void) надо изменить на float maxabsol(void) или как?

надеюсь, я более-менее понятно пишу.. я блондинка))) так что извините за глупые вопросы,если что)
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
30.09.2010, 04:25     Функция поиска модуля не получается( #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* Sredstva razrabotki: Turbo C++ */
/*Zadanie:
Sformirovat' matrix A[i,j], elementi kotoroy opredelyautsya
 formuloy a[i,j]=cos(i+j)*x.
 Iz matrix A sformirovat' matrix B, perestavlaya v kajdoy stroke
 naibol'shiy po modulu element s elementom na glavnoy diagonali.*/
 
  #include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
 /*Vnewnie peremennie*/
 int m,n,x,k,l;
 float **a,**b;
 
 /*Funkcia vvoda*/
 void vvod()
 {
 cout<<"VVedite razmernosti matrici - N:";
 cin>>n;
 cout<<"VVedite razmernosti matrici - M:";
 cin>>m;
 cout<<"Vvedite x:";
 cin>>x;
 //Sozdanie matrici
a= new float *[n];
 for (int j=0;j<m;j++)
  a[j]= new float [m];
  
  
   b= new float *[n];
   for (int j=0;j<m;j++)
   b[j]= new float [m];
   
   
  for (int i=0;i<n;i++)
  { 
    for(int j=0;j<m;j++)
    { 
      a[i][j]=cos((i+j)*x);
    }
 }
 
 
 for (int i=0;i<n;i++)
  { 
    for(int j=0;j<m;j++)
    { 
      b[i][j]=a[i][j];
    }
 }
 
 //vivodim na ekran
  cout<<"Matrica A:\n";
 for (int i=0;i<n;i++)
 {
     for (int j=0;j<m;j++)
     {
       cout << a[i][j]<<"\t";
     }
   cout<<"\n\n";
}
 
 
}
 
 
/* Funkcia poiska max abs*/
void maxabsol()
{
 float max = 0,temp = 0;
 int coord_j = 0,coord_i = 0;
    for(int i=0;i<m;i++)
    {     
              for(int j=0;j<m;j++)
              {                 
               if(fabs(a[i][j])>max){max=fabs(a[i][j]);coord_i = i;coord_j = j;}
 
               }
               cout << "max = " << max << " coord_i = " << coord_i <<  " coord_j = " << coord_j << "\n";
 
     temp = b[i][i];
     b[i][i] = a[coord_i][coord_j];
     b[coord_i][coord_j] = temp;
     coord_i = 0; coord_j =0;
     max = 0;
     temp = 0;
    }
 
}
 
 
/* Funkcia vivoda resultata*/
void vivod()
{
      maxabsol();
      cout<<"Matrica B:\n";
for (int i=0;i<n;i++)
    { 
      for (int j=0;j<n;j++)
      {
   
       cout << b[i][j]  <<"\t";
       }
       cout << "\n";
    }
}
  /***********************/
    void main()
    {
    clrscr();
    vvod();
    vivod();
  //  cprintf("\n\n Press any key.");
    getch();
    return 0;
    }
Под свой компилятор немного объявление ф-ций переделайте, как у Вас сначало было, если вдруг не заработает
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 17
Регистрация: 27.08.2010
Сообщений: 553
30.09.2010, 06:19     Функция поиска модуля не получается( #6
vet, у вас только m и n в некоторых местах перепутались. Отметил комментами:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
 
 /*Vnewnie peremennie*/
 int m,n,x,k,l;
 float **a,**b;
 
 /*Funkcia vvoda*/
 void vvod()
 {
 cout<<"VVedite razmernosti matrici - N:";
 cin>>n;
 cout<<"VVedite razmernosti matrici - M:";
 cin>>m;
 cout<<"Vvedite x:";
 cin>>x;
 //Sozdanie matrici
 
   a= new float *[n];
   for (int j=0;j<n;j++)  /* !m */
   a[j]= new float [m];
 
  
   b= new float *[n];
   for (int j=0;j<n;j++) /* !m */
   b[j]= new float [m];
   
   
  for (int i=0;i<n;i++)
  { 
    for(int j=0;j<m;j++)
    { 
      a[i][j]=cos((i+j)*x);
    }
 }
 
 
for (int i=0;i<n;i++)
  { 
    for(int j=0;j<m;j++)
    { 
      b[i][j]=a[i][j];
    }
 }
 
 //vivodim na ekran
  cout<<"\nMatrica A:\n";
 for (int i=0;i<n;i++)
 {
     for (int j=0;j<m;j++)  
     {
       cout << setprecision(3) << setw(6)
            << setiosflags(ios::fixed)<<a[i][j]<<'\t';
     }
   cout<<endl;
 }
    cout<<endl;
}
 
 
/* Funkcia poiska max abs*/
void maxabsol()
{
 float max = 0,temp = 0;
 int coord_j = 0,coord_i = 0;
    for(int i=0;i<n;i++)
    {     
        for(int j=0;j<m;j++)    /* !n */
        {
            if(fabs(a[i][j])>max){max=fabs(a[i][j]);coord_i = i;coord_j = j;}
        }
        cout << "max = " << max << " coord_i = " << coord_i <<  " coord_j = " << coord_j << "\n";
 
     temp = b[i][i];
     b[i][i] = a[coord_i][coord_j];
     b[coord_i][coord_j] = temp;
     coord_i = 0; coord_j =0;
     max = 0;
     temp = 0;
    }
 
}
 
/* Funkcia vivoda resultata*/
void vivod()
{
      maxabsol();
      cout<<"\nMatrica B:\n";
for (int i=0;i<n;i++)
    { 
      for (int j=0;j<n;j++)
      {
   
       cout << setprecision(3) << setw(6)
            << setiosflags(ios::fixed)<<b[i][j]  <<'\t';
       }
        cout<<endl;
    }
}
  /***********************/
    int main()
   {
    system("cls");
        vvod();
    vivod();
    system("pause");
    return 0;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2010, 07:52     Функция поиска модуля не получается(
Еще ссылки по теме:

Функция поиска слов в строке C++
Необходимо добавить цикл поиска главного элемента по столбцу. никак не получается C++
Функция / метод поиска C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
30.09.2010, 07:52     Функция поиска модуля не получается( #7
dihlofos, я по привычке, как для квадратной матрицы написал =)

Добавлено через 1 минуту
dihlofos, в:
Цитата Сообщение от dihlofos Посмотреть сообщение
C++
1
void vivod() { maxabsol(); cout<<"\nMatrica B:\n"; for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { cout << setprecision(3) << setw(6) << setiosflags(ios::fixed)<<b[i][j] <<'\t'; } cout<<endl; } }
тоже немного не верно
C++
1
2
3
4
5
6
7
8
9
void vivod() 
{ 
maxabsol(); 
cout<<"\nMatrica B:\n"; 
for (int i=0;i<n;i++) {
 for (int j=0;j<m;j++) {//!!!
 cout << setprecision(3) << setw(6) << setiosflags(ios::fixed)<<b[i][j] <<'\t'; 
} cout<<endl; } 
}
Yandex
Объявления
30.09.2010, 07:52     Функция поиска модуля не получается(
Ответ Создать тему
Опции темы

Текущее время: 08:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru