Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Снова Паскаль (http://www.tehnari.ru/f41/t74724/)

Андрей Романюк 09.06.2012 16:32

Снова Паскаль
 
Построить алгоритм, составить и отладить программу для нахождения произведения ряда:
с точностью до очередного члена ряда < 10^-4

Program romanuk_7_2;
uses crt;
var p:comp;
el:real;
z:integer;
begin
clrscr;
p:=1;
z:=3;
el:=0;
for z:=3 to 10000 do
begin
el:=1/z;
write('el= ',el,' ');
p:=p*el;
writeln(p,' =p');
z:=z+2;
end;
writeln('p= ',p);
readln;
end.

почему то он мое произведение к нулю приравнивает,попробовал изменить тип данных у переменной "p" с "real" на "comp"( думал тчо ему не хватает, но снова вышел ноль.....вопрос:почему?

Vladimir_S 09.06.2012 16:43

Цитата:

Сообщение от Андрей Романюк (Сообщение 746451)
Построить алгоритм, составить и отладить программу для нахождения произведения ряда: с точностью до очередного члена ряда < 10^-4

Дайте, пожалуйста, ТОЧНУЮ и ПОЛНУЮ формулировку задания. Какой ряд? Откуда и почему там тройки? В общем, "вокруг да около" не устраивает.

Андрей Романюк 09.06.2012 16:51

Цитата:

Сообщение от Vladimir_S (Сообщение 746455)
Дайте, пожалуйста, ТОЧНУЮ и ПОЛНУЮ формулировку задания. Какой ряд? Откуда и почему там тройки? В общем, "вокруг да около" не устраивает.

прошу прощения, с "копи пастом" налажал)))
ряд такой:
P=1/3*1/5*1/7.....с точностью до очередного члена ряда < 10^-4

Vladimir_S 09.06.2012 17:01

Цитата:

Сообщение от Андрей Романюк (Сообщение 746459)
прошу прощения, с "копи пастом" налажал)))
ряд такой:
P=1/3*1/5*1/7.....с точностью до очередного члена ряда < 10^-4

Ладно, постараюсь вечером сделать - сейчас убегаю.

Андрей Романюк 09.06.2012 17:02

Цитата:

Сообщение от Vladimir_S (Сообщение 746464)
Ладно, постараюсь вечером сделать - сейчас убегаю.

спасибо)буду ждать)

Андрей Романюк 09.06.2012 17:05

и заодно еще один вопрос:
Разработать программу для определения, сколько существует четырехзначных чисел, сумма цифр которых равна 10? Организуйте цикл перебора всех возможных четырехзначных чисел с проверкой суммы цифр каждого числа. Выведите на экран количество чисел, удовлетворяющих данному условию.


Program romanuk_7_3;
uses crt;
var i,k:integer;
a,b,c,d,e: real;
begin
clrscr;
k:=0;
for i:= 1000 to 9999do
begin
a:= i div 1000;
b:= i mod 1000 div 100;
c:= i mod 100 div 10;
d:= i mod 10;
e:=a+b+c+d;
if e=10 then
begin
k:=k+1;
writeln (a:4:0, b:4:0, c:4:0, d:4:0);
end;
end;
writeln ('кол-во чисел удовлетворяющих условию= 'k);
end.

тут вроде все правильно, но все 219 чисел на экран не влезают...можно ли это как-то изменить?или лучше убрать эту строку(вывода этих числе)?

Vladimir_S 09.06.2012 20:52

Цитата:

Сообщение от Андрей Романюк (Сообщение 746470)
тут вроде все правильно, но все 219 чисел на экран не влезают...можно ли это как-то изменить?или лучше убрать эту строку(вывода этих числе)?

Очень даже можно, и ничего убирать не надо, а надо грамотно вывод организовать. Вот хотел бы я знать, на кой пёс Вы здесь вещественный формат (real) привлекли? По мне так он тут ни к селу, ни к городу. И зачем выводить отдельные цифры, да еще "в разрядку"? А главное, как Вы ухитрились запустить программу с явными синтаксическими ошибками? Потому что, например, такого:
for i:= 1000 to 9999do
(без пробела между 9999 и do) ни один транслятор не пропустит.
Ладно, получите:
Код:

uses crt;
var
 i,k,a,b,c,d,e:integer;
begin
 clrscr;
 k:=0;
 for i:= 1000 to 9999 do
  begin
  a:=i div 1000;
  b:=(i mod 1000) div 100;
  c:=(i mod 100) div 10;
  d:=i mod 10;
  e:=a+b+c+d;
  if e=10 then
    begin
    k:=k+1;
    write(i:5);
    end;
  end;
 writeln;
 writeln;
 writeln('Количество чисел, удовлетворяющих условию, = ',k);
 readln
end.


Vladimir_S 09.06.2012 21:29

Цитата:

Сообщение от Андрей Романюк (Сообщение 746459)
прошу прощения, с "копи пастом" налажал))) ряд такой: P=1/3*1/5*1/7.....с точностью до очередного члена ряда < 10^-4

Воля Ваша, сударь, но в условии - явный брех. Ну вот отлаженная программа, где ограничение снижено с 10^-4 до 10^-2.
Код:

uses crt;
var
 p,el:real;
 z:integer;
begin
 clrscr;
 p:=1;
 z:=0;
 repeat
  Inc(z);
  el:=1/(2*z+1);
  write('z= ',z:2,'  ','el= ',el,'  ');
  p:=p*el;
  writeln('p= ',p);
 until el<0.01;
 readln;
end.

Если ее запустить, то результат будет такой: 50 сомножителей, при этом само произведение будет числом порядка 10^-81. А если порог поставить 10^-4, то будет 5000 сомножителей, а произведение по малости вылетит за все разумные разрядные сетки и действительно будет трансформировано компьютером в чистый ноль.
В принципе, можно попробовать решить и такую задачку, но это мало похоже на студенческое упражнение. Так что уточните.

Андрей Романюк 09.06.2012 21:52

Цитата:

Сообщение от Vladimir_S (Сообщение 746584)
Очень даже можно, и ничего убирать не надо, а надо грамотно вывод организовать. Вот хотел бы я знать, на кой пёс Вы здесь вещественный формат (real) привлекли? По мне так он тут ни к селу, ни к городу. И зачем выводить отдельные цифры, да еще "в разрядку"? А главное, как Вы ухитрились запустить программу с явными синтаксическими ошибками? Потому что, например, такого:
for i:= 1000 to 9999do
(без пробела между 9999 и do) ни один транслятор не пропустит.
Ладно, получите:

запустилась так как ошибки не было, видимо случайно пробел удалил(как это произошло....понятия не имею)за программу спасибо)

Андрей Романюк 09.06.2012 21:55

Цитата:

Сообщение от Vladimir_S (Сообщение 746610)
Воля Ваша, сударь, но в условии - явный брех. Ну вот отлаженная программа, где ограничение снижено с 10^-4 до 10^-2.

Если ее запустить, то результат будет такой: 50 сомножителей, при этом само произведение будет числом порядка 10^-81. А если порог поставить 10^-4, то будет 5000 сомножителей, а произведение по малости вылетит за все разумные разрядные сетки и действительно будет трансформировано компьютером в чистый ноль.
В принципе, можно попробовать решить и такую задачку, но это мало похоже на студенческое упражнение. Так что уточните.

ну хорошо, я скажу учителю про такой касяк)


Часовой пояс GMT +4, время: 10:01.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.