Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Федеральное Агенство по Образованию РФ
Томский Университет Систем Управления и Радиоэлектроники (ТУСУР)
Кафедра компьютерных систем управления в проектировании (КСУП)
Отчет к лабораторной работе №1 (задача №21)
По дисциплине
“Программирование на языке высокого уровня”
Выполнил
Студент группы 584-1
Атрошенко М.А.
Проверил
Ст. пр. кафедры КСУП
Рыбалка Е. Н.
Томск 2004
Условие задачи:
Дано натуральное число n. Вычислить произведение первых n сомножителей 1/1 * 3/2 * 5/3 * ... .
Описание используемых переменных и обоснование выбора типа переменных.
n целочисленная переменная, выражающая (максимальное) количество элементов;
nod - целочисленная переменная, выражающая значение наибольшего общего делителя дву чисел;
chislit, znamen целочисленные переменные, выражающие числитель и знаменатель соответственно;
result - вещественная переменная, выражающая значение произведения элементов;
i целочисленная переменная, используемая в качестве счетчика в циклах;
ch, zn переменные вещественного типа, являющиеся числителем и знаменателем соответственно после деления на их наибольший общий делитель.
Формальное описание алгоритма решения задачи:
{Заметим, что данный числовой ряд можно записать в виде формулы: (2n-1)/n }
1) вводится с клавиатуры действительное число n;
2) если пользователь вводит с клавиатуры число n ≤ 0, то программа выводит сообщение пользователю о невозможности определения произведения k элементов, если введено n > 0, то программа начинает вычислять с использованием цикла значения числителя (2n-1) и знаменателя n, а так же вычисляет значение (2n-1)/n;
3) после нахождения значений числителя и знаменателя, находим их наибольший общий делитель;
4) деление числителя и знаменателя на их наибольший общий делитель;
5) вывод на экран значения, дроби (так как значение дроби есть точное значение) и приближенное значение; завершение программы.
Текст программы:
uses crt;{подключение модуля}
var
n,i,nod:integer;
chislit,znamen:longint;
result,ch,zn:real;
begin
clrscr;
write('‚Введите натуральное число n>0:');
readln(n);
if (n<=0) then writeln('значение неопределено')
else
begin
result:=1;
chislit:=1;
znamen:=1;
for i:=1 to n do
begin
result:=result*(2*i-1)/i;
chislit:=chislit*(2*i-1);{ значение числителя }
znamen:=znamen*i; {значение знаменателя}
end;
i:=chislit;
{нахождение НОД}
repeat
dec(i);{уменьшение значения i на единицу}
nod:=i;
until ((chislit mod i =0 )and(znamen mod i = 0));
{после выхода из цикла мы получим значение НОД}
ch:=chislit/nod;{значение числителя после деления на НОД}
zn:=znamen/nod; {значение знаменателя после деления на НОД}
writeln('Произведение ',n,' первых сомножителей равно: ',ch:0:0,'/',zn:0:0);
writeln('или в значении с плавающей точкой: ',result:3:3);
readkey;{ожидание нажатия клавиши}
end;
end.{завершение программы}
Описание алгоритма решения задачи при помощи блок схемы.
Блок нахождения НОД.
начало
Ввод натурального числа n>0
n
out
true
result=result*(2*i-1)/i
chislit=chislit*(2*i-1)
znamen=znamen*i
nod=i
i = 1
i ≤ n
Остаток от деления chislit на i=0
AND
Остаток от деления znamen на i=0
true
i=i-1
i=chislit
Определение НОД(nod)*
Числителя(chislit) и
Знаменателя(znamen)
ch=chislit/nod
zn=znamen/nod
false
Вывод на экран значения
ch / zn (ввиде дроби)
вывод на экран значения
result(приближенное значение ряда)
конец
false