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

потоковый ввод - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 16:14     потоковый ввод #1
всем привет!
ситуация такая: при выполнении считываются только R2 и h, не могу понять, в чем дело. dev-c++ просто выдает "step t = нажмите любую клавишу для выхода", а если запускать через MS Visual C++ выдает ошибку "damage after normal block at ". в чем дело? помогите, пожалуйста, код-то простой вроде.

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
#include <iostream>       
 
 #include <stdlib.h> 
 
     
using namespace std; 
 
 
int main () {
    double R2=0;
    double h=0;
    double t=0;   
    
    cout<<"R2= ";
    cin>>R2;
        
    cout<<"step r = ";
    cin >>h;
        
    cout<<"step t = ";
    cin >>t;   
          system ("PAUSE")  ;
   
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2010, 16:14     потоковый ввод
Посмотрите здесь:

потоковый ввод - вывод C++
C++ Потоковый ввод-вывод
C++ Потоковый ввод / вывод файлов
Потоковый ввод/вывод текста C++
C++ потоковый ввод и вывод строки С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
07.04.2010, 16:18     потоковый ввод #2
wxDev-C++ все хавает

Добавлено через 13 секунд
ошибок в коде нет
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 16:20  [ТС]     потоковый ввод #3
я уже два компилятора скачала( может с машиной что-то не то?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.04.2010, 17:00     потоковый ввод #4
Ленка, а это так задуманно, что программа три числа считывает и ничего не выводит?
Я синтаксических ошибок тоже не увидел, на что VS ругается - не понятно...
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 17:03  [ТС]     потоковый ввод #5
да нет, это кусок программы, я уже вырезала и оформила в отдельную, все равно у меня оба компилятора не хотят слушаться. уже на считывании этом косяк, я даже не могу проверить, что там у меня дальше происходит, хоть об стену бейся.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.04.2010, 17:18     потоковый ввод #6
Ленка, так Вы бы всю программу выложили...
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 17:22  [ТС]     потоковый ввод #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
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
#include <iostream>       
 #include <fstream>
 #include <stdlib.h> 
 
     
using namespace std; 
 
double coef(double x, double y);
double coef1 (double x, int i, int j);
double coef2 (double x, int i, int j);
double fi (double x);
 
int main () {
    double R2=0;
    double h=0;
    double t=0;
    const double T=0.5;
    const double y0=1;
    const double y1=1;
    const double s=1;    
    
    ofstream fout("result.txt");
    
    cout<<"R2= ";
    cin>>R2;
        
    cout<<"step r = ";
    cin >>h;
        
    cout<<"step t = ";
    cin >>t;    
    
    
    int n=R2/h; 
    int m=T/t;  
    double* p = new double [n];
    double* q = new double [n];
    double a, b, c, d, x=0; 
 
    int i=0, j=0;
    
//динамический массив
    double** y = new double* [n];                
    for (int k=0; k<n+1; k++) y[k]=new double[m];
   
 
 
    for (i=0; i<n+1; i++) {                                                   
             y[i][0]=y0;
            }
 
for (j=0; j<n; j++){
    
   p[0]=1;
   q[0]=0; 
    
    for(i=1; i<n+1; i++) {                                                   //прямо ход прогонки
             x=i*h;
             
             a=coef2(x,i,j)/h/h/x;
             b=1/t+coef1(x,i,j)/h/h/x+coef2(x,i,j)/h/x/h;
             c=coef1(x,i,j)/h/h/x;
             d=fi(x)*(-1)-y[i][j]/t;
             
             p[i]=c/(b-a*p[i-1]);                                  
             q[i]=(a*q[i-1]-d)/(b-a*p[i-1]);
             }
             
    y[n][j+1]=(y[n][j]/t+y1*2/h/h/x*coef(R2,y[n][j])*s*h-q[n]*2/h/h/x*coef(R2,y[n][j])-fi(x))/(1/t-2/h/h/x*coef(R2,y[n][j])*(h*s+1+p[n]));
             
    for (i=n; i>-1; i--)  {                                                  //обратный ход прогонки
        y[i][j+1]=y[i+1][j+1]*p[i]+q[i];
        fout << y[i][j+1] << "  ";
        }
   fout << endl;     
        }    
        delete [] y;
        delete [] p;        
        delete [] q;        
      system ("PAUSE")  ;
   
   return 0;
}  
 
 
double coef(double x, double y) {
       return x*y;
       }
       
double coef1 (double x, int i, int j) {
       int m,n;    
       double** y = new double* [n];                
       for (int k=0; k<n+1; k++) y[k]=new double[m];
       return (1/2*(coef(x,y[i+1][j])+coef(x,y[i][j])));
       }
       
double coef2 (double x, int i, int j) {
       int m,n;
       double** y = new double* [n];                
       for (int k=0; k<n+1; k++) y[k]=new double[m];
       return (1/2*(coef(x,y[i][j])+coef(x,y[i-1][j])));
       }
       
double fi (double x) {
       return 1;}
Nike775
 Аватар для Nike775
4 / 3 / 1
Регистрация: 01.04.2010
Сообщений: 30
07.04.2010, 17:26     потоковый ввод #8
у меня никаких ошибок таже не пишет
проверь компилятор
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 17:28  [ТС]     потоковый ввод #9
да два компилятора стоит, говорю же. ошибок не выдает, только прога не работает.
Lаmer
7 / 7 / 4
Регистрация: 24.03.2010
Сообщений: 25
07.04.2010, 18:46     потоковый ввод #10
У меня вылетела с ошибкой "Переменная 'n' используется без инициализации".

А что делает эта программа?
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 19:39  [ТС]     потоковый ввод #11
решает нелинейное уравнение теплопроводности, если вам это что-то говорит)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.04.2010, 22:42     потоковый ввод #12
Цитата Сообщение от Ленка Посмотреть сообщение
C++
1
2
double* p = new double [n]; 
double* q = new double [n];
А действительно - переменной n даже объявления нигде не увидел, тем более - инициализации...
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 22:52  [ТС]     потоковый ввод #13
там выше буквально строкой. dev c++ съел. на ввод пользователем я уже подзабила, вбила руками в константы. теперь еще с памятью что-то((
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
#include <iostream>       
 #include <fstream>
 #include <stdlib.h> 
 
     
using namespace std; 
 
double coef(double x, double y);
double fi (double x);
 
int main () {
    double R2=1;
    double h=0.05;
    double t=0.01;
    const double T=0.5;
    const double y0=1;
    const double y1=1;
    const double s=1;    
    
    
    
    int n; 
    int m;  
    m=T/t+1;
    n=R2/h+1;
    float* p = new float [n];
    float* q = new float [n];
    float a, b, c, d, x=0; 
    int i=0, j=0;
    
 
    float** y = new float* [n];                
    for (int k=0; k<n+1; k++) y[k]=new float[m];
   
 
   for (i=0; i<n; i++) {                                                   
        for (j=0; j<m; j++)
             y[i][j]=0;
            }
 
    for (i=0; i<n+1; i++) {                                                   
             y[i][0]=y0;
            }           
      x=h;            
                  
 
    ofstream fout("result.txt");     
for (j=0; j<n; j++){
    
   p[0]=1;
   q[0]=0; 
 
    for(i=1; i<n+1; i++) {                                                   
             x=h*i;
             
             a=1/2*(x*y[i][j]+x*y[i-1][j])/h/h/x;
             b=1/t+(1/2*(coef(x,y[i][j])+coef(x,y[i+1][j])))/h/h/x+(1/2*(coef(x,y[i][j])+coef(x,y[i-1][j])))/h/x/h;
             c=(1/2*(coef(x,y[i][j])+coef(x,y[i+1][j])))/h/h/x;
             d=fi(x)*(-1)-y[i][j]/t;
             
             p[i]=c/(b-a*p[i-1]);                                  
             q[i]=(a*q[i-1]-d)/(b-a*p[i-1]);
             }
             
    y[n][j+1]=(y[n][j]/t+y1*2/h/h/x*coef(R2,y[n][j])*s*h-q[n]*2/h/h/x*coef(R2,y[n][j])-fi(x))/(1/t-2/h/h/x*coef(R2,y[n][j])*(h*s+1+p[n]));
             
    for (i=n-1; i>-1; i--)  {                                                  
        y[i][j+1]=y[i+1][j+1]*p[i]+q[i];
        fout << y[i][j+1] << "  ";
        }
   fout << endl;     
        }    
   for (i = 0; i < n; i++) {
    delete [] y[i];
    delete [] y;
     }
 
        delete [] p;        
        delete [] q;        
      system ("PAUSE")  ;
   
   return 0;
}  
 
 
double coef(double x, double y) {
       return y *x;
       }
 
double fi (double x) {
       return 1;}

при отладке переменные a,b,c,d не меняются, постоянно остаются 0, 100, 0, -101.
если посчитать вручную, то там и близко такого нет
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.04.2010, 23:04     потоковый ввод #14
Цитата Сообщение от Ленка Посмотреть сообщение
for (int k=0; k<n+1; k++) y[k]=new float[m];
условие неверное
for ( int k = 0; k < n; ++k )
И как-то очень много переменных на мой взгляд, да ещё и с такими содержательными именами...
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
07.04.2010, 23:43  [ТС]     потоковый ввод #15
не помогло((

а переменные все нужны, тут уж никуда не деться. все они - либо коэффициенты перед функциями, либо счетчики, как их называть по-другому не знаю, у меня фантазии не хватает.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
08.04.2010, 00:10     потоковый ввод #16
Цитата Сообщение от Ленка Посмотреть сообщение
не помогло
там в трёх местах такое. точно всё поправили?

Добавлено через 7 минут
хотя там много всего... например:

Цитата Сообщение от Ленка Посмотреть сообщение
a=1/2*(x*y[i][j]+x*y[i-1][j])/h/h/x;
a, а так же b, c, d... нигде не объявлены. выражение 1/2 даст ноль (целочисленное деление), да и с индексами всё мутно...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2010, 01:21     потоковый ввод
Еще ссылки по теме:

Потоковый ввод/вывод C++
C++ Потоковый ввод из файла вместе с классом. Не пойму в чем причина
C++ Потоковый ввод и ввод данных. Работа с числами

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

Или воспользуйтесь поиском по форуму:
Ленка
 Аватар для Ленка
0 / 0 / 0
Регистрация: 01.08.2009
Сообщений: 24
08.04.2010, 01:21  [ТС]     потоковый ввод #17
тут я уже заменила 1 на 1., с этим теперь все норм, ошибка с память возникает в 17 строке,
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
for (j=0; j<m-1; j++){
    
   p[0]=1;
   q[0]=0; 
    for(i=1; i<n-1; i++) {                                                   
             x=h*i;
             
             a=1./2*(x*y[i][j]+x*y[i-1][j])/h/h/x;
             b=1./t+(1./2*(coef(x,y[i][j])+coef(x,y[i+1][j])))/h/h/x+(1./2*(coef(x,y[i][j])+coef(x,y[i-1][j])))/h/x/h;
             c=(1./2*(coef(x,y[i][j])+coef(x,y[i+1][j])))/h/h/x;
             d=fi(x)*(-1.)-y[i][j]/t;
             
             p[i]=c/(b-a*p[i-1]);                                  
             q[i]=(a*q[i-1]-d)/(b-a*p[i-1]);
             }
             
    y[n][j+1]=(y[n][j]/t+y1*2./h/h/x*coef(R2,y[n][j])*s*h-q[n]*2./h/h/x*coef(R2,y[n][j])-fi(x))/(1./t-2./h/h/x*coef(R2,y[n][j])*(h*s+1+p[n]));
             
    for (i=n-1; i>-1; i--)  {                                                 
        y[i][j+1]=y[i+1][j+1]*p[i]+q[i];
        fout << y[i][j+1] << "  ";
        }
   fout << endl;     
        }
Добавлено через 1 час 8 минут
всем спасибо, все заработало) с алгоритмом косяк вышел небольшой)
Yandex
Объявления
08.04.2010, 01:21     потоковый ввод
Ответ Создать тему
Опции темы

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