1. Паскаль

1.1. Простая программа

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

Текст программы:

Program an1;

uses crt;

var a, b,k, p:integer;

ch:char;

Begin

clrscr;

repeat

a:=10-random(10);

b:=10-random(20);

writeln(a,'*',b,'=?');

write('Введите свой ответ:');

readln(p);

k:=a*b;

if p=k then writeln('Вы дали верный ответ')

else writeln('Вы дали не верный ответ, ',a,'*',b,'=',k);

writeln;

writeln(' Для продолжения нажмите Enter');

writeln(' Для выхода нажмите Esc');

ch:=readkey;

until ch=#27;

End.

Результат выполнения программы:

1.2. Паскаль_Сложная программа

Задание: Вычислить интеграл функции f(x)=sin(x) методом Ньютона-Котеса.

Текст программы:

program n_kotes;

uses crt;

{вычисление подинтегральной функции}

function f(p:real):real;

begin

f:=sin(p);

end;

{процедура расчета y}

procedure funkcia(n:integer;a, b:real;var y:array of double;c:real);

var h, x:real;

i:integer;

begin

h:=(b-a)/n;

for i:=0 to n do

begin

x:=(a+h*i)/c;

y[i]:=f(x);

end;

end;

{процедура изменения коэффициентов для интеграла}

procedure koef(w:array of double;n:integer;var e:array of double);

var t:integer;

begin

for t:=1 to n do e[t]:=w[t]/(n-t+2);

end;

{процедура нахождения коэффициентов при q^n}

procedure mnogochlen(n, i:integer;var c:array of double);

var k, j:integer;

d:array[1..100] of double;

begin

d[1]:=1;

{цикл вычисления коэффициентов при q^n}

for j:=1 to n do

begin

d[j+1]:=d[j]*j*(-1);

if j>1 then

for k:=j downto 2 do d[k]:=d[k]+d[k-1]*j*(-1);

end;

c[1]:=d[1];

{цикл деления многочлена на (q-i) по схеме Герона}

for j:=1 to n+1 do c[j]:=i*c[j-1]+d[j];

{обращение к процедуре изменения коэффициентов при интегрировании}

koef(c, n,c);

end;

{функция вычисления факториала}

function facktorial(n:integer):double;

var t:integer;

s:double;

begin

s:=1;

if n=0 then s:=1

else

for t:=1 to n do s:=s*t;

facktorial:=s;

end;

{функция вычисления интеграла}

function integral(w:array of double;n:integer):double;

var t, p:integer;

s, c:double;

begin

s:=0;p:=n;

{цикл вычисления интеграла}

for t:=0 to p+1 do s:=s+w[t]*exp((p-t+2)*ln(p));

integral:=s;

end;

{процедура вычисления коэффициентов Ньютона-Котеса}

procedure hkoef(n:integer;var h:array of double);

var p, j,d, c,i:integer;

kq:array[0..20] of double;

s:array[0..20] of double;

begin

p:=n;

{вычисление половины от всех вычислений коэффициентов}

if (p mod 2)=1 then d:=round((p-1)*0.5)

else d:=round(0.5*p);

for i:=0 to n do

begin

mnogochlen(p, i,kq);

{формирование массива из интегралов}

s[i]:=integral(kq, p);

end;

for i:=0 to d do

begin

if ((p-i) mod 2) = 0 then c:=1

else c:=(-1);

h[i]:=(c*s[i])/(facktorial(i)*facktorial(p-i)*p);

h[p-i]:=h[i];

end;

end;

{функция вычисления основного интеграла}

function mainint(n:integer;a, b:real;y:array of double):double;

var sum:double;

p, i:integer;

kq, h:array[0..20] of double;

begin

p:=n;

hkoef(n, h);

sum:=0;

{цикл суммирования произведений y-ов на коэффициенты}

for i:=0 to p do sum:=sum+h[i]*y[i];

mainint:=sum*(b-a);

end;

const t=15;

var c:char;

a1,b1,a, b:real;

n1,v, r,n, i:integer;

h, y:array[0..t] of double;

int:double;

Begin

Clrscr;

write('Введите количество узлов (желательно не более 12): ');

readln(n);

write('Введите нижний предел интегрирования: ');

readln(a);

write('Введите верхний предел интегрирования: ');

readln(b);

{цикл обнуления массива}

for i:=0 to n do h[i]:=0;

{обнуление значения интеграла}

int:=0;

funkcia(n, a,b, y,1);

{обращение к функции вычисления интеграла}

int:=mainint(n, a,b, y);

hkoef(n, h);

writeln(' Значения функции Коэффициенты Ньютона-Котеса');

{цикл вывода на экран значений функции и коэффициентов Ньютона-Котеса}

for i:=0 to n do writeln('y',i,'=',y[i]:8:4,' при ','x',i,'=',(a+i*(b-a)/n):8:4,' h',i,'=',h[i]:9:6);

writeln;

writeln('Значение интеграла: ',abs(int):10:7);

writeln('Для выхода нажмите клавишу Enter');

{ожидание нажатия клавиши Enter для выхода}

readln;

End.

Результат выполнения программы:

2. Си++ Builder

2.1. Простая программа

Задание: организовать вычисление с помощью полосы прокрутки для различных n. Причем, предусмотреть вычисление как в цикле, так и по формуле, приведенной в правой части выражения: 12 + 32 + 52 +…+ (2n – 1)2 = n(4n2 – 1)/3.

Текст программы:

#include <vcl. h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

int n, i;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//процедура при нажатии кнопки "Вычислить"

void __fastcall TForm1::Button1Click(TObject *Sender)

{

float s1=0,s2=0;

//расчет сумммы в цикле

for(i=1;i<=2*n-1;i++){s1+=i*i; i++;}

//расчет суммы по формуле

s2=n*(4*n*n-1)/3;

//вывод результатов

Label3->Caption=FloatToStr(s1);

Label5->Caption=FloatToStr(s2);

}

//процедура при изменении положения полосы прокрутки

void __fastcall TForm1::ScrollBar1Change(TObject *Sender)

{

//чтение установленного значения n

n=ScrollBar1->Position;

//изменение значения n

Edit1->Text=IntToStr(n);

}

//процедура при создании формы

void __fastcall TForm1::FormCreate(TObject *Sender)

{

//чтение установленного значения n

n=ScrollBar1->Position;

}

Результат выполнения программы: