|
Вопрос # 5 381/ вопрос решён / |
|
Здравствуйте!
Помогите разобораться с программой, написал, а препад сказла что не правильно считает. и в ответ должен выводиться не один результат а за каждые 3 часа, т.е размножить получается надо.
вот задание:
Одноклеточная амёба каждые 3 часа делится на 2 клетки. Определить, сколько амёб будет через 3, 6, 9, 12, …, 24 часа.
Приложение: Переключить в обычный режим- unit U_F_1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, ExtCtrls;
-
- type
- TF_1 = class(TForm)
- Panel: TPanel;
- E_vvod_vr: TEdit;
- L_com: TLabel;
- L_vivod: TLabel;
- B_rez: TButton;
- B_clear: TButton;
- B_clear_2: TButton;
- procedure B_rezClick(Sender: TObject);
- procedure B_clearClick(Sender: TObject);
- procedure B_clear_2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- F_1: TF_1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TF_1.B_clearClick(Sender: TObject);
- begin
- E_vvod_vr.Clear;
- end;
-
- procedure TF_1.B_clear_2Click(Sender: TObject);
- begin
- L_vivod.Caption:='';
- end;
-
- procedure TF_1.B_rezClick(Sender: TObject);
- var
- vr,a, n:integer;
- begin
- vr:=StrToInt(E_vvod_vr.Text);
- a:=0;
- n:=1;
- while a<vr do
- begin
- n:=n*2;
- a:=a+3;
- end;
-
- end;
-
- end.
-
 |
Вопрос задал: Силиванов (статус: Посетитель)
Вопрос отправлен: 6 июня 2011, 22:24
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Мережников Андрей
Здравствуйте, Силиванов!
отсчет времени надо начинать не с 0 (a:=0), а с 3 (a:=3). Для вывода можно использовать Memo и вывод осуществлять в цикле.
Как это примерно выглядит смотрите в приложении.
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 7 июня 2011, 05:46
Оценка за ответ: 5
Комментарий к оценке: спасибо, всё помогло
|
Ответ #2. Отвечает эксперт: ierihon1
Здравствуйте, Силиванов!
Ошибки то на самом деле нет, просто переменная числа амёб была объявлена изначально как Integer а преобразуется в строку как вещественное число. А у вещественных чисел есть такая неприятная особенность если число большое они его преобразают к стандатрному виду числа то есть число 16777216 будет выглядеть вот так - 1,67772e7. Ну а раз твоему преподу это не нравится то перепиши строку:
label1.Caption:='Количество амёб '+#13+FloatToStrF(n,fffixed,6,0);
вот так:
label1.Caption:=label1.Caption + 'Количество амёб '+#13+IntToStr(n)+#13;
ну и чтобы выводились все результаты нужно жту строку включить в цикл и тогда вся процедура будет выглядеть вот так:
procedure TF_1.B_rezClick(Sender: TObject);
var
vr,a, n:integer;
begin
vr:=StrToInt(E_vvod_vr.Text);
a:=0;
n:=1;
while a<vr do
begin
n:=n*2;
a:=a+3;
L_vivod.Caption:=L_vivod.Caption + 'Количество амёб '+#13+IntToStr(n)+#13;
end;
//label1.Caption:='Количество амёб '+#13+FloatToStrF(n,fffixed,6,0);
end;
 |
Ответ отправил: ierihon1 (статус: 1-ый класс)
Время отправки: 7 июня 2011, 09:52
|
Мини-форум вопроса
Всего сообщений: 16; последнее сообщение — 8 июня 2011, 17:29; участников в обсуждении: 5.
|
ierihon1 (статус: 1-ый класс), 6 июня 2011, 22:38 [#1]:
по оформлению есть какие нибудь определённые требования?
|
|
Силиванов (статус: Посетитель), 6 июня 2011, 22:39 [#2]:
нет
|
|
ierihon1 (статус: 1-ый класс), 6 июня 2011, 22:40 [#3]:
а время вводится конечное через эдит?
|
|
Силиванов (статус: Посетитель), 6 июня 2011, 22:41 [#4]:
нет, Lable
|
|
ierihon1 (статус: 1-ый класс), 6 июня 2011, 22:46 [#5]:
ну ладно фиг с ним с этим оформлением, у меня весь код в одной процедуре вышел, если будут вопросы как это переоформить говори сразу:
procedure TForm2.Button1Click(Sender: TObject);
var i:integer;
Ameba:integer;
begin
listbox1.Clear;
ameba:=1;
for i := 1 to StrToInt(Edit1.Text) do
begin
if i mod 3 = 0 then
begin
Ameba:=Ameba*2;
case IntToStr(ameba)[Length(IntToStr(ameba))] of
'1' :listbox1.Items.Add('Через '+IntToStr(i)+ ' ч. будет '+IntToStr(Ameba)+' амёба');
'2'..'4':listbox1.Items.Add('Через '+IntToStr(i)+ ' ч. будет '+IntToStr(Ameba)+' амёбы');
else listbox1.Items.Add('Через '+IntToStr(i)+ ' ч. будет '+IntToStr(Ameba)+' амёб');
end;
end;
end;
end;
в едит вводишь количесвто часов у меня стояло по умолчанию 24 часа на листбоксе отображается каждые три часа жизни амёбы на новой строчке.
|
|
bugmenot (статус: 3-ий класс), 6 июня 2011, 23:11 [#6]:
это ж геометрическая прогрессия, не?
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
ierihon1 (статус: 1-ый класс), 6 июня 2011, 23:18 [#7]:
Ну вообще то да..)
|
|
bugmenot (статус: 3-ий класс), 7 июня 2011, 01:39 [#8]:
Цитата (ierihon1):
Ну вообще то да..)
то был риторический вопрос, с намёком
виконання програми розпочинається з того самого мiсця, де призупинилося.
|
|
Силиванов (статус: Посетитель), 7 июня 2011, 09:00 [#9]:
дак у меня то где ошибка? и как исправить?
|
|
ierihon1 (статус: 1-ый класс), 7 июня 2011, 09:18 [#10]:
Ну ша посмотрим
|
|
min@y™ (статус: Доктор наук), 7 июня 2011, 10:06 [#11]:
У меня вот так получилось:
var
Count: Cardinal;
Hours: Byte;
begin
Count:= 1;
Hours:= 0;
repeat
Count:= Count shl 1;
Inc(Hours, 3);
WriteLn(' Hours: ', Hours: 3, ', Count: ', Count: 9);
until Hours >= 24;
ReadLn;
end.
Консоль:
Hours: 3, Count: 2
Hours: 6, Count: 4
Hours: 9, Count: 8
Hours: 12, Count: 16
Hours: 15, Count: 32
Hours: 18, Count: 64
Hours: 21, Count: 128
Hours: 24, Count: 256
Отсюда формула вычисления количества несчастных одноклеточных: X = 2T div 3, где T - время в часах.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
ierihon1 (статус: 1-ый класс), 7 июня 2011, 10:11 [#12]:
именно эту формулу я использовал в своей первой процедуре) только с VCL)
|
|
min@y™ (статус: Доктор наук), 7 июня 2011, 10:11 [#13]:
А через неделю они вылезут из чашки Петри и сожрут продукты в холодильнике. 
Hours: 3, Count: 2
Hours: 6, Count: 4
Hours: 9, Count: 8
Hours: 12, Count: 16
Hours: 15, Count: 32
Hours: 18, Count: 64
Hours: 21, Count: 128
Hours: 24, Count: 256
Hours: 27, Count: 512
Hours: 30, Count: 1024
Hours: 33, Count: 2048
Hours: 36, Count: 4096
Hours: 39, Count: 8192
Hours: 42, Count: 16384
Hours: 45, Count: 32768
Hours: 48, Count: 65536
Hours: 51, Count: 131072
Hours: 54, Count: 262144
Hours: 57, Count: 524288
Hours: 60, Count: 1048576
Hours: 63, Count: 2097152
Hours: 66, Count: 4194304
Hours: 69, Count: 8388608
Hours: 72, Count: 16777216
Hours: 75, Count: 33554432
Hours: 78, Count: 67108864
Hours: 81, Count: 134217728
Hours: 84, Count: 268435456
Hours: 87, Count: 536870912
Hours: 90, Count: 1073741824
Hours: 93, Count: 2147483648
Hours: 96, Count: 4294967296
Hours: 99, Count: 8589934592
Hours: 102, Count: 17179869184
Hours: 105, Count: 34359738368
Hours: 108, Count: 68719476736
Hours: 111, Count: 137438953472
Hours: 114, Count: 274877906944
Hours: 117, Count: 549755813888
Hours: 120, Count: 1099511627776
Hours: 123, Count: 2199023255552
Hours: 126, Count: 4398046511104
Hours: 129, Count: 8796093022208
Hours: 132, Count: 17592186044416
Hours: 135, Count: 35184372088832
Hours: 138, Count: 70368744177664
Hours: 141, Count: 140737488355328
Hours: 144, Count: 281474976710656
Hours: 147, Count: 562949953421312
Hours: 150, Count: 1125899906842624
Hours: 153, Count: 2251799813685248
Hours: 156, Count: 4503599627370496
Hours: 159, Count: 9007199254740992
Hours: 162, Count: 18014398509481984
Hours: 165, Count: 36028797018963968
Hours: 168, Count: 72057594037927936
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Мережников Андрей (статус: Абитуриент), 7 июня 2011, 17:11 [#14]:
Цитата (ierihon1):
Ошибки то на самом деле нет
Ошибка-то на самом деле была и она указана в моем ответе - начинать деление следует не с 0, а с 3 часов. Поскольку первое деление происходит через три часа.
|
8 июня 2011, 16:38: Статус вопроса изменён на решённый (изменил автор вопроса — Силиванов)
|
Мережников Андрей (статус: Абитуриент), 8 июня 2011, 17:29 [#16]:
to ierihon1 - я никого ни в чем не обвинял - к чему извинения?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|