![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
maksimla |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
вот на паскале
program stat;
uses crt;
var side: array [1..4] of real;
t0,tn:array[1..30,1..30] of real;
iv:integer;
procedure input;
var cnt :integer;
begin
clrscr;
writeln;
write('In how ');
readln(iv);
for cnt:=1 to 4 do
begin
write('temperature ',cnt,' side?');
readln(side[cnt]);
end
end;
procedure calc;
var eps:real;
cnt1,cnt2:integer;
abb :boolean;
procedure setmat0;
var tm:real;
cnt1,cnt2:integer;
begin
iv:=iv+1;
tm:=(side[1]+side[2]+side[3]+side[4])/4;
for cnt1 :=2 to iv-1 do
begin
t0[cnt1,1]:=side[1];
t0[iv,cnt1]:=side[2];
t0[cnt1,iv]:=side[3];
t0[1,cnt1]:=side[4];
end;
t0[1,1]:=(side[1]+side[4])/2;
t0[iv,1]:=(side[1]+side[2])/2;
t0[iv,iv]:=(side[2]+side[3])/2;
t0[1,iv]:=(side[3]+side[4])/2;
for cnt1:=2 to iv-1 do
for cnt2:=2 to iv-1 do
t0[cnt1,cnt2]:=tm;
end;
procedure setmatn;
var cnt1,cnt2:integer;
begin tn:=t0 end;
begin
fillchar(t0[1,1],5400,chr($00));
setmat0;
setmatn;
repeat
eps:=0.1;
abb:=true;
for cnt1:=2 to iv-1 do
for cnt2:=2 to iv-1 do
begin
t0[cnt1,cnt2]:=(tn[cnt1+1,cnt2]+tn[cnt1-1,cnt2]+tn[cnt1,cnt2+1]+tn[cnt1,cnt2-1])/4;
if abs(t0[cnt1,cnt2]-tn[cnt1,cnt2])> eps then abb:=false;
end;
setmatn
until abb
end;
procedure output;
var cnt1,cnt2:integer;
begin
writeln;
cnt2:=iv;
repeat
for cnt1:=1 to iv do
write(int(t0[cnt1,cnt2]+0.5):6:0);
cnt2:=cnt2-1;
writeln;
writeln;
until (cnt2<1)
end;
begin
input;
calc;
output;
Readln;
end.
вот на visual с++ 6.0 #include <iostream>
#include <cmath>
using namespace std;
#define min 4
#define max 30
int iv;
double eps;
int cnt1,cnt2;
bool abb;
double side[min];
double tn[max][max];
double t0[max][max];
void input();
void calc();
void setmat0();
void setmatn();
void output();
int main()
{
input();
calc();
output();
return 0;
}
void input()
{
cout << "In how many sub-intervals shall a side be subdivided ?" ;
cin >> iv;
for (int cnt=1; cnt<4; cnt++)
{
cout << " Temperature of the "<< cnt << ".side?";
cin >> side[cnt] ;
}
};
void calc()
{
t0[1][1]=5400;
setmat0();
setmatn();
do
{
eps=0.1;
abb= true;
for (cnt1=1; cnt1<iv-1; cnt1++)
for (cnt2=1; cnt2<iv-1; cnt2++)
{
t0 [cnt1 ] [cnt2 ] = (
tn [cnt1+1] [cnt2 ] +
tn [cnt1-1] [cnt2 ] +
tn [cnt1 ] [cnt2+1] +
tn [cnt1 ] [cnt2-1] ) /4;
if (abs(t0[cnt1,cnt2]-tn[cnt1,cnt2]) > eps) abb=false;
}
setmatn();}
while (abb);
}
void setmat0()
//======================
{
int cnt1,cnt2;
double tm;
iv++;
tm= (side[1]+side[2]+side[3]+side[4])/4;
for (cnt1=1; cnt1<iv-1; cnt1++)
{
t0[cnt1] [1]=side[1];
t0[iv] [cnt1]=side[2];
t0[cnt1] [iv]=side[3];
t0[1] [cnt1]=side[4];
}
t0[1] [1]=(side[1]+side[4])/2;
t0[iv] [1]=(side[1]+side[2])/2;
t0[iv] [iv]=(side[2]+side[3])/2;
t0[1] [iv]=(side[3]+side[4])/2;
for (cnt1=1; cnt1<iv-1; cnt1++)
for (cnt2=1; cnt2<iv-1; cnt2++)
t0[cnt1][cnt2]=tm;
void cetmatn();
}
void setmatn()
{
for (cnt1=1; cnt1<iv-1; cnt1++)
for (cnt2=1; cnt2<iv-1; cnt2++)
tn[cnt1][cnt2]=t0[cnt1][cnt2];
}
void output()
{
int cnt1,cnt2;
cnt2=iv;
for (cnt1=0; cnt2<1; cnt1++)
cout << (t0[cnt1] [cnt2]) +0.5 ;
cnt2=cnt2-1;
}
c++ я изучаю только 2 с половиной месяца -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
И не будет работать. Вечная проблема при переходе Паскаль -> C. Индексы массивов в Паскале начинаются с любого значения, как задашь. А в С - всегда с 0. А у тебя нулевой индекс нигде не упоминается. Значит, задаешь ты как минимум на одно значение в массиве меньше. Вот тебе и сбой.
Что программа делать-то должна? |
maksimla |
![]()
Сообщение
#3
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
И не будет работать. Вечная проблема при переходе Паскаль -> C. Индексы массивов в Паскале начинаются с любого значения, как задашь. А в С - всегда с 0. А у тебя нулевой индекс нигде не упоминается. Значит, задаешь ты как минимум на одно значение в массиве меньше. Вот тебе и сбой. Что программа делать-то должна? Сейчас скачаю еще visual c++ 6.0 и исправлю парочку ошибок то заметил ошибки а что делать программа должна я беспонятия на паскале код написан норм и работает но я непонел что программа делает и учитель несказал -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
maksimla |
![]()
Сообщение
#4
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
#include <iostream>
#include <cmath>
using namespace std;
#define min 4
#define max 30
int iv;
double eps;
int cnt1,cnt2;
bool abb;
double side[min];
double tn[max][max];
double t0[max][max];
void input();
void calc();
void setmat0();
void setmatn();
void output();
int main()
{
input();
calc();
output();
return 0;
}
void input()
{
cout << "In how many sub-intervals shall a side be subdivided ?" ;
cin >> iv;
for (int cnt=1; cnt<5; cnt++)
{
cout << " Temperature of the "<< cnt << ".side?";
cin >> side[cnt] ;
}
};
void calc()
{
t0[1][1]=5400;
setmat0();
setmatn();
do
{
eps=0.1;
abb= true;
for (cnt1=0; cnt1<iv-1; cnt1++)
for (cnt2=0; cnt2<iv-1; cnt2++)
{
t0 [cnt1 ] [cnt2 ] = (
tn [cnt1+1] [cnt2 ] +
tn [cnt1-1] [cnt2 ] +
tn [cnt1 ] [cnt2+1] +
tn [cnt1 ] [cnt2-1] ) /4;
if (abs(t0[cnt1,cnt2]-tn[cnt1,cnt2]) > eps) abb=false;
}
setmatn();}
while (abb);
}
void setmat0()
//======================
{
int cnt1,cnt2;
double tm;
iv++;
tm= (side[1]+side[2]+side[3]+side[4])/4;
for (cnt1=1; cnt1<iv-1; cnt1++)
{
t0[cnt1] [1]=side[1];
t0[iv] [cnt1]=side[2];
t0[cnt1] [iv]=side[3];
t0[1] [cnt1]=side[4];
}
t0[1] [1]=(side[1]+side[4])/2;
t0[iv] [1]=(side[1]+side[2])/2;
t0[iv] [iv]=(side[2]+side[3])/2;
t0[1] [iv]=(side[3]+side[4])/2;
for (cnt1=1; cnt1<iv-1; cnt1++)
for (cnt2=1; cnt2<iv-1; cnt2++)
t0[cnt1][cnt2]=tm;
void cetmatn();
}
void setmatn()
{
for (cnt1=1; cnt1<iv-1; cnt1++)
for (cnt2=1; cnt2<iv-1; cnt2++)
tn[cnt1][cnt2]=t0[cnt1][cnt2];
}
void output()
{
int cnt1,cnt2;
cnt2=iv;
do
{
for (cnt1=0; cnt1<iv; cnt1++)
cout << (t0[cnt1] [cnt2]) +0.5;// тут ощибка в паскале write(int(t0[cnt1,cnt2]+0.5):6:0);
cnt2=cnt2-1;
}
while (cnt2<1);
}
все больше ошибок нету а как на с++ эту строчку сделать? Сообщение отредактировано: maksimla - 29.03.2010 19:22 -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
Client |
![]()
Сообщение
#5
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
write(int(t0[cnt1,cnt2]+0.5):6:0);
Если это для представления как целого числа, тоcout << (int) ( (t0[cnt1] [cnt2]) +0.5);
можно так |
maksimla |
![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
всеровно какаято ошибка есть немогу исправить помогите
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
maksimla |
![]()
Сообщение
#7
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
в последней процедуре надо чтобы пару раз выводило а у меня только 1 раз
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
Client |
![]()
Сообщение
#8
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
repeat
for cnt1:=1 to iv do
write(int(t0[cnt1,cnt2]+0.5):6:0);
cnt2:=cnt2-1;
writeln;
writeln;
until (cnt2<1)
В паскале цикл закончится когда условие будет ИСТИНА.do
{
for (cnt1=0; cnt1<iv; cnt1++)
cout << (t0[cnt1] [cnt2]) +0.5;// тут ощибка в паскале write(int(t0[cnt1,cnt2]+0.5):6:0);
cnt2=cnt2-1;
}
while (cnt2<1);
В С цикл выполняется пока условие ИСТИНА |
Client |
![]()
Сообщение
#9
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата а что делать программа должна я беспонятия Испытания показывают, что програама распределяет числа так, что сумма элементов одинаковая над и под главной дигональю.fillchar(t0[1,1],5400,chr($00));
Эм... совсем не понял что это. Процедура для заполнения памяти одним элементом, где количество байт определяется 2 параметром, он тут аж 5400.void calc()
{
t0[1][1]=5400;
...
Это подобие fillchar ?for (cnt2=0; cnt2<iv-1; cnt2++)
for cnt1 :=2 to iv-1 do
В паскале на 1 итерацию будет больше. В паскалевской версии сделай хорошие отступы, а то совсем не понятно что к чему. И вынеси вложенные процедуры, в них все работа с глабальным массивом. Пока все ![]() |
maksimla |
![]()
Сообщение
#10
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
ясно вот програма на с++ но чегото резултат несовпадает с паскалевской
#include <iostream>
#include <cmath>
using namespace std;
#define min 4
#define max 30
int iv;
double eps;
int cnt1,cnt2;
bool abb;
double side[min];
double tn[max][max];
double t0[max][max];
void input();
void calc();
void setmat0();
void setmatn();
void output();
int main()
{
input();
calc();
output();
return 0;
}
void input()
{
cout << "In how many sub-intervals shall a side be subdivided ?" ;
cin >> iv;
for (int cnt=1; cnt<5; cnt++)
{
cout << " Temperature of the "<< cnt << ".side?";
cin >> side[cnt] ;
}
};
void calc()
{
t0[1][1]=5400;
setmat0();
setmatn();
do
{
eps=0.1;
abb= true;
for (cnt1=0; cnt1<iv; cnt1++)
for (cnt2=0; cnt2<iv-1; cnt2++)
{
t0 [cnt1 ] [cnt2 ] = (
tn [cnt1+1] [cnt2 ] +
tn [cnt1-1] [cnt2 ] +
tn [cnt1 ] [cnt2+1] +
tn [cnt1 ] [cnt2-1] ) /4;
if (abs(t0[cnt1,cnt2]-tn[cnt1,cnt2]) > eps) abb=false;
}
setmatn();}
while (abb);
}
void setmat0()
//======================
{
int cnt1,cnt2;
double tm;
iv++;
tm= (side[1]+side[2]+side[3]+side[4])/4;
for (cnt1=1; cnt1<iv; cnt1++)
{
t0[cnt1] [1]=side[1];
t0[iv] [cnt1]=side[2];
t0[cnt1] [iv]=side[3];
t0[1] [cnt1]=side[4];
}
t0[1] [1]=(side[1]+side[4])/2;
t0[iv] [1]=(side[1]+side[2])/2;
t0[iv] [iv]=(side[2]+side[3])/2;
t0[1] [iv]=(side[3]+side[4])/2;
for (cnt1=1; cnt1<iv; cnt1++)
for (cnt2=1; cnt2<iv; cnt2++)
t0[cnt1][cnt2]=tm;
void cetmatn();
}
void setmatn()
{
for (cnt1=1; cnt1<iv; cnt1++)
for (cnt2=1; cnt2<iv-1; cnt2++)
tn[cnt1][cnt2]=t0[cnt1][cnt2];
}
void output()
{
int cnt1,cnt2;
cnt2=iv;
do
{
for (cnt1=1; cnt1<iv+1; cnt1++)
cout << (int) ( (t0[cnt1] [cnt2]) +0.5) <<" ";
cnt2=cnt2-1;
cout<<endl;
cout<<endl;
}
while (cnt2+1>1);
}
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата а что делать программа должна я беспонятия на паскале код написан норм и работает но я непонел что программа делает и учитель несказал "Какая интересная жизнь у людей..." (С) К/ф "Не бойся, я с тобой".Это что получается? Что программа делает - не знаем, но надо перевести ее на С? А смысл этого действия в чем? Ничему новому ты не научишься, просто подставлять другой синтаксис - это не программирование. Чему ты научишься при подобных "переводах"? Вот так программа работает абсолютно так же, как и Паскалевская: #include <iostream>
#include <cmath>
using namespace std;
int iv;
double side[4];
double t0[30][30] = {0};
double tn[30][30] = {0};
void input()
{
cout << "\nIn how? ";
cin >> iv;
for(int cnt = 0; cnt < 4; ++cnt)
{
cout << "temperature of " << cnt + 1 << " side? ";
cin >> side[cnt];
}
}
void setmat0()
{
iv = iv + 1;
double tm = (side[0]+side[1]+side[2]+side[3]) / 4.0;
for(int cnt1 = 1; cnt1 < iv - 1; ++cnt1)
{
t0[cnt1][0] = side[0];
t0[iv - 1][cnt1] = side[1];
t0[cnt1][iv - 1] = side[2];
t0[0][cnt1] = side[3];
}
t0[0][0] = (side[0]+side[3])/2;
t0[iv - 1][0] = (side[0]+side[1])/2;
t0[iv - 1][iv - 1] = (side[1]+side[2])/2;
t0[0][iv - 1] = (side[2]+side[3])/2;
for(int cnt1 = 1; cnt1 < iv-1; ++cnt1)
{
for(int cnt2 = 1; cnt2 < iv-1; ++cnt2)
{
t0[cnt1][cnt2] = tm;
}
}
}
void setmatn()
{
for(int i = 0; i < 30; i++)
for(int j = 0; j < 30; j++)
tn[i][j] = t0[i][j];
}
void calc()
{
setmat0();
setmatn();
bool abb;
do
{
double eps = 0.1;
abb = true;
for(int cnt1 = 1; cnt1 < iv-1; ++cnt1)
{
for(int cnt2 = 1; cnt2 < iv-1; ++cnt2)
{
t0[cnt1][cnt2] = (tn[cnt1+1][cnt2]+tn[cnt1-1][cnt2]+tn[cnt1][cnt2+1]+tn[cnt1][cnt2-1])/4;
if(fabs(t0[cnt1][cnt2] - tn[cnt1][cnt2]) > eps) abb = false;
}
}
setmatn();
}
while(!abb);
}
void output()
{
cout << "\n";
int cnt2 = iv;
do
{
for(int cnt1 = 0; cnt1 < iv; ++cnt1)
{
cout << (int)(t0[cnt1][cnt2 - 1] + 0.5) << "\t";
}
cnt2 -= 1;
cout << "\n\n";
}
while(cnt2 >= 1);
}
int main()
{
input();
calc();
output();
return 0;
}
Результат и там и там - одинаковый:
|
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 22:34 |