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

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

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

> Циклы
сообщение
Сообщение #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)
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


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

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

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

 





- Текстовая версия 20.05.2024 0:02
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name