Перевести вычисление интеграла с Pascal - C (СИ)
Формулировка задачи:
Помогите перевести программу с Паскаля на Си
проверка на запуск:
Ввод значения сигналов S0 и S1
56 -56
Предположим, что передавался сигнал:
1
Начало интегрирования a = 0
Конец интегрирования b = 15
Количество разбиений интервала n = 1
Начало интегрирования a = 0
Конец интегрирования b = 15
Количество разбиений интервала n = 1
Гипотеза Н0
Program P1; Var x0,x1,n,nom,N0,C1: integer; s0,s1,sh,xt0,sm0,int0,xt1,sm1,int1,PU: real; //Описываем типы данных function Sinus(gradus : real) : real; // Функция синуса для задания сигнала var rad : real; begin rad:= gradus*Pi/180; Sinus:= sin(rad); end; function integral(x:real):real; // Определенный интеграл, для использования var //в 3 и 4 блоке структуры оптимального приема n1,i : integer; a,b,shag,sum,itog : real; BEGIN write('Начало интегрирования a = '); readln(a); write('Конец интегрирования b = '); readln(b); write('Количество разбиений интервала n = '); readln(n1); shag:=(b-a)/n1; sum:=0; for i:=1 to n-1 do sum := sum + sinus(shag*i+a); sum := sum + (sinus(a)+sinus(b))/2; itog:=(b-a)/n * sum; Integral:=itog; End; Begin // Начало программы. Randomize; n:=Random(100); //Зададим шум, использую ГСЧ. N0:=Random(1000); Writeln('Ввод значения сигналов S0 и S1'); //Вводим извествые сигналы S0 и S1. Readln(x0,x1); s0:=sinus(x0); s1:=sinus(x1); sh:=sinus(n); Writeln('Предположим, что передавался сигнал:'); Readln(nom); //Будем считать что передавался либо сигнал S0, либо сигнал S1. C1:=0; //Значение порога. If nom=1 Then Begin // При условии что в самом начале передавался S0. xt0:=s0+sh; //Смесь сигнала и шума sm0:=s0*xt0; // Результат после блока 2. int0:=(2/N0)*integral(sm0); //Результат после блока 4. xt1:=s1+sh; //Смесь сигнала и шума. sm1:=s1*xt1; // Результат после блока 1. int1:=(2/N0)*integral(sm1); //Результат после блока 3 Writeln; PU:=s0-s1; // Блок 5. //Пороговое устройство. Блок 6. If PU>=C1 Then Writeln('Гипотеза Н0') //Блок 7. Гипотезы. Else Writeln('Гипотеза Н1'); //Блок 7. End Else Begin xt1:=s1+sh; //Смесь сигнала и шума sm1:=s1*xt1; // Результат после блока 2. int0:=(2/N0)*integral(sm1); //Результат после блока 3 xt0:=s0+sh; //Смесь сигнала и шума sm0:=s0*xt0; // Результат после блока 2. int0:=(2/N0)*integral(sm0); //Результат после блока 4 Writeln; PU:=s1-s0; If PU>=C1 Then Writeln('Гипотеза Н0') //Блок 7. Гипотезы. Else Writeln('Гипотеза Н1'); //Блок 7. End; End.
Решение задачи: «Перевести вычисление интеграла с Pascal»
textual
Листинг программы
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> #define PI 3.14159265 int x0,x1,n,nom,N0,C1; double s0,s1,sh,xt0,sm0,int0,xt1,sm1,int1,PU; double Sinus(double gradus) { double rad=gradus*PI/180.0; return sin(rad); } double integral(double x) { int n1,i; double a,b,shag,sum,itog; printf("%s","Начало интегрирования a = "); scanf("%lf",&a); printf("%s","Конец интегрирования b = "); scanf("%lf",&b); printf("%s","Количество разбиений интервала n = "); scanf("%d",&n1); shag=double((b-a)/n1); sum=0.0; for(i=1;i<n+1;i++) sum=sum+Sinus(shag*i+a); sum=sum+(Sinus(a)+Sinus(b))/2.0; itog=(double((b-a)/n))*sum; return itog; } int main(void) { srand(time(NULL)); n=rand()%100; N0=rand()%1000; printf("%s","Ввод значения сигналов S0 и S1\n"); scanf("%d%d",&x0,&x1); s0=Sinus(x0); s1=Sinus(x1); sh=Sinus(n); printf("%s","Предположим, что передавался сигнал:\n"); scanf("%d",&nom); C1=0; if(nom==1) { xt0=s0+sh; sm0=s0*xt0; int0=(double(2.0/N0))*integral(sm0); xt1=s1+sh; sm1=s1*xt1; int1=(double(2.0/N0))*integral(sm1); printf("%s","\n"); PU=s0-s1; if(PU>=C1) printf("%s","Гипотеза Н0\n"); else printf("%s","Гипотеза Н1\n"); } else { xt1=s1+sh; sm1=s1*xt1; int0=(double(2.0/N0))*integral(sm1); xt0=s0+sh; sm0=s0*xt0; int0=(double(2.0/N0))*integral(sm0); printf("%s","\n"); PU=s1-s0; if(PU>=C1) printf("%s","Гипотеза Н0\n"); else printf("%s","Гипотеза Н1\n"); } return 0; }
Объяснение кода листинга программы
- Ввод значения сигналов S0 и S1
- Вычисление начального и конечного значений интервала интегрирования a и b
- Вычисление количества разбиений интервала n
- Вычисление шага разбиения shag
- Вычисление суммы Sinus(shag*i+a) для i от 1 до n
- Вычисление суммы Sinus(a)+Sinus(b))/2.0
- Вычисление итогового значения интеграла itog
- Вычисление значения сигналов s0 и s1
- Вычисление значения PU=s0-s1
- Проверка гипотезы Н0 или Н1 в зависимости от значения PU и переменной C1
- Вывод значения PU
- Вывод сообщения о том, какая гипотеза подтвердилась
- Возврат значения 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д