Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2009, 16:29   #1
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
Вопрос Триатлон на паскале..помогите найти аглоритм решения задачи?

Нужно на Паскале написать программу "Триатлон". Которая будет вычислять какой из спортсменов придет первым к финишу ?
Пользователь задает скорость спортсменов на каждом из трех этапов, а также количество спортсменов.
Помогите пожалуйста с написание основного алгоритма программы, а то программирование закончили изучать год назад, уже многое забыл...
уже писал подобную программу(но как оказалось было немного не то условие)
может она как то поможет или что в ней изменить?
Код:
program GEO;
uses crt;
var d,s1,s2,s3,min:real;
    v1,v2:real;
    t:real;
{d1-дистанция бега(первый этап)
 d2-дистанция плавания(второй этап)
 d3-дистанция велогонки(третий этап)
 s1-суммарное время Васи
 s2-суммарное время Пети
 s3-суммарное время Саши
 t-время участника
 v1,v2 -скорость участника при дистанции <=100 и >100 }

 {Различают 4 вида триатлона:

    * Короткие дистанции (спринт): плавание — 750 м, велогонка — 20 км и кросс — 5 км;
    * Международный или Олимпийский: плавание — 1500 м, велогонка — 40 км и бег — 10 км;
    * «Полужелезный человек»: плавание — 1,9 км, велогонка — 90 км и бег — 21 км;
    * «Железный человек»: плавание — 3,8 км, велогонка — 180 км и бег — 42 км;
    * «Народный триатлон» — практикуется в России, нацелен на любителей и начинающих
    триатлонистов, плавание — 200 метров, велогонка — 10 км и бег — 2,5 километра.}
begin clrscr;

{.....................первый этап гонки........................}
writeln('первый этап- Бег');
writeln('второй этап- Заплыв');
writeln('третий этап- Велоконка');
writeln('');
write('введите дистанцию 1-го этапа(метров):  d= ');
read(d);
{........................}
v1:=7.7; v2:=5.6; {для Васи}

if d<=100 then t:=d/v1 ;
if d>100  then t:=d/v2 ;
Write('время Васи на первом этапе:  t=' ,t); writeln(' (c)');
s1:=t;
min:=t;
{........................}
v1:=8.3; v2:=6.3; {для Пети}

if d<=100 then t:=d/v1 ;
if d>100  then t:=d/v2 ;
Write ('время Пети на первом этапе:  t=' ,t);  writeln(' (c)');
s2:=t;
if min>t then min:=t;
{........................}
v1:=8; v2:=6.2; {для Саши}

if d<=100 then t:=d/v1 ;
if d>100  then t:=d/v2 ;
Write ('время Саши на первом этапе:  t=' ,t); writeln(' (c)');
s3:=t;writeln('');
if min>t then min:=t ; Write ('минимальное время на этапе:  t=' ,min);  writeln(' (c)');
{.....................второй этап гонки..........................}
{.......................плавание........................}

writeln('');
write('введите дистанцию 2-го этапа(метров):  d= ');
read(d);
{........................}
v1:=0.91; v2:=0.7; {для Васи}

if d<=100 then t:=d/v1 ;
if d>100  then t:=d/v2 ;
Write ('время Васи на втором этапе:  t=' ,t); writeln(' (c)');
s1:=s1+t;
min:=t;
{........................}
v1:=0.9; v2:=0.72; {для Пети}
Ariac

Последний раз редактировалось ЕвгениуS; 04.04.2009 в 16:39.
ЕвгениуS вне форума Ответить с цитированием
Старый 04.04.2009, 16:37   #2
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Код:
if d<=100 then t:=d/v1 ;
if d>100  then t:=d/v2 ;
Write ('время Пети на втором этапе:  t=' ,t);  writeln(' (c)');
s2:=s2+t;
if min>t then min:=t;
{........................}
v1:=0.87; v2:=0.71; {для Саши}

if d<=100 then t:=d/v1 ;
if d>100  then t:=d/v2 ;
Write ('время Саши на втором этапе:  t=' ,t); writeln(' (c)');
s3:=s3+t;writeln('');
if min>t then min:=t ; Write ('минимальное время на этапе:  t=' ,min);  writeln(' (c)');
{результат} writeln('');
Write ('общее время Васи после второго этапа:  t=' ,s1); writeln(' (c)');
Write ('общее время Пети после второго этапа:  t=' ,s2); writeln(' (c)');
Write ('общее время Саши после второго этапа:  t=' ,s3); writeln(' (c)');
{.....................третий этап гонки..........................}
{.........................велогонка........................}

writeln('');
write('введите дистанцию 3-го этапа(метров):  d= ');
read(d);
{........................}
v1:=15.5; v2:=13.2; {для Васи}

if d<=1000 then t:=d/v1 ;
if d>1000  then t:=d/v2 ;
Write ('время Васи на третьем этапе:  t=' ,t); writeln(' (c)');
s1:=s1+t;
min:=t;
{........................}
v1:=16.07; v2:=13.8; {для Пети}

if d<=1000 then t:=d/v1 ;
if d>1000  then t:=d/v2 ;
Write ('время Пети на третьем этапе:  t=' ,t);  writeln(' (c)');
s2:=s2+t;
 if min>t then min:=t;
{........................}
v1:=17.0; v2:=15.1; {для Саши}

if d<=1000 then t:=d/v1 ;
if d>1000  then t:=d/v2 ;
Write ('время Саши на третьем этапе:  t=' ,t); writeln(' (c)');
s3:=s3+t;writeln('');
if min>t then min:=t ; Write ('минимальное время на этапе:  t=' ,min);  writeln(' (c)');

{...................результат.....................}
writeln('');
Write ('общее время Васи после третьего этапа:  t=' ,s1); writeln(' (c)');
Write ('общее время Пети после третьего этапа:  t=' ,s2); writeln(' (c)');
Write ('общее время Саши после третьего этапа:  t=' ,s3); writeln(' (c)');

{...................результат.....................}
writeln('..............................................................');
{проверка на первое место}
if s1>s2 then min:=s2 else min:=s1 ;
if min>s3 then min:=s3;
if min=s1 then Write ('1 место занял Вася:  t=' ,min);
if min=s2 then Write ('1 место занял Петя:  t=' ,min);
if min=s3 then Write ('1 место занял Саша:  t=' ,min);   writeln(' (c)');

{проверка на второе место}
if min=s1 then begin  {если выиграл Вася}
if s2>s3 then Write ('2 место занял Саша:  t=' ,s3);
if s3>s2 then Write ('2 место занял Петя:  t=' ,s2);  writeln(' (c)');
end;

if min=s2 then begin   {если выиграл Петя}
if s1>s3 then Write ('2 место занял Саша:  t=' ,s3);
if s3>s1 then Write ('2 место занял Вася:  t=' ,s1);  writeln(' (c)');
end;

if min=s3 then begin  {если выиграл Саша}
if s2>s1 then Write ('2 место занял Вася:  t=' ,s1);
if s1>s2 then Write ('2 место занял Петя:  t=' ,s2);  writeln(' (c)');
end;
{проверка на третье место}
if min=s1 then begin  {если выиграл Вася}
if s2>s3 then Write ('3 место занял Петя:  t=' ,s2);
if s3>s2 then Write ('3 место занял Саша:  t=' ,s3);  writeln(' (c)');
end;

if min=s2 then begin   {если выиграл Петя}
if s1>s3 then Write ('3 место занял Вася:  t=' ,s1);
if s3>s1 then Write ('3 место занял Саша:  t=' ,s3);  writeln(' (c)');
end;

if min=s3 then begin  {если выиграл Саша}
if s2>s1 then Write ('3 место занял Петя:  t=' ,s2);
if s1>s2 then Write ('3 место занял Вася:  t=' ,s1);  writeln(' (c)');
end;
end.
здесь скорости задал я сам, а пользователь указывает лишь дистанции.
на экран выводятся промежуточные результаты и кто победил в итоге гонки.
Ariac

Последний раз редактировалось ЕвгениуS; 04.04.2009 в 16:40.
ЕвгениуS вне форума Ответить с цитированием
Старый 04.04.2009, 17:53   #3
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

У вашем коде победителем всегда будет третий участник.
В задании сказано что польльзователь сам вводит количество спортсменов на каждом этепе, а у вас Вася, Петя, Коля и все.
Код:
............
Begig
writeln('первый этап- Бег');
write('введите дистанцию 1-го этапа (метров):  d= ');
read(d);
write('введите количество спортсменов :  n= ');
read(n);
for i:=1 to n do 
Begin
writeln ('ведите имя ',i,'-го спортсмена : ');
readln (name[i]);
writeln ('ведите скорость спортсмена : ');
readln (sped[i]);
victory[i]:=d/sped;
end;
max:=0
for i:=1 to n do
if victory[i]>max then
max:=victory[i];
first:=name[i];
end;
writeln ('на первом этапе победил ',first,' !!!');
..................
И аналогично продолжаете код.
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.
Veselyn вне форума Ответить с цитированием
Старый 05.04.2009, 04:31   #4
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Veselyn Посмотреть сообщение
У вашем коде победителем всегда будет третий участник.
В задании сказано что польльзователь сам вводит количество спортсменов на каждом этепе, а у вас Вася, Петя, Коля и все.
Код:
............
Begig
writeln('первый этап- Бег');
write('введите дистанцию 1-го этапа (метров):  d= ');
read(d);
write('введите количество спортсменов :  n= ');
read(n);
for i:=1 to n do 
Begin
writeln ('ведите имя ',i,'-го спортсмена : ');
readln (name[i]);
writeln ('ведите скорость спортсмена : ');
readln (sped[i]);
victory[i]:=d/sped;
end;
max:=0
for i:=1 to n do
if victory[i]>max then
max:=victory[i];
first:=name[i];
end;
writeln ('на первом этапе победил ',first,' !!!');
..................
И аналогично продолжаете код.
большое спасибо за представленный код, но какие переменные к каким типам данных принадлежат ?
ЕвгениуS вне форума Ответить с цитированием
Старый 05.04.2009, 12:22   #5
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Может что-то упустил, но восновтом так
Код:
type etap11:string;
       etap12:string;
	 etap13:string; 
   TEtap1=record
		name:etap11;
		spid:etap12;
		time:etap13;
              end;
       etap21:string;
         etap22:string;
   TEtap2=record
		 spid:etap21;
		 time:etap22;
               end;
        etap31:string;
         etap31:string;
   TEtap3=record
		 spid:etap31;
		 time:etap32;
               end;
Var
   x: array [1..25] of TEtap1;
   y: array [1..25] of TEtap2;
   z: array [1..25] of TEtap3;
      first1,  first2,  first3 : string;
      i, n, d1, d2, d3, min : integer;

begin clrscr;
writeln('первый этап - Бег');
write('введите дистанцию 1-го этапа (метров):  d1= ');
read(d1);
write('введите количество спортсменов :  n= ');
read(n);
for i:=1 to n do 
Begin
writeln ('ведите имя ',i,'-го спортсмена : ');
readln (x[i].name);
write ('ведите скорость спортсмена : ');
readln (x[i].sped);
x[i].time:=d1/x[i].sped;
end;
i:=1;
min:=x[i].time;
for i to n do
if x[i].time<min then
min:=x[i].time;
first1:=x[i].name;
end;
{------------------------------------------------------------}
clrscr;
writeln('второй этап - Заплыв');
write('введите дистанцию 2-го этапа (метров):  d2= ');
read(d2);
for i:=1 to n do 
Begin
write ('ведите скорость спортсмена ',y[i].name,' : ');
readln (y[i].sped);
y[i].time:=d1/y[i].sped;
end;
i:=1;
min:=y[i].time;
for i to n do
if y[i].time<min then
min:=y[i].time;
first2:=y[i].name;
end;
{------------------------------------------------------------}
clrscr;
writeln('третий этап- Велоконка');
write('введите дистанцию 3-го этапа (метров):  d3= ');
read(d3);
for i:=1 to n do 
Begin
write ('ведите скорость спортсмена ',z[i].name,' : ');
readln (z[i].sped);
z[i].time:=d3/z[i].sped;
end;
i:=1;
min:=z[i].time;
for i to n do
if z[i].time<min then
begin
min:=z[i].time;
first3:=z[i].name;
end;
clrscr;
writeln ('на первом этапе победил  ',first1,' !!!   ');
writeln ('на втором этапе победил  ',first2,' !!!   ');
writeln ('на третьем этапе победил ',first3,' !!!   ');
readln; 
end.
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.

Последний раз редактировалось Veselyn; 05.04.2009 в 19:05. Причина: поправил
Veselyn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
привет всем! помогите пожалуйста решить две задачи на паскале. я в паскале полный ноль. Пищенок Саша Паскаль, Turbo Pascal, PascalABC.NET 5 20.01.2009 13:46
Пожалуйста помогите найти ошибку в коде решения задачи на записи GUnt Паскаль, Turbo Pascal, PascalABC.NET 3 27.12.2008 21:09
Где найти поиск решения? Красавчег))) Microsoft Office Excel 3 10.05.2008 15:02
Помогите найти решения? Метод потенциалов! Dmitry_Boxing Свободное общение 0 16.02.2008 17:36