Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 11.11.2007, 22:57   #1
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Адрес: Riga_LV
Сообщений: 45
Репутация: 10
По умолчанию Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until)

Всем привет! Вот обычно всегда сам помогаю другим, но на этот раз попал в ситуацию, когда помощь нужна мне!
Суть помощи заключается в следующем: Необходимо В среде Delphi, на языке Object Pascal написать программу, которая будет решать ниже изложенную задачу! Программы необходимо написать в VCL коде!
Вот собственно и сама задача:

Вводится точность e. Вычислить сумму ряда
Вычисления продолжать до тех пор, пока очередное слагаемое не станет меньше e.
Вывести рядом и сравнить с полученной суммой.

Думаю моя просьба не отнимет много времени!
Спасибо!
Mr.User вне форума  
Старый 11.11.2007, 23:11   #2
Alex21
With best regards
Профессионал
 
Регистрация: 20.04.2007
Адрес: Москва
Сообщений: 1,448
Репутация: 531
По умолчанию WHILE консоль

Код:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
ac=0.0005; {точность}

var

  sum:real;
  i:integer;

{функция очередного члена}
function F(x:real):real;
begin
  f:=1/((x*2+1)*exp(ln(3)*i));
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  sum:=0;
  i:=1;
  while f(i)>ac do
  begin
    sum:=sum+f(i);
    i:=i+1;
  end;
  writeln('i = ',i);
  writeln('sum = ',sum:6:6);
{вывод условия больше 2корня из трех?}
  if sum>(Pi/(2*sqrt(3))) then Writeln('sum > 2sqrt(3)')else
  if sum<(Pi/(2*sqrt(3))) then Writeln('sum < 2sqrt(3)') else
  Writeln('sum = 2sqrt(3)');
  readln;
end.

__________________
Life is too short, play more...
Как правильно задавать вопросы

Последний раз редактировалось Alex21; 11.11.2007 в 23:21.
Alex21 вне форума  
Старый 11.11.2007, 23:12   #3
Alex21
With best regards
Профессионал
 
Регистрация: 20.04.2007
Адрес: Москва
Сообщений: 1,448
Репутация: 531
По умолчанию REPEAT (консоль)

Код:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
ac=0.0005;

var

  sum:real;
  i:integer;

function F(x:real):real;
begin
  f:=1/((x*2+1)*exp(ln(3)*i));
end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  sum:=0;
  i:=1;
  repeat
  begin
    sum:=sum+f(i);
    i:=i+1;
  end;
  until f(i)<ac;
  writeln('i = ',i);
  writeln('sum = ',sum:6:6);
  if sum>(Pi/(2*sqrt(3))) then Writeln('sum > 2sqrt(3)')else
  if sum<(Pi/(2*sqrt(3))) then Writeln('sum < 2sqrt(3)') else
  Writeln('sum = 2sqrt(3)');
  readln;
end.

__________________
Life is too short, play more...
Как правильно задавать вопросы

Последний раз редактировалось Alex21; 11.11.2007 в 23:21.
Alex21 вне форума  
Старый 12.11.2007, 03:02   #4
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Адрес: Riga_LV
Сообщений: 45
Репутация: 10
По умолчанию

Спасибо! Но в этой задаче суть дела такова, что точность "е", - не может быть константой! Пользователь сам вводит через поле Edit своё число (например 0,00004) и должен получить соответствующий результат!



Код:

procedure TForm1.Button1Click(Sender: TObject);
var a, b, znak: integer;
    e, sum, drobj: extended;
begin
drobj:=0;
sum:=0;
znak:=1;
a:=1;
b:=1;
e:=StrToFloat(Edit1.Text);
   while drobj>e do
        begin
        drobj:=1/(a*b);
        a:=a+2;
        b:=b*3;
        sum:=sum+znak*drobj;
        znak:=-znak;
        end;
   Label1.Caption:=FloatToStr(Sum);
end;

end.

Вот что получилось у меня! Программа запускается, но какое бы значение я не вводил, - результат всегда равен нулю!
Может лучше найти и исправить логические ошибки в моём коде?!
Буду очень благодарен!
Mr.User вне форума  
Старый 12.11.2007, 12:47   #5
Alex21
With best regards
Профессионал
 
Регистрация: 20.04.2007
Адрес: Москва
Сообщений: 1,448
Репутация: 531
По умолчанию

А где у вас функция?
Приведите весь код.
__________________
Life is too short, play more...
Как правильно задавать вопросы
Alex21 вне форума  
Старый 12.11.2007, 16:08   #6
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Адрес: Riga_LV
Сообщений: 45
Репутация: 10
По умолчанию

Вот на счёт функции честно сказать не знаю!
Весь программный код выглядит следующим образом:

Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a, b, znak: integer;
    e, sum, drobj: extended;
begin
drobj:=0;
sum:=0;
znak:=1;
a:=1;
b:=1;
e:=StrToFloat(Edit1.Text);
   while drobj>e do
        begin
        drobj:=1/(a*b);
        a:=a+2;
        b:=b*3;
        sum:=sum+znak*drobj;
        znak:=-znak;
        end;
   Label1.Caption:=FloatToStr(Sum);
end;

end.

Mr.User вне форума  
Старый 12.11.2007, 17:33   #7
_Dmitry
Профессионал
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
Репутация: 776
По умолчанию

Когда запускаете цикл drobj=0, e=0.001<>0, поэтому цикл не выполняется ни разу. Измени процедуру так
Код:

procedure TForm1.Button1Click(Sender: TObject);
var a, b, znak: integer;
    e, sum, drobj: extended;
begin
  drobj:=0;
  sum:=0;
  znak:=1;
  a:=1;
  b:=1;
  e:=StrToFloat(Edit1.Text);
  repeat
    drobj:=1/(a*b);
    a:=a+2;
    b:=b*3;
    sum:=sum+znak*drobj;
    znak:=-znak;
  until drobj<=e;
  Label1.Caption:=FloatToStr(Sum);
end;

Либо перед циклом замени drobj:=0; на drobj:=1; будет еще один вариант программы с while

Последний раз редактировалось _Dmitry; 12.11.2007 в 21:23.
_Dmitry вне форума  
Старый 12.11.2007, 23:59   #8
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Адрес: Riga_LV
Сообщений: 45
Репутация: 10
По умолчанию

Спасибо!

Вот сейчас проверял как работает исправленая программа. Выявился такой казус, что программа работает только в том случае, если вводимое число делиться на два! Например 0,00002 0,00004 0,00006 и т.д. а если вводить другие числа, то изменения в строке Label не происходят, т.е. результат не выводится! А с чем это может быть связанно!

Последний раз редактировалось Mr.User; 13.11.2007 в 00:13.
Mr.User вне форума  
Старый 13.11.2007, 09:43   #9
_Dmitry
Профессионал
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
Репутация: 776
По умолчанию

Цитата:
Сообщение от Mr.User Посмотреть сообщение
программа работает только в том случае, если вводимое число делиться на два
Программа работает в любом случае. Если введем e=0,00001 то последняя дробь равна 0,00000897, а предпоследняя 0,0000305, поэтому сумма будет одна и та же при е=0,00001 0,00002 0,00003, если е=0,00004 то суммируется уже на одну дробь меньше
_Dmitry вне форума  
Старый 23.11.2007, 02:34   #10
Mr.User
Пользователь
 
Аватар для Mr.User
 
Регистрация: 11.11.2007
Адрес: Riga_LV
Сообщений: 45
Репутация: 10
По умолчанию

Вот хотелось бы получить помощь по решению вот такой вот задачки:

Вводятся начальный член и шаг арифметической прогрессии. Вводится также число. Определить, принадлежит ли введенное число арифметической прогрессии с введенными начальным членом и шагом.

Один вопрос - одна тема. Тема закрыта. Модератор.
__________________
end;
end.


Последний раз редактировалось AlDelta; 23.11.2007 в 02:44.
Mr.User вне форума  
Закрытая тема

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл Sota Паскаль 1 24.03.2008 20:50
Цикл... Лёка PHP 5 03.02.2008 22:38
3-ой цикл LeoN Общие вопросы Delphi 5 12.06.2007 14:15


19:55.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru