Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 441

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Очень срочно нужно решить данную задачу с помощью всех трех видов циклов – while, do, for
Заранее спасибо!
П.С. Задача на Pascal

Приложение:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  


Nepwk Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Nepwk (статус: Посетитель)
Вопрос отправлен: 24 ноября 2009, 10:51
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Паровоз

Здравствуйте, Яньков Артём Сергеевич!

В Delphi цикл for vможет быть только с целочисленным параметром и с шагом 1. Поэтому нужно пересчитать переменные:

var
  i,cnt:Integer;
  F:Real;
begin
  cnt:=Round(Int((F2-F1)/h));
  Memo1.Clear;
  for i:=0 to cnt do
  begin
    F:=F1+i*h;
    if (F > 0.03*S) then N:=F*(D-R)+R*S
    else N:=F*D+R*S;
    Memo1.Lines.Add('N('+IntToStr(i)+')='+FloatToStr(N));
  end;
end;

Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 27 ноября 2009, 15:32


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 25 ноября 2009, 19:16; участников в обсуждении: 2.
IlluminatI

IlluminatI (статус: 2-ой класс), 24 ноября 2009, 21:02 [#1]:

Первым делом считываем все значения с клавиатуры
  var F1, F2, S, R, D, h, N: real;
      x: byte;
      i, z: integer;
begin
 z:=0;
 writeln('F1, F2 = ?');
 readln(F1, F2);
 writeln('S, R, D - ?');
 readln(S, R, D);
 writeln('Step H - ?');
 readln(h);
 ....

Тогда, цикл while..do будет иметь такую реализацию:

while F1(меньше равно)F2 do
       begin
        inc(z);
        F1:=F1+H;
        if (F1 (больше) 0.03 * S) then
         begin
           N:=F1*D - F1*R + R*S;
           writeln('N[',z,'] = ', N:0:2);
         end else
        if (F1 (меньше равно) 0.03 * S) then
          begin
           N:=F1*D + R*S;
           writeln('N[',z,'] = ', N:0:2);
          end;
       end;

Цикл Repeat..until:

repeat
       if F1 (больше) F2 then exit;
       F1:=F1+H;
       Inc(z);
       if (F1 (больше) 0.03 * S) then
         begin
           N:=F1*D - F1*R + R*S;
           writeln('N[',z,'] = ', N:0:2);
         end else
        if (F1 (меньше равно) 0.03 * S) then
          begin
           N:=F1*D + R*S;
           writeln('N[',z,'] = ', N:0:2);
          end;
      until F1 (больше) F2;

Насчет цикла for..to..do, я еще подумаю :)
Nepwk

Nepwk (статус: Посетитель), 25 ноября 2009, 19:16 [#2]:

Огромное спасибо IlluminatI, Вы просто меня спасли :-)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.04 сек.