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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2009, 22:40   #1
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию Помогите плиз написать программу триатлон на паскале..

Я уже задавал подобный вопрос ранее... и мне там помогли... но не могли бы вы помочь доделать работу?
Исправьте пожалуйста неточности...
Код:
Program tr;
uses Crt;
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.
ЕвгениуS вне форума Ответить с цитированием
Старый 09.09.2009, 00:33   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

При первом беглом просмотре бросается в глаза неверный оператор for
Цитата:
for i to n do
Код:
for i := 1 to n do
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 09.09.2009, 03:20   #3
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

паскаль выдает ошибку еще в самом начале..
пишет, что после
Код:
Program tr;
uses Crt;
type etap11
ожидалось "="
Не знаешь как это исправить?

Последний раз редактировалось Stilet; 09.09.2009 в 08:30.
ЕвгениуS вне форума Ответить с цитированием
Старый 09.09.2009, 08:30   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ожидалось "="
Правильно:
Код:
etap11=string;
       etap12=string;
	 etap13=string;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2009, 14:48   #5
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Правильно:
Код:
etap11=string;
       etap12=string;
	 etap13=string;
спасибо за помощь- все получилось, только теперь он в новом месте ошибку выдает...
не подскажешь что уже в этот раз может быть??
Код:
Program tr;
uses Crt;
type etap11=string;
       etap12=string;
	 etap13=string;
   TEtap1=record
		name:etap11;
		speed:etap12;
		time:etap13;
              end;
       etap21=string;
         etap22=string;
   TEtap2=record
		 speed:etap21;
		 time:etap22;
               end;
        etap31=string;
         etap32=string;
   TEtap3=record
		 speed: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].speed);
x[i].time:=d1/x[i].speed;          <<<<<<операнды имеют неприводимые типы
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].speed);
y[i].time:=d1/y[i].speed;
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].speed);
z[i].time:=d3/z[i].speed;
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.
Ariac

Последний раз редактировалось ЕвгениуS; 09.09.2009 в 14:50.
ЕвгениуS вне форума Ответить с цитированием
Старый 09.09.2009, 14:58   #6
HoLToFF
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 58
По умолчанию

По крайней мере так компилируется:
Код:
Program tr;
uses Crt;
type
   TEtap=record
      		name:string;
          speed: integer;
          time: real;
          end;

Var
   x: array [1..25] of TEtap;
   y: array [1..25] of TEtap;
   z: array [1..25] of TEtap;
      first1,  first2,  first3 : string;
      i, n, d1, d2, d3 : integer;
      min: real;

function Rus(mes: string):string;
var
  i: integer;   // номер обрабатываемого элемента
begin
  for i:= 1 to length(mes) do
    case mes[i] of
      'А'..'п': mes[i]:= Chr(Ord(mes[i]) - 64);
      'р'..'я': mes[i]:= Chr(Ord(mes[i]) - 16);
    end;
  Rus:= mes;
end;      

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

Последний раз редактировалось HoLToFF; 09.09.2009 в 15:00.
HoLToFF вне форума Ответить с цитированием
Старый 09.09.2009, 15:16   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А может ты сначала даш код с русскими словами а не с кракозябрами?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2009, 15:42   #8
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
Радость

Цитата:
Сообщение от HoLToFF Посмотреть сообщение
По крайней мере так компилируется:
Код:
Program tr;
uses Crt;
type
   TEtap=record
      		name:string;
          speed: integer;
          time: real;
          end;

Var
   x: array [1..25] of TEtap;
   y: array [1..25] of TEtap;
   z: array [1..25] of TEtap;
      first1,  first2,  first3 : string;
      i, n, d1, d2, d3 : integer;
      min: real;

function Rus(mes: string):string;
var
  i: integer;   // номер обрабатываемого элемента
begin
  for i:= 1 to length(mes) do
    case mes[i] of
      'А'..'п': mes[i]:= Chr(Ord(mes[i]) - 64);
      'р'..'я': mes[i]:= Chr(Ord(mes[i]) - 16);
    end;
  Rus:= mes;
end;      

begin clrscr;
writeln(Rus('первый этап - Бег'));
write(Rus('введите дистанцию 1-го этапа (метров):  d1= '));
read(d1);
write(Rus('введите количество спортсменов :  n= '));
read(n);
for i:=1 to n do 
Begin
write(Rus('ведите имя '),i,Rus('-го спортсмена : '));
read(x[i].name);
write(Rus('ведите скорость спортсмена : '));
read(x[i].speed);
x[i].time:=d1/x[i].speed;
end;
i:=1;
min:=x[i].time;
for i:= 1 to n do
begin
if x[i].time<min then
min:=x[i].time;
first1:=x[i].name;
end;
{------------------------------------------------------------}
clrscr;
writeln(Rus('второй этап - Заплыв'));
write(Rus('введите дистанцию 2-го этапа (метров):  d2= '));
read(d2);
for i:=1 to n do 
Begin
write ('ведите скорость спортсмена ',y[i].name,' : ');
readln (y[i].speed);
y[i].time:=d1/y[i].speed;
end;
i:=1;
min:=y[i].time;
for i:= 1 to n do
begin
if y[i].time<min then
min:=y[i].time;
first2:=y[i].name;
end;
{------------------------------------------------------------}
clrscr;
writeln(Rus('третий этап- Велоконка'));
write(Rus('введите дистанцию 3-го этапа (метров):  d3= '));
read(d3);
for i:=1 to n do 
Begin
write ('ведите скорость спортсмена ',z[i].name,' : ');
readln (z[i].speed);
z[i].time:=d3/z[i].speed;
end;
i:=1;
min:=z[i].time;
for i:= 1 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.
спасибо большое!!!!! вроде все работает правильно
ЕвгениуS вне форума Ответить с цитированием
Старый 11.09.2009, 15:34   #9
ЕвгениуS
студент
Пользователь
 
Аватар для ЕвгениуS
 
Регистрация: 02.03.2008
Сообщений: 81
Печаль

в результате некоторых преобразований код получился таким
Код:
Program tr;
uses Crt;
type
   TEtap=record
      		name:string;
          speed, time: real;
          end;

Var
   x: array [1..25] of TEtap;
   y: array [1..25] of TEtap;
   z: array [1..25] of TEtap;
      first1,  first2,  first3 : string;
      i, n: integer;
      min, d1, d2, d3 : real;

function Rus(mes: string):string;
var
  i: integer;   // íîìåð îáðàáàòûâàåìîãî ýëåìåíòà
begin
  for i:= 1 to length(mes) do
    case mes[i] of
      'À'..'ï': mes[i]:= Chr(Ord(mes[i]) - 64);
      'ð'..'ÿ': mes[i]:= Chr(Ord(mes[i]) - 16);
    end;
  Rus:= mes;
end;
label 1;
label 2;
label 3;
label 4;
label 5;
label 6;
label 7;
label 8;


begin clrscr;
writeln(Rus('perviy etap - Beg'));
1:write(Rus('vvedite distanciyu 1-go etapa (matters): d1= '));
read(d1);

if d1<0 then begin
     writeln('error: vvedite chislo ot 0 do 10000');goto 1;
             end;
if d1>10000 then begin
     writeln('error: vvedite chislo ot 0 do 10000');goto 1;
     end;
     
2:write(Rus('vvedite kolichestvo sportsmenov :  n= '));
read(n);

if n<0 then begin
     writeln('error: vvedite chislo ot 2 do 30');goto 2;
             end;
if n>30 then begin
     writeln('error: vvedite chislo ot 2 do 30');goto 2;
     end;

for i:=1 to n do
Begin
3:write(Rus('vvedite imya '),i,Rus('-go sportsmena : '));
read(x[i].name);
4:write(Rus('vvedite skorost'' sportsmena : '));
read(x[i].speed);
x[i].time:=d1/x[i].speed;
end;
i:=1;
min:=x[i].time;
for i:= 1 to n do
begin
if x[i].time<min then
min:=x[i].time;
first1:=x[i].name;
end;
{------------------------------------------------------------}
clrscr;
writeln(Rus('vtoroy etap - zapliv'));
write(Rus('vvedite distanciyu 2-go etapa (matters): d2= '));
read(d2);

for i:=1 to n do
Begin
write ('vvedite scorost sportsmena : ',y[i].name,' : ');
readln (y[i].speed);
y[i].time:=d1/y[i].speed;
end;
i:=1;
min:=y[i].time;
for i:= 1 to n do
begin
if y[i].time<min then
min:=y[i].time;
first2:=y[i].name;
end;
{------------------------------------------------------------}
clrscr;
writeln(Rus('tretiy etap - velogonka'));
write(Rus('vvedite distanciyu 3-go etapa (matters): d3= '));
read(d3);
for i:=1 to n do
Begin
write ('vvedite scorost sportsmena : ',z[i].name,' : ');
readln (z[i].speed);
z[i].time:=d3/z[i].speed;
end;
i:=1;
min:=z[i].time;
for i:= 1 to n do
if z[i].time<min then
begin
min:=z[i].time;
first3:=z[i].name;
end;
clrscr;
writeln ('na 1-m etape pobedil  ',first1,' !!!   ');
writeln ('na 2-m etape pobedil  ',first2,' !!!   ');
writeln ('na 3-m etape pobedil  ',first3,' !!!   ');
readln;
end.
помогите плиз его отладить..
чтобы вконце выдавал имена тех кто занял первые три места.. и чтобы все наверняка работало правильно...
ЕвгениуS вне форума Ответить с цитированием
Старый 11.09.2009, 16:59   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ЕвгениуS
В цикле в конце программы пройдись по массиву. Найди минимум
Это будет первый результат
Далее еще цикл с нахождением минимального без учета первого
это будет второй
Далее еще цикл с нахождением минимального без учета второго

Но я бы на твоем месте уже при вводе проверял на какое место поставить результат.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Триатлон на паскале..помогите найти аглоритм решения задачи? ЕвгениуS Помощь студентам 4 05.04.2009 12:22