IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Циклы
Merlin
сообщение 22.12.2005 2:57
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 114
Пол: Мужской
Реальное имя: Ден

Репутация: -  0  +


Условие задачи :

Спортсмен, начав тренировки, в первый день пробежал 10 км. Каждый следующий день он увеличивал дистанцию на 12 %. Написать программу, определяющую общую длину пробега за месяц и первый день с начала тренировок, после которого дистанция превысит 25 км.

Написать задачу нужно через циклы с постусловием и предусловием.


1. Цикл с предусловием

program lab062;
var dist,max,dist1:real;
mes,i:integer;
begin
writeln('Введите максимальную дистанцию');
readln(max);
dist:=10;
dist1:=10;
while dist<=max do
begin
Dist:=dist+dist*0.12;
mes:=mes+1;
end;
for i:=1 to 30 do
begin
dist1:=dist1+dist*0.12;
end;
writeln('Кол-во дней дистанции ',mes);
writeln('Дистанция',dist:8:4);
writeln('Дистанция за месяц ',dist1:10:4);
readln
end.



2. Цикл с постусловием

program lab062;
var dist,max,dist1:real;
mes,i:integer;
begin
writeln('Введите максимальную дистанцию');
readln(max);
dist:=10;
dist1:=10;
repeat
begin
Dist:=dist+dist*0.12;
mes:=mes+1;
end;
for i:=1 to 30 do
begin
dist1:=dist1+dist*0.12;
end;
until dist>max;
writeln('Кол-во дней дистанции ',mes);
writeln('Дистанция',dist:8:4);
writeln(' Дистанция за месяц',dist1:10:4);
readln
end.


Проблема в следующем : Когда я ввожу макс. дистанцию , например 25 , то в 1 проге общая дистанция за месяц чуть больше 100, а во 2 проге, с repeat, дистанция за месяц , если вводить опяьб же 25 получается 600, где я ошибся ?


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 3)
yar11
сообщение 22.12.2005 7:10
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


uses crt;
var
dist:real;
days,i:integer;
begin clrscr;
dist:=10;
days:=1;
repeat
begin
dist:=dist*1.12;
days:=days+1;
end;
until dist>25;
dist:=10;
for i:=2 to 30 do
dist:=dist*1.12;
writeln(days:4,' days');
writeln(dist:4:4,'dist');
readkey;
end.


uses crt;
var
dist:real;
days,i:integer;
begin
dist:=10;
days:=1;
while dist<=25 do
begin
dist:=1.12*dist;
days:=days+1;
end;
dist:=10;
for i:=2 to 30 do
dist:=1.12*dist;
writeln(days:4,' days');
writeln(dist:4:4,'dist');
readkey;
end.

В обеих прогах ответы одинаковые и даже правильные.
Иногда проще написать заново

Сообщение отредактировано: volvo - 7.11.2006 17:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Merlin
сообщение 22.12.2005 14:41
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 114
Пол: Мужской
Реальное имя: Ден

Репутация: -  0  +


Спасибо за ответ, нашёл и свою ошибку : не туда until поставил.

Вот так будет правильно

program lab062;
var dist,max,dist1:real;
mes,i:integer;
begin
writeln('Введите максимальную дистанцию');
readln(max);
dist:=10;
dist1:=10;
repeat
begin
Dist:=dist+dist*0.12;
mes:=mes+1;
end;
until dist>max;
for i:=1 to 30 do
begin
dist1:=dist1+dist*0.12;
end;
writeln('Кол-во дней дистанции ',mes);
writeln('Дистанция',dist:8:4);
writeln(' Дистанция за месяц',dist1:10:4);
readln
end.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
yar11
сообщение 23.12.2005 6:56
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Да неправильно НЕПРАВИЛЬНО!!!
1)Не используй переменную dist во втором цикле
После рипита она уже не равна 10
Соответственно неверный результат.
2)Потерял один день
Правильный ответ 10. Перед циклом приравняй mes:=1;
В цикле ты начинаешь считать со второго дня.
3)Кстати в моей проге я считаю из расчета 30 дней в месяце
а в твоей-31 день. Не знаю специально ты это сделал или и во
втором цикле опять не учел что подсчет ведется со второго дня.

Сообщение отредактировано: yar11 - 23.12.2005 6:58
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 6:31
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"