Карта сайта

Это автоматически сохраненная страница от 01.01.2014. Оригинал был здесь: http://2ch.hk/b/res/59946080.html
Сайт a2ch.ru не связан с авторами и содержимым страницы
жалоба / abuse: admin@a2ch.ru

Срд 01 Янв 2014 11:52:14
почему программа не правильно работает? помоги, анон:
"Вклад в банке составляет x рублей. Ежегодно он увеличивается на p процентов, после чего дробная часть копеек отбрасывается. Каждый год сумма вклада становится больше. Определите, через сколько лет вклад составит не менее y рублей.
Программа получает на вход три натуральных числа: x, p, y и должна вывести одно целое число.
"

var
n, x, y, p : integer;
begin
read (x, p, y);
n := 0;
while x &t; y do begin
x := trunc (x + p * x / 100);
inc (n);
end;
writeln (n);
end.


Срд 01 Янв 2014 11:55:05
>>59946080
Сука 5 лет в универе и впервые слышу про повышение процентов ежегодно. Вы че ебанулись? Такое есть чтоле?

Мимоэконом

Срд 01 Янв 2014 11:58:35
>>59946200
Блять с утра в глаза долблюсь. Понял уже что к чему

Срд 01 Янв 2014 11:58:46
Про инфляцию не забудь.

Срд 01 Янв 2014 12:04:22
>>59946080
Давно тебя не видел, няша. Как твои дела?

Срд 01 Янв 2014 12:12:00
>>59946080
скобочки поставь. у тебя могут операции в неправильном порядке проходить

Срд 01 Янв 2014 12:14:23
>>59946561
хорошо. решил делом занятться и решать задачи, а эта задача почему-то не работает
>>59946602
я уже пробовал, но ничего

Срд 01 Янв 2014 12:20:37
>>59946080
А кто сказал, что не работает? Работает. Но обрати внимание, что при тестах типа
>5 6 7
твоя программа работать не будет, и правильно не будет, так как в этом случае вклад расти НЕ БУДЕТ.

Срд 01 Янв 2014 12:25:37
>>59946080
Алсо, из условия:
>после чего дробная часть копеек отбрасывается
Подозреваю, что отбрасывается именно дробная часть копеек, а не сами копейки, как у тебя происходит. То есть, надо переписать строчку присваивания как-то вот так:
>x = trunc(x * 100 * (1 + p / 100)) * 0.01
и тип данных поменять на float.

Срд 01 Янв 2014 12:26:47
>>59946080
x := trunc (x + p * x / 100);
Сделай так:
x := trunc (x + (p / 100) * x);

А то у тебя происходит ПЕРЕПОЛНЕНИЕ разрядной сетки для int

или юзай longint, который больше 32767.

Срд 01 Янв 2014 12:28:51
>>59947064
Что это за язык, в котором на 32-битной машине int 16-битовый? Какой-то древнейший паскаль?

Срд 01 Янв 2014 12:29:14
>>59947064
>32767
>2013

Алсо, работающий вариант программы:

program as1;
var
x, y, p : double;
n: integer;
begin
read (x, p, y);
n := 0;
while x &t; y do begin
x := trunc(x * 100 * (1 + p / 100)) / 100;
inc (n);
end;
writeln (n);
end.

Срд 01 Янв 2014 12:30:25
>>59947134
Судя по задачкам ОПа, это может быть турбо-паскаль на какой-нибудь непрофильной кафедре уездного вуза.

Срд 01 Янв 2014 12:33:32
>>59947181
во фриипаскале по умолчанию 2 байта. можно инт64 юзать. а задачки я на сайте смотрю по программированию тащемта в вузе не учусь и не учился

Срд 01 Янв 2014 12:35:42
>>59947284
http://pascalabc.net/WDE/
Тут код из ОП-поста нормально выполняется. Ну или приведи параметры, с которыми работает неправильно.

Срд 01 Янв 2014 12:38:18
>>59947151
вот этот код прошел все 6 тестов

Срд 01 Янв 2014 12:41:27
>>59947359
5, 6, 7. С этими параметрами x всегда останется равен 5, и программа уйдет в вечный цикл.

Срд 01 Янв 2014 12:55:16
окончательный ответ! спасибо, анонимус.

var
n : integer;
x, y, p : real;
begin
read (x, p, y);
n := 0;
while x &t; y do begin
x := trunc (x * (100 + p)) / 100;
inc (n);
end;
writeln (n);
end.

>>59947014
>Подозреваю, что отбрасывается именно дробная часть копеек
благодаря тебе я понял, что меньше копеек денег же нету

Срд 01 Янв 2014 13:11:26
Scheme, только Scheme!
(define (count-years-n x p y n)
;;(display x) (newline)
(if (&t; y x)
n
(if (= (/ (floor (* 100 (* x (+ 1 (/ p 100))))) 100) x)
-9001
(count-years-n (/ (floor (* 100 (* x (+ 1 (/ p 100))))) 100) p y (+ n 1)))
)
)

(define (count-years x p y) (count-years-n x p y 0))


> (count-years 10 10 20)
8
> (count-years 10 1 20)
73
> (count-years 10 0.5 20)
150
> (count-years 10 0.2 20)
417
> (count-years 10 0.1 20)
-9001

Срд 01 Янв 2014 13:12:59
>>59948564
перл лучше

Срд 01 Янв 2014 13:16:47
Даже так.
(define (add-percents money pp)
(/ (floor (* 100 (* money (+ 1 (/ pp 100))))) 100)
)

(define (count-years-n x p y n)
(display (exact->inexact x)) (newline)
(if (&t; y x)
n
(if (= (add-percents x p) x)
-9001
(count-years-n (add-percents x p) p y (+ n 1)))
)
)

(define (count-years x p y) (count-years-n x p y 0))


> (count-years 10 20 20)
10.0
12.0
14.4
17.28
20.73
4
> (count-years 100 1 200)
100.0
101.0
102.01
103.03
104.06
105.1
106.15
107.21
108.28
109.36
110.45
111.55
112.66
113.78
114.91
116.05
117.21
118.38
119.56
120.75
121.95
123.16
124.39
125.63
126.88
128.14
129.42
130.71
132.01
133.33
134.66
136.0
137.36
138.73
140.11
141.51
142.92
144.34
145.78
147.23
148.7
150.18
151.68
153.19
154.72
156.26
157.82
159.39
160.98
162.58
164.2
165.84
167.49
169.16
170.85
172.55
174.27
176.01
177.77
179.54
181.33
183.14
184.97
186.81
188.67
190.55
192.45
194.37
196.31
198.27
200.25
70

Срд 01 Янв 2014 13:21:10
> (count-years 10 10 10)
10.0
0
> (count-years 0 10 10)
0.0
-9001
> (count-years 10 0 10)
10.0
0
>

Срд 01 Янв 2014 13:27:48
Нуль процентов никогда не увеличит.
> (count-years 10 0 11)
10.0
-9001

Нуль под любые проценты больше нуля не даст.
> (count-years 0 1000 1)
0.0
-9001

Срд 01 Янв 2014 13:28:42
>>59949204
круто!

Срд 01 Янв 2014 13:40:33
Финальная продакшн-версия.

Меня возьмут в экономисты?

Срд 01 Янв 2014 13:56:01
>>59949740

Продолжай совершенствовать.


← К списку тредов