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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
#1

Требуется написать код программы для расчета внутренних значений массива, если известны граничные значения массива. - C++

06.06.2011, 12:53. Просмотров 653. Ответов 7
Метки нет (Все метки)

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

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
#include <iostream>
 
using namespace std;
 
int main ()
{
        int i, j, n1, m1;
        float d1, d2, next;
        int const n=11; //задаем количество строк в массиве
        int const m=9; //задаем количество столбцов в массиве
        float mas_U[n][m];
        d1=10/6;
        d2=5;
        n1=n-1;
        m1=m-1;
        for(i = 0; i <= n; i ++)
        {
              for(j = 0; j <= m; j ++)
              {
                    mas_U[i][j] = 0;
              }
        }
        
        for(i = 9; i < n; i++)
        {
        mas_U[i][0]=5;
        }
        for(j = 1; j <= 7; j ++)
        {
              mas_U[0][j] = mas_U[0][j+1] + d1;
              }
        for(j = 7; j < m ; j ++)
                {
              mas_U[0][j] = mas_U[0][j+1] - d2;
              }
        for(i = 1; i < n1; i ++)
               {
                for(j = 1; j < m1; j ++)
                      {
                       next = (mas_U[i+1][j] + mas_U[i-1][j] + mas_U[i][j+1] + mas_U[i][j-1])/4;
                       mas_U[i][j] = next;
                      }
                }
                  cout<<mas_U[i][j]<<"  ";
 
    system("pause");
    
        return 0;
}
По идее он должен выдать рассчитанный массив, но что-то идет не так, может я что-то забыл или не так сделал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2011, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Требуется написать код программы для расчета внутренних значений массива, если известны граничные значения массива. (C++):

Написать две программы на языке С/С++ для расчета значений переменных y и z по заданным формулам - C++
Написать две программы на языке С/С++ для расчета значений переменных y и z по заданным формулам (ссылка ). В первой программе ...

Написать две программы на языке С++ для расчета значений переменных y и z по заданным формулам - C++
Написать две программы на языке С++ для расчета значений переменных y и z по заданным формулам (табл. 1.1). В первой программе ...

Написать код который покажет значения массива а потом его перевернет - C++
Не могу написать код в с++ который покажет и потом перевернет рандом не значения массива.Помогите плз) Добавлено через 4 минуты ...

Требуется написать программу для расчета по двум формулам - C++
Требуется написать программу для расчета по двум формулам

Написать программу для расчета значений переменных по заданной формуле - C++
Доброй ночи! Нужно написать программу для расчета значений переменных y и z по заданной формуле(изображение прикреплено). ...

Написать шаблон функции для поиска среднего арифметического значений массива - C++
Кто знает как решить задачу на С++, при помощи шаблонов функций? Написать шаблон функции для поиска среднего арифметического значений ...

7
voral
462 / 443 / 72
Регистрация: 16.03.2008
Сообщений: 2,149
06.06.2011, 13:18 #2
Вы задали массив
Цитата Сообщение от Feytan Посмотреть сообщение
C++
1
2
3
int const n=11; //задаем количество строк в массиве
 int const m=9; //задаем количество столбцов в массиве
 float mas_U[n][m];
А вот в этом цикле выходите за пределы массива
Цитата Сообщение от Feytan Посмотреть сообщение
C++
1
for(i = 0; i <= n; i ++) { for(j = 0; j <= m; j ++) { mas_U[i][j] = 0; } }
Надо так
C++
1
2
3
4
5
[FONT=monospace]
for(i = 0; i < n; ++i) 
         for(j = 0; j < m; j ++) 
      mas_U[i][j] = 0;  
[/FONT]


Элемент mas_U[n][m] за пределами массива - не забываете, что 11 элементов массива это значит элементы от 0-го до 10-го

Добавлено через 4 минуты
Тьфу.... ну ни как я этот моноспейс не осилил убрать.
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
06.06.2011, 13:51  [ТС] #3
voral, Я немного изменил, ту ошибку, которую я допустил

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
#include <iostream>
 
using namespace std;
 
int main ()
{
        int i, j, n1, m1;
        float d1, d2, next;
        int const n=11; //задаем количество строк в массиве
        int const m=9; //задаем количество столбцов в массиве
        float mas_U[n][m];
        d1=10/6;
        d2=5;
        n1=n-1;
        m1=m-1;
 
        for(i = 0; i < n; i ++) 
        {
              for(j = 0; j < m; j ++) 
              {
              mas_U[i][j] = 0;  
              }
        }
        
        for(i = 9; i < n; i++)
        {
        mas_U[i][0]=5;
        }
        for(j = 1; j <= 7; j ++)
        {
              mas_U[0][j] = mas_U[0][j+1] + d1;
              }
        for(j = 7; j < m ; j ++)
                {
              mas_U[0][j] = mas_U[0][j+1] - d2;
              }
        for(i = 1; i < n1; i ++)
               {
                for(j = 1; j < m1; j ++)
                      {
                       next = (mas_U[i+1][j] + mas_U[i-1][j] + mas_U[i][j+1] + mas_U[i][j-1])/4;
                       mas_U[i][j] = next;
                      }
                }
                  cout<<mas_U[i][j]<<"  ";
 
    system("pause");
    
        return 0;
}
Если я использую то что вы мне сказали, компилятор выдает ошибку и ругается на этот FONT.
Но это все равно ничего неменяет он не выдает желаемого результата
0
voral
462 / 443 / 72
Регистрация: 16.03.2008
Сообщений: 2,149
06.06.2011, 14:14 #4
Так печатайте после каждого цикла заполнения полученный массив:
C++
1
2
3
4
5
6
7
8
9
        cout<<"=====" << endl;
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
              }
              cout << endl;
        }
Найдете где и что не так пошло.

Добавлено через 4 минуты
Например после этого
C++
1
2
3
4
        for(j = 1; j <= 7; j ++)
        {
            mas_U[0][j] = mas_U[0][j+1] + d1;
        }
в массиве точно содержиться то, что вы ожидали?

Добавлено через 2 минуты
Возможно вам бы помогло
C++
1
d1= 10.0 / 6.0;
1
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.06.2011, 14:24 #5
Цитата Сообщение от Feytan Посмотреть сообщение

Если я использую то что вы мне сказали, компилятор выдает ошибку и ругается на этот FONT.

Не по теме:

headshot !
просто убил наповал

1
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
06.06.2011, 17:16  [ТС] #6
Я нашел и исправил ошибки которые были в коде и кое-что добавил, вроде программа работает нормально, осталось только одно, подскажите, а можно как-нибудь сделать чтобы конечный массив отображался нормально, вот код:

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
#include <iostream>
 
using namespace std;
 
int main ()
{
        int i, j, n1, m1,k;
        float e=0.000001, max_pogr, d1, d2, next;
        int const n=11; //задаем количество строк в массиве
        int const m=9; //задаем количество столбцов в массиве
        float mas_U[n][m];
        d1=10.0/6.0;
        d2=5.0;
        n1=n-1;
        m1=m-1;
        cout<<"===Zadanie nulei===" << endl;
        cout<<"\n";
        for(i = 0; i < n; i ++) 
        {
              for(j = 0; j < m; j ++) 
              {
              mas_U[i][j] = 0;
              }
        }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
        
        cout<<"\n===Pervaya sborka===" << endl;
        cout<<"\n";
        for(i = 8; i < n; i++)
        {
        mas_U[i][0]=5;
        }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
        cout<<"\n===Vtoraya sborka===" << endl;
        cout<<"\n";        
        for(j = 1; j <= 7; j ++)
        {
              mas_U[0][j] = mas_U[0][j-1] + d1;
              }
        for(j = 7; j < m ; j ++)
                {
              mas_U[0][j] = mas_U[0][j-1] - d2;
              }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
        cout<<"\n===Podschet massiva===" << endl;
        cout<<"\n";         
        for(k=0;;k++)
        {
                max_pogr=0;
               for(i = 1; i < n1; i ++)
               {
                for(j = 1; j < m1; j ++)
                      {
                       next = (mas_U[i+1][j] + mas_U[i-1][j] + mas_U[i][j+1] + mas_U[i][j-1])/4;
                       if((mas_U[i][j] - next) > max_pogr) max_pogr=(mas_U[i][j] - next);
                       mas_U[i][j] = next;
                      }
                }
                if(max_pogr<=e||k>=10000)break;
        }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
 
    system("pause");
    
        return 0;
}
0
voral
462 / 443 / 72
Регистрация: 16.03.2008
Сообщений: 2,149
06.06.2011, 18:09 #7
я б что то типа такого сделал (параметры уж сами подберете):
C
1
2
3
4
5
6
7
8
9
10
 
#include <stdio>
.....
 
for(i = 0; i < n; i ++)
{
  for(j = 0; j < m; j ++)
    printf("%10.5f\t",mas_U[i][j]);
  printf("\n");
}
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
06.06.2011, 21:56  [ТС] #8
voral,

У меня и без
Цитата Сообщение от voral Посмотреть сообщение
#include <stdio>
все работает... просто с его указанием выдает, что нету здеся функций ссылающихся на него, поэтому я его и не ставил

Вот конечный вариант:

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
#include <iostream>
 
using namespace std;
 
int main ()
{
        int i, j, n1, m1,k;
        float e=0.000001, max_pogr, d1, d2, next;
        int const n=11; //задаем количество строк в массиве
        int const m=9; //задаем количество столбцов в массиве
        float mas_U[n][m];
        d1=10.0/6.0;
        d2=5.0;
        n1=n-1;
        m1=m-1;
        cout<<"===Zadanie nulei===" << endl;
        cout<<"\n";
        for(i = 0; i < n; i ++) 
        {
              for(j = 0; j < m; j ++) 
              {
              mas_U[i][j] = 0;
              }
        }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
        
        cout<<"\n===Pervie granichnie usloviya===" << endl;
        cout<<"\n";
        for(i = 8; i < n; i++)
        {
        mas_U[i][0]=5;
        }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
        cout<<"\n===Vtorie granichnie usloviya===" << endl;
        cout<<"\n";        
        for(j = 1; j <= 7; j ++)
        {
              mas_U[0][j] = mas_U[0][j-1] + d1;
              }
        for(j = 7; j < m ; j ++)
                {
              mas_U[0][j] = mas_U[0][j-1] - d2;
              }
        for(i = 0; i < n; i ++)
        {
            for(j = 0; j < m; j ++)
            {
              cout << mas_U[i][j] << "\t";
            }
              cout << endl;
        }
        cout<<"\n===Podschet massiva===" << endl;
        cout<<"\n";         
        for(k=0;;k++)
        {
                max_pogr=0;
               for(i = 1; i < n1; i ++)
               {
                for(j = 1; j < m1; j ++)
                      {
                       next = (mas_U[i+1][j] + mas_U[i-1][j] + mas_U[i][j+1] + mas_U[i][j-1])/4;
                       if((mas_U[i][j] - next) > max_pogr) max_pogr=(mas_U[i][j] - next);
                       else mas_U[i][j] = next;
                      }
                }
                if(max_pogr<=e||k>=10000)break;
        }
        for(i = 0; i < n; i ++)
        {
              for(j = 0; j < m; j ++)
              printf("%7.4f\t",mas_U[i][j]);
              printf("\n\n");
        }
 
    system("pause");
    
        return 0;
}
voral,
Огромное спасибо за помощь

Результат + Блок-схема(примерная)
0
Миниатюры
Требуется написать код программы для расчета внутренних значений массива, если известны граничные значения массива.   Требуется написать код программы для расчета внутренних значений массива, если известны граничные значения массива.  
06.06.2011, 21:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2011, 21:56
Привет! Вот еще темы с ответами:

Написать шаблон функции для поиска среднего арифметического значений массива - C++
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; template &lt;typename T&gt; int arifm( T mas, int size) { int...

Написать программу расчета массива на dev-c++ - C++
ДАН МАССИВ СТРОЧНЫХ ЛИТЕР ЛАТИНСКОГО АЛФАВИТА. Задания: 1.Написать функцию ввода массива с клавиатуры, инициализации случайными...

Для двумерного массива. Если элемент четный, то прибавить к нему первый, если нечетный — последний элементы массива - Pascal ABC
Для двумерного массива. Если элемент четный, то прибавить к нему первый, если нечетный — последний элементы массива. Первый и последний...

.NET 2.x Написать код программы сортировки массива размерностью от 1 до N одним из указанных методов - C#
Задание. Написать код программы сортировки массива размерностью от 1 до N одним из указанных методов, разработать блок-схему алгоритма...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru